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
la source
Réponses:
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 où
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 )
Le premier octet détermine la structure
04
signifie qu'il n'y a pas de compression03
signifie qu'il y a une compression et sélectionnez y comme positif02
signifie qu'il y a une compression et sélectionnez y comme négatifMaintenant, transformez-vous en paramètres OP;
premier octet
04
signifie 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 <= ℓ
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.
la source