Je travaille sur Get HTTP2 Prise en charge d'un serveur Nginx pendant un certain temps maintenant. À ce stade, je suis coincé à sélectionner les chiffres à soutenir. J'espère que vous pourrez m'aider à comprendre cela.
Avant de commencer à obtenir http2 pour travailler, j'ai fait un passe-temps pour obtenir les meilleurs scores possibles dans Ssllabs Tout en maintenant le support de la majorité des navigateurs. Ainsi, je n'ai appuyé que 256 piphers de 256 bits et n'a énuméré aucun chiffres de 128 bits.
Depuis l'activation de http2, j'ai perdu la prise en charge de Firefox sous Windows (et probablement d'autres navigateurs/plates-formes aussi). Notez que je vais bien avoir perdu la prise en charge de Java, XP et Android 2.3 Selon les simulations de navigateur SSLLAB, car il s'agit d'un serveur privé.
Selon Ssllabs, Firefox version 45 et 46 sous Windows ne parviennent pas à se connecter au serveur. Le message indiqué est: serveur négocié http/2 avec une suite noire. Selon les résultats, ces versions de Firefox auront sélectionné le chiffrement TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
. Une recherche rapide m'a menée à Ce sujet sur Serverfault qui expliquait que le RFC spécifie une liste noire des chiffres.
Ceci est la liste de chiffrement que j'avais configurée:
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:kEDH+AESGCM:CAMELLIA256:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK:!CAMELLIA+RSA:!AES128:@STRENGTH;
Je suis amené à croire que TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
est plus fort que TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
(qui est utilisé par Firefox dans ma configuration actuelle), car elle a une préférence plus élevée pour NGinx si j'ajoute @STRENGTH
à la directive SSL_CIPHERS. Néanmoins, le premier est répertorié dans la liste noire et le second n'est pas.
Je suis conscient qu'il y a déjà quelques sujets ici sur ce que les chiffres doivent être choisis pour obtenir le meilleur soutien. Cependant, avec ce message, j'essaie de mieux comprendre Pourquoi Certaines des suites ciphères énumérées ci-dessus sont sur la liste noire et plusieurs chiffres de 128 bits ne le sont pas.
Comme l'annexe RFC4880 que vous avez liée à dit
Note: This list was assembled from the set of registered TLS cipher suites at the time of writing. This list includes those cipher suites that do not offer an ephemeral key exchange and those that are based on the TLS null, stream, or block cipher type (as defined in Section 6.2.3 of [TLS12]). Additional cipher suites with these properties could be defined; these would not be explicitly prohibited.
Les suites de streams sont sur la liste noire car le seul chiffre de flux utilisé dans TLS est RC4 et les attaques contre RC4 ont pratiquement explosé au cours des dernières années; Voir RFC 7465 .
CBC Suites sont sur la liste noire car il est maintenant reconnu TLS-Nee-SSL tilisation de Mac-To-Chrypt était un choix médiocre (Bien que avant la première reconnaissance claire de ce, Bellare & NamPreppre dans l'Asiacrypt 2000) en partie Parce que MTE Combiné avec CBC (nécessitant un remplissage) dans un protocole en ligne permet aux attaques d'oracle de rembourrage comme caniche et chanceux13. Le caniche brise sévèrement SSL3, mais SSL3 était officiellement obsolète déjà et caniche a finalement motivé les gens pour l'éliminer. Lucky13 nécessite un chronométrage précis et n'est pas très pratique maintenant, mais cela montre une approche qui pourrait bien améliorer. (SSL et TLS1.0 L'utilisation de IV exposée pour CBC a également permis une bête, mais cette partie est fixée en 1.1 et 1.2.)
Les chiffres nuls sont sur la liste noire car, bien, leur indésirabilité devrait être évidente.
Cela ne laisse que des suites Aead, et uniquement GCM, du moins pour le moment. Notez que AELED nécessite TLS1.2, qui n'est pas encore universellement implémentée, des tests génériques tels que les ssllabs acceptent toujours les modes CBC pour permettre des serveurs et/ou des clients à l'aide de 1.1 et 1.0 (mais pas SSL3 comme ci-dessus). Chrome Utilisé pour décrire autre chose que 1,2 avec AEAD et Ephemeral Key Exchange en tant que "cryptographie obsolète", et Security.sx a une assez peu de QS à ce sujet, mais sur le test (51.0.2704.84) Semble avoir arrêté. http/2, qui s'allonge après TLS1.2 et Alead 'devrait être déjà en place, peut raisonnablement être plus exigeante.
Sauf si nous obtenions des ordinateurs quantiques pratiques - très gros, à moins que les personnes soient maintenant inquiets - la différence de force entre AES-128 et AES-256 n'a pas de sens . C'est la différence entre "incassable dans notre galaxie, mais pourrait être brisée par une personne contrôlant l'univers entier des zillions d'années" et "incassable même dans l'univers entier". Peu importe la pervers de votre collection de vidéos de chat, vous ne devriez pas m'en soucier si elle est déchiffrée après que vous soyez longtemps mort, tous vos descendants sont morts, tous les êtres humains sont morts, notre planète et notre système solaire n'existent plus.
(Bien que compte tenu de toutes les autres fonctionnalités de média ajoutées à http/2, je suis déçu qu'ils n'ajoutent aucune capacité à interdire ou au moins sérieusement limiter et dégrader les vidéos de chat. Eh bien, il y a toujours x-.)
Les algorithmes de cryptage sont destinés à obscurcir l'entrée d'origine de la sortie sans connaître la clé. Idéalement, la modification de tout bit dans la clé devrait entraîner une modification de plusieurs bits dans la sortie et devrait le faire dans un motif apparemment imprévisible. Les algorithmes sur la liste noire ont subi une analyse minutieuse et ont trouvé cette caractéristique pour un nombre important de bits de clé. C'est pourquoi vous verrez souvent une "force du bit effectif" pour un algorithme donné, et il est généralement plus petit que les bits de la clé (car de nombreux algorithmes fuient invariablement quelques bits). En d'autres termes, plus la sortie semble aléatoire, plus elle est efficace.
Par exemple, une clé de 256 bits dans un certain algorithme ne peut produire que 56 bits de sécurité, tandis qu'une clé de 128 bits dans un autre algorithme pourrait générer 96 bits de sécurité. Lorsqu'il est décomposé de cette façon, il est facile de voir que la touche 128 bits est supérieure à la touche 256 bits, malgré la moitié de la taille, et donc 2128 fois plus petit en termes de valeurs possibles. C'est une raison pour laquelle "cryptage xor" est considéré comme faible: vous pouvez facilement appliquer une fonction à la sortie et deviner la clé et l'entrée, à moins que certaines conditions soient remplies.
La raison pour laquelle HTTP/2 Les listes noires Certains algorithmes sont de commencer par une base forte de chiffres qui seront viables dans un avenir prévisible. Vous ne pouvez pas continuer à algorithmes de liste noire et vous attendre à tous les serveurs et les clients de suivre la liste en temps réel. Par conséquent, en rejetant ces chiffres déjà brisés ou en danger d'être cassé dans un proche avenir, il a plus de temps à faire face à la croissance exponentielle de l'informatique.