Quando sto generando una chiave privata con openssl
, scrive i parametri della curva e la chiave privata effettiva:
❯ openssl ecparam -name secp256k1 -genkey
-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIKYV1xoz6smkpdMksfgI8/3465V02UZdaKj4JSH30bBhoAcGBSuBBAAK
oUQDQgAEO1O+/xRGEVJgBEAOQorBveXPTQS3c7MA+9R+HEMP7TkscI9FONPclcRb
5sXZJjYHNYWhvxuXdGl8QrFVRIVBYg==
-----END EC PRIVATE KEY-----
Si noti che i parametri non contengono dati reali, solo un riferimento allo standard utilizzato:
❯ openssl ecparam -name secp256k1 | openssl asn1parse
0:d=0 hl=2 l= 5 prim: OBJECT :secp256k1
Tuttavia, quando guardo la chiave privata, posso vedere che contiene il tipo di curva usato! Guarda la riga che inizia con 41: d
❯ openssl ecparam -name secp256k1 -genkey -noout | openssl asn1parse
0:d=0 hl=2 l= 116 cons: SEQUENCE
2:d=1 hl=2 l= 1 prim: INTEGER :01
5:d=1 hl=2 l= 32 prim: OCTET STRING [HEX DUMP]:872F67D0B852C6FE9BD1F5B93AF54B7555D21267200DA2F8ED735729BF32730A
39:d=1 hl=2 l= 7 cons: cont [ 0 ]
41:d=2 hl=2 l= 5 prim: OBJECT :secp256k1
48:d=1 hl=2 l= 68 cons: cont [ 1 ]
50:d=2 hl=2 l= 66 prim: BIT STRING
C'è una ragione per cui ho bisogno dei parametri CE? Perché li produce di default?
(L'unica ragione per cui posso pensare di aver bisogno di quei parametri EC, è di usarli come input quando si genera una chiave privata, ma non è meglio dare il loro nome nella riga di comando?)