อัลกอรึธึมตระกูล SHA นั้นเป็นอัลกอรึธึมในการแฮชข้อมูล โดยปัจจุบันมีทั้งหมด 2 รุ่น คือ SHA-1 และ SHA-2 โดยเราอาจจะเคยได้ยิน SHA-2 ด้วยชื่อที่ระบุความยาวของมัน เช่น SHA-256, SHA-512 ทั้งสองตัวนี้ได้รับการออกแบบโดยสถาบัน NSA
แต่ด้วยปัจจุบันวิทยาการต่างๆ ก็มีการเปลี่ยนแปลงไป ทาง NIST สถาบันมาตรวิทยาของสหรัฐฯ จึงได้จัดการประกวดออกแบบ SHA-3 ขึ้นมา ซึ่งจะคล้ายๆ กับกระบวนการประกวดสร้างอัลกอรึธึม AES ซึ่งใช้ในการเข้ารหัสแบบสมมาตรที่ใช้กันอย่างแพร่หลายในปัจจุบัน
หลังจากการประกวดแข่งขันกันยาวกว่า 4 ปี ทาง NIST ก็ได้ประกาศผลมาเมื่อวันที่ 2 ตุลาคมว่าอัลกอริธึม Keccak (Keccak team, Daemen et al.) ได้รับเลือกให้เป็นอัลกอรึธึม SHA-3 อย่างเป็นทางการ
Keccak ได้รับเลือกจากเพราะมีประสิทธิภาพดีกว่าตัวอื่นๆ เมื่อนำไปออกแบบฮาร์ดแวร์ และมีความยืดหยุ่น โดยสามารถปรับกำลังเพิ่มลดความเร็วได้เพื่อเพิ่มความปลอดภัย และยังสามารถปรับขนาดแฮชผลลัพท์ได้ตามต้องการ
ทั้งนี้ทาง NIST ยังประกาศว่ายังมั่นใจในความปลอดภัยของ SHA-2 อยู่ครับ เพียงแต่จัดประกวดเพื่อให้ผู้เชี่ยวชาญจากภายนอกได้มีส่วนร่วมในการกำหนดมาตรฐาน จากเดิมที่ใช้หน่วยงาน NSA ออกแบบอย่างเดียว
สามารถดาวน์โหลด Reference Implementation ของ Keccak ในภาษา C, Python และในแบบ VHDL ได้ที่ เว็บไซต์โครงการ
ที่มา: NIST
Comments
ควรเพิ่มเนื้อหาสักหน่อยว่า sha3 มีประโยชน์อะไรจากของเดิม จะได้ใช้เมื่อไร และทำไมถึงเลือก Keccak
เสริมครับ
แก้ไขเพิ่มตามข้างบนทั้งหมดแล้วครับ
ถามแบบคนไม่รู้นะครับ มันใช้ทำอะไร? ทำไมต้องออกรุ่นใหม่เรื่อยๆ ครับ , คลัายกับ MD5 หรือป่าว
คล้ายกับ MD5 ครับ
ต้องออกรุ่นใหม่เพราะพลังในการประมวลผลของอุปกรณ์ต่างๆเพิ่มขึ้น (ทำให้เวลาที่ใช้ในการโจมตี/ถอดรหัส ด้วยแรงถึก (brute force) ลดลง)
ใช้ย่อยข้อมูลขนาดใหญ่ให้เหลือเพียงไม่กี่ไบต์ เพื่อเอาใช้ตรวจสอบว่าข้อมูลตรงกัน ใช้เข้ารหัส(ย่อย)แบบทางเดียวคือ ย่อยได้แต่ไม่สามารถเอาตัวที่ย่อยแล้วมาทำให้กลับเป็นข้อมูลเดิมได้ (ตัวที่ได้รับเลือกนี่เด่นตรงที่เลือกได้ด้วยว่าย่อยแล้วให้เหลือกี่ไบต์ เพื่อให้เหมาะกับอุปกรณ์และความปลอดภัยที่ต้องการซะด้วยสิ)
เพิ่มเติม: คุณ Bruce Schneider ผู้ออกแบบ Blowfish (ที่ผมบอกว่าใช้ใน bcrypt ข้างบนนี้) ก็ส่งประกวด SHA3 ชื่อ Skein ครับ อยู่ในโผรอบชิงด้วย แกบอกว่าอยากให้ไม่มีรางวัลมากกว่า เพราะก็ไม่มีตัวไหนโดดเด่นสำคัญสักเท่าไร ใช้ SHA-512 ก็พอแล้ว (แต่ถ้ามีแกก็อยากได้นะ ^^)
ขอนอกคำถามแต่อยากจะเน้นย้ำกับ developer นะครับว่าการเก็บรหัสที่ดี ถ้าจำเป็นต้องใช้แฮชแบบเร็ว (MD5 SHA1 SHA2) ก็ควรเลือกตัวที่ดีที่สุดที่มี เก็บแบบมี salt (บางคนอาจจะมี pepper เสริมด้วย) และสำคัญมากคือการยืดแฮชให้ใช้เวลามากขึ้น เช่น ลูปวนแฮชซ้ำหลายหมื่นครั้ง แต่ให้ดีที่สุด ใช้ bcrypt หรือ scrypt พร้อม salt ครับ โดย bcrypt มันจะจัดการเรื่องการวนให้ปลอดภัยถูกต้องของมันเอง สมมุติว่าในอนาคต คอมเร็วขึ้นอีก เราก็ปรับกำลัง bcrypt ให้มากขึ้นได้เรื่อยๆ ส่วน scrypt นั้นเป็นน้องใหม่ที่ยังไม่ค่อยมี implementation ให้ใช้ ถ้าหาได้ก็ควรใช้ครับ มันปรับกำลังได้เช่นเดียวกัน แต่กำลังนี้ใช้ทั้ง CPU และ Memory ไปพร้อมกันทำให้การสร้าง hardware มารันทำได้แพงขึ้น
และห้ามเก็บรหัสเป็น plain text เด็ดขาด ^^
ขอบคุณ สำหรับความรู้ นะ จ้า มีประโยชน์ มาก เลย
ได้ความรู้มากมายเลย ขอบคุณมากๆ ครับ
AES เป็นอัลกอรึทึมแบบสมมาตรไม่ใช่เหรอครับ?
อ้างอิง: fips-197.pdf
พลาดไป ขออภัยครับ แก้ไขหัวข่าวแล้วครับ