|
Coin Rumor Crusher a publié il y a quelques jours : « L’accès à Internet via le WiFi public mettra-t-il en danger la sécurité des comptes bancaires ? L’article présente certaines situations liées à l’utilisation de HTTPS pour la transmission chiffrée par réseau, et d’après la réponse, des débats subsistent. À mesure qu’Internet devient de plus en plus populaire, l’application se répand, et certains problèmes de sécurité réseau attireront également de plus en plus l’attention des internautes ; ici, nous allons parler de TLS/SSL, ce que nous appelons souvent HTTPS, du principe à l’application elle-même pour voir ce que c’est, et quels problèmes surveiller lors de l’utilisation de HTTPS et des techniques de sécurité associées. La cybersécurité est un événement global qui implique la sécurité des ordinateurs personnels, des protocoles, de la transmission de données et des entreprises et sites web de développement logiciel. J’espère qu’en expliquant petit à petit les problèmes liés à la sécurité à l’avenir, davantage de personnes pourront comprendre la sécurité réseau, afin de pouvoir utiliser le réseau de manière plus sûre. L’article sera long et il est prévu pour l’instant de diviser en trois parties : La première partie décrit principalement le principe de HTTPS ; La seconde partie décrit principalement le processus de vérification des certificats SSL ainsi que quelques précautions pour l’utilisation. La troisième partie présente quelques exemples d’attaques HTTPS. 1. Qu’est-ce que HTTPS ?Avant de parler de HTTPS, parlons de ce qu’est HTTP, un protocole que nous utilisons généralement lors de la navigation sur le web. Les données transmises par le protocole HTTP ne sont pas chiffrées, c’est-à-dire en texte clair, ce qui rend très peu sûr la transmission d’informations privées via le protocole HTTP. Afin de garantir que ces données privées puissent être chiffrées et transmises, Netscape a conçu le protocole SSL (Secure Sockets Layer) pour chiffrer les données transmises par le protocole HTTP, donnant ainsi naissance à HTTPS. La version actuelle de SSL est la 3.0, définie dans la RFC 6101 par l’IETF (Internet Engineering Task Force), puis la version IETF de SSL 3.0 mise à jour, aboutissant à TLS (Transport Layer Security) 1.0, défini dans la RFC 2246. En fait, notre HTTPS actuel est le protocole TLS, mais comme SSL est apparu relativement tôt et est toujours pris en charge par les navigateurs actuels, SSL est toujours synonyme de HTTPS, mais que ce soit TLS ou SSL appartient au siècle dernier, la dernière version de SSL est la 3.0, et TLS continuera à nous fournir des services de chiffrement à l’avenir. La version actuelle de TLS est la 1.2, définie dans la RFC 5246, et n’est pas encore largement utilisée. Pour ceux qui s’intéressent à l’histoire, vous pouvez vous référer au http://en.wikipedia.org/wiki/Transport_Layer_Security, qui propose une description détaillée de TLS/SSL.
2. HTTPS est-il sécurisé ?La réponse est oui, c’est sûr. Dans les semaines à venir, Google activera HTTPS pour tous les domaines locaux du monde, les utilisateurs n’auront qu’à se connecter avec leur compte Google avant de faire une recherche, et toutes les opérations de recherche seront chiffrées selon le protocole TLS, voir : http://thenextweb.com/google/2012/03/05/google-calls-for-a-more-secure-web-expands-ssl-encryption-to-local-domains/。
3. Fonctionnement de HTTPSHTTPS nécessite une poignée de main entre le client (navigateur) et le serveur (site web) avant de transmettre les données, et les informations de mot de passe des deux parties seront établies lors du processus de poignée de main. Le protocole TLS/SSL n’est pas seulement un ensemble de protocoles de transmission chiffrés, mais aussi une œuvre d’art soigneusement conçue par des artistes, utilisant un chiffrement asymétrique, un chiffrement symétrique et des algorithmes HASH. Voici une description simple du processus de poignée de main :
- Le navigateur envoie un ensemble de règles de chiffrement qu’il prend en charge au site web.
- Le site sélectionne un ensemble d’algorithmes de chiffrement et d’algorithmes HASH parmi ceux-ci et renvoie ses informations d’identité au navigateur sous forme de certificat. Le certificat contient des informations telles que l’adresse du site web, la clé publique de chiffrement et l’émetteur du certificat.
- Après avoir obtenu un certificat de site web, le navigateur effectue ce qui suit :
- Vérifiez la légitimité du certificat (si l’autorité émet le certificat, si l’adresse du site web contenue dans le certificat est la même que celle visitée, etc.), si le certificat est digne de confiance, un petit verrou s’affichera dans la barre du navigateur, sinon une invite sera indiquée indiquant que le certificat n’est pas fiable.
- Si le certificat est digne de confiance, ou si l’utilisateur accepte un certificat non fiable, le navigateur génère un nombre aléatoire de mots de passe et les chiffre avec la clé publique fournie dans le certificat.
- Le message de poignée de main est calculé à l’aide du HASH convenu, et le message est chiffré avec le nombre aléatoire généré, et enfin toutes les informations précédemment générées sont envoyées au site web.
4. Après avoir reçu les données du navigateur, le site web fait ce qui suit : - Utilisez votre propre clé privée pour déchiffrer le mot de passe, utilisez le mot de passe pour déchiffrer le message de poignée de main envoyé par le navigateur, et vérifiez que le HASH est le même que celui envoyé par le navigateur.
- Un message de poignée de main est chiffré avec un mot de passe et envoyé au navigateur.
5. Le navigateur déchiffre et calcule le HASH du message de poignée de main ; s’il est cohérent avec le HASH envoyé par le serveur, le processus de poignée de main prend fin, puis toutes les données de communication seront chiffrées par le mot de passe aléatoire généré par le navigateur précédent et en utilisant l’algorithme de chiffrement symétrique.
Ici, le navigateur et le site web s’envoient un message de poignée de main chiffré et vérifient, afin de s’assurer que les deux parties ont obtenu le même mot de passe, de pouvoir chiffrer et déchiffrer les données normalement, et effectuer un test pour la transmission ultérieure de données réelles. De plus, les algorithmes de chiffrement et de HASH couramment utilisés par HTTPS sont les suivants : - Algorithmes de chiffrement asymétriques : RSA, DSA/DSS
- Algorithmes de chiffrement symétrique : AES, RC4, 3DES
- Algorithme HASH : MD5, SHA1, SHA256
Parmi eux, l’algorithme de chiffrement asymétrique est utilisé pour chiffrer le mot de passe généré lors du processus de poignée de main, l’algorithme de chiffrement symétrique est utilisé pour chiffrer les données réellement transmises, et l’algorithme HASH sert à vérifier l’intégrité des données. Puisque le mot de passe généré par le navigateur est la clé du chiffrement de l’ensemble des données, il est chiffré à l’aide d’un algorithme de chiffrement asymétrique lors de la transmission. L’algorithme de chiffrement asymétrique génère des clés publiques et privées, les clés publiques ne peuvent être utilisées que pour chiffrer les données, elles peuvent donc être transmises à volonté, et les clés privées du site web servent à déchiffrer les données, donc le site conserve sa clé privée très soigneusement pour éviter toute fuite. Toute erreur lors du processus de poignée de main TLS peut rompre la connexion chiffrée, empêchant la transmission d’informations privées. C’est précisément parce que HTTPS est très sécurisé que les attaquants ne trouvent pas par où commencer, ils utilisent donc de faux certificats pour tromper les clients afin d’obtenir des informations en clair, mais ces méthodes peuvent être identifiées, ce dont je parlerai dans un prochain article. Cependant, en 2010, des experts en sécurité ont découvert une vulnérabilité dans la gestion du protocole TLS 1.0 : http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/, en fait, cette méthode d’attaque appelée BEAST a été découverte par des experts en sécurité dès 2002, mais elle n’a pas été rendue publique. Microsoft et Google ont corrigé cette vulnérabilité. Voir : http://support.microsoft.com/kb/2643584/en-us https://src.chromium.org/viewvc/chrome?view=rev&revision=90643 La version simplifiée de HTTPS fonctionne également en chiffrement symétrique par rapport au chiffrement asymétrique. |