Score:2

มันไม่ปลอดภัยหรือไม่ที่จะสร้าง nonce โดยใช้ตัวสร้างตัวเลขสุ่มและอัลกอริทึมการแฮชด้วยรหัสลับเช่น HMAC

ธง ag

ฉันกำลังสร้างโปรเจ็กต์บนไมโครคอนโทรลเลอร์ Arduino Mega และฉันต้องการตัวสร้าง nonce สำหรับการแลกเปลี่ยนการตอบสนองต่อความท้าทาย แต่ฉันไม่พบตัวกำเนิดสตริงที่เป็นตัวอักษรและตัวเลข จากนั้นฉันก็เกิดความคิดที่จะทำโดยใช้ สุ่ม () ฟังก์ชันที่สร้าง int แบบสุ่มในขีดจำกัดที่คุณให้และแฮชจำนวนเต็มนั้นด้วย HMAC โดยใช้รหัสลับอื่น (รหัสที่สามารถสร้างขึ้นอัตโนมัติเมื่อเริ่มต้นเนื่องจากไม่จำเป็นต้องสอดคล้องกัน)

วิธีการนี้ทำให้ nonce ของฉันปลอดภัยน้อยลงหรือไม่?

kelalaka avatar
in flag
ใช้นี้กว่า SHA256? https://www.codeproject.com/Articles/5311070/A-True-Random-Number-Generator-in-Arduino-AVR-ATme
krystof18 avatar
ag flag
ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณพูด ฉันควรใช้ SHA256 เพื่อแฮชค่าสุ่มแทนหรือไม่ ฉันใช้ HMAC เพราะฉันจะใช้ไลบรารีนั้นอยู่แล้ว และฉันต้องทำให้โปรแกรมมีขนาดเล็กที่สุดเท่าที่จะทำได้
kelalaka avatar
in flag
ต้องใช้ HMAC กับฟังก์ชันแฮชที่ควรมีให้ใช้งาน หรือใช้ HMAC ตามที่คุณต้องการ เนื่องจากได้รับการออกแบบมาให้เป็น PRF
krystof18 avatar
ag flag
คุณพูดถูก ฉันมี SHA256 ในไลบรารีเดียวกันนั้น ข้อดีของการใช้ SHA256 บน HMAC คืออะไร ฉันเดาว่ามันจะเร็วกว่าการคำนวณ nonce ใช่ไหม
kelalaka avatar
in flag
สำหรับคุณ HMAC คำนวณ SHA-256 สองเท่า และคุณไม่จำเป็นต้องแฮชคีย์ (บางครั้งเรียกว่า Keyed MAC แต่จริง ๆ แล้ว HMAC เป็นเทคนิคสำหรับการสร้างกลุ่มฟังก์ชันสุ่มเทียม (PRFs)) SHA-256 ควรจะเพียงพอสำหรับ nonces
Manish Adhikari avatar
us flag
ในการออกแบบของคุณ ส่วนสำคัญที่กำหนดความปลอดภัยของคุณคือตัวสร้างตัวเลขสุ่ม จะต้องเป็นตัวสร้างตัวเลขสุ่มที่ปลอดภัยทั้งสำหรับการสร้างคีย์ int ที่ใช้ถัดไปสามารถคาดเดาได้ แต่ต้องไม่ทำซ้ำเพื่อป้องกันการโจมตีซ้ำ
Score:2
ธง fr

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

คุณสามารถใช้ HMAC กับสิ่งนี้ได้ และสำหรับฟังก์ชันแฮชที่จะใช้กับมัน ฉันขอแนะนำ SHA-256 อย่างไรก็ตาม ฉันไม่แนะนำให้สร้างมูลค่าให้กับ HMAC โดยใช้ สุ่ม เพราะนั่นอาจซ้ำรอยและ nonce ของคุณก็จะเป็นเช่นนั้น โดยทั่วไป คุณไม่สามารถพึ่งพาคุณภาพของ PRNG ในมาตรฐาน C และ POSIX ได้ คุณสามารถใช้ตัวนับที่เพิ่มขึ้นอย่างซ้ำซากจำเจแทน ซึ่งจะทำให้มั่นใจได้ว่าจะไม่เกิดซ้ำ แต่คุณจะต้องมีวิธีที่จะคงตัวนับระหว่างการใช้งาน

krystof18 avatar
ag flag
ปัญหาเกี่ยวกับตัวนับคือมีความเป็นไปได้ที่ไมโครคอนโทรลเลอร์จะสูญเสียพลังงานและตัวนับจะรีเซ็ตแต่ฉันสามารถใช้ RTC ภายนอกกับแบตเตอรี่แยกต่างหากได้ ซึ่งจะทำให้มั่นใจได้ว่าจะไม่เกิดซ้ำอย่างน้อยเป็นเวลาสองสามปี เป็นความคิดที่ไม่ดีหรือไม่?
Maarten Bodewes avatar
in flag
นอกจากนี้ยังมี EEPROM ซึ่งเป็นหน่วยความจำถาวร ปัญหาคือมันจะมีจำนวนจำกัดในการเขียน อย่างไรก็ตาม อาจเป็นไปได้ที่จะเขียนตัวนับตามลำดับสำหรับการเริ่มต้นแต่ละครั้ง แล้วมีตัวนับในหน่วยความจำแยกต่างหาก แค่คิดก็ดังแล้วนี่
Score:2
ธง cn

สุ่ม () เป็นขยะ ดูแหล่งที่มาบางส่วน ที่นี่.

วิธีที่ดีที่สุดในการสร้าง nonces คือการใช้ตัวสร้างตัวเลขสุ่มจริง ๆ เว้นแต่คุณต้องการมากกว่า 10,000 nonces ต่อวินาที ซึ่งไม่น่าเป็นไปได้ในสถานการณ์ของไมโครคอนโทรลเลอร์ คุณสามารถทำได้โดยไม่ต้องใช้ฮาร์ดแวร์เพิ่มเติมโดยใช้ ห้องสมุดเอนโทรปี Arduino. ห้องสมุดใช้การกระวนกระวายใจตามธรรมชาติระหว่างนาฬิกาของ AVR และตัวจับเวลาสุนัขเฝ้าบ้าน นี่เป็นส่วนที่ได้รับการวิจัยอย่างดีเกี่ยวกับการออกแบบ TRNG ที่ใช้กันทั่วไปในออสซิลเลเตอร์แบบวงแหวน หรือม้วนตัวแปรของคุณเอง (ไม่ใช่เรื่องยากหากคุณตรวจสอบรหัสต้นฉบับ)

มันไม่เร็วมาก (64 บิต/วินาที) แต่มันจะให้ค่า 96 บิตแบบสุ่มอย่างแท้จริงในเวลาน้อยกว่าสองวินาที ด้วยวิธีนี้คุณไม่จำเป็นต้องติดตาม nonce ที่ใช้แล้ว และเป็นหลักฐานการรีบูต

Maarten Bodewes avatar
in flag
เมื่อคุณมี 96 บิตแล้ว คุณสามารถใช้มันเพื่อ seed CSPRNG ซึ่งโดยทั่วไปควรจะเร็วกว่ามาก พอลอาจจะคัดค้านว่า TRNG นั้นปลอดภัยกว่า แต่สำหรับการใช้งานจริง ฉันคิดว่าโดยทั่วไปแล้ว CSPRNG ที่เพาะมาอย่างดีนั้นเป็นหนทางข้างหน้า
Paul Uszak avatar
cn flag
Paul sez ว่ารหัสสตรีมต่อเนื่องไม่ใช่ nonce ซึ่งเป็นคำถาม
Maarten Bodewes avatar
in flag
ไม่มีใครต้องการ nonce *single* ดังนั้นแม้ว่าจะเป็นกรณีนี้ แต่ฉันเดาว่ากรณีการใช้งานคือการสร้าง nonce หลายรายการ และนั่นต้องใช้ RNG หากคุณต้องการให้มันสุ่ม

โพสต์คำตอบ

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