Score:1

วิธีตรวจสอบความปลอดภัยในการสุ่ม k หาก k เป็นพารามิเตอร์อินพุตของฟังก์ชันการสร้างลายเซ็น ECDSA โดยใช้ opensl-fips

ธง pe

ตามที่ผมเข้าใจ

1. ความปลอดภัยถูกระบุเป็นบิตตาม https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf

2.ความปลอดภัยจะขึ้นอยู่กับความยาวของอินพุตเอนโทรปีเมื่อสร้างตัวเลขสุ่ม

ดังนั้น ในฟังก์ชันการสร้างลายเซ็น ถ้า k สุ่มเป็นพารามิเตอร์อินพุต (ไม่สร้าง k สุ่มในฟังก์ชันนี้)

จะตรวจสอบ k ที่ถูกต้องได้อย่างไร? ความปลอดภัยของสุ่ม k?

1 ตรวจสอบเฉพาะจำนวนบิตของการสุ่ม k ?

2, การทดสอบอื่น ๆ ?

ขอบคุณ

Score:4
ธง ng

ใน คำจำกัดความมาตรฐานของ ECDSA, โนเนซ $k$ ควรเป็นจำนวนเต็มสุ่มแบบลับเฉพาะในช่วง $[1,น)$, ที่ไหน $n$ เป็นลำดับเฉพาะของเครื่องกำเนิดไฟฟ้า การวิเคราะห์คู่ข้อความ/ลายเซ็น เมื่อ $k$ เป็นที่รู้จักหรือมีข้อบกพร่อง (เช่น ความเอนเอียงหรือแนวโน้มที่จะทำซ้ำ) อาจทำให้คีย์ส่วนตัวรั่วไหลได้ ดังนั้นการสร้าง $k$ เรื่องความปลอดภัย

เป็นไปไม่ได้สำหรับการนำการสร้างลายเซ็น ECDSA ไปใช้เพื่อตรวจสอบว่าค่าของ an ป้อนข้อมูล $k$ ได้รับเหมาะสำหรับการใช้งานที่ปลอดภัย ตามที่กำหนด ใน คำจำกัดความมาตรฐานของลายเซ็น ECDSAเนื่องจากไม่มีวิธีใดที่จะบอกได้จากค่าว่าเป็นความลับหรือไม่ ซึ่งเป็นสิ่งสำคัญที่สุด $k$ ควรมีไว้ครอบครอง นอกจากนี้ยังเป็นไปไม่ได้ที่จะประเมินว่าได้รับหรือไม่ $k$ เป็นการสุ่มตามที่คำถามแนะนำ อย่างน้อยที่สุดเว้นแต่เราจะรู้ว่ามันถูกผลิตขึ้นอย่างไร และอย่างไรก็ตาม ในบริบท การสุ่มเป็นเรื่องรองลงมาจากการเป็นความลับ

ดังนั้นแทนที่จะยอมรับ $k$ เป็นอินพุต ขั้นตอนทั่วไปคือการสร้างการสุ่ม $k$ ส่วนหนึ่งของการดำเนินการสร้างลายเซ็น ECDSA ขั้นตอนพื้นฐาน (หากไม่จำเป็นต้องแนะนำ) คือการวาด $\lceil\log_2(n)\rceil$ บิตจาก RNG ที่แข็งแกร่งในการเข้ารหัส (เช่น /dev/urandom) และตีความบิตเหล่านี้เป็นจำนวนเต็ม $k$ ต่อเช่น big-endian Convention จนกว่าจะมีขึ้น $0<k<n$ (ซึ่งสำหรับหลายๆ $n$ ใช้ในทางปฏิบัติเป็นหลักเสมอเพราะ $n$ ต่ำกว่ายกกำลังสอง) ฉันไม่สนใจขั้นตอนพื้นฐานนี้ในคำตอบที่เหลือ (แม้ว่าสิ่งนี้ ความคิดเห็น แสดงว่าเป็นเนื้อหาของคำถาม)

เป็นไปได้ที่จะแก้ไขขั้นตอนการสร้างลายเซ็น ECDSA เพื่อใช้งานได้อย่างปลอดภัย $k$ มันได้รับ แทน $k$, รุ่นลายเซ็นสามารถใช้ได้ $k':=f(d_U,H,k)$ ที่ไหน $d_U$ เป็นคีย์ส่วนตัว $H$ คือแฮชของข้อความที่จะลงนาม และ $f$ เป็นฟังก์ชันที่ได้มาจากคีย์สาธารณะโดยใช้ $d_U$ เป็นคีย์หลักโดยมีเอาต์พุตใกล้เคียงกับเครื่องแบบใน $[1,น)$ ที่ไหน $n$ เป็นคำสั่งของเครื่องกำเนิดไฟฟ้า การปฏิบัติดังกล่าวไม่ได้ทำลายความเข้ากันได้แต่อย่างใด และตรวจพบได้กับทั้งสองอย่างเท่านั้น $k$ และคีย์ส่วนตัว (เหนือข้อมูลสาธารณะอื่นๆ) สำหรับ $n$ สูงสุด 384 บิตเป็นอย่างน้อย ฟังก์ชันที่เหมาะสมจะเป็น $$k':=1+(\operatorname{HMAC-SHA-512}(d_U,H\mathbin\|k)\bmod(n-1))$$

หมายเหตุ: ตามทฤษฎีแล้ว ขั้นตอนการลงนามมีจำนวน "กลับสู่ขั้นตอนที่ 1" ซึ่งจะเรียกใช้อีกครั้ง $f$ และคาดหวังที่แตกต่างออกไป $k'$และจะไม่ได้รับสิ่งนั้นอย่างไรก็ตามนั่นเป็นเรื่องที่สงสัยเนื่องจากมีความเป็นไปได้ที่จะเรียกใช้ซ้ำ $f$ เป็นสิ่งที่เล็กน้อยมาก และไม่สามารถทดสอบได้แม้ว่าจะมีการควบคุมก็ตาม $d_U$, $H$ และ $k$, สำหรับการแก้ไขที่เหมาะสมไม่ใช่เนื้อร้าย $f$. หากความเป็นไปได้นั้นป้องกันตรายางไม่ให้โดนกระดาษ เราสามารถใช้ $k'=f(d_U,H\oplus j,k)$ ที่ไหน $เจ$ คือจำนวนการเรียกใช้ก่อนหน้าของ $f$ ในลายเซ็น

หมายเหตุ: เมื่อใดและหากไม่มีข้อเสียเปรียบในการระบุกำหนดลายเซ็น เราสามารถเพิกเฉยต่ออินพุตได้ $k$. เมื่อพิจารณาถึงการโจมตีช่องทางด้านข้าง (แต่ไม่ใช่ทั้งหมด) ที่อาจปลอดภัยกว่า โดยเฉพาะอย่างยิ่งการโจมตีจากศัตรูที่รู้และควบคุมได้ $k$.

Andy avatar
pe flag
ก่อนอื่น ขอบคุณมากสำหรับคำอธิบายของคุณ ! ดังนั้น ถ้า k มาจาก TRNG (en.wikipedia.org/wiki/Hardware_random_number_generator) ให้รู้ว่ามันถูกสร้างขึ้นมาอย่างไร ทางออกที่ 1 ของฉันยังเป็นไปได้หรือไม่? ซึ่งเป็นการตรวจสอบจำนวนบิตของ k เท่านั้น สมมติว่า k (จาก TRNG) เป็นความลับและสุ่ม
fgrieu avatar
ng flag
@Andy: ฉันได้ขยายวิธีพื้นฐาน (หากไม่สามารถแนะนำได้) เพื่อสร้าง $k$ ใน ECDSA ดูคำตอบในย่อหน้าที่สาม โปรดทราบว่าหากคุณใช้ลายเซ็น ECDSA ที่มีอยู่ มีแนวโน้มว่าจะสร้าง $k$ (และหากใส่ใจเรื่องความปลอดภัย อาจใช้เทคนิคที่คล้ายกับเทคนิคที่ฉันอธิบายไว้ในย่อหน้าที่สี่) ระวังว่ามีปัญหามากมายในการปรับใช้การสร้างลายเซ็น ECDSA อย่างปลอดภัย (ช่องทางด้านข้าง การโจมตีข้อบกพร่อง..) และความรู้ทั่วไปก็คือควรปล่อยให้โปรแกรมเมอร์ด้านความปลอดภัยที่มีประสบการณ์

โพสต์คำตอบ

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