บทความทั้งหมด

Scrypt: เหตุใดอัลกอริทึมนี้จึงต้องการหน่วยความจำมากขนาดนั้น

ประเทศไทยเป็นหนึ่งในประเทศแรก ๆ ของโลกที่ออกกฎหมายเฉพาะสำหรับสินทรัพย์ดิจิทัลอย่างชัดเจน คือพระราชกำหนดการประกอบธุรกิจสินทรัพย์ดิจิทัล พ.ศ. 2561 ซึ่งวางกรอบให้ผู้ประกอบการแลกเปลี่ยนคริปโตต้องขอใบอนุญาตจาก ก.ล.ต. บิตคอยน์ใช้ SHA-256 แต่เหรียญอย่าง Litecoin และ Dogecoin ใช้ scrypt สำหรับ proof-of-work ซึ่งคุณสมบัติ memory-hard ของ scrypt ทำให้การพัฒนา ASIC เฉพาะทางสำหรับเหรียญเหล่านี้ล่าช้ากว่าบิตคอยน์มาก และการขุดด้วย GPU ทั่วไปยังคุ้มค่านานกว่า

ฟังก์ชัน memory-hard คืออะไร

อัลกอริทึม memory-hard ถูกออกแบบโดยตั้งใจให้การคำนวณแฮชหนึ่งครั้งต้องเก็บข้อมูลระหว่างกลางจำนวนมากไว้ในหน่วยความจำ การพยายามประหยัดหน่วยความจำโดยแลกกับการคำนวณค่าใหม่จะเพิ่มเวลาประมวลผลอย่างมากแทน — หมายความว่าผู้โจมตีต้องเสียสละหน่วยความจำหรือความเร็วอย่างใดอย่างหนึ่ง

เหตุใดสิ่งนี้จึงทำให้การโจมตีบนฮาร์ดแวร์เฉพาะทางยากขึ้น

ชิป ASIC และ GPU มีประสิทธิภาพมากในการรันการดำเนินการทางคณิตศาสตร์ง่าย ๆ แบบขนานจำนวนมาก แต่การเพิ่มหน่วยความจำให้แต่ละเธรดการประมวลผลแบบขนานมีค่าใช้จ่ายสูงกว่ามากและขยายขนาดได้แย่กว่า Scrypt ทำให้การโจมตีแบบกำลังดุร้ายบนฮาร์ดแวร์ประเภทนี้คุ้มค่าทางเศรษฐกิจน้อยลงเมื่อเทียบกับฟังก์ชันแฮชแบบคลาสสิก

ทำไมต้องใช้สิ่งนี้

  • เลือกอัลกอริทึมแฮชรหัสผ่านที่ต้านทานการโจมตีด้วยฟาร์ม GPU
  • เข้าใจแนวคิดฟังก์ชัน memory-hard ในบริบทของการเข้ารหัสลับ
  • เปรียบเทียบข้อแลกเปลี่ยนของ scrypt กับ bcrypt และ Argon2 สำหรับระบบเฉพาะ

ต้องใช้หน่วยความจำเท่าใดจริง ๆ

ปริมาณหน่วยความจำสำหรับการคำนวณ scrypt หนึ่งครั้งมีค่าประมาณเท่ากับ 128 × N × r ไบต์ ที่พารามิเตอร์ทั่วไป (N=16384, r=8) จะอยู่ที่ประมาณ 16 เมกะไบต์ต่อแฮชหนึ่งครั้ง — ไม่มากสำหรับการล็อกอินครั้งเดียว แต่หากเซิร์ฟเวอร์ต้องรองรับการยืนยันตัวตนพร้อมกันหลายพันครั้ง ปริมาณหน่วยความจำรวมจะกลายเป็นข้อจำกัดที่แท้จริงในการเลือกพารามิเตอร์อย่างรวดเร็ว ไม่ใช่แค่ข้อกำหนดด้านความปลอดภัยเชิงนามธรรม

ลองใช้เครื่องมือ