Primitive cryptographique
Une primitive cryptographique est un algorithme cryptographique de bas niveau, bien documenté, et sur la base duquel est bâti tout système de sécurité informatique. Ces algorithmes fournissent notamment des fonctions de hachage cryptographique et de chiffrement.
Raisonnement
modifierÀ la création d’un système cryptographique (ou cryptosystème), le concepteur se fonde sur des briques appelées « primitives cryptographiques ». Pour cette raison les primitives cryptographiques sont conçues pour effectuer une tâche précise et ce de la façon la plus fiable possible. Ces tâches peuvent concerner le chiffrement, la signature électronique ou le hachage.
Les primitives cryptographiques servant de briques de base dans l’élaboration de systèmes de sécurité plus complexes, elles se doivent d’être extrêmement fiables, c'est-à-dire qu'elles doivent se conformer exactement à leurs spécifications. Ainsi, si une fonction de chiffrement prétend ne pouvoir être cassée qu'avec un nombre N d’opérations informatiques alors, s'il est possible de la casser avec un nombre inférieur à cette valeur nominale, on dit de cette primitive qu'elle est compromise. Si une primitive cryptographique est compromise, tout protocole l’utilisant devient virtuellement vulnérable. La création de fonctions de cryptographie étant un travail hautement complexe, et les essais de celles-ci pour prouver leur fiabilité étant un travail de longue haleine, il est rarement pertinent (ou sûr) de concevoir une nouvelle primitive cryptographique pour satisfaire aux besoins d’un nouveau cryptosystème, pour les raisons suivantes :
- Le concepteur peut ne pas avoir les compétences mathématiques et pratiques suffisantes pour maîtriser tous les aspects de la conception d’une nouvelle primitive cryptographique.
- Concevoir une nouvelle primitive cryptographique est extrêmement long et très sujet aux erreurs, même pour des experts dans le domaine.
- Du fait que des algorithmes dans ce domaine ne doivent pas seulement être solidement conçus mais doivent aussi être intensivement testés par la communauté des chercheurs en cryptologie, une fonction cryptologique qui peut apparaître bien pensée peut recéler des erreurs. Réussir ce passage en revue constitue pratiquement la seule preuve que l’algorithme est suffisamment fiable pour être utilisé ; les preuves de sécurité pour les primitives cryptographiques ne sont généralement pas disponibles.
Les primitives cryptographiques sont similaires sous certains aspects aux langages de programmation. Un programmeur n'invente que rarement un nouveau langage pour écrire ses programmes ; il utilisera plutôt un langage déjà connu.
On retrouve des primitives cryptographiques dans tout système de cryptographie : TLS, SSL, SSH, etc. Les concepteurs de tels systèmes, qui ne sont pas en mesure de prouver la sécurité des algorithmes qu'ils utilisent, doivent pouvoir leur accorder leur confiance. Retenir la meilleure primitive cryptographique pour utilisation dans un protocole quelconque assure en général la meilleure sécurité possible. Toutefois, des faiblesses par conception sont toujours possibles dans les systèmes cryptographiques et il est de la responsabilité du développeur de les éviter.
Combinaison de primitives cryptographiques
modifierLes primitives cryptographiques en elles-mêmes, de par leur nature, sont assez limitées. Elles ne peuvent être considérées stricto sensu comme un système cryptographique. Ainsi, un simple algorithme de chiffrement ne fournira aucun mécanisme d’authentification, ni message explicite de contrôle d’intégrité. Ce n'est qu'en les combinant au sein de protocoles de sécurité que l’on peut résoudre une problématique de sécurité complexe. Par exemple, pour transmettre un message qui soit non seulement chiffré mais également protégé contre toute altération (c'est-à-dire qu'il doit être à la fois confidentiel et voir son intégrité garantie), il est possible de recourir à une fonction de chiffrement tel qu’AES et à une fonction de hachage comme SHA-3. Si l’attaquant ne connaît pas la clef de chiffrement, il ne pourra pas modifier le message sans que l’altération ne soit détectée.
Combiner des primitives cryptographiques en un protocole est en soi une spécialisation. La plupart des erreurs exploitables (c'est-à-dire les failles de sécurité au sein des systèmes cryptographiques) ne sont pas dues à des erreurs conceptuelles dans les primitives elles-mêmes (pour autant qu'elles aient été choisies avec soin) mais à la façon dont elles sont utilisées, c'est-à-dire que le protocole peut avoir été mal conçu ou être bogué ou sa mise en œuvre avoir été insuffisamment minutieuse. L’analyse mathématique des protocoles n'est pas encore arrivée à maturité. Certaines propriétés basiques peuvent être vérifiées de façon automatisée, par exemple avec la logique Burrows–Abadi–Needham (en)[1]. Il existe même des méthodes de vérification complète (par exemple le SPI calcul, une extension du Pi-calcul) mais elles sont très complexes à mettre en œuvre et ne peuvent être automatisées. La conception d’un nouveau protocole de sécurité est un art requérant une connaissance approfondie du domaine et beaucoup d’expérience ; et même ainsi les erreurs sont fréquentes[2].
Notes et références
modifier- http://www.cs.cmu.edu/~rwh/courses/llsec/slides/ban-logic.pdf
- À titre d’exemple, on peut consulter la page des nouvelles du projet OpenSSL sur laquelle apparaissent fréquemment de nouvelles alertes de sécurité.
Annexes
modifierArticles connexes
modifierBibliographie
modifier- (hu) Levente Buttyán et István Vajda, Kriptográfia és alkalmazásai, Typotex, (ISBN 963-9548-13-8)
- (en) Alfred J. Menezes, Handbook of applied cryptography, Boca Raton, CRC Press, , 816 p. (ISBN 0-8493-8523-7, lire en ligne)