IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Discussion :

[RSA] Comprendre contenu d'une clef publique


Sujet :

Sécurité

  1. #1
    Membre régulier Avatar de _KB_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 92
    Points
    92
    Par défaut [RSA] Comprendre contenu d'une clef publique
    Bonjour à tous,

    J'ai généré une paire de clefs à l'aide d'openssl et je m'intéresse au contenu de ma clef publique :
    Le fichier PEM décodé (base64) est le suivant :

    Nom : key.png
Affichages : 268
Taille : 32,6 Ko

    Ce qui me pose problème c'est la ligne surlignée en noir et plus particulièrement l'octet final "00".
    Si je décode la ligne : 03 82 01 0F 00
    J'obtiens : un BIT STRING (03) de longueur 0x010F (82 : longueur codée sur 2 octets).
    Pourquoi un "00" avant de continuer avec la séquence suivante (30 82 01 0A ...) ?

    J'ai remarqué que ce "00" revenait dans d'autres clef publique générées.

    Au format ASN.1, la structure du fichier est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SEQUENCE(2 elem)
    
    SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.1.1 NULL BIT STRING(1 elem)
    SEQUENCE(2 elem)
    INTEGER(2048 bit) 242362944224136588634419120521565185719929173211644241452991998949002… INTEGER65537
    Question subsidiaire pour les pros

    Si on se référe au PKCS #1: RSA Cryptography Specifications Version 2.0, je ne vois pas de trace de ce BIT STRING. Je ne comprends pas son utilité d'autant que ce n'est pas un type structuré. Est ce que c'est spécifique à openssl ? Est ce que toutes les clefs publics contiennent un BIT STRING ?

    Merci de m'éclairer de vos lumières
    Comme le disait Heisenberg « Chérie, j’ai garé la voiture, mais je sais plus où »

  2. #2
    Membre régulier Avatar de _KB_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 92
    Points
    92
    Par défaut
    J'ai trouvé je partage ça peut servir !

    Dans la ligne 03 82 01 0F 00, ce dernier octet donne le nombre de bits de padding utilisés pour aligner la séquence sur 8 bits.
    Dans mon cas il n'y en a pas.
    Nom : IC262320.png
Affichages : 265
Taille : 1,6 Ko
    Sources : msdn.microsoft.com et luca.ntop.org (§5.4).

    D'ailleurs pour aller plus loin il est possible de trouver un "extra byte" de "00" devant le modulus portant la taille à 1 octet supplémentaire (dans mon cas, 0x101 soit 257 octets au lieu de 256 octets = 2048 bits).
    Ceci s'explique par le fait que le standard représente un INTEGER par un complément à 2 pour représenter des nombres négatifs. Dans mon cas le premier octet du modulus valant BF, un extra byte de 00 est ajouté pour éviter que le modulus soit interprété comme un entier négatif (MSB de BF = 1).

    Et pour la question bonus :

    Toutes les clefs publiques générées par openssl contiennent un BIT STRING contenant 2 INTEGER : le modulus suivi de l'exponent.
    Source : https://www.openssl.org/docs/crypto/...ate_nconf.html
    This example is the corresponding public key in a SubjectPublicKeyInfo structure:

    # Start with a SEQUENCE
    asn1=SEQUENCE:pubkeyinfo

    # pubkeyinfo contains an algorithm identifier and the public key wrapped
    # in a BIT STRING
    [pubkeyinfo]
    algorithm=SEQUENCE:rsa_alg
    pubkey=BITWRAP,SEQUENCE:rsapubkey

    # algorithm ID for RSA is just an OID and a NULL
    [rsa_alg]
    algorithm=OID:rsaEncryption
    parameter=NULL

    # Actual public key: modulus and exponent
    [rsapubkey]
    n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\
    D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9

    e=INTEGER:0x010001
    voilou
    Comme le disait Heisenberg « Chérie, j’ai garé la voiture, mais je sais plus où »

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SecretKey AES créée à partir d'une clé publique RSA
    Par Gaspard22 dans le forum Sécurité
    Réponses: 1
    Dernier message: 07/04/2015, 09h37
  2. Librairie OpenSSL : comment lire une clef RSA sans fichier ?
    Par Feneck91 dans le forum Sécurité
    Réponses: 0
    Dernier message: 01/06/2012, 10h01
  3. Ajouter des liens sur des mots clefs contenu dans une div
    Par Nementon dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/05/2010, 11h32
  4. [DLL] Afficher le contenu d'une dll dans un Tpanel
    Par Fabs dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2007, 14h30
  5. [VB6] [Système] Récupérer le contenu d'une fenêtre DOS
    Par Nounours666 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 18/11/2004, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo