เรากำลังพัฒนาแอปเพียร์ทูเพียร์แบบโอเพ่นซอร์ส มาเพออกแบบมาสำหรับผู้ใช้ที่มีประสบการณ์ด้านเทคนิคต่ำ (และไม่มีอีเมลหรือโทรศัพท์) เพื่อรวบรวมข้อมูลในสภาพแวดล้อมออฟไลน์ เรากำลังสร้างข้อมูลประจำตัวบนอุปกรณ์สำหรับแต่ละโครงการในฐานะคู่คีย์สาธารณะและส่วนตัวโดยใช้ libsodium crypto_sign_keypair
.
เพื่อรองรับการกู้คืนข้อมูลประจำตัวในกรณีที่อุปกรณ์สูญหายหรือเปลี่ยนไปใช้อุปกรณ์ใหม่ เราต้องการใช้คีย์หลักเดียวที่ใช้เป็น seed สำหรับคู่คีย์อื่นๆ ทั้งหมด ผู้ใช้จะจดรหัสนี้และป้อนด้วยตนเองเพื่อกู้คืนข้อมูลประจำตัว (คล้ายกับวิธีที่ Bitcoin ใช้รายการคำศัพท์ BEP-39 เพื่อสำรองข้อมูลรหัส 256 บิต)
ตามหลักการแล้ว เราจะใช้เมล็ดพันธุ์ 256 บิต ซึ่งเป็นสิ่งที่รองรับโดย libsodium's crypto_sign_seed_keypair
และให้เอนโทรปีมากมาย อย่างไรก็ตาม มีข้อจำกัดในการออกแบบ:
- รายการคำศัพท์ BEP-39 เป็นโซลูชันที่ดีในการอำนวยความสะดวกในการจดคีย์ และอาจจัดการได้หากจด 24 คำสำหรับคีย์ 256 บิต อย่างไรก็ตาม รองรับเพียง 10 ภาษาเท่านั้น และเรารองรับหลายภาษาที่ไม่มีคำศัพท์อยู่แล้ว รายการ (เช่น ไทย เขมร เวียดนาม)
- ผู้ใช้ของเราส่วนใหญ่ไม่สามารถเข้าถึงเครื่องพิมพ์และใช้งานอุปกรณ์พกพา ดังนั้นพวกเขาจึงไม่ใช่วิธีที่ง่ายสำหรับพวกเขาในการพิมพ์ข้อมูลสำรองหลักเป็นรหัส QR เป็นต้น
- การเข้ารหัสที่ดีที่สุดที่เราพบคือเลขฐาน 32 เนื่องจากจะหลีกเลี่ยงอักขระที่ไม่ชัดเจน อย่างไรก็ตาม คีย์ 256 บิตที่มี CRC 32 บิตจะต้องมีอักขระ 57 ตัวในเลขฐาน 32 ในแบบจำลองการออกแบบของเรา นี่เป็นสตริงแบบสุ่มจำนวนมาก (แม้จะแสดงเป็นกลุ่มอักขระ 5 ตัว) และเรากังวลว่าจะทำให้เกิดข้อผิดพลาดในการถอดความ
- เนื่องจากผู้ใช้จำนวนมากใช้ตัวอักษรที่ไม่ใช่ภาษาละติน เราอาจจำเป็นต้องแสดงรหัสเป็นตัวเลข (เช่นเลขอารบิค) เนื่องจากเป็นที่เข้าใจกันอย่างแพร่หลายมากขึ้น อย่างไรก็ตาม ตัวเลข 256 บิตคือ 77 หลัก ซึ่งยากที่จะจดหรือป้อนโดยไม่มีข้อผิดพลาด
เพื่อหลีกเลี่ยงข้อจำกัดเหล่านี้ คำถามของฉันคือว่า seed / master key แบบ 128 บิตจะให้เอนโทรปีเพียงพอสำหรับการรักษาความปลอดภัย "ดีพอ" หรือไม่ จดได้ง่ายขึ้น (30 อักขระฐาน 32 พร้อมตัวเลข CRC-16 หรือ 44)
ฉันเสนอให้ได้รับเมล็ด 256 บิต (สำหรับการสร้างคู่คีย์และรับคีย์ย่อย) โดยการแฮชเมล็ด 128 บิตด้วย Argon2 (ดู ลิโซเดียม ไพวอช).
ฉันรู้ว่าสิ่งนี้ทำให้เรามีเอนโทรปีเพียง 128 บิต แต่เนื่องจากมันถูกแฮชเป็น 256 บิตด้วย Argon2 จึงมีค่าใช้จ่ายสูงสำหรับการบังคับเดรัจฉาน
ฉันไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัย (ตอนนี้คุณอาจรวบรวมไว้แล้ว!) แต่คำถามของฉันคือว่าแนวคิดเกี่ยวกับคีย์หลัก / เมล็ดพันธุ์ 128 บิตนี้มีค่าเอนโทรปีเพียงพอที่จะทำให้การโจมตีแบบดุร้ายยาก / เป็นไปไม่ได้หรือไม่ เราไม่ได้มองหาการเข้ารหัสระดับ NSA แต่ก็เพียงพอแล้วที่จะป้องกันไม่ให้ผู้โจมตีที่ตั้งใจ (อาจได้รับการสนับสนุนจากรัฐ) ไม่ให้สามารถใช้กำลังดุร้ายได้
เป็นการประนีประนอมระหว่างความสามารถในการใช้งานและความปลอดภัย เราต้องการให้แอปใช้งานได้ง่ายและปลอดภัย และรักษาความปลอดภัยให้เพียงพอ และฉันไม่แน่ใจว่าจุดไหนที่สมดุลในแง่ของความยาวคีย์/เอนโทรปี