Il y a un sens dans lequel vous pouvez définir la force d'un algorithme de chiffrement particulier¹: en gros, la force est le nombre de tentatives qui doivent être faites pour casser le chiffrement. Plus précisément, la force est la quantité de calcul qui doit être faite pour trouver le secret. Idéalement, la force d'un algorithme est le nombre de tentatives de force brute qui doivent être faites (pondérées par la complexité de chaque tentative, ou réduites si une sorte de parallélisation permet de multiples tentatives pour partager une partie du travail); à mesure que les attaques contre l'algorithme s'améliorent, la force réelle diminue.
Il est important de réaliser que «l'algorithme de chiffrement particulier» inclut la prise en compte d'une taille de clé spécifique. Autrement dit, vous ne lancez pas RSA contre AES, mais RSA 1024 bits (avec un mode de remplissage spécifique) avec AES-256 (avec un mode de chaînage spécifique, IV, etc.). En ce sens, vous pouvez demander: si j'ai une copie de mes données cryptées avec l'algorithme A avec des valeurs données des paramètres P et Q (en particulier la taille de la clé), et une copie cryptée avec l'algorithme B avec les paramètres P et R, alors lequel de (A, Pval₁, Qval₁) et (B, Pval₂, Rval₂) est susceptible d'être craqué en premier?
En pratique, de nombreux protocoles impliquent l'utilisation de plusieurs primitives cryptographiques. Différentes primitives ont différentes utilisations possibles, et même lorsque plusieurs primitives peuvent remplir une fonction donnée, il peut y en avoir une qui convient mieux que d'autres. Lors du choix d'une primitive cryptographique dans un but donné, le processus de décision se déroule un peu comme ceci:
- Quels algorithmes peuvent faire le travail? → Je peux utiliser A ou B ou C.
- De quelle force ai-je besoin? → Je veux 2 N opérations, donc j'ai besoin de la taille de clé L A pour la primitive A, L B pour la primitive B, L C pour C. primitif
- Compte tenu de mes contraintes (vitesse brute, latence, efficacité de la mémoire,…), lesquelles de celles-ci (L A -bit A ou L B -bit B ou L C -bit C) est le meilleur?
Par exemple, disons que votre exigence est un protocole d'échange de données avec une partie en laquelle vous ne faites pas confiance. Ensuite, la cryptographie symétrique ne peut pas faire le travail seule: vous avez besoin d'un moyen de partager la clé. La cryptographie asymétrique telle que RSA peut faire le travail, si vous laissez les parties échanger des clés publiques à l'avance. (Ce n'est pas la seule possibilité, mais je n'entrerai pas dans les détails ici.) Vous pouvez donc décider de la longueur de clé RSA qui a la bonne force pour votre application. Cependant, RSA est lent et encombrant (par exemple, il n'y a pas de protocoles standard pour appliquer le cryptage RSA à un flux - principalement parce que personne ne s'est dérangé parce qu'ils seraient si lents). De nombreux protocoles courants impliquant la cryptographie à clé publique ne l'utilisent que pour échanger un secret de durée limitée: une clé de session pour un algorithme de cryptographie symétrique. C'est ce qu'on appelle le chiffrement hybride. Encore une fois, vous choisissez la durée de la clé de session en fonction de la force souhaitée. Dans ce scénario, les deux primitives impliquées ont tendance à avoir la même force.
¹ La même notion s'applique à d'autres utilisations de la cryptographie, comme la signature ou le hachage.