lấy các thành phần x và y của khóa công khai ec bằng openssl


12

Tôi đang tạo KeyPair cho ECC từ đường cong 'secp128r1' bằng cách sử dụng openssl

Các bước tôi làm theo:

  • đầu tiên tôi tạo một khóa riêng bằng cách sử dụng lệnh

    openssl ecparam -genkey -name secp128r1 -noout -out private.pem

  • sau đó tôi đã xem khóa công khai tương ứng bằng lệnh

    openssl ec -in private.pem -text -noout

    trong đó cho thấy một đầu ra là:

    đọc khóa EC

    Khóa riêng: (128 bit)
    private:
    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

Tôi muốn rõ ràng các thành phần x và y từ khóa chung được tạo ở đây, xin vui lòng ai có thể đề xuất cách làm chính xác này không?
Khóa công khai ở trên dài 264 bit, do đó không thể lấy (/ split) nó như
Cảm ơn


5
Dupe của security.stackexchange.com/questions/60926/... ; trên tools.ietf.org/html/rfc5480#section-2.2 octet đầu tiên (04) có nghĩa là không nén, theo sau là X, Y kết hợp chính xác từng kích thước trường được làm tròn thành octet, ở đây là 16 octet.
dave_thndry_085

2
@dave_Thndry - Tôi nghĩ bạn nên cung cấp câu trả lời. Đó là câu hỏi hay và thông tin tốt (và trên trang web chính xác !!!), và bạn sẽ nhận được lợi ích của một câu trả lời tốt.
jww

Câu trả lời:


1

Trước hết, secp128r1 đã lỗi thời. Sử dụng các đường cong cung cấp bảo mật tốt hơn cho tiêu chuẩn ngày nay. Xem an toàn của Daniel J. Bernstein và Tanja Lange.

Một Elliptic Curve định nghĩa trên một lĩnh vực kích thước q và mọi phần tử -point- có hai tọa độ XY . Đường cong Elliptic Secp128r1 có 2 128 -2 97 -1 kích thước ℓ, tức là số điểm nhỏ hơn 2 ^ 128. Điều này có nghĩa là chúng ta cần biểu diễn 128 bit.

Khóa công khai cũng là một điểm trên đường cong có hai tọa độ, do đó, chúng ta cần lưu trữ hai 128 bit.

Nếu chúng ta nhìn vào phương trình của đường cong elliptic Y 2 = X 3 + ax + b ở đâu

 a = FFFFFFFD FFFFFFFF FFFFFFFF FFFFFF
 b = E87579C1 1079F43D D824993C 2CEE5E

nếu chúng ta biết X từ phương trình chúng ta có thể tìm thấy Y . Vì chúng ta đang làm việc trong một lĩnh vực, Y có thể có tối đa hai căn bậc hai. Y 2 sẽ có y hoặc -y là căn bậc hai. Kiến thức này có thể được sử dụng để nén biểu diễn của một điểm và nó được gọi là nén điểm . Chỉ cần tọa độ x và một bit để chọn y hoặc -y . Bây giờ hãy nhìn vào điểm cơ bản (xem khuyến nghị của Certicom )

 base point = 03 161FF752 8B899B2D 0C28607C A52C5B86
            = 04 161FF752 8B899B2D 0C28607C A52C5B86 CF5AC839 5BAFEB13 C02DA292 DDED7A83 

Các octet đầu tiên xác định cấu trúc

  • 04 có nghĩa là không có nén
  • 03có nghĩa là có nén và chọn ydương
  • 02có nghĩa là có nén và chọn yâm

Bây giờ biến thành các tham số của OP;

pub:
04:
04:ce:24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:3f:ed: -->X
5a:50:ef:fb:cc:b7:49:62:16:62:9e:aa:d5:30:a8:a5  -->Y

octet đầu tiên 04có nghĩa là không có nén. Dòng đầu tiên là tọa độ X và dòng thứ hai là tọa độ Y của khóa chung của bạn.

Còn khóa riêng n thì sao? Nó chỉ là một vô hướng -integer- trong khoảng 0 <= n <= ℓ

private: 00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3e: 90: 57: 40: f4: bc

Do đó, số trên - không phải điểm - là khóa riêng của bạn.

Bạn cũng có thể sử dụng một số công cụ web để trích xuất thông tin này.

Lưu ý: vui lòng không để lộ khóa riêng của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.