Score:1

รายละเอียดโครงสร้างเนื้อหา OpenSSL EC PRIVATE KEY

ธง cn

พื้นหลัง ฉันกำลังพยายามทำความเข้าใจว่าเนื้อหา 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 เสมอ แน่นอนว่าฉันขาดอะไรไป

dave_thompson_085 avatar
cn flag
5915 #3 บอกว่าเป็น ASN.1 ประเภท ECPrivateKey ซึ่งเป็น SEQUENCE _containing_ INTEGER ที่มีค่า 1 เป็นต้น การเข้ารหัส DER (หรือ BER) ของ SEQUENCE เริ่มต้นด้วยแท็ก _for_ SEQUENCE ซึ่งเป็น 0x30
Score:4
ธง jp

ข้อมูลคีย์ส่วนตัวถูกเข้ารหัส ASN.1ดังนั้นคุณต้องถอดรหัสเพื่อดึงฟิลด์ต่างๆ ออกมา opensl asn1parse สามารถทำได้ แต่โดยค่าเริ่มต้น มันจะแยกวิเคราะห์ส่วน "EC PARAMETERS" ของไฟล์ (เนื่องจากอยู่ก่อนส่วน "EC PRIVATE KEY") ดังนั้นคุณต้องตัดส่วนนั้นออกก่อน คุณสามารถทำได้ด้วย เสดแล้วไปป์ผลลัพธ์ไปที่ opensl asn1parse:

$ sed '1,/-----BEGIN EC ไพรเวทคีย์-----/ d' ecc_private_key.key | opensl asn1parse --ดัมพ์
    0:d=0 hl=3 l= 220 ข้อเสีย: ลำดับ          
    3:d=1 hl=2 l= 1 พริม: INTEGER :01
    6:d=1 hl=2 l= 66 prim: OCTET STRING      
      0000 - 00 6a fa 62 51 c9 35 95-07 34 d4 0e 85 1f 54 84 .j.bQ.5..4....ต.
      0010 - d5 74 b0 5b 80 เป็น 8b 7e-78 b4 e4 32 3e 38 a8 4a .t.[...~x..2>8.J
      0020 - 7a b9 97 37 3d 61 05 d7-c8 02 22 0b a8 62 32 10 z..7=a....."..b2.
      0030 - 11 ซีซี 1c 5e ดา f9 98 05-e0 84 10 d9 66 08 6d 23 ......^........f.m#
      0040 - 37 29 7)
   74:d=1 hl=2 l= 7 ข้อเสีย: ต่อ [ 0 ]        
   76:d=2 hl=2 l= 5 พริม: OBJECT :secp521r1
   83:d=1 hl=3 l= 137 ข้อเสีย: ต่อ [ 1 ]        
   86:d=2 hl=3 l= 134 ไพรม์: BIT STRING        
      0000 - 00 04 01 32 31 0f f6 36-45 34 2c 74 c1 86 9b 1b ...21..6E4,t....
      0010 - 79 a1 64 94 d4 97 51 e1-b6 ce 72 ee 16 f7 1b d2 y.d...Q...r.....
      0020 - 1b dc db d4 79 c9 dc fc-fd ดา 43 3a 18 44 b5 3d ....y.....C:.D.=
      0030 - fe 49 18 98 3a 60 52 7f-9c 10 45 15 b2 7f ce f6 .I..:`R...E.....
      0040 - 5c 5b 71 86 01 a9 e8 c1-6b 7c 72 f4 73 6a 1f bd \[q.....k|r.sj..
      0050 - 82 1f c4 b2 4f 5d 29 ea-f8 60 aa 38 a8 bc dc 6c ....O])..`.8...l
      0060 - 0a 21 37 e4 91 df 4d 8b-07 d6 ed 89 4a 6c 04 0f .!7...M.....Jl..
      0070 - 4a 83 dc 0a 83 c6 f9 c3-42 30 bb 37 14 b3 7f e9 J.......B0.7....
      0080 - f0 ฟ้า 2b df 51 ff ..+.Q.

BTW ตอนนี้คุณได้เผยแพร่รหัสส่วนตัวนี้ทางอินเทอร์เน็ตแล้ว... ดังนั้นโปรดอย่าใช้มันเพื่อสิ่งที่คุณต้องการรักษาความปลอดภัยจริงๆ

Mubashar avatar
cn flag
ขอบคุณสำหรับคำตอบ ฉันกำลังจะผ่านมันไป แน่นอนว่านี่เป็นเพียงคีย์ตัวอย่างและไม่ได้ตั้งใจให้ใช้ในการผลิต

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา