Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

armure de clé PGP ?

3 réponses
Avatar
x-kane
Bonjour

Je m'intéresse aux algorithmes de PGP, et j'ai appris que la clé
publique d'encryptage RSA est composée de 2 nombres n et d (algoirthme
d'exponentiation RSA).
Hors cette clé est souvent exprimée sous la forme d'une suite de
caractères alpha numériques un peu strange, qui s'appelle armure.

Exemple : iD8DBQE9c4vy8dFENePrqZX4GQCfdn/FDy/JubV4WkV/bkNCx9PGVLM=3D

Savez vous comment les chiffres des nombres n et d sont concaténés et
tranformés pour donner cette représentation en armure ?

Merci

3 réponses

Avatar
Tux
x-kane wrote:

Bonjour

Je m'intéresse aux algorithmes de PGP, et j'ai appris que la clé
publique d'encryptage RSA est composée de 2 nombres n et d (algoirthme
d'exponentiation RSA).
Hors cette clé est souvent exprimée sous la forme d'une suite de
caractères alpha numériques un peu strange, qui s'appelle armure.

Exemple : iD8DBQE9c4vy8dFENePrqZX4GQCfdn/FDy/JubV4WkV/bkNCx9PGVLM=

Savez vous comment les chiffres des nombres n et d sont concaténés et
tranformés pour donner cette représentation en armure ?

Merci


Bonjour,

Regarde la RFC 2240 (http://www.ietf.org/rfc/rfc2440.txt) qui décrit
OpenPGP. Il doit y avoir le format de tous les structures de données
utilisées par PGP.

Guillaume

Avatar
pornin
According to x-kane :
Hors cette clé est souvent exprimée sous la forme d'une suite de
caractères alpha numériques un peu strange, qui s'appelle armure.


Les données échangées par PGP (fichiers chiffrées et/ou signés,
clés publiques...) sont sous la forme de ce qu'on appelle des
"messages PGP". Un message PGP est une suite d'octet ; il est la
concaténation de plusieurs paquets, chaque paquet commençant par
un entête qui donne sa longueur et son type.

Quand une clé RSA est représentée dans un paquet, c'est sous la forme de
"MPIs" (multi-precision integers) : deux octets qui donnent la longueur
_en bits_ du nombre, puis le nombre lui-même, en "big-endian". Ainsi,
le nombre "796" est représenté par quatre octets : 00 0A 03 1C. "00 0A"
donne le nombre de bits (ici 10 -- le compte est indiqué lui aussi en
"big-endian") et "03 1C" est le nombre lui-même (796 donne bien 31C en
hexadecimal).


Le format des messages PGP est purement binaire : il peut contenir des
octets de valeurs telles que 0, qui ne sont pas des représentations de
caractères imprimables. Du coup, on ne peut pas envoyer un message PGP
tel quel dans certains canaux de transmissions, tels que le courrier
électronique : le courrier électronique ne fonctionne qu'avec du texte.
Les caractères non-imprimables pourraient avoir être modifiés au
passage, ce qui démolirait le message PGP.

La solution de contournement "moderne" est d'utiliser pour les messages
PGP les mêmes méthodes que pour envoyer des fichiers joints quelconque :
encodage MIME.

Cependant, le vieux PGP date d'il y a très longtemps (avant MIME ou peu
s'en faut), et a donc défini son propre encodage, dit "ASCII Armor".
C'est une sorte de MIME : c'est un format pour prendre des données
binaires et les encoder en quelque chose de complètement imprimable. Le
coeur de l'ASCII Armor est le même que MIME : l'encodage Base64, qui
prend les octets par groupes de 3 et les représente par _4_ caractères
issus d'une liste de 64 caractères imprimables (lettres minuscules
et majuscules, chiffres, '/' et '+'). En ASCII Armor, il y a en plus
quelques lignes d'entête et une somme de contrôle.


En bref, l'ASCII Armor est un encodage sous forme de caractères d'une
suite d'octets quelconques. Cette suite d'octets peut être un message
PGP, lequel peut contenir (avec quelques fioritures autour) les entiers
constitutifs d'une clé RSA, sous la forme de MPIs. Stricto sensu, on
pourrait appliquer l'encodage ASCII Armor sur n'importe quelle suite
d'octets, mais le monde a préféré s'accorder sur MIME, et, dans la
pratique, ASCII Armor n'est utilisé que pour PGP.


Tout cela est décrit dans la RFC 2440 :
http://www.faqs.org/rfcs/rfc2440.html


--Thomas Pornin

Avatar
x-kane
Merci pour ces réponses
C'est énorme vous êtes trop forts
Salut

------
Roland



Thomas Pornin a écrit:
According to x-kane :

Hors cette clé est souvent exprimée sous la forme d'une suite de
caractères alpha numériques un peu strange, qui s'appelle armure.



Les données échangées par PGP (fichiers chiffrées et/ou signés,
clés publiques...) sont sous la forme de ce qu'on appelle des
"messages PGP". Un message PGP est une suite d'octet ; il est la
concaténation de plusieurs paquets, chaque paquet commençant par
un entête qui donne sa longueur et son type.

Quand une clé RSA est représentée dans un paquet, c'est sous la forme de
"MPIs" (multi-precision integers) : deux octets qui donnent la longueur
_en bits_ du nombre, puis le nombre lui-même, en "big-endian". Ainsi,
le nombre "796" est représenté par quatre octets : 00 0A 03 1C. "00 0A"
donne le nombre de bits (ici 10 -- le compte est indiqué lui aussi en
"big-endian") et "03 1C" est le nombre lui-même (796 donne bien 31C en
hexadecimal).


Le format des messages PGP est purement binaire : il peut contenir des
octets de valeurs telles que 0, qui ne sont pas des représentations de
caractères imprimables. Du coup, on ne peut pas envoyer un message PGP
tel quel dans certains canaux de transmissions, tels que le courrier
électronique : le courrier électronique ne fonctionne qu'avec du texte.
Les caractères non-imprimables pourraient avoir être modifiés au
passage, ce qui démolirait le message PGP.

La solution de contournement "moderne" est d'utiliser pour les messages
PGP les mêmes méthodes que pour envoyer des fichiers joints quelconque :
encodage MIME.

Cependant, le vieux PGP date d'il y a très longtemps (avant MIME ou peu
s'en faut), et a donc défini son propre encodage, dit "ASCII Armor".
C'est une sorte de MIME : c'est un format pour prendre des données
binaires et les encoder en quelque chose de complètement imprimable. Le
coeur de l'ASCII Armor est le même que MIME : l'encodage Base64, qui
prend les octets par groupes de 3 et les représente par _4_ caractères
issus d'une liste de 64 caractères imprimables (lettres minuscules
et majuscules, chiffres, '/' et '+'). En ASCII Armor, il y a en plus
quelques lignes d'entête et une somme de contrôle.


En bref, l'ASCII Armor est un encodage sous forme de caractères d'une
suite d'octets quelconques. Cette suite d'octets peut être un message
PGP, lequel peut contenir (avec quelques fioritures autour) les entiers
constitutifs d'une clé RSA, sous la forme de MPIs. Stricto sensu, on
pourrait appliquer l'encodage ASCII Armor sur n'importe quelle suite
d'octets, mais le monde a préféré s'accorder sur MIME, et, dans la
pratique, ASCII Armor n'est utilisé que pour PGP.


Tout cela est décrit dans la RFC 2440 :
http://www.faqs.org/rfcs/rfc2440.html


--Thomas Pornin