Score:2

ใช้คีย์ส่วนตัวเดียวกันสำหรับทั้ง X25519 และ ECDSA (ใช้ curve25519)

ธง ru
jjd

ฉันกำลังเขียนแอปพลิเคชันที่ต้องการทั้งการเข้ารหัส/ถอดรหัส และการลงนาม/การตรวจสอบ และฉันเลือก X25519 เป็นอัลกอริทึมข้อตกลงหลักซึ่งจะสร้างคีย์สำหรับการเข้ารหัส และ ECDSA เพื่อลงนามข้อความ

การสร้างคีย์: ฉันสร้างคีย์ส่วนตัว curve25519 จากตัวช่วยจำ (ดังนั้นฉันจึงมีคีย์ส่วนตัวแบบสุ่ม 32 ไบต์)

ตอนนี้ฉันมีอาร์เรย์ 32 ไบต์ ฉันต้องการใช้อาร์เรย์ไบต์อาร์เรย์นี้สำหรับทั้งการเข้ารหัสและการเซ็นชื่อ ปัญหาที่ฉันมีคือสำหรับ X25519 ฉันต้องใช้การบีบคีย์เพื่อให้ไพรเวตคีย์นี้ถูกต้องซึ่งมีลักษณะดังนี้:

คีย์ส่วนตัว[0] &= 248; // unset 3 bits ที่มีนัยสำคัญน้อยที่สุด
privateKey[31] &= 127 // unset บิตที่สำคัญที่สุด
privateKey[31] |= 64 // ตั้งค่าบิตที่มีนัยสำคัญรองลงมา

แต่สำหรับ ECDSA คีย์ต้องอยู่ในช่วง $[1, น]$โดยที่ N (สำหรับเส้นโค้ง 25519) เท่ากับ $2^{252}$ + ปัจจัยเล็กน้อย ดังนั้นฉันจึงต้องแปลงอาร์เรย์ 32 ไบต์เป็นตัวเลขที่เหมาะกับช่วงนี้

ฉันมีคำถามสองสามข้อ:

  • เหตุใดคีย์ส่วนตัว X25519 จึงไม่จำเป็นต้องพอดีกับช่วง $[1, น]$?
  • เหตุใดจึงไม่สำคัญที่จะใช้ฟังก์ชันการบีบคีย์ที่ใช้ใน X25519 กับคีย์ที่ใช้สำหรับ ECDSA
knaccc avatar
es flag
อย่าใช้คีย์ส่วนตัวเดียวกันโดยตรงสำหรับการเซ็นชื่อและการเข้ารหัส ใช้ HKDF-Expand บนคีย์หลักแบบสุ่ม 32 ไบต์เพื่อสร้างคีย์การเซ็นชื่อและการเข้ารหัสแยกกัน จากนั้นให้ห้องสมุดของคุณหนีบหรือลดขนาด mod N ด้วยวิธีใดก็ตามที่พวกเขาเห็นว่าจำเป็น
Maarten Bodewes avatar
in flag
สวัสดี jjd & ยินดีต้อนรับ ฉันได้ลบ Bouncy Castle / ส่วนการใช้งาน; นั่นคือสำหรับ [so] หรืออาจจะเป็น [codereview.se]; มันอยู่นอกหัวข้อที่นี่ โปรดอ่านซ้ำและสะสางคำถามของคุณก่อนที่จะโพสต์ ผู้ใช้ไม่ควรดำเนินการเช่น ตัวพิมพ์ใหญ่สำหรับคุณ
jjd avatar
ru flag
jjd
ขอบคุณ knaccc คำตอบของคุณมีประโยชน์!
jjd avatar
ru flag
jjd
ฉันจะทำตามกฎในครั้งต่อไป
kelalaka avatar
in flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ 1) [การสร้างคีย์สาธารณะสำหรับ Ed25519 กับ X25519](https://crypto.stackexchange.com/questions/76156/public-key-generation-for-ed25519-vs-x25519) 2) [ใช้คีย์ Ed25519 เดียวสำหรับการเข้ารหัส และลายเซ็น](https://crypto.stackexchange.com/q/37896/18298) 3) [ใช้คีย์ส่วนตัวเดียวกันสำหรับทั้ง X25519 และ ECDSA (ใช้ curve25519)](https://crypto.stackexchange.com/q/ 63732/18298)
jjd avatar
ru flag
jjd
ขอบคุณ!
Score:3
ธง gb

เหตุใดคีย์ส่วนตัว X25519 จึงไม่จำเป็นต้องพอดีกับช่วง $[1,N]$?

เมื่อยกเลิกการตั้งค่าบิตที่มีนัยสำคัญที่สุดและบิตที่มีนัยสำคัญน้อยที่สุดสามบิต คุณจะจำกัดคีย์ให้มีประสิทธิภาพเพียง 252 บิตเท่านั้น เมื่อคุณพูดว่า $N$ เป็น $2^{252}$ + ปัจจัยเล็ก ๆ คุณกำลังพูดถึงลำดับของ กลุ่มย่อย ใช้โดย x25519 ไม่ใช่ลำดับทั้งหมดของกลุ่มเส้นโค้ง กลุ่มย่อยนี้มีดัชนี (หรือปัจจัยร่วม) 8 การยกเลิกการตั้งค่าบิตล่างสามบิตบังคับให้ความลับเป็นทวีคูณของ 8 ซึ่งหมายความว่ามันจะอยู่ในกลุ่มย่อยลำดับไพรม์ขนาดใหญ่นี้

เหตุใดจึงไม่สำคัญที่จะใช้ฟังก์ชันการบีบคีย์ที่ใช้ใน X25519 กับคีย์ที่ใช้สำหรับ ECDSA

เท่าที่ทราบ Curve25519 ไม่ได้ใช้สำหรับ ECDSA คุณหมายถึง EdDSA (โดยเฉพาะ ed25519) ใช่ไหม

jjd avatar
ru flag
jjd
ขอบคุณสำหรับคำตอบ! คุณพูดถูก ฉันคิดว่า curve25519 สำหรับ ECDSA เป็นตัวเลือกที่ไม่ดีจากฝั่งของฉัน ฉันกำลังคิดที่จะใช้ EdDSA ในตอนนี้ ฉันรู้ว่า EdDSA และ X25519 ใช้เส้นโค้งที่แตกต่างกัน แต่พวกเขากำลังใช้ฟังก์ชันการหนีบคีย์เดียวกันอยู่ ปลอดภัยไหมที่จะใช้คีย์ส่วนตัวเดียวกัน (แต่คีย์สาธารณะต่างกัน) สำหรับทั้ง EdDSA และ X25519 หรือจะปลอดภัยกว่าไหมถ้าฉันได้รับคีย์ที่แตกต่างกันสองคีย์โดยใช้ 32 ไบต์แบบสุ่มของฉัน
meshcollider avatar
gb flag
คุณควรได้รับสองคีย์แยกกันอย่างแน่นอน การใช้คีย์ซ้ำมักจะมีความยุ่งยากด้านความปลอดภัยที่คาดไม่ถึง Btw โปรดอย่าลืมยอมรับและโหวตคำตอบหากช่วยได้!
jjd avatar
ru flag
jjd
เพิ่งทำ ฉันต้องการชื่อเสียงอย่างน้อย 15 รายการเพื่อโหวต ขอบคุณสำหรับคำตอบ!
dave_thompson_085 avatar
cn flag
@jjd: จริงๆ แล้ว Ed25519 (อินสแตนซ์ยอดนิยมของ EdDSA) และ X25519 ใช้ _curve_ เดียวกันในทางคณิตศาสตร์ แต่เป็นตัวแทนที่แตกต่างกัน -- X25519 ใช้แบบฟอร์ม Montgomery และ Ed25519 ใช้แบบฟอร์ม Edwards และแบบฟอร์มเหล่านี้มีค่าสัมประสิทธิ์และการคำนวณต่างกัน แต่เป็นสิ่งที่นักคณิตศาสตร์ โทรเทียบเท่า birationallyดู https://datatracker.ietf.org/doc/html/rfc7748

โพสต์คำตอบ

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