Score:2

Curve448 - วัสดุหลัก Ed448 สามารถนำมาใช้ซ้ำสำหรับ X448 ได้หรือไม่

ธง in

ขณะนี้ฉันกำลังเผชิญกับสถานการณ์ที่มีคู่คีย์ Ed448 (คีย์ส่วนตัว + คีย์สาธารณะ) และระบบควรได้รับการขยายโดยการดำเนินการ Diffie-Hellman (ECDH) ก่อนอื่นให้ฉันสรุปสิ่งที่ฉันเข้าใจจนถึงตอนนี้

เอ็ด448: เป็นอัลกอริธึมลายเซ็นดิจิทัลบน edwards448

X448: ฟังก์ชัน Diffie-Hellman สร้างสำหรับ Curve448 หรือไม่

Curve448: เป็นเส้นโค้งวงรีในรูปแบบ Montgomery ตามที่ระบุไว้ใน RFC7748.

เอ็ดเวิร์ด448: เป็นเส้นโค้งวงรีซึ่งสัมพันธ์กับ Curve448 โดยแผนที่ระบุใน RFC7748.

สำหรับ Curve25519 ฉันอ่านไฟล์ Curve25519 มากกว่า Ed25519 สำหรับการแลกเปลี่ยนคีย์ ทำไม และสำหรับฉันดูเหมือนว่าเป็นไปได้ที่จะแปลงรหัสสาธารณะ Ed25519 ที่มีอยู่เป็นรหัส X25519 โดยใช้แผนที่ที่กำหนด อย่างใดฉันไม่คุ้นเคยกับคณิตศาสตร์ทั้งหมดที่ใช้ที่นี่ หลังจากอ่านเพิ่มเติมฉันพบ "ความเท่าเทียมกันแบบสองเหตุผล" หมายถึงอะไรในบริบทการเข้ารหัส ซึ่งให้ข้อมูลเชิงลึกเพิ่มเติมแก่ฉัน จากนั้นฉันก็อ่าน RFC7748 อีกครั้งและเห็นว่าการสมมูลแบบคู่ขนานนั้นเป็นจริงสำหรับ Curve448 เช่นกัน นอกจากนี้ยังมีคำจำกัดความ "edwards448" ซึ่งแสดงแผนที่ระหว่างจุดโค้ง Montgomery และ Edwards ด้วย แผนที่ที่จะใช้ถูกกำหนดเป็น:

$$ (u, v) = (\frac{y^2}{x^2}, \frac{(2 - x^2 - y^2)*y}{x^3}) $$

หากฉันเข้าใจการอ้างอิงข้างต้นอย่างถูกต้อง เราควรจะแปลงรหัสสาธารณะเป็นพิกัดที่จะใช้ในฟังก์ชัน X448 ได้ ยกเว้นในกรณีที่ $x$ จากสมการข้างต้นเป็น 0 จึงไม่สามารถใช้แผนที่ได้และไม่มีการแปลงใดๆ นอกจากนี้บทที่เกี่ยวข้องกับ Curve448 ใน Elliptic Curve Cryptographx Ecc นำฉันไปสู่ทิศทางเดียวกันที่อาจเป็นไปได้ที่จะเปลี่ยนเนื้อหาสำคัญที่มีอยู่แล้วนำมาใช้ใหม่ในภายหลังสำหรับ X448 หากฉันเข้าใจถูกต้อง คีย์ส่วนตัวใน ECC จะเป็นจำนวนเต็มแทนที่จะเป็น "จุดโค้ง"

ตอนนี้ฉันอยากรู้ว่ามันเป็นไปได้จริงๆ ไหมที่จะแปลงคู่คีย์ที่มีอยู่ให้สามารถนำมาใช้ซ้ำได้สำหรับ ECDH และทำอย่างไรหรือหากจำเป็นต้อง "แนะนำ" คู่คีย์ที่สองสำหรับ ECDH เท่านั้น ดังนั้นฉันจึงขอความช่วยเหลือเนื่องจากฉันยังใหม่กับหัวข้อนี้

