Question

Nous souhaitons imposer de lourdes exigences en matière de sécurité à notre projet, ainsi qu'un chiffrement hautement performant.

Je pense savoir que l'ICP est beaucoup plus lente et complexe que le cryptage symétrique, mais je ne parviens pas à trouver les numéros qui corroborent mes sentiments.

Était-ce utile?

La solution

Oui, le cryptage purement asymétrique est beaucoup plus lent que les cyphers symétriques (comme DES ou AES), ce qui explique pourquoi les applications réelles utilisent cryptographie hybride : les opérations coûteuses à clé publique sont effectuées uniquement pour chiffrer (et échanger) une clé de chiffrement pour l'algorithme symétrique utilisé pour chiffrer le message réel.

Le problème que résout la cryptographie à clé publique est qu’il n’ya pas de secret partagé. Avec un cryptage symétrique, vous devez faire confiance à toutes les parties concernées pour garder la clé secrète. Cette question devrait être beaucoup plus préoccupante que la performance (qui peut être atténuée avec une approche hybride)

Autres conseils

Sur un Macbook sous OS X 10.5.5 et une version de stock d'OpenSSL, " openssl speed " horloges AES-128-CBC à 46 000 blocs de 1024 bits par seconde. Cette même boîte cadence 1024 bits RSA à 169 signatures par seconde. AES-128-CBC est le "manuel". algorithme de chiffrement de bloc, et RSA 1024 est le "manuel" algorithme de clé publique. C'est la pomme à l'orange, mais la réponse est la suivante: RSA est beaucoup, beaucoup plus lent .

Cependant, ce n’est pas pour cela que vous ne devriez pas utiliser le cryptage à clé publique. Voici les vraies raisons:

  1. Les opérations de chiffrement à clé publique ne sont pas destinées au chiffrement de données brutes . Des algorithmes tels que Diffie-Hellman et RSA ont été conçus pour échanger des clés contre des algorithmes de cryptage de bloc. Ainsi, par exemple, vous utiliseriez un générateur de nombre aléatoire sécurisé pour générer une clé aléatoire de 128 bits pour AES et chiffrer ces 16 octets avec RSA.

  2. Les algorithmes comme RSA sont beaucoup moins "conviviaux" que AES . Avec une clé aléatoire, un bloc de texte en clair que vous envoyez à AES va sortir de manière aléatoire pour quiconque ne possède pas la clé. Ce n'est en fait pas le cas avec RSA, qui est - plus que l'AES - juste une équation mathématique. Ainsi, en plus de stocker et de gérer correctement les clés, vous devez faire extrêmement attention à la façon dont vous formatez vos blocs de texte en clair RSA, sinon vous vous retrouverez avec des vulnérabilités.

  3. La clé publique ne fonctionne pas sans infrastructure de gestion de clé . Si vous ne disposez pas d'un système permettant de vérifier les clés publiques, les attaquants peuvent substituer leurs propres paires de clés aux vraies paires de clés pour lancer "l'homme au milieu". attaques. C'est pourquoi SSL vous oblige à passer par le rigamarole des certificats. Les algorithmes de chiffrement de blocs comme AES souffrent également de ce problème, mais sans PKI, AES n’est pas moins sûr que RSA.

  4. Les opérations de chiffrement à clé publique sont susceptibles de comporter davantage de vulnérabilités de mise en œuvre qu'AES . Par exemple, les deux côtés d’une transaction RSA doivent se mettre d’accord sur les paramètres , qui sont des nombres attribués à l’équation RSA. Il existe des valeurs perverses que les attaquants peuvent substituer pour désactiver le cryptage de manière silencieuse. Il en va de même pour Diffie Hellman et plus encore pour Elliptic Curve. Un autre exemple est la vulnérabilité de falsification de signature RSA survenue il y a 2 ans dans plusieurs implémentations SSL haut de gamme.

  5. L'utilisation de la clé publique est la preuve que vous faites quelque chose "hors du commun" . Sortir de l'ordinaire est exactement ce que vous jamais voulez être avec la cryptographie; Au-delà des algorithmes, les conceptions crypto sont auditées et testées des années avant d’être considérées comme sûres.

À nos clients qui souhaitent utiliser la cryptographie dans leurs applications, nous formulons deux recommandations:

  • Pour "données inactives", utilisez PGP . Vraiment! PGP est battu depuis plus de dix ans et est considéré comme étant à l'abri des erreurs d'implémentation stupides. Il existe des variantes open source et commerciales.

  • Pour les "données en vol", utilisez TLS / SSL . Aucun protocole de sécurité au monde n'est mieux compris et mieux testé que TLS; Partout dans le monde, les institutions financières l'acceptent comme une méthode sécurisée pour transférer les données les plus sensibles.

Voici une description décente [matasano. com] moi et Nate Lawson, un cryptographe professionnel, écrit il y a quelques années. Il couvre ces points plus en détail.

Utilisez le vitesse de OpenSSL. commande pour évaluer les algorithmes et voir par vous-même.

[dave@hal9000 ~]$ openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 26126940 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 7160075 aes-128 cbc's in 3.00s
...
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128 cbc     139343.68k   152748.27k   155215.70k   155745.61k   157196.29k


[dave@hal9000 ~]$ openssl speed rsa2048
Doing 2048 bit private rsa's for 10s: 9267 2048 bit private RSA's in 9.99s
Doing 2048 bit public rsa's for 10s: 299665 2048 bit public RSA's in 9.99s
...
                  sign    verify    sign/s verify/s
rsa 2048 bits 0.001078s 0.000033s    927.6  29996.5

Les systèmes de chiffrement PKI pratiques utilisent le chiffrement asymétrique pour chiffrer une clé symétrique, puis le chiffrement symétrique avec cette clé pour chiffrer les données (cela dit, quelqu'un indiquera un contre-exemple).

La surcharge supplémentaire imposée par les algorithmes de cryptographie asymétriques par rapport aux algorithmes symétriques est donc corrigée - elle ne dépend pas de la taille des données, mais simplement de la taille des clés.

La dernière fois que j’ai testé cela, la validation d’une chaîne d’environ 3 certificats X.509 [modifier pour ajouter: et les données qu’ils signaient] prenait une fraction de seconde sur un bras fonctionnant à environ 100 MHz (en moyenne). beaucoup de répétitions, évidemment). Je ne me souviens plus de ma taille - pas négligeable, mais bien inférieure à une seconde.

Désolé, je ne me souviens pas des détails exacts, mais le résumé est le suivant: sauf si vous êtes sur un système très restreint ou utilisez beaucoup de chiffrement (comme si vous souhaitiez accepter autant de connexions SSL par seconde que possible), Les méthodes de cryptage asymétrique approuvées par le NIST sont rapides.

Apparemment, c'est 1000 fois pire. ( http://windowsitpro.com/article/articleid/93787 /symmetric-vs-asymmetric-ciphers.html ). Mais à moins que vous ne travailliez vraiment sur beaucoup de données, cela n'aura aucune importance. Ce que vous pouvez faire, c'est utiliser le cryptage asymétrique pour échanger une clé de cryptage symétrique.

Peut-être pourriez-vous ajouter quelques détails sur votre projet afin d'obtenir des réponses de meilleure qualité. Qu'essayez-vous de sécuriser? De qui? Si vous pouviez expliquer les exigences de votre sécurité, vous obtiendrez une bien meilleure réponse. Les performances ne signifient pas grand chose si le mécanisme de cryptage ne protège pas ce que vous pensez être.

Par exemple, les certificats X509 constituent un moyen standard de sécuriser les points de terminaison client / serveur. PGP Armoring peut être utilisé pour sécuriser les fichiers de licence. Pour plus de simplicité, l'enchaînement de blocs de chiffrement avec Blowfish (et une foule d'autres algorithmes de chiffrement) est facile à utiliser en Perl ou en Java, si vous contrôlez les deux extrémités.

Merci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top