Điểm:1

Chi tiết cấu trúc nội dung OpenSSL EC PRIVATE KEY

lá cờ cn

Lý lịch Tôi đang cố gắng hiểu cách nội dung PEM được định dạng cho "Khóa riêng EC", ví dụ: sau đây là khóa riêng

-----BẮT ĐẦU THÔNG SỐ EC-----
BgUrgQQAIw==
----- KẾT THÚC THÔNG SỐ EC -----
----- BEGIN KHÓA RIÊNG TƯ EC -----
MIHcAgEBBEIAavpiUck1lQc01A6FH1SE1XSwW4C+i354tOQyPjioSnq5lzc9YQXX
yAIiC6hiMhARzBxe2vmYBeCEENlmCG0jNymgBwYFK4EEACOhgYkDgYYABAEyMQ/2
NkU0LHTBhpsbeaFklNSXUeG2znLuFvcb0hvc29R5ydz8/dpDOhhEtT3+SRiYOmbS
f5wQRRWyf872XFtxhgGp6MFrfHL0c2ofvYIfxLJPXSnq+GCqOKi83GwKITfkkd9N
iwfW7YlKbAQPSoPcCoPG+cNCMLs3FLN/6fD6K99R/w==
-----KHÓA RIÊNG TƯ KẾT THÚC EC-----

được tạo bằng lệnh openssl sau đây trong trường hợp bất kỳ ai muốn xem

openssl ecparam -out ecc_private_key.key -name secp521r1 -genkey

Gần đây tôi nhận ra rằng nội dung ở giữa ----- KHÓA RIÊNG TƯ XXX EC ----- không chỉ chứa khóa riêng và không thể sử dụng Tham số "D" trong phương trình đường cong elip. Vì vậy, bằng cách sử dụng lệnh sau, tôi có thể tìm thấy các phần tử riêng lẻ cũng được đưa ra bên dưới;

$ openssl ec -in ecc_private_key.key -noout -text
đọc khóa EC
Khóa riêng: (521 bit)
riêng tư:
    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:6d:23:37:29
quán rượu:
    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:
    ed: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
ĐƯỜNG CONG NIST: P-521

Câu hỏi: Tôi muốn biết rằng cách openssl có thể giải mã nội dung Base64 và trích xuất khóa riêng và khóa chung ra khỏi nội dung đó. Tôi hiện đang xử lý một ứng dụng không tích hợp bất kỳ khả năng PemReader nào, vì vậy tôi muốn viết triển khai PemReader của riêng mình để tôi có thể giải mã thông tin này trong ứng dụng của mình (hiện chỉ có các khóa EC)

PS: Mình đã trải qua rồi RFC5915 theo đó Khóa riêng phải bắt đầu bằng 1 (phiên bản) nhưng tất cả khóa tôi tạo bằng openssl luôn bắt đầu bằng 0x30. Vì vậy, tôi đang thiếu một cái gì đó tất nhiên

dave_thompson_085 avatar
lá cờ cn
5915 #3 cho biết đó là ASN.1 loại ECPrivateKey là SEQUENCE _có_ INTEGER có giá trị 1, v.v. Mã hóa DER (hoặc BER) của SEQUENCE bắt đầu bằng thẻ _for_ SEQUENCE là 0x30.
Điểm:4
lá cờ jp

Dữ liệu khóa riêng được mã hóa trong ASN.1, vì vậy bạn cần giải mã nó để lấy ra các trường khác nhau. openssl asn1parse có thể làm điều này, nhưng theo mặc định, nó sẽ phân tích cú pháp phần "Tham số EC" của tệp (vì phần này xuất hiện trước phần "Khóa RIÊNG TƯ EC"), vì vậy trước tiên bạn cần loại bỏ phần đó. Bạn có thể làm điều đó với sed, và sau đó đưa kết quả vào openssl asn1parse:

$ sed '1,/-----BEGIN EC PRIVATE KEY------/ d' ecc_private_key.key | openssl asn1parse --dump
    0:d=0 hl=3 l= 220 nhược điểm: TRÌNH TỰ          
    3:d=1 hl=2 l= 1 nguyên tố: INTEGER :01
    6:d=1 hl=2 l= 66 nguyên tố: CHUỖI OCTET      
      0000 - 00 6a fa 62 51 c9 35 95-07 34 d4 0e 85 1f 54 84 .j.bQ.5..4....T.
      0010 - d5 74 b0 5b 80 be 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 cc 1c 5e da f9 98 05-e0 84 10 d9 66 08 6d 23 ...^........f.m#
      0040 - 37 29 7)
   74:d=1 hl=2 l= 7 khuyết điểm: tiếp [ 0 ]        
   76:d=2 hl=2 l= 5 nguyên tố: ĐỐI TƯỢNG :secp521r1
   83:d=1 hl=3 l= 137 khuyết điểm: tiếp [ 1 ]        
   86:d=2 hl=3 l= 134 prim: CHUỖI BIT        
      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 da 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 fa 2b df 51 ff ..+.Q.

Nhân tiện, bạn hiện đã xuất bản khóa riêng tư này lên Internet... vì vậy vui lòng không bao giờ sử dụng nó cho bất kỳ điều gì bạn muốn thực sự an toàn.

Mubashar avatar
lá cờ cn
cảm ơn vì câu trả lời tôi đang trải qua điều đó. Tất nhiên, đây chỉ là một khóa mẫu và không có ý định sử dụng trong sản xuất.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.