โพสต์นี้ กล่าวว่า Blake2b ของ Argon2 เป็น ที่ลดลง หนึ่งซึ่งเห็นชอบด้วย ข้อมูลจำเพาะของ Argon2 เนื่องจากระบุว่าใช้ Blake2b เพียง 2 รอบเท่านั้น
แต่ในทางกลับกันเพจ 15
ของข้อมูลจำเพาะของ Argon2 ระบุว่ามันแก้ไข Blake2b เพื่อเพิ่มการคูณ 32 บิตเพื่อเพิ่มเวลาแฝง (ฉันเดาว่าพวกเขาหมายถึงการต้องรอรอบ CPU เพิ่มเติม?)
คำถามของฉันคือ:
- ถ้า Argon2 ต้องการทำให้ Blake2b ยากขึ้น ทำไมมันถึงลด 12 รอบเหลือเพียง 2 รอบ?
- มีความแตกต่างอื่น ๆ ที่ฉันไม่ได้กล่าวถึงที่นี่หรือไม่?
- ความแตกต่างเหล่านี้ส่งผลต่อความปลอดภัยของ Blake2b ของ Argon2 อย่างไรเมื่อเทียบกับ Blake2b มาตรฐานที่พบใน เช่น
ลิโซเดียม
?
ความคิดของฉัน
ฉันคิดว่าการใช้ฟังก์ชันแฮช (Blake2b) ของ Argon2 เพื่อเติมแผ่นหน่วยความจำไม่ใช่ทางเลือกที่ดีที่สุด เนื่องจากไม่มีการบีบอัดที่เกี่ยวข้องกับการเติมหน่วยความจำ อินพุต 1024 ไบต์กลายเป็นอีกเอาต์พุต 1024 ไบต์ ไม่มีการบีบอัดเกิดขึ้น ดังนั้นรอบที่ก้าวร้าวทั้งหมดของฟังก์ชันการแฮชที่พยายามรักษาเอนโทรปีอินพุตสูงสุดไว้ในขณะที่บีบอัดเป็นไบต์ที่น้อยลงนั้นไม่จำเป็นเลย
ฉันคิดว่านี่คือสาเหตุที่ Argon2 สร้างตัวแปรที่ลดลงของ Blake2b ของตัวเองโดยมีเพียง 2 รอบแทนที่จะเป็น 12: เพราะเห็นได้ชัดว่าไม่จำเป็นต้องมีการแฮช
ด้วยการแก้ไข Blake2b อย่างมีประสิทธิภาพ Argon2 ได้สร้างการเปลี่ยนแปลงของรหัสบล็อกแบบสมมาตร และพวกเขาก็ใช้มันต่อไปเช่นเดียวกัน (อินพุตคงที่กลายเป็นเอาต์พุตคงที่ที่มีขนาดเท่ากัน)
ฉันคิดว่าแนวทางที่ดีกว่าของ Argon2 คือ แทนที่จะประดิษฐ์บล็อกรหัสสมมาตรขึ้นใหม่จากฟังก์ชันแฮช (โดยการแก้ไข Blake2b) คือการตัดการไล่ล่าและใช้รหัสสมมาตรที่มีอยู่เช่น ChaCha20
การใช้รหัสสมมาตรเช่น ChaCha20 จะเร็วพอๆ กับรหัสสมมาตรที่ประดิษฐ์ขึ้นใหม่ของ Argon2 (ลด Blake2b) แม้ว่าจะเป็น ChaCha20 แบบ 20 รอบก็ตาม ChaCha20 ตามการทดสอบของฉันช้ากว่า Argon2 เพียงเล็กน้อยเท่านั้นสำหรับการทำงานเดียวกัน พร้อมประโยชน์อื่นๆ: การใช้ประโยชน์จากไลบรารี่ที่มีอยู่และการวิจัยการเข้ารหัสเพิ่มเติมที่ส่งต่อไปยังรหัสที่มีอยู่แล้ว