Score:4
ธง es
  1. คุณไม่จำเป็นต้องแปลงคีย์สาธารณะของ Edwards448 เป็นคีย์สาธารณะ Curve448 ที่เทียบเท่ากับสองส่วนเพื่อทำ ECDH คุณสามารถติดกับ Edwards448 จะมีประสิทธิภาพเพิ่มขึ้นหากคุณใช้ Curve448 แต่ขึ้นอยู่กับการใช้งานของคุณ ประสิทธิภาพที่เพิ่มขึ้นนี้อาจถูกชดเชยอย่างมากจากการแปลงที่ผู้ตรวจสอบต้องทำเพื่อรับคีย์สาธารณะ Curve448 จากคีย์สาธารณะ Edwards448 ของคุณ คุณจะต้องใช้ฟังก์ชัน "การคูณสเกลาร์" ของไลบรารี Edwards448 EC ของคุณเพื่อดำเนินการ ECDH

  2. คีย์ส่วนตัว EC คือ "สเกลาร์" ซึ่งหมายถึงจำนวนเต็มบวกที่น้อยกว่าขนาดกลุ่มของจุดกำเนิดบนเส้นโค้งนั้น คีย์สาธารณะคือจุดบนเส้นโค้ง และเป็นคู่ของพิกัด "องค์ประกอบฟิลด์" องค์ประกอบฟิลด์เป็นจำนวนเต็มบวกที่น้อยกว่าจำนวนเฉพาะ $p = 2^{448} - 2^{224} - 1$.

  3. หากคุณตัดสินใจที่จะแปลงจาก Edwards448 เป็น Curve448 คะแนนเหล่านั้นจะใช้รหัสส่วนตัวแบบสเกลาร์เดียวกันโปรดทราบว่า เนื่องจากวิธีที่ X448 ใช้เฉพาะ Curve448 x-coordinate ระหว่างข้อตกลงคีย์ตัวแปรฐานสเกลาร์ การแมปจะเป็นจุดที่ Edwards448 ทั้งคู่ $พี$ และ $I-P$ จะจับคู่กับข้อตกลงหลัก X448 จุด Curve448 เดียวกัน (โดยที่ $I$ คือจุด Edwards448 ที่ระยะอนันต์) โชคดีสำหรับคุณ คุณกำลังแมปจาก Edwards448 ไปยัง Curve448 ซึ่งหมายความว่าคุณไม่พบความคลุมเครือ

  4. การแปลงจาก Edwards448 เป็น Curve448 นั้นง่ายมาก: $$\texttt{curve448}_{x-coord} = \left(\frac{\texttt{ed448}_{y-coord}}{\texttt{ed448}_{x-coord}}\right)^2 $$ โปรดทราบว่า "การหาร" ทำได้โดยการคูณด้วยผกผันการคูณแบบโมดูลาร์ ไลบรารี EC ของคุณควรมีฟังก์ชันนี้ให้คุณ การดำเนินการเสร็จสิ้น $mod\ p$.

  5. โปรดทราบว่า Ed448 จะเริ่มต้นด้วยไพรเวตคีย์ 57 ไบต์แบบ 'ดิบ' แฮชด้วย SHAKE256 ล้างไบต์ที่มีนัยสำคัญที่สุด บังคับให้บิตที่มีนัยสำคัญที่สุดของไบต์ที่มีนัยสำคัญรองลงมาเป็น 1 และล้างไบต์ที่มีนัยสำคัญน้อยที่สุด 2 ไบต์ บิตที่มีนัยสำคัญน้อยที่สุด ดังนั้นจึงเป็นคีย์ส่วนตัวดิบ Ed448 เวอร์ชันแฮชและแก้ไขที่คุณต้องใช้เหมือนกันกับ Curve448 คีย์ Curve448 มีขนาด 56 ไบต์ และปลอดภัยที่จะแบ่งไบต์ที่สำคัญที่สุดของคีย์ Edwards448 ที่แฮชและแก้ไขแล้ว 57 ไบต์ออก เนื่องจากคีย์ Edwards448 นั้นจะมีเลขศูนย์ในไบต์ที่สำคัญที่สุดเสมอ โปรดทราบว่าเนื่องจากองค์ประกอบของฟิลด์ทั้งหมดเป็นแบบ little-endian ดังนั้น "ไบต์ที่มีนัยสำคัญที่สุด" จึงเป็นไบต์สุดท้ายในอาร์เรย์ไบต์

  6. เป็นที่น่าสนใจที่จะสังเกตว่าการใช้ BouncyCastle X448 ดำเนินการคูณสเกลาร์กับจุดฐาน Curve448 โดยขอให้การใช้งาน BouncyCastle Ed448 ดำเนินการคูณสเกลาร์ของสเกลาร์เดียวกันกับจุดฐาน Ed448 จากนั้น BouncyCastle จะแปลงผลลัพธ์กลับเป็นจุด Curve448 ที่เทียบเท่าโดยใช้สูตรเดียวกับที่ระบุไว้ในจุดที่ 4 ด้านบน ดูรหัส ที่นี่.

tr flag
ฉันไม่คิดว่า (4) ถูกต้อง; นั่นจะเป็น "แผนที่ปกติ" แต่ edwards448 เป็น 4-isogeny ดังที่ OP กล่าวถึงมันควรเป็น $u=y^2/x^2$
knaccc avatar
es flag
@Conrado ขอบคุณ คุณพูดถูก ฉันอ่าน RFC7748 ผิด ตามที่คุณระบุไว้ ตัวแปร Edwards ของ Curve448 ที่ใช้สูตรเก่าของฉันไม่เหมือนกับการจับคู่ที่จำเป็นสำหรับ Edwards448 ฉันได้แก้ไขคำตอบแล้วและเขียนโค้ดเพื่อตรวจสอบคำตอบอีกครั้ง
in flag
@knaccc ขอบคุณสำหรับการตอบกลับของคุณ ฉันมีคำถามที่เกี่ยวข้องกับ (5) ความเข้าใจของฉันถูกต้องหรือไม่ที่ไม่สามารถใช้คีย์ส่วนตัวของคู่คีย์ที่มีอยู่สำหรับ X448 ได้โดยตรง แต่แทนที่จะใช้อัลกอริทึมที่กล่าวถึงใน [RFC8032](https://datatracker.ietf.org/doc/html/rfc8032#section-5.2.5) จนถึงและรวมถึงขั้นตอนที่ 3 (ไม่รวมการคูณ) เพื่อรับความลับ สเกลาร์? ขั้นตอนแรกสำหรับฉันเหมือนกับใน [RFC7748](https://datatracker.ietf.org/doc/html/rfc7748#section-5) คุณต้องการพูดสิ่งนี้ใน (5) หรือไม่?
knaccc avatar
es flag
@dbog ใช่ ถูกต้อง สิ่งที่ฉันอธิบายไว้ในจุดที่ 5 คือสิ่งที่อธิบายไว้ในขั้นตอนที่ 1-3 ของหัวข้อ 5.2.5 ของ RFC8032 นั่นคือคีย์ส่วนตัวที่คุณใช้สำหรับ X448 ฉันไม่เข้าใจโดยเฉพาะว่าคุณหมายถึงอะไรใน RFC7748 - คุณช่วยอธิบายได้ไหม
in flag
@knaccc ขอบคุณสำหรับการตอบสนองที่รวดเร็ว ใน RFC7748 ระบุไว้ในส่วนที่ 5: "ถือว่าสเกลาร์เป็นไบต์ที่สร้างขึ้นแบบสุ่ม.... ในทำนองเดียวกัน สำหรับ X448 ให้ตั้งค่าบิตที่มีนัยสำคัญน้อยที่สุดสองบิตของไบต์แรกเป็น 0 และบิตที่มีนัยสำคัญที่สุดของไบต์สุดท้ายเป็น 1 ซึ่งหมายความว่าจำนวนเต็มที่ได้คือ ของแบบฟอร์ม 2^447 บวกสี่เท่าของค่าระหว่าง 0 ถึง 2^445 - 1 (รวม)"
knaccc avatar
es flag
ใช่ ข้อตกลงคีย์ X448 ใช้คีย์ส่วนตัวดิบที่คุณให้ และทำ `&= 0xFC` ที่ไบต์แรกและ `|= 0x80` ที่ไบต์สุดท้าย เนื่องจากสิ่งนี้ได้ดำเนินการกับคีย์ส่วนตัว Ed448 ดิบแล้วในระหว่างขั้นตอนที่ 1-3 ของ 5.2.5 ของ RFC8032 ตามที่อธิบายไว้ในจุดที่ 5 ข้างต้น คีย์ Ed448 ที่แฮชและเปลี่ยนแปลงที่คุณใช้สำหรับ X448 จะไม่ถูกเปลี่ยนแปลงโดย X448 หนีบและจะเข้ากันได้
in flag
@knacc ขอบคุณมาก! สิ่งนี้ตอบคำถามของฉัน :)

โพสต์คำตอบ

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