Je comprends assez bien les mathématiques derrière RSA, Elgamal, AES, SHA mais pas comment les choses sont utilisées dans la pratique. En quoi les sous-clés sont-elles différentes de la clé principale? Je comprends son objectif à partir de divers sites Web, mais comment est-il implémenté en interne? Comment est-il lié à la clé principale? Est-ce une terminologie OpenPGP?
Ce message de l'utilisateur rjh de 2008 sur le forum enigmail y répond bien:
À l'origine dans PGP 2.6, au début des années 90, vous n'aviez qu'une seule paire de clés et elle était utilisée à la fois pour le chiffrement et la signature. La possibilité d'avoir des paires de clés supplémentaires a présenté certains défis d'ingénierie. En fin de compte, il a été décidé que les paires de clés supplémentaires seraient appelées "sous-clés", bien qu'il n'y ait rien de "sous" en elles. De même, ce que vous appelez votre "clé" n'est pas vraiment une clé du tout - la terminologie est un vestige du temps où une clé était vraiment une clé. De nos jours, une clé est vraiment une collection de clés, ainsi que des métadonnées pour les identifiants d'utilisateurs, les signatures, etc.
Par exemple, ma "clé" comporte quatre paires de clés: 5B8709EB, D0C6AAE4, 71E177DB et 8DB02BBB3.
Ce que GnuPG appelle votre "clé publique" est vraiment la plus ancienne clé de signature de la collection. Par exemple, depuis que 5B8709EB a été créé en premier, GnuPG appelle l'ensemble des clés et métadonnées "la clé 5B8709EB".
Donc, "est-il possible d'avoir une clé utilisée pour le chiffrement et la signature sans aucune sous-clé?" La réponse est non, car toutes les paires de touches sur une touche sont des sous-clés. Même s'il n'y en a qu'un seul.
Les paquets de sous-clés sont définis dans RFC 4880, OpenPGP, 5.5 Key Material Packet . Ils ne se distinguent que par un autre ID de paquet et nécessitent une signature de liaison pour être réellement utiles (voir ci-dessous).
Un paquet de sous-clé publique (balise 14) a exactement le même format qu'un paquet de clé publique, mais désigne une sous-clé.
Les sous-clés OpenPGP sont utilisées à différentes fins:
Il existe des sous-types de signature spéciaux pour lier les sous-clés aux clés primaires (et vice versa), répertoriés dans RFC 4880, OpenPGP, 5.2.1 Types de signature :
0x18: Signature de liaison de sous-clé
Cette signature est une déclaration de la clé de signature de niveau supérieur qui indique qu'elle possède la sous-clé. Cette signature est calculée directement sur la clé primaire et la sous-clé, et non sur un ID utilisateur ou d'autres paquets. Une signature qui lie une sous-clé de signature DOIT avoir un sous-paquet de signature incorporée dans cette signature de liaison qui contient une signature 0x19 établie par la sous-clé de signature sur la clé primaire et la sous-clé.
0x19: Signature de liaison de clé primaire
Cette signature est une déclaration d'une sous-clé de signature, indiquant qu'elle appartient à la clé primaire et à la sous-clé. Cette signature est calculée de la même manière qu'une signature 0x18: directement sur la clé primaire et la sous-clé, et non sur un ID utilisateur ou d'autres paquets.