obtenir les composants x et y de la clé publique ec en utilisant openssl

12

Je génère un KeyPair pour ECC à partir de la courbe 'secp128r1' en utilisant openssl

Étapes que j'ai suivies:

  • j'ai d'abord généré une clé privée en utilisant la commande

    openssl ecparam -genkey -name secp128r1 -noout -out private.pem

  • puis j'ai vu la clé publique correspondante en utilisant la commande

    openssl ec -in private.pem -text -noout

    qui a montré une sortie comme:

    lire la clé EC

    Clé privée: (128 bits)
    priv:
    00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3e: 90: 57: 40:
    f4: bc
    pub:
    04: 04: ce : 24: 34: d4: cb: f2: 58: 94: 2f: 8a: 5f: 06: d7:
    3f: ed: 5a: 50: ef: fb: cc: b7: 49: 62: 16: 62: 9e : aa: d5:
    30: a8: a5

    ASN1 OID: secp128r1

Je veux explicitement des composants x et y à partir de la clé publique générée ici, est-ce que quelqu'un peut suggérer la bonne façon de procéder?
La clé publique ci-dessus est longue de 264 bits, elle ne peut donc pas être prise (/ divisée) telle quelle.
Merci

Dhruv Agarwal
la source
5
Dupe de security.stackexchange.com/questions/60926/… ; per tools.ietf.org/html/rfc5480#section-2.2 le premier octet (04) signifie non compressé, qui est suivi de X, Y coordonne chacune exactement la taille du champ arrondie aux octets, ici 16 octets.
dave_thompson_085
2
@dave_Thompson - Je pense que vous devriez fournir une réponse. C'était une bonne question et une bonne information (et sur le bon site !!!), et vous devriez recevoir le bénéfice d'une bonne réponse.
jww

Réponses:

1

Tout d'abord, secp128r1 est obsolète. Utilisez des courbes qui offrent une meilleure sécurité pour la norme actuelle. Voir les courbes de sécurité de Daniel J. Bernstein et Tanja Lange.

Une courbe elliptique définie sur un champ de taille , q et chaque élément -point- a deux coordonnées X et Y . La courbe elliptique Secp128r1 a 2 128 -2 97 -1 de taille ℓ, soit un nombre de points un peu inférieur à 2 ^ 128. Cela signifie que nous avons besoin d'une représentation sur 128 bits.

La clé publique qui est également un point sur la courbe a deux coordonnées, par conséquent, nous devons stocker deux 128 bits.

Si nous regardons l'équation de la courbe elliptique Y 2 = X 3 + aX + b

 a = FFFFFFFD FFFFFFFF FFFFFFFF FFFFFF
 b = E87579C1 1079F43D D824993C 2CEE5E

si nous savons X de l'équation que nous pouvons trouver Y . Puisque nous travaillons dans un domaine, le Y peut avoir au plus deux racines carrées. Y 2 aura y ou -y comme racine carrée. Cette connaissance peut être utilisée pour compresser la représentation d'un point et elle est appelée compression de point . Juste coordonnée x et un bit pour sélectionner y ou -y . Regardez maintenant le point de base (voir la recommandation Certicom )

 base point = 03 161FF752 8B899B2D 0C28607C A52C5B86
            = 04 161FF752 8B899B2D 0C28607C A52C5B86 CF5AC839 5BAFEB13 C02DA292 DDED7A83 

Le premier octet détermine la structure

  • 04 signifie qu'il n'y a pas de compression
  • 03signifie qu'il y a une compression et sélectionnez y comme positif
  • 02signifie qu'il y a une compression et sélectionnez y comme négatif

Maintenant, transformez-vous en paramètres OP;

pub:
04:
04:ce:24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:3f:ed: -->X
5a:50:ef:fb:cc:b7:49:62:16:62:9e:aa:d5:30:a8:a5  -->Y

premier octet 04signifie qu'il n'y a pas de compression. La première ligne est la coordonnée X et la deuxième ligne est la coordonnée Y de votre clé publique.

Qu'en est-il de la clé privée n ? C'est juste un entier scalaire entre 0 <= n <= ℓ

privé: 00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3e: 90: 57: 40: f4: bc

Par conséquent, le numéro ci-dessus - pas un point - est votre clé privée.

Vous pouvez également utiliser certains outils Web pour extraire ces informations.

Remarque: veuillez ne pas exposer votre clé privée.

Kelalaka
la source