รับองค์ประกอบ x และ y ของคีย์สาธารณะ ec โดยใช้ openssl


12

ฉันกำลังสร้าง KeyPair สำหรับECCจากส่วนโค้ง 'secp128r1' โดยใช้ openssl

ขั้นตอนที่ฉันติดตาม:

  • ก่อนอื่นฉันสร้างรหัสส่วนตัวโดยใช้คำสั่ง

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

  • จากนั้นฉันดูคีย์สาธารณะที่เกี่ยวข้องโดยใช้คำสั่ง

    openssl ec -in private.pem - ข้อความ -noout

    ซึ่งแสดงผลลัพธ์เป็น:

    อ่านรหัส EC

    รหัสส่วนตัว: (128 บิต) รหัส
    ส่วนตัว:
    00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3c: 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

ฉันต้องการส่วนประกอบ x และ y อย่างชัดเจนจากกุญแจสาธารณะที่สร้างขึ้นที่นี่โปรดใครช่วยแนะนำวิธีที่ถูกต้องในการทำเช่นนี้?
กุญแจสาธารณะด้านบนยาว 264 บิตดังนั้นจึงไม่สามารถรับ (/ แยก) ได้เหมือน
ขอบคุณ


5
คู่ของsecurity.stackexchange.com/questions/60926/… ; ต่อtools.ietf.org/html/rfc5480#section-2.2 octet แรก (04) หมายถึงไม่มีการบีบอัดซึ่งตามด้วย X, Y ประสานงานแต่ละขนาดของเขตข้อมูลที่ถูกปัดเศษเป็น octet ที่นี่ 16 octet
dave_thompson_085

2
@dav_Thompson - ฉันคิดว่าคุณควรให้คำตอบ มันเป็นคำถามที่ดีและข้อมูลที่ดี (และในเว็บไซต์ที่ถูกต้อง !!!) และคุณควรได้รับประโยชน์จากคำตอบที่ดี
jww

คำตอบ:


1

ก่อนอื่นsecp128r1ล้าสมัยแล้ว ใช้เส้นโค้งที่ให้ความปลอดภัยที่ดีขึ้นสำหรับมาตรฐานปัจจุบัน ดูการปกป้องที่ปลอดภัยโดย Daniel J. Bernstein และ Tanja Lange

รูปไข่เส้นโค้งที่กำหนดไว้ที่สนามขนาดQและองค์ประกอบ -point- มีสองพิกัดทุกXและY Secp128r1 Elliptic Curve มี 2 128 -2 97 -1 ขนาดℓคือจำนวนจุดที่น้อยกว่า 2 ^ 128 ซึ่งหมายความว่าเราต้องการตัวแทน 128- บิต

พับลิกคีย์ซึ่งเป็นจุดบนเส้นโค้งมีสองพิกัดดังนั้นเราต้องเก็บสอง 128 บิต

ถ้าเราดูสมการของเส้นโค้งรูปไข่Y 2 = X 3 + aX + bที่ไหน

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

ถ้าเรารู้XจากสมการเราสามารถหาYได้ เนื่องจากเรากำลังทำงานในทุ่งYสามารถมีรากที่สองได้มากที่สุด Y 2จะมีyหรือ-yเป็นรากที่สอง ความรู้นี้สามารถนำมาใช้ในการบีบอัดเป็นตัวแทนของจุดและเป็นที่เรียกว่าการบีบอัดจุด เพียงแค่xประสานงานและหนึ่งบิตเพื่อเลือกYหรือ-y ตอนนี้ดูที่จุดฐาน (ดูคำแนะนำ Certicom )

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

octet แรกกำหนดโครงสร้าง

  • 04 หมายความว่าไม่มีการบีบอัด
  • 03หมายความว่ามีการบีบอัดและเลือกyเป็นค่าบวก
  • 02หมายความว่ามีการบีบอัดและเลือกyเป็นค่าลบ

ตอนนี้เปลี่ยนเป็นพารามิเตอร์ของ 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 แรก04หมายถึงไม่มีการบีบอัด บรรทัดแรกคือพิกัดXและบรรทัดที่สองคือพิกัดYของคีย์สาธารณะของคุณ

คีย์ส่วนตัวnคืออะไร? มันเป็นเพียงเซนต์คิตส์และเนวิสระหว่าง 0 <= n <= ℓ

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

ดังนั้นหมายเลขด้านบน - ไม่ใช่จุด - เป็นกุญแจส่วนตัวของคุณ

คุณยังสามารถใช้เครื่องมือเว็บบางอย่างเพื่อดึงข้อมูลนี้

หมายเหตุ: โปรดอย่าเปิดเผยรหัสส่วนตัวของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.