Maison > Article > interface Web > Explication détaillée de HTTPS
L'article est synchronisé avec Github/blog
Les gens utiliseront les transactions Web pour gérer des choses très importantes. Sans de solides garanties de sécurité, les gens ne peuvent pas faire d’achats ou effectuer des opérations bancaires en ligne en toute confiance. Les entreprises ne peuvent pas placer des documents importants sur un serveur Web sans restreindre strictement les droits d'accès. Le Web a besoin d’une forme sécurisée de HTTP.
Il existe actuellement des méthodes légères pour 提供认证
(基本认证
et 摘要认证
) et 报文完整性检查
(résumé qop="auth-int"). Ces méthodes fonctionnent bien pour de nombreuses transactions réseau, mais ne sont pas assez puissantes pour les achats à grande échelle, les transactions bancaires ou pour accéder à des données confidentielles. Ces transactions plus importantes nécessitent une combinaison de HTTP et de cryptage numérique pour garantir la sécurité.
La version sécurisée de HTTP doit être efficace, portable et facile à gérer. Elle doit non seulement être capable de s'adapter aux situations changeantes, mais également de répondre aux exigences de la société et du gouvernement. Nous avons besoin d'une technologie de sécurité HTTP offrant les fonctionnalités suivantes.
Authentification du serveur (les clients savent qu'ils parlent à un vrai serveur et non à un faux).
Authentification du client (les serveurs savent qu'ils parlent à un vrai client et non à un faux client).
Intégrité (les données client et serveur ne seront pas modifiées).
Cryptage (la conversation entre le client et le serveur est privée, pas besoin de craindre d'être écouté).
Efficacité (un algorithme qui s'exécute suffisamment vite pour être utilisé par les clients et serveurs bas de gamme).
Universalité (essentiellement tous les clients et serveurs prennent en charge ces protocoles).
Évolutivité gérée (n'importe qui, n'importe où, peut communiquer instantanément et en toute sécurité).
Adaptable (capable de supporter les méthodes de sécurité actuelles les plus connues).
Faisabilité sociale (répondre aux besoins politiques et culturels de la société).
Dans cette introduction à la technologie de cryptage numérique, nous aborderons les points suivants.
Clé : Un paramètre numérique qui modifie le comportement d'un mot de passe.
Système de chiffrement à clé symétrique : un algorithme qui utilise la même clé pour l'encodage/décodage.
Système de cryptage à clé asymétrique : Algorithmes d'encodage/décodage utilisant différentes clés.
Système de cryptage à clé publique : un système qui permet à des millions d'ordinateurs d'envoyer facilement des messages confidentiels.
Signature numérique : une somme de contrôle utilisée pour vérifier que le message n'a pas été falsifié ou falsifié.
Certificat numérique : informations d'identification vérifiées et délivrées par un organisme de confiance.
La cryptographie est basée sur un code secret appelé 密码(cipher)
. Un chiffre est un schéma de codage - une combinaison d'une manière spécifique de coder un message et d'une manière correspondante de le décoder ultérieurement. Le message original avant cryptage est généralement appelé 明文(plaintext 或 cleartext)
. Le message codé après utilisation du mot de passe est généralement appelé 密文(ciphertext)
.
La cryptographie est utilisée pour générer des informations confidentielles depuis des milliers d’années. La légende raconte que 尤利乌斯·凯撒(Julius Caesar)
utilisait autrefois un chiffre à décalage cyclique à trois caractères, dans lequel chaque caractère du message était remplacé par le caractère trois positions plus tard dans l'alphabet. Dans l’alphabet moderne, « A » serait remplacé par « D », « B » par « E », et ainsi de suite.
Avec les progrès de la technologie, les gens ont commencé à fabriquer des machines capables d'encoder et de décoder rapidement et précisément des messages en utilisant des chiffrements beaucoup plus complexes. Ces machines de chiffrement peuvent non seulement effectuer quelques rotations simples, elles peuvent également remplacer des caractères, modifier l'ordre des caractères et découper des messages pour rendre le code plus difficile à déchiffrer.
Souvent, en réalité, l'algorithme d'encodage et la machine d'encodage peuvent tomber entre les mains de l'ennemi, donc la plupart des machines ont des cadrans qui peuvent être réglés sur un grand nombre de valeurs différentes pour changer le fonctionnement du mot de passe Way. Même si la machine est volée, le décodeur ne fonctionnera pas sans le réglage correct du cadran (valeur clé).
Ces paramètres cryptographiques sont appelés 密钥(key)
. La bonne clé doit être saisie dans la machine cryptographique pour que le processus de décryptage se déroule correctement. Les clés cryptographiques donnent l'impression qu'une machine cryptographique est constituée de plusieurs machines cryptographiques virtuelles, chacune avec une valeur de clé différente et donc un comportement différent.
Étant donné un message en clair P, une fonction de codage E et une clé de codage numérique e, un texte chiffré codé C peut être généré. Grâce à la fonction de décodage D et à la clé de décodage d, le texte chiffré C peut être décodé en texte clair original P. Bien entendu, les fonctions de codage/décodage sont des fonctions inverses les unes des autres. Le décodage du codage de P ramènera au message original P.
De nombreux algorithmes de cryptage numérique sont appelés 对称密钥(symmetric-key)
technologie de cryptage car ils utilisent la même valeur de clé lors de l'encodage et du décodage (e=d). Nous les appellerons collectivement clé k.
Les algorithmes de chiffrement à clé symétrique populaires incluent : DES
, Triple-DES
, RC2
et RC4
.
Il est important de garder vos clés confidentielles. Dans de nombreux cas, l’algorithme d’encodage/décodage est bien connu, la clé est donc la seule chose gardée secrète. Un bon algorithme de chiffrement oblige un attaquant à essayer toutes les clés possibles avant de pouvoir déchiffrer le code. Essayez Brute Force Toutes les valeurs clés sont appelées 枚举攻击(enumeration attack)
.
L'un des inconvénients de 对称密钥加密技术
est que l'expéditeur et le destinataire doivent disposer d'une clé secrète partagée avant de pouvoir se parler.
Par exemple, Alice (A), Bob (B) et Chris (C) veulent tous parler à Joe's Hardware Store (J). A, B et C doivent tous établir des clés secrètes entre eux et J. A peut avoir besoin de la clé KAJ, B peut avoir besoin de la clé KBJ et C peut avoir besoin de la clé KCJ. Chaque paire d'entités communicantes nécessite sa propre clé privée. S'il y a N nœuds, chaque nœud doit communiquer en toute sécurité avec tous les N-1 autres nœuds, il y aura environ N2 clés secrètes au total : ce sera un cauchemar de gestion.
Au lieu d'utiliser des clés de chiffrement/déchiffrement distinctes pour chaque paire d'hôtes, la cryptographie à clé publique en utilise deux 非对称密钥
: une est utilisée pour coder les messages de l'hôte, et l'autre sert à décoder les messages de l'hôte .
Le défi commun auquel sont confrontés tous les systèmes de chiffrement asymétrique à clé publique est de garantir que même si quelqu'un dispose de tous les indices suivants, il ne peut pas calculer la clé privée secrète :
Clé publique (qui est publique et accessible à tous);
Un petit morceau de texte chiffré intercepté (accessible via le réseau obtenu par reniflement);
Un message et son texte chiffré associé (vous pouvez l'obtenir en exécutant le chiffreur sur n'importe quel morceau de texte).
L'algorithme RSA est un système de cryptage à clé publique populaire qui répond à tous ces critères. Il a été inventé au MIT puis commercialisé par RSA Data Security. Même avec la clé publique, n'importe quel morceau de texte en clair, le texte chiffré pertinent obtenu après avoir codé le texte en clair avec la clé publique, l'algorithme RSA lui-même et même le code source de l'implémentation RSA, la difficulté de déchiffrer le code pour trouver le code privé correspondant. La clé est toujours équivalente à celle de La difficulté de factoriser un très grand nombre en facteurs premiers, un calcul considéré comme l'un des problèmes les plus difficiles de toute l'informatique. Ainsi, si vous découvrez une méthode capable de décomposer rapidement un très grand nombre en facteurs premiers, vous pourrez non seulement pirater le système des comptes bancaires suisses, mais également remporter le prix Turing.
N'importe qui peut envoyer un message sécurisé à un serveur public à condition de connaître sa clé publique, donc un système de cryptage à clé publique asymétrique C'est très utile. Deux nœuds n'ont pas besoin d'échanger au préalable des clés privées pour communiquer en toute sécurité.
Mais le calcul de l'algorithme de cryptage à clé publique peut être très lent. Il utilise en fait un mélange de stratégies symétriques et asymétriques. Par exemple, une approche courante consiste à établir une communication sécurisée entre deux nœuds grâce à une technologie de cryptage à clé publique pratique, puis à utiliser ce canal sécurisé pour générer et envoyer une clé symétrique aléatoire temporaire, et à utiliser une technologie de cryptage symétrique plus rapide pour chiffrer les données restantes. (Cela est vrai aussi bien pour SSH que pour HTTPS)
En plus de chiffrer/déchiffrer le message, le système de chiffrement peut également être utilisé pour 签名(sign)
indiquer qui a écrit le message et prouver que le message n'a pas été falsifié. Cette technique s'appelle 数字签名(digital signing)
.
La signature numérique est un code de vérification crypté spécial attaché au message. Les signatures numériques sont généralement générées à l'aide de la technologie 非对称公开密钥
. Étant donné que seul le propriétaire connaît la clé privée, la clé privée de l’auteur peut être utilisée comme une sorte d’« empreinte digitale ».
Le système de cryptage RSA utilise la fonction de décodage D comme fonction de signature car D a utilisé la clé privée en entrée. Notez que la fonction de décodage n'est qu'une fonction, vous pouvez donc l'utiliser avec n'importe quelle entrée. De même, dans le système de cryptage RSA, les fonctions D et E s'annulent lorsqu'elles sont appliquées dans n'importe quel ordre. Donc E(D(stuff)) = stuff, tout comme D(E(stuff)) = stuff.
La clé privée et la clé publique forment une paire, les deux peuvent être cryptées et déchiffrées, et utilisées par paires. Le principe de RSA est que le produit (n) de deux grands nombres premiers (p, q) est difficile à résoudre inversement, donc pq est équivalent, et la clé publique et la clé privée sont également équivalentes.
Le cryptage par clé privée et le déchiffrement par clé publique peuvent prouver l'identité unique du « propriétaire de la clé privée » et sont utilisés pour les signatures.
Le cryptage par clé publique et le déchiffrement par clé privée garantissent que seul le « propriétaire de la clé privée » peut décrypter les informations envoyées (si la clé privée est utilisée pour crypter les données, elle sera déchiffrée par la clé publique Titulaire (il peut y avoir plusieurs titulaires) déchiffrer, perdre la protection des informations)
"Carte d'identité" sur Internet - certificat numérique . 数字证书(通常被称作“certs”,有点像 certs 牌薄荷糖)
contient des informations sur un utilisateur ou une entreprise approuvée par une organisation de confiance.
Le certificat numérique contient également un ensemble d'informations, qui sont toutes signées numériquement par un fonctionnaire 证书颁发机构(CA)
.
De plus, les certificats numériques incluent généralement également la clé publique de l'objet, ainsi que des informations descriptives sur l'objet et l'algorithme de signature utilisé. N'importe qui peut créer un certificat numérique, mais tout le monde ne dispose pas de l'autorité d'émission respectée pour se porter garant des informations du certificat et émettre le certificat avec sa clé privée. Une structure de certificat typique est illustrée dans la figure.
Malheureusement, il n'existe pas de norme mondiale unique pour les certificats numériques. Tout comme toutes les cartes d’identité imprimées ne contiennent pas les mêmes informations aux mêmes endroits, les certificats numériques se présentent sous de nombreuses formes légèrement différentes. Mais la bonne nouvelle est que la plupart des certificats utilisés aujourd'hui stockent leurs informations dans un format standard - X.509 v3
. Les certificats X.509 v3 fournissent un moyen standard de formaliser les informations de certificat dans un certain nombre de champs analysables. Différents types de certificats ont des valeurs de champ différentes, mais la plupart suivent la structure X.509 v3.
Il existe plusieurs types de signatures basées sur les certificats X.509, notamment les certificats de serveur Web, les certificats de messagerie client, les certificats de signature de code logiciel et les certificats d'autorité de certification.
Après avoir établi une transaction Web sécurisée via HTTPS, les navigateurs modernes obtiendront automatiquement le certificat numérique du serveur connecté. Si le serveur ne dispose pas de certificat, la connexion sécurisée échouera.
Lorsque le navigateur reçoit le certificat, il vérifie l'autorité de signature. Si cette organisation est une autorité de signature publique très faisant autorité, le navigateur peut déjà connaître sa clé publique (les navigateurs auront préinstallés les certificats de nombreuses autorités de signature).
Si rien n'est connu sur l'autorité de signature, le navigateur ne peut pas déterminer s'il doit faire confiance à l'autorité de signature, et il affichera généralement une boîte de dialogue à l'utilisateur pour voir s'il fait confiance à l'émetteur signataire. L'émetteur de la signature peut être un service informatique local ou un fournisseur de logiciels.
HTTPS est la forme de sécurité HTTP la plus populaire. Il a été lancé par Netscape et est pris en charge par tous les principaux navigateurs et serveurs.
Lors de l'utilisation de HTTPS, toutes les données de requête et de réponse HTTP sont cryptées avant d'être envoyées au réseau. HTTPS fournit une couche de sécurité cryptographique au niveau du transport sous HTTP - soit en utilisant SSL ou son successeur - 传输层安全(Transport Layer Security,TLS)
. Parce que SSL et TLS sont très similaires, nous utilisons le terme SSL de manière moins stricte pour désigner à la fois SSL et TLS.
La communication HTTP sans SSL/TLS est une communication non cryptée. Toute information diffusée en texte brut comporte trois risques majeurs.
窃听风险(eavesdropping)
: Les tiers peuvent prendre connaissance du contenu de la communication.
篡改风险(tampering)
: Un tiers peut modifier le contenu de la communication.
冒充风险(pretending)
: Des tiers peuvent se faire passer pour d'autres pour participer aux communications.
Le protocole SSL/TLS est conçu pour résoudre ces trois risques majeurs, en espérant atteindre :
Toutes les informations sont cryptées et transmises Trois. les parties ne peuvent pas écouter.
dispose d'un mécanisme de vérification. Une fois falsifié, les parties communicantes le découvriront immédiatement.
Equipé d'un certificat d'identité pour éviter toute usurpation d'identité.
SSL(Secure Socket Layer)是安全套接层
, TLS(Transport Layer Security)是传输层安全协议
, sont construits sur la spécification du protocole SSL3.0 et sont des versions ultérieures de SSL3.0. SSL n'a pas été déployé et appliqué à grande échelle jusqu'à la version 3.0. La différence évidente entre la version TLS et SSL est qu'elle prend en charge différents algorithmes de cryptage. Le dernier en date actuellement utilisé est le protocole TLS1.2. La version 1.3 est encore au stade de projet.
Le HTTP sécurisé est désormais facultatif. Lorsque vous demandez à un client (tel qu'un navigateur Web) d'effectuer une transaction sur une ressource Web, il vérifiera le schéma d'URL :
Si le schéma d'URL est http, le client ouvrira une connexion au port 80 du serveur (par défaut) et lui enverra l'ancienne commande HTTP.
Si le schéma d'URL est https, le client ouvrira une connexion au port du serveur 443 (par défaut), puis "poignée de main" avec le serveur, échangeant avec le serveur en binaire format Certains paramètres de sécurité SSL, ainsi que des commandes HTTP cryptées.
SSL est un protocole binaire, complètement différent de HTTP, et son trafic est acheminé sur un autre port (SSL est généralement acheminé par le port 443). Si le trafic SSL et HTTP arrive sur le port 80, la plupart des serveurs Web interpréteront le trafic SSL binaire comme un mauvais HTTP et fermeront la connexion. L'intégration plus poussée des services de sécurité dans la couche HTTP élimine le besoin d'utiliser plusieurs ports de destination, ce qui, en pratique, ne pose pas de problèmes sérieux.
Avant de démarrer une communication cryptée, le client et le serveur doivent d'abord établir une connexion et échanger des paramètres. Ce processus est appelé handshake. En supposant que le client s'appelle Alice et le serveur s'appelle Bob, l'ensemble du processus de prise de contact peut être illustré par la figure suivante.
La phase de prise de contact est divisée en cinq étapes :
Alice donne le numéro de version du protocole et un client Le 随机数(Client random)
généré et les méthodes de cryptage prises en charge par le client.
Bob confirme la méthode de cryptage utilisée par les deux parties et donne le certificat numérique et un 服务器生成的随机数(Server random)
.
Alice confirme que le certificat numérique est valide, puis génère un nouveau 随机数(Premaster secret)
, utilise la clé publique du certificat numérique pour crypter le nombre aléatoire et l'envoie à Bob.
Bob utilise sa clé privée pour obtenir le numéro aléatoire envoyé par Alice (c'est-à-dire Premaster secret
).
Selon la méthode de cryptage convenue, Alice et Bob utilisent les trois premiers nombres aléatoires pour générer 对话密钥(session key)
, qui est utilisé pour crypter l'ensemble du processus de conversation.
Les cinq étapes ci-dessus sont représentées dans une image qui est la suivante :
Il y a trois étapes de poignée de main Points à noter :
Un total de trois nombres aléatoires sont nécessaires pour générer la clé de conversation.
La conversation après la poignée de main est cryptée à l'aide de 对话密钥(session key)
(cryptage symétrique), les clés publiques et privées du serveur ne sont utilisées que pour le cryptage et le décryptage 对话密钥(session key)
(cryptage asymétrique), rien. sinon effet.
La clé publique du serveur est placée dans le certificat numérique du serveur.
La phase entière de prise de contact n'est pas cryptée (et ne peut pas être cryptée), elle est entièrement en texte brut. Ainsi, si quelqu’un écoute la communication, il peut connaître la méthode de cryptage choisie par les deux parties, ainsi que deux des trois nombres aléatoires. La sécurité de l'ensemble de l'appel dépend uniquement de la capacité de 第三个随机数(Premaster secret)
à être piraté.
Bien qu'en théorie, tant que la clé publique du serveur est suffisamment longue (par exemple, 2048 bits), alors Premaster secret
peut être garanti de ne pas être piraté. Mais afin d'être suffisamment sécurisé, nous pouvons envisager de changer l'algorithme lors de la phase de transfert de l'algorithme RSA par défaut à l'algorithme Diffie-Hellman (algorithme DH en abrégé).
Après avoir utilisé DH算法
, Premaster secret
n'a pas besoin d'être transmis. Les deux parties peuvent calculer le nombre aléatoire en échangeant leurs propres paramètres.
Dans la figure ci-dessus, les troisième et quatrième étapes passent de la réussite de Premaster secret
à la réussite des paramètres requis par DH算法
, puis chaque côté calcule Premaster secret
. Cela augmente la sécurité.
SSL prend en charge l'authentification bidirectionnelle, transmettant le certificat du serveur au client, puis renvoyant le certificat du client au serveur. De nos jours, les certificats clients ne sont pas souvent utilisés lors de la navigation. La plupart des utilisateurs ne disposent même pas de leurs propres certificats clients. Le serveur peut exiger un certificat client, mais en pratique c'est rarement le cas.
SSL lui-même n'exige pas que les utilisateurs vérifient le certificat du serveur Web, mais la plupart des navigateurs modernes effectueront une simple vérification de l'intégrité du certificat et fourniront aux utilisateurs des moyens d'enquête supplémentaires . Un algorithme de validité de certificat de serveur Web proposé par Netscape constitue la base de la plupart des technologies de vérification de validité des navigateurs. Les étapes de vérification sont décrites ci-dessous :
日期检测
Tout d'abord, le navigateur vérifie les dates de début et de fin du certificat pour s'assurer que le certificat est toujours valide. Si le certificat a expiré ou n'a pas été activé, la vérification de la validité du certificat échoue et le navigateur affiche un message d'erreur.
签名颁发者可信度检测
每个证书都是由某些 证书颁发机构(CA)
签发的,它们负责为服务器担保。证书有不同的等级,每种证书都要求不同级别的背景验证。比如,如果申请某个电 子商务服务器证书,通常需要提供一个营业的合法证明。
任何人都可以生成证书,但有些 CA 是非常著名的组织,它们通过非常清晰的流 程来验证证书申请人的身份及商业行为的合法性。因此,浏览器会附带一个签名颁发机构的受信列表。如果浏览器收到了某未知(可能是恶意的)颁发机构签发的证书,那它通常会显示一条警告信息。
签名检测
一旦判定签名授权是可信的,浏览器就要对签名使用签名颁发机构的公开密钥, 并将其与校验码进行比较,以查看证书的完整性。
站点身份检测
为防止服务器复制其他人的证书,或拦截其他人的流量,大部分浏览器都会试着 去验证证书中的域名与它们所对话的服务器的域名是否匹配。服务器证书中通常 都包含一个域名,但有些 CA 会为一组或一群服务器创建一些包含了服务器名称 列表或通配域名的证书。如果主机名与证书中的标识符不匹配,面向用户的客户 端要么就去通知用户,要么就以表示证书不正确的差错报文来终止连接。
SSL 是个复杂的二进制协议。除非你是密码专家,否则就不应该直接发送原始的 SSL 流量。幸运的是,借助一些商业或开源的库,编写 SSL 客户端和服务器并不十 分困难。
OpenSSL 是 SSL 和 TLS 最常见的开源实现。OpenSSL 项目由一些志愿者合作开发, 目标是开发一个强壮的、具有完备功能的商业级工具集,以实现 SSL 和 TLS 协议以 及一个全功能的通用加密库。可以从 http://www.openssl.org 上获得 OpenSSL 的相 关信息,并下载相应软件。
强烈推荐一本书:HTTP 权威指南
超详解析 | CDN HTTPS优化实践,全网一分钟生效
图解SSL/TLS协议
HTTP 权威指南
L'article est synchronisé avec Github/blog
Les gens utiliseront les transactions Web pour gérer des choses très importantes. Sans de solides garanties de sécurité, les gens ne peuvent pas faire d’achats ou effectuer des opérations bancaires en ligne en toute confiance. Les entreprises ne peuvent pas placer des documents importants sur un serveur Web sans restreindre strictement les droits d'accès. Le Web a besoin d’une forme sécurisée de HTTP.
Il existe actuellement des méthodes légères pour 提供认证
(基本认证
et 摘要认证
) et 报文完整性检查
(résumé qop="auth-int"). Ces méthodes fonctionnent bien pour de nombreuses transactions réseau, mais ne sont pas assez puissantes pour les achats à grande échelle, les transactions bancaires ou pour accéder à des données confidentielles. Ces transactions plus importantes nécessitent une combinaison de HTTP et de cryptage numérique pour garantir la sécurité.
La version sécurisée de HTTP doit être efficace, portable et facile à gérer. Elle doit non seulement être capable de s'adapter aux situations changeantes, mais également de répondre aux exigences de la société et du gouvernement. Nous avons besoin d'une technologie de sécurité HTTP offrant les fonctionnalités suivantes.
Authentification du serveur (les clients savent qu'ils parlent à un vrai serveur et non à un faux).
Authentification du client (les serveurs savent qu'ils parlent à un vrai client et non à un faux client).
Intégrité (les données client et serveur ne seront pas modifiées).
Cryptage (la conversation entre le client et le serveur est privée, pas besoin de craindre d'être écouté).
Efficacité (un algorithme qui s'exécute suffisamment vite pour être utilisé par les clients et serveurs bas de gamme).
Universalité (essentiellement tous les clients et serveurs prennent en charge ces protocoles).
Évolutivité gérée (n'importe qui, n'importe où, peut communiquer instantanément et en toute sécurité).
Adaptable (capable de supporter les méthodes de sécurité actuelles les plus connues).
Faisabilité sociale (répondre aux besoins politiques et culturels de la société).
Dans cette introduction à la technologie de cryptage numérique, nous aborderons les points suivants.
Clé : Un paramètre numérique qui modifie le comportement d'un mot de passe.
Système de chiffrement à clé symétrique : un algorithme qui utilise la même clé pour l'encodage/décodage.
Système de cryptage à clé asymétrique : Algorithmes d'encodage/décodage utilisant différentes clés.
Système de cryptage à clé publique : un système qui permet à des millions d'ordinateurs d'envoyer facilement des messages confidentiels.
Signature numérique : une somme de contrôle utilisée pour vérifier que le message n'a pas été falsifié ou falsifié.
Certificat numérique : informations d'identification vérifiées et délivrées par un organisme de confiance.
La cryptographie est basée sur un code secret appelé 密码(cipher)
. Un chiffre est un schéma de codage - une combinaison d'une manière spécifique de coder un message et d'une manière correspondante de le décoder ultérieurement. Le message original avant cryptage est généralement appelé 明文(plaintext 或 cleartext)
. Le message codé après utilisation du mot de passe est généralement appelé 密文(ciphertext)
.
La cryptographie est utilisée pour générer des informations confidentielles depuis des milliers d’années. La légende raconte que 尤利乌斯·凯撒(Julius Caesar)
utilisait autrefois un chiffre à décalage cyclique à trois caractères, dans lequel chaque caractère du message était remplacé par le caractère trois positions plus tard dans l'alphabet. Dans l’alphabet moderne, « A » serait remplacé par « D », « B » par « E », et ainsi de suite.
Avec les progrès de la technologie, les gens ont commencé à fabriquer des machines capables d'encoder et de décoder rapidement et précisément des messages en utilisant des chiffrements beaucoup plus complexes. Ces machines de chiffrement peuvent non seulement effectuer quelques rotations simples, elles peuvent également remplacer des caractères, modifier l'ordre des caractères et découper des messages pour rendre le code plus difficile à déchiffrer.
Souvent, en réalité, l'algorithme d'encodage et la machine d'encodage peuvent tomber entre les mains de l'ennemi, donc la plupart des machines ont des cadrans qui peuvent être réglés sur un grand nombre de valeurs différentes pour changer le fonctionnement du mot de passe Way. Même si la machine est volée, le décodeur ne fonctionnera pas sans le réglage correct du cadran (valeur clé).
Ces paramètres cryptographiques sont appelés 密钥(key)
. La bonne clé doit être saisie dans la machine cryptographique pour que le processus de décryptage se déroule correctement. Les clés cryptographiques donnent l'impression qu'une machine cryptographique est constituée de plusieurs machines cryptographiques virtuelles, chacune avec une valeur de clé différente et donc un comportement différent.
Étant donné un message en clair P, une fonction de codage E et une clé de codage numérique e, un texte chiffré codé C peut être généré. Grâce à la fonction de décodage D et à la clé de décodage d, le texte chiffré C peut être décodé en texte clair original P. Bien entendu, les fonctions de codage/décodage sont des fonctions inverses les unes des autres. Le décodage du codage de P ramènera au message original P.
De nombreux algorithmes de cryptage numérique sont appelés 对称密钥(symmetric-key)
technologie de cryptage car ils utilisent la même valeur de clé lors de l'encodage et du décodage (e=d). Nous les appellerons collectivement clé k.
Les algorithmes de chiffrement à clé symétrique populaires incluent : DES
, Triple-DES
, RC2
et RC4
.
Il est important de garder vos clés confidentielles. Dans de nombreux cas, l’algorithme d’encodage/décodage est bien connu, la clé est donc la seule chose gardée secrète. Un bon algorithme de chiffrement oblige un attaquant à essayer toutes les clés possibles avant de pouvoir déchiffrer le code. Essayez Brute Force Toutes les valeurs clés sont appelées 枚举攻击(enumeration attack)
.
L'un des inconvénients de 对称密钥加密技术
est que l'expéditeur et le destinataire doivent disposer d'une clé secrète partagée avant de pouvoir se parler.
Par exemple, Alice (A), Bob (B) et Chris (C) veulent tous parler à Joe's Hardware Store (J). A, B et C doivent tous établir des clés secrètes entre eux et J. A peut avoir besoin de la clé KAJ, B peut avoir besoin de la clé KBJ et C peut avoir besoin de la clé KCJ. Chaque paire d'entités communicantes nécessite sa propre clé privée. S'il y a N nœuds, chaque nœud doit communiquer en toute sécurité avec tous les N-1 autres nœuds, il y aura environ N2 clés secrètes au total : ce sera un cauchemar de gestion.
Au lieu d'utiliser des clés de chiffrement/déchiffrement distinctes pour chaque paire d'hôtes, la cryptographie à clé publique en utilise deux 非对称密钥
: une est utilisée pour coder les messages de l'hôte, et l'autre sert à décoder les messages de l'hôte .
Le défi commun auquel sont confrontés tous les systèmes de chiffrement asymétrique à clé publique est de garantir que même si quelqu'un dispose de tous les indices suivants, il ne peut pas calculer la clé privée secrète :
Clé publique (qui est publique et accessible à tous);
Un petit morceau de texte chiffré intercepté (accessible via le réseau obtenu par reniflement);
Un message et son texte chiffré associé (vous pouvez l'obtenir en exécutant le chiffreur sur n'importe quel morceau de texte).
L'algorithme RSA est un système de cryptage à clé publique populaire qui répond à tous ces critères. Il a été inventé au MIT puis commercialisé par RSA Data Security. Même avec la clé publique, n'importe quel morceau de texte en clair, le texte chiffré pertinent obtenu après avoir codé le texte en clair avec la clé publique, l'algorithme RSA lui-même et même le code source de l'implémentation RSA, la difficulté de déchiffrer le code pour trouver le code privé correspondant. La clé est toujours équivalente à celle de La difficulté de factoriser un très grand nombre en facteurs premiers, un calcul considéré comme l'un des problèmes les plus difficiles de toute l'informatique. Ainsi, si vous découvrez une méthode capable de décomposer rapidement un très grand nombre en facteurs premiers, vous pourrez non seulement pirater le système des comptes bancaires suisses, mais également remporter le prix Turing.
N'importe qui peut envoyer un message sécurisé à un serveur public à condition de connaître sa clé publique, donc un système de cryptage à clé publique asymétrique C'est très utile. Deux nœuds n'ont pas besoin d'échanger au préalable des clés privées pour communiquer en toute sécurité.
Mais le calcul de l'algorithme de cryptage à clé publique peut être très lent. Il utilise en fait un mélange de stratégies symétriques et asymétriques. Par exemple, une approche courante consiste à établir une communication sécurisée entre deux nœuds grâce à une technologie de cryptage à clé publique pratique, puis à utiliser ce canal sécurisé pour générer et envoyer une clé symétrique aléatoire temporaire, et à utiliser une technologie de cryptage symétrique plus rapide pour chiffrer les données restantes. (Cela est vrai aussi bien pour SSH que pour HTTPS)
En plus de chiffrer/déchiffrer le message, le système de chiffrement peut également être utilisé pour 签名(sign)
indiquer qui a écrit le message et prouver que le message n'a pas été falsifié. Cette technique s'appelle 数字签名(digital signing)
.
La signature numérique est un code de vérification crypté spécial attaché au message. Les signatures numériques sont généralement générées à l'aide de la technologie 非对称公开密钥
. Étant donné que seul le propriétaire connaît la clé privée, la clé privée de l’auteur peut être utilisée comme une sorte d’« empreinte digitale ».
Le système de cryptage RSA utilise la fonction de décodage D comme fonction de signature car D a utilisé la clé privée en entrée. Notez que la fonction de décodage n'est qu'une fonction, vous pouvez donc l'utiliser avec n'importe quelle entrée. De même, dans le système de cryptage RSA, les fonctions D et E s'annulent lorsqu'elles sont appliquées dans n'importe quel ordre. Donc E(D(stuff)) = stuff, tout comme D(E(stuff)) = stuff.
La clé privée et la clé publique forment une paire, les deux peuvent être cryptées et déchiffrées, et utilisées par paires. Le principe de RSA est que le produit (n) de deux grands nombres premiers (p, q) est difficile à résoudre inversement, donc pq est équivalent, et la clé publique et la clé privée sont également équivalentes.
Le cryptage par clé privée et le déchiffrement par clé publique peuvent prouver l'identité unique du « propriétaire de la clé privée » et sont utilisés pour les signatures.
Le cryptage par clé publique et le déchiffrement par clé privée garantissent que seul le « propriétaire de la clé privée » peut décrypter les informations envoyées (si la clé privée est utilisée pour crypter les données, elle sera déchiffrée par la clé publique Titulaire (il peut y avoir plusieurs titulaires) déchiffrer, perdre la protection des informations)
"Carte d'identité" sur Internet - certificat numérique . 数字证书(通常被称作“certs”,有点像 certs 牌薄荷糖)
contient des informations sur un utilisateur ou une entreprise approuvée par une organisation de confiance.
Le certificat numérique contient également un ensemble d'informations, qui sont toutes signées numériquement par un fonctionnaire 证书颁发机构(CA)
.
De plus, les certificats numériques incluent généralement également la clé publique de l'objet, ainsi que des informations descriptives sur l'objet et l'algorithme de signature utilisé. N'importe qui peut créer un certificat numérique, mais tout le monde ne dispose pas de l'autorité d'émission respectée pour se porter garant des informations du certificat et émettre le certificat avec sa clé privée. Une structure de certificat typique est illustrée dans la figure.
Malheureusement, il n'existe pas de norme mondiale unique pour les certificats numériques. Tout comme toutes les cartes d’identité imprimées ne contiennent pas les mêmes informations aux mêmes endroits, les certificats numériques se présentent sous de nombreuses formes légèrement différentes. Mais la bonne nouvelle est que la plupart des certificats utilisés aujourd'hui stockent leurs informations dans un format standard - X.509 v3
. Les certificats X.509 v3 fournissent un moyen standard de formaliser les informations de certificat dans un certain nombre de champs analysables. Différents types de certificats ont des valeurs de champ différentes, mais la plupart suivent la structure X.509 v3.
Il existe plusieurs types de signatures basées sur les certificats X.509, notamment les certificats de serveur Web, les certificats de messagerie client, les certificats de signature de code logiciel et les certificats d'autorité de certification.
Après avoir établi une transaction Web sécurisée via HTTPS, les navigateurs modernes obtiendront automatiquement le certificat numérique du serveur connecté. Si le serveur ne dispose pas de certificat, la connexion sécurisée échouera.
Lorsque le navigateur reçoit le certificat, il vérifie l'autorité de signature. Si cette organisation est une autorité de signature publique très faisant autorité, le navigateur peut déjà connaître sa clé publique (les navigateurs auront préinstallés les certificats de nombreuses autorités de signature).
Si rien n'est connu sur l'autorité de signature, le navigateur ne peut pas déterminer s'il doit faire confiance à l'autorité de signature, et il affichera généralement une boîte de dialogue à l'utilisateur pour voir s'il fait confiance à l'émetteur signataire. L'émetteur de la signature peut être un service informatique local ou un fournisseur de logiciels.
HTTPS est la forme de sécurité HTTP la plus populaire. Il a été lancé par Netscape et est pris en charge par tous les principaux navigateurs et serveurs.
Lors de l'utilisation de HTTPS, toutes les données de requête et de réponse HTTP sont cryptées avant d'être envoyées au réseau. HTTPS fournit une couche de sécurité cryptographique au niveau du transport sous HTTP - soit en utilisant SSL ou son successeur - 传输层安全(Transport Layer Security,TLS)
. Parce que SSL et TLS sont très similaires, nous utilisons le terme SSL de manière moins stricte pour désigner à la fois SSL et TLS.
La communication HTTP sans SSL/TLS est une communication non cryptée. Toute information diffusée en texte brut comporte trois risques majeurs.
窃听风险(eavesdropping)
: Les tiers peuvent prendre connaissance du contenu de la communication.
篡改风险(tampering)
: Un tiers peut modifier le contenu de la communication.
冒充风险(pretending)
: Des tiers peuvent se faire passer pour d'autres pour participer aux communications.
Le protocole SSL/TLS est conçu pour résoudre ces trois risques majeurs, en espérant atteindre :
Toutes les informations sont cryptées et transmises Trois. les parties ne peuvent pas écouter.
dispose d'un mécanisme de vérification. Une fois falsifié, les parties communicantes le découvriront immédiatement.
Equipé d'un certificat d'identité pour éviter toute usurpation d'identité.
SSL(Secure Socket Layer)是安全套接层
, TLS(Transport Layer Security)是传输层安全协议
, sont construits sur la spécification du protocole SSL3.0 et sont des versions ultérieures de SSL3.0. SSL n'a pas été déployé et appliqué à grande échelle jusqu'à la version 3.0. La différence évidente entre la version TLS et SSL est qu'elle prend en charge différents algorithmes de cryptage. Le dernier en date actuellement utilisé est le protocole TLS1.2. La version 1.3 est encore au stade de projet.
Le HTTP sécurisé est désormais facultatif. Lorsque vous demandez à un client (tel qu'un navigateur Web) d'effectuer une transaction sur une ressource Web, il vérifiera le schéma d'URL :
Si le schéma d'URL est http, le client ouvrira une connexion au port 80 du serveur (par défaut) et lui enverra l'ancienne commande HTTP.
Si le schéma d'URL est https, le client ouvrira une connexion au port du serveur 443 (par défaut), puis "poignée de main" avec le serveur, échangeant avec le serveur en binaire format Certains paramètres de sécurité SSL, ainsi que des commandes HTTP cryptées.
SSL est un protocole binaire, complètement différent de HTTP, et son trafic est acheminé sur un autre port (SSL est généralement acheminé par le port 443). Si le trafic SSL et HTTP arrive sur le port 80, la plupart des serveurs Web interpréteront le trafic SSL binaire comme un mauvais HTTP et fermeront la connexion. L'intégration plus poussée des services de sécurité dans la couche HTTP élimine le besoin d'utiliser plusieurs ports de destination, ce qui, en pratique, ne pose pas de problèmes sérieux.
Avant de démarrer une communication cryptée, le client et le serveur doivent d'abord établir une connexion et échanger des paramètres. Ce processus est appelé handshake. En supposant que le client s'appelle Alice et le serveur s'appelle Bob, l'ensemble du processus de prise de contact peut être illustré par la figure suivante.
La phase de prise de contact est divisée en cinq étapes :
Alice donne le numéro de version du protocole et un client Le 随机数(Client random)
généré et les méthodes de cryptage prises en charge par le client.
Bob confirme la méthode de cryptage utilisée par les deux parties et donne le certificat numérique et un 服务器生成的随机数(Server random)
.
Alice confirme que le certificat numérique est valide, puis génère un nouveau 随机数(Premaster secret)
, utilise la clé publique du certificat numérique pour crypter le nombre aléatoire et l'envoie à Bob.
Bob utilise sa clé privée pour obtenir le numéro aléatoire envoyé par Alice (c'est-à-dire Premaster secret
).
Selon la méthode de cryptage convenue, Alice et Bob utilisent les trois premiers nombres aléatoires pour générer 对话密钥(session key)
, qui est utilisé pour crypter l'ensemble du processus de conversation.
Les cinq étapes ci-dessus sont représentées dans une image qui est la suivante :
Il y a trois étapes de poignée de main Points à noter :
Un total de trois nombres aléatoires sont nécessaires pour générer la clé de conversation.
La conversation après la poignée de main est cryptée à l'aide de 对话密钥(session key)
(cryptage symétrique), les clés publiques et privées du serveur ne sont utilisées que pour le cryptage et le décryptage 对话密钥(session key)
(cryptage asymétrique), rien. sinon effet.
La clé publique du serveur est placée dans le certificat numérique du serveur.
La phase entière de prise de contact n'est pas cryptée (et ne peut pas être cryptée), elle est entièrement en texte brut. Ainsi, si quelqu’un écoute la communication, il peut connaître la méthode de cryptage choisie par les deux parties, ainsi que deux des trois nombres aléatoires. La sécurité de l'ensemble de l'appel dépend uniquement de la capacité de 第三个随机数(Premaster secret)
à être piraté.
Bien qu'en théorie, tant que la clé publique du serveur est suffisamment longue (par exemple, 2048 bits), alors Premaster secret
peut être garanti de ne pas être piraté. Mais afin d'être suffisamment sécurisé, nous pouvons envisager de changer l'algorithme lors de la phase de transfert de l'algorithme RSA par défaut à l'algorithme Diffie-Hellman (algorithme DH en abrégé).
Après avoir utilisé DH算法
, Premaster secret
n'a pas besoin d'être transmis. Les deux parties peuvent calculer le nombre aléatoire en échangeant leurs propres paramètres.
Dans la figure ci-dessus, les troisième et quatrième étapes passent de la réussite de Premaster secret
à la réussite des paramètres requis par DH算法
, puis chaque côté calcule Premaster secret
. Cela augmente la sécurité.
SSL prend en charge l'authentification bidirectionnelle, transmettant le certificat du serveur au client, puis renvoyant le certificat du client au serveur. De nos jours, les certificats clients ne sont pas souvent utilisés lors de la navigation. La plupart des utilisateurs ne disposent même pas de leurs propres certificats clients. Le serveur peut exiger un certificat client, mais en pratique c'est rarement le cas.
SSL lui-même n'exige pas que les utilisateurs vérifient le certificat du serveur Web, mais la plupart des navigateurs modernes effectueront une simple vérification de l'intégrité du certificat et fourniront aux utilisateurs des moyens d'enquête supplémentaires . Un algorithme de validité de certificat de serveur Web proposé par Netscape constitue la base de la plupart des technologies de vérification de validité des navigateurs. Les étapes de vérification sont décrites ci-dessous :
日期检测
Tout d'abord, le navigateur vérifie les dates de début et de fin du certificat pour s'assurer que le certificat est toujours valide. Si le certificat a expiré ou n'a pas été activé, la vérification de la validité du certificat échoue et le navigateur affiche un message d'erreur.
签名颁发者可信度检测
每个证书都是由某些 证书颁发机构(CA)
签发的,它们负责为服务器担保。证书有不同的等级,每种证书都要求不同级别的背景验证。比如,如果申请某个电 子商务服务器证书,通常需要提供一个营业的合法证明。
任何人都可以生成证书,但有些 CA 是非常著名的组织,它们通过非常清晰的流 程来验证证书申请人的身份及商业行为的合法性。因此,浏览器会附带一个签名颁发机构的受信列表。如果浏览器收到了某未知(可能是恶意的)颁发机构签发的证书,那它通常会显示一条警告信息。
签名检测
一旦判定签名授权是可信的,浏览器就要对签名使用签名颁发机构的公开密钥, 并将其与校验码进行比较,以查看证书的完整性。
站点身份检测
为防止服务器复制其他人的证书,或拦截其他人的流量,大部分浏览器都会试着 去验证证书中的域名与它们所对话的服务器的域名是否匹配。服务器证书中通常 都包含一个域名,但有些 CA 会为一组或一群服务器创建一些包含了服务器名称 列表或通配域名的证书。如果主机名与证书中的标识符不匹配,面向用户的客户 端要么就去通知用户,要么就以表示证书不正确的差错报文来终止连接。
SSL 是个复杂的二进制协议。除非你是密码专家,否则就不应该直接发送原始的 SSL 流量。幸运的是,借助一些商业或开源的库,编写 SSL 客户端和服务器并不十 分困难。
OpenSSL 是 SSL 和 TLS 最常见的开源实现。OpenSSL 项目由一些志愿者合作开发, 目标是开发一个强壮的、具有完备功能的商业级工具集,以实现 SSL 和 TLS 协议以 及一个全功能的通用加密库。可以从 http://www.openssl.org 上获得 OpenSSL 的相 关信息,并下载相应软件。
强烈推荐一本书:HTTP 权威指南
Analyse super détaillée | Pratique d'optimisation CDN HTTPS, efficace en une minute pour l'ensemble du réseau
Protocole SSL/TLS illustré
Le guide définitif du HTTP
Publié il y a 20 heures
Si vous trouvez mon article utile, n'hésitez pas à l'apprécier
Chargement...
Afficher plus de commentaires
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!