Paquet d'information sur les clefs

Un paquet d'information sur les clefs contient toutes les informations au sujet d'une clef privée ou publique. Il y a quatre variantes de ce type de paquet, et deux versions majeures. Par conséquent, cette section est complexe.

Variantes de paquets sur les clefs

Paquet sur les clefs publiques (Tag 6)

Un paquet sur les clefs publiques commence par une série de paquets qui forme une clef OpenPGP (parfois appelée un certificat OpenPGP).

Paquet sur les sous-clef publique (Tag 14)

Un paquet sur les sous clefs publiques (Tag 14) possède exactement le même format qu'un paquet sur les clefs publiques, mais signale une sous-clef. Une ou plusieurs sous-clefs peuvent être associées avec une clef de niveau supérieur. Par convention, la clef de niveau supérieur fournit les services de signatures, et les sous-clefs fournissent les services de cryptage.

Note: dans PGP 2.6.x, le tag 14 a été conçu pour indiquer un paquet de commentaire. Ce tag a été sélectionné pour réutilisation car aucune version précédente de PGP n'a jamais émis de paquets de commentaire mais au contraire elles les ignoraient carrément. Les paquets sur les sous-clefs publiques sont ignorés par PGP 2.6.x et ne le font pas planter, fournissant un peu de compatibilité descendante.

Paquet sur les clefs secrètes (Tag 5)

Un paquet sur les clefs secrètes contient toutes les informations trouvées dans un paquet sur les clefs publiques, y compris les informations sur les clefs publiques, mais il comprend aussi les informations sur les clefs secrètes, qui se trouvent après tous les champs de clefs publiques. secrète après tous les champs de clef publique.

Paquet sur les sous-clefs secrètes (Tag 7)

Un paquet sur les sous-clefs secrètes (tag 7) est l'équivalent pour les sous-clefs du paquet et a exactement le même format.

Formats du paquet sur les clefs publiques

Il y a deux versions de paquets d'information sur les clefs. Les paquets de Version 3 ont été générés à l'origine par PGP 2.6. Les paquets de Version 2 sont de formats identiques aux paquets de Version 3, mais sont générés par PGP 2.5 ou antérieur. Les paquets V2 sont a rejeter et ne DOIVENT ABSOLUMENT PAS être générés. PGP 5.0 à introduit les paquets de Version 4, avec de nouveaux champs et de nouvelles sémantiques. PGP 2.6.x n'acceptera pas les paquets d'information sur les clefs de version supérieure à 3.

Les implémentations de OpenPGP DOIVENT créer des clefs avec le format de la version 4. Une implémentation PEUT générer une clef V3 pour assurer l'interropérabilité avec les anciens logiciels; notez, cependant, que les clefs V4 corrigent quelques défaillance de sécurité des clefs V3. Ces défaillances sont décrites ci-dessous. Une implémentation ne DOIT EN AUCUN CAS créer une clef V3 avec un algorithme à clef publique autre que RSA.

Un paquet Version 3 sur une clef publique ou sur une sous-clef publique contient :

Les clefs V3 DOIVENT seulement être utilisées pour des questions de compatibilité antérieure car elle comporte trois points faibles. Premièrement, il est relativement facile de construire une clef V3 qui possède le même identifiant de clef qu'une autre clef car l'identifiant de clef est simplement constitué des 64 bits de poids faible du modulo publique. Deuxièmement, car l'empreinte d'une clef V3 hache les informations sur la clef, mais pas sa longueur, ce qui accroit les possibilités de conflits d'empreintes. Troisièmement, il y a quelques petites lacunes dans l'algorithme de hachage MD5 qui font que les développeurs préfèrent les autres algorithmes. Vous trouverez ci-dessous pour une discussion plus complète des identifiants de clefs et des empreintes.

Le format de la version 4 est similaire à celui de la version 3 excepté en ce qui concerne l'absence de la période de validité. Elle a été déplacée dans le paquet de signature. De plus, les empreintes des clefs de version 4 sont calculées différemment de celles de la version 3, comme décrit dans la section "Formats de clefs amélioré".

Un paquet de version 4 contient:

Formats de paquet sur les clefs secrètes

Ces paquets sur une clef secrète et sur une sous-clef secrète contiennent toutes les données et la paquets de clef publique de sous-clef publique, auxquelles sont ajoutés des données de clef secrète supplémentaire spécifiques à l'algorithme, sous forme cryptée. [XXXXXXXXXXXXXXXXX]

Le paquet contient:

Les valeurs MPI secrètes peuvent être cryptées en utilisant une phrase mot de passe. Si un identifieur string-to-key est donné, celui-ci décrit l'algorithme pour convertir la phrase secrète en une clef, sinon un simple hachage MD5 de la phrase secrète est utilisé. Les implémentations DOIVENT utiliser un identifieur string-to-key; l'utilisation d'un hachage simple sert a garder la compatiblité antérieure. Le chiffrage pour crypter les MPI est spécifié dans le paquet de clef secrète.

Le cryptage/décryptage des données secrètes est faite en mode CFB en utilisant la clef créée à partir de la phrase secrète et le Vecteur Initial venant du paquet. Un mode différent est utilisé avec les clefs V3 (qui ne sont que de type RSA) par rapport aux autres formats de clefs. Avec les clefs V3, le préfixe de comptage de bit MPI (i.e., les deux premiers octets) n'est pas crypté. Seules les données non préfixés MPI sont cryptées. De plus, l'état CFB est resynchronisé au début de chaque nouvelle valeur MPI, de manière à ce que la limite de bloc CFB soit aligné avec le début des données MPI.

Avec les clefs V4, une méthode plus simple est utilisée. Toutes les valeurs secrètes MPI sont cryptées en mode CFB, y compris le préfixe de comptage de bit MPI.

Le checksum 16-bit qui suit la partie spécifique à l'algorithme est la somme algébrique, mod 65536, du texte brut de tous les octets spécifiques d'algorithme (incluant le préfixe et les données MPI). Avec les clefs V3, le checksum est stocké en clair. Avec les clefs V4, le checksum est crypté comme les données spécifiques à l'algorithme. Cette valeur est utilisée pour vérifier que la phrase mot de passe est correcte.