พื้นหลัง
ฉันกำลังพยายามทำความเข้าใจว่าเนื้อหา PEM จัดรูปแบบสำหรับ "EC Private Key" อย่างไร เช่น ต่อไปนี้คือคีย์ส่วนตัว
----- เริ่มต้นพารามิเตอร์ EC-----
BgUrgQQAIw==
----- สิ้นสุดพารามิเตอร์ EC-----
----- เริ่มต้นรหัสส่วนตัว EC -----
MIHcAgEBBEIAavpiUck1lQc01A6FH1SE1XSwW4C+i354tOQyPjioSnq5lzc9YQXX
YAIiC6hiMhARzBxe2vmYBeCEENlmCG0jNymgBwYFK4EEACOhgYkDgYYABAEyMQ/2
NkU0LHTBhpsbeaFklNSXUeG2znLuFvcb0hvc29R5ydz8/dpDOhhEtT3+SRiYOmBS
f5wQRRWyf872XFtxhgGp6MFrfHL0c2ofvYIFxLJPXSnq+GCqOKi83GwKITfkkd9N
iwfW7YlKbAQPSoPcCoPG+cNCMLs3FLN/6fD6K99R/w==
----- สิ้นสุดรหัสส่วนตัว EC -----
ซึ่งสร้างด้วยคำสั่ง openssl ต่อไปนี้ เผื่อว่าใครอยากดู
openssl ecparam - ออก ecc_private_key.key -name secp521r1 -genkey
เมื่อเร็ว ๆ นี้ฉันตระหนักว่าเนื้อหาในระหว่างนั้น ----- XXX EC รหัสส่วนตัว -----
มีมากกว่าคีย์ส่วนตัวและไม่สามารถใช้พารามิเตอร์ "D" ในสมการเส้นโค้งวงรี ดังนั้นการใช้คำสั่งต่อไปนี้ฉันสามารถค้นหาองค์ประกอบแต่ละรายการตามที่ระบุด้านล่าง
$ openssl ec - ใน ecc_private_key.key -noout -text
อ่านรหัส EC
คีย์ส่วนตัว: (521 บิต)
ความเป็นส่วนตัว:
00:6a:fa:62:51:c9:35:95:07:34:d4:0e:85:1f:54:
84:d5:74:b0:5b:80:be:8b:7e:78:b4:e4:32:3e:38:
a8:4a:7a:b9:97:37:3d:61:05:d7:c8:02:22:0b:a8:
62:32:10:11:cc:1c:5e:da:f9:98:05:e0:84:10:d9:
66:08:6ง:23:37:29
ผับ:
04:01:32:31:0f:f6:36:45:34:2c:74:c1:86:9b:1b:
79:a1:64:94:d4:97:51:e1:b6:ce:72:ee:16:f7:1b:
d2:1b:dc:db:d4:79:c9:dc:fc:fd:da:43:3a:18:44:
b5:3d:fe:49:18:98:3a:60:52:7f:9c:10:45:15:b2:
7f:ce:f6:5c:5b:71:86:01:a9:e8:c1:6b:7c:72:f4:
73:6a:1f:bd:82:1f:c4:b2:4f:5d:29:ea:f8:60:aa:
38:a8:bc:dc:6c:0a:21:37:e4:91:df:4d:8b:07:d6:
เอ็ด:89:4a:6c:04:0f:4a:83:dc:0a:83:c6:f9:c3:42:
30:bb:37:14:b3:7f:e9:f0:fa:2b:df:51:ff
ASN1 OID: secp521r1
NIST CURVE: P-521
คำถาม:
ฉันต้องการทราบว่า opensl สามารถถอดรหัสเนื้อหา Base64 และดึงรหัสส่วนตัวและรหัสสาธารณะออกมาได้อย่างไร
ขณะนี้ฉันกำลังจัดการกับแอปที่ไม่มีความสามารถของ PemReader ในตัว ดังนั้นฉันต้องการเขียนการใช้งาน PemReader ของฉันเอง เพื่อที่ฉันจะได้สามารถถอดรหัสข้อมูลนี้ในแอปพลิเคชันของฉัน (เฉพาะคีย์ EC สำหรับตอนนี้)
PS: ฉันผ่านไปแล้ว RFC5915 ตามนั้น Private-Key ควรเริ่มต้นด้วย 1 (เวอร์ชัน) แต่คีย์ทั้งหมดที่ฉันสร้างด้วย openssl จะเริ่มต้นด้วย 0x30 เสมอ แน่นอนว่าฉันขาดอะไรไป