สมมติว่าฉันมีรหัสผ่าน และปลอดภัย แต่เป็นสตริงอักขระ 10 ตัว
หากเราถือว่าอักขระทั้ง 10 ตัวเป็น ASCII (ไม่ขยาย) คุณจะได้รับสูงสุด พื้นที่การค้นหา 64 บิต สำหรับผู้โจมตี ซึ่งหมายความว่าคุณกำลังใช้คีย์ 64 บิตสำหรับ AES-128 อย่างมีประสิทธิภาพ กฎก็คือ
- ไม่เพียงแต่ขนาดคีย์เท่านั้น แต่ยังรวมถึงเอนโทรปีของแหล่งที่มาของคีย์ด้วย
วิธีทั่วไปคือการสร้าง 128 บิตแบบสุ่มสำหรับคีย์ AES-128 นี่เป็นเรื่องง่ายถ้าคุณใช้การแลกเปลี่ยนคีย์เช่น DH (ในตอนท้ายแฮชด้วย - มันรั่วไหลของ Legendre) หรือ ECDH (แฮชเช่นกัน คะแนนจะไม่สุ่มเหมือนกัน)
หากคุณใช้รหัสผ่าน คุณต้องมีแหล่งที่มาของเอนโทรปีที่ดีสำหรับรหัสผ่านของคุณด้วย ใช้ ไดเวอไวร์ ด้วย 10 คำเพื่อรับเอนโทรปี 128 บิต เมื่อคุณมีสิ่งนี้แล้ว มันไม่สำคัญเลยที่จะใช้อัลกอริธึมการแฮชรหัสผ่านเพื่อทำให้ผู้โจมตีช้าลงเนื่องจากคุณมี 128 บิตแล้ว (คุณยังคงต้องแฮชเพราะมันยาวมาก) หากคุณใช้การแฮชรหัสผ่าน วิธีโจมตีจะเป็นวิธีที่เร็วที่สุด พวกเขาจะบังคับให้คีย์ไม่ใช่รหัสผ่าน
ตอนนี้ หากคุณไม่มีโอกาสที่จะเพิ่มแหล่งที่มาของเอนโทรปีของรหัสผ่านของคุณ คุณต้องใช้อัลกอริทึมการแฮชรหัสผ่านอย่างเช่น Argon2 และการแฮชบอลลูนอย่างแน่นอน มีพารามิเตอร์เช่น
- การทำซ้ำ; เพิ่มเวลาโจมตีตามสัดส่วนของการวนซ้ำ
- ความแข็งของหน่วยความจำ; กำจัด/ลดการค้นหารหัสผ่านจำนวนมากของการค้นหา ASIC/PFGA/GPU โดยที่หน่วยความจำไม่ถูกผูกไว้เป็น CPU
- และ, ตัวนับด้าย; ลดการขนานของโปรแกรมค้นหารหัสผ่าน
จำเป็นต้องปรับพารามิเตอร์ทั้งหมดเพื่อให้ได้ความปลอดภัยตามเป้าหมายของคุณ ตัวอย่างเช่น หากรหัสผ่านของคุณมีการรักษาความปลอดภัย 100 บิต คุณจำเป็นต้องมี $2^{28}$ การวนซ้ำเพื่อบังคับให้ผู้โจมตีค้นหาแบบ 128 บิต
จะสร้างคีย์สำหรับ AES ในความยาวคีย์ 192 บิตจากรหัสผ่านได้อย่างไร
ใช้คำ Dicewire 15 คำ แฮชแล้วตัดแต่งเป็น 192 บิต หรือ
ใช้รหัสผ่านของคุณด้วยเกลือและแฮชด้วยอัลกอริธึมการแฮชรหัสผ่าน เช่น Argon2 พร้อมพารามิเตอร์ที่ปรับแต่งอย่างดี พวกเขาได้รับการออกแบบแล้วและคุณสามารถหาได้ ห้องสมุด ความยาวเอาต์พุตที่ต้องการ ( โปรดจำไว้ว่า ความปลอดภัยของ Argon2 ครอบคลุม 512 บิต ). และ;
- ใช้เกลือที่ไม่ซ้ำกันต่อคีย์ที่สร้างขึ้น
- ใช้ค่าเอนโทรปีที่สูงขึ้น
- ใช้พารามิเตอร์ที่สูงกว่าให้มากที่สุด