Tags:
Node Thumbnail

อัลกอรึธึมตระกูล 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

Get latest news from Blognone

Comments

By: mk
FounderAndroid
on 3 October 2012 - 07:40 #484828
mk's picture

ควรเพิ่มเนื้อหาสักหน่อยว่า sha3 มีประโยชน์อะไรจากของเดิม จะได้ใช้เมื่อไร และทำไมถึงเลือก Keccak

By: nuntawat
WriterAndroidWindowsIn Love
on 3 October 2012 - 07:55 #484831 Reply to:484828
nuntawat's picture

เสริมครับ

  • ควรคั่น SHA-256 กับ SHA-512 ด้วยลูกน้ำ
  • น่าจะอธิบายว่า NIST คือหน่วยงานอะไร
By: willwill
ContributorAndroid
on 3 October 2012 - 07:59 #484832 Reply to:484831
willwill's picture

แก้ไขเพิ่มตามข้างบนทั้งหมดแล้วครับ

By: shinobi
iPhone
on 3 October 2012 - 09:28 #484866

ถามแบบคนไม่รู้นะครับ มันใช้ทำอะไร? ทำไมต้องออกรุ่นใหม่เรื่อยๆ ครับ , คลัายกับ MD5 หรือป่าว

By: pitsanu
Contributor
on 3 October 2012 - 10:12 #484891 Reply to:484866
  • คล้ายกับ MD5 ครับ

  • ต้องออกรุ่นใหม่เพราะพลังในการประมวลผลของอุปกรณ์ต่างๆเพิ่มขึ้น (ทำให้เวลาที่ใช้ในการโจมตี/ถอดรหัส ด้วยแรงถึก (brute force) ลดลง)

  • ใช้ย่อยข้อมูลขนาดใหญ่ให้เหลือเพียงไม่กี่ไบต์ เพื่อเอาใช้ตรวจสอบว่าข้อมูลตรงกัน ใช้เข้ารหัส(ย่อย)แบบทางเดียวคือ ย่อยได้แต่ไม่สามารถเอาตัวที่ย่อยแล้วมาทำให้กลับเป็นข้อมูลเดิมได้ (ตัวที่ได้รับเลือกนี่เด่นตรงที่เลือกได้ด้วยว่าย่อยแล้วให้เหลือกี่ไบต์ เพื่อให้เหมาะกับอุปกรณ์และความปลอดภัยที่ต้องการซะด้วยสิ)

By: willwill
ContributorAndroid
on 3 October 2012 - 11:01 #484938 Reply to:484866
willwill's picture
  • มันเป็นแฮชชนิดนึงครับ MD5 ก็เป็นแฮช มีไว้เพื่อเป็นตัวแทนของข้อความ เพราะข้อความอาจยาวได้ไม่จำกัด แต่แฮชมีความยาวจำกัด การใช้ก็เช่น การเก็บรหัสผ่าน (ไม่ควรเอาแฮชตระกูล MD5/SHA1 มาเก็บรหัสนะครับถ้าเป็นไปได้ จะอธิบายต่อ) หรือการ sign ข้อความ แทนที่จะ sign ตรงๆ ก็ sign ที่แฮชเอาแทนเพื่อความเร็ว (SSL/TLS ก็ใช้วิธีนี้ครับ)
  • ด้วยว่าแฮชยาวจำกัด แต่ข้อความไม่จำกัด ฉะนั้นจึงมีโอกาสที่จะมีข้อความแฮชซ้ำได้ เรียกว่า collision โดย MD5 นั้นมีผู้ทำตัวอย่างได้แล้วว่าเขียนโปรแกรมมาสองตัว แล้วสามารถใช้โปรแกรมตัวอย่างนี้ทำให้โปรแกรมทั้งสองตัวมี MD5 เท่ากัน ส่วน SHA1 ก็เริ่มเปราะไปตามเวลาครับ แต่ยังไม่ได้เปราะขนาด MD5 (ถ้าเป็นไปได้ไม่ควรใช้ MD5 แล้วครับ)
  • SHA2 แก้ไขปัญหานี้ ด้วยการระบุความยาวแฮชได้ ที่ใช้กันก็เช่น SHA-256, SHA-512 จากเดิมที่ความยาวมันสั้น แฮชพวกนี้ก็จะยาวขึ้นทำให้โอกาสชนกันมีน้อยลง โดยปัจจุบัน SHA-2 ยังถือว่าปลอดภัยอยู่มากครับ ถ้าเป็นไปได้ก็ควรจะใช้ SHA-256 ขึ้นไป แต่การเก็บรหัสผ่านก็ยังไม่ควรใช้อยู่ดี
  • SHA1,2 ออกแบบมาโดยสถาบัน NSA เราไม่อาจทราบได้ว่าผู้ออกแบบแอบฝัง backdoor อะไรไว้มั้ย (มันมีนะครับที่ค่าคงที่ที่ใช้ในอัลกอรึธึมมัน fix มาดูมั่วๆ แต่จริงๆ แล้วผู้พัฒนาแอบคิดค่าที่ตัวเองรู้วิธีการถอดรหัสได้โดยง่ายแล้ว) และมันยังมีคนเก่งอีกเยอะที่ไม่ได้ทำงานกับ NSA
  • SHA3 ออกแบบโดยให้ใครก็ได้ส่งประกวด แล้วใครก็ได้ส่งบทวิเคราะห์ไปให้ NIST ตรวจ ฉะนั้นมันจึงผ่านสายตาคนมาแล้วจำนวนหนึ่ง และมี Audition กันหลายรอบกว่าจะได้มาถึงรอบชิงชนะเลิศนี้ นอกจากนี้ด้วยความใหม่ของมันทำให้มันยังคิดป้องกันเทคนิควิธีใหม่ๆ มามากกว่าแฮชรุ่นพี่
  • ถ้าเห็นสมบัติของ SHA3 ตัวที่ชนะคือ Keccak จะสังเกตนะครับว่า
    • มันสามารถปรับความยาวแฮชได้ เหมือน SHA2
    • มันสามารถปรับเพิ่มลดกำลังได้ ซึ่งข้อนี้ผมไม่แน่ใจว่า SHA2 มีหรือเปล่า ถามว่าทำไมต้องปรับกำลัง ก็เพราะถ้าเราจะใช้เช็คแค่ว่าไฟล์ A,B คือไฟล์เดียวกันเป๊ะ เอาเร็วๆ ก็ได้ครับ แต่การเก็บรหัสผ่าน ยิ่งเร็ว cracker ก็ยิ่งสามารถเดาได้เร็วเท่านั้น ฉะนั้นเราก็จะต้องปรับให้มันช้าเข้าไว้ ซึ่งที่มักจะใช้กันจะเป็น algorithm ตัวนึงชื่อ bcrypt เป็นแฮชอีกตัวที่แปลงมาจาก blowfish ตัวนี้สามารถปรับกำลังได้ครับ ผมใช้ระดับความยากประมาณ 8 ใช้เวลา 0.3s เข้ารหัสรอบนึง ฉะนั้นการที่จะมา 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 เด็ดขาด ^^

By: melloz
iPhone
on 3 October 2013 - 14:19 #636289 Reply to:484938
melloz's picture

ขอบคุณ สำหรับความรู้ นะ จ้า มีประโยชน์ มาก เลย

By: shinobi
iPhone
on 3 October 2012 - 16:35 #485288 Reply to:484866

ได้ความรู้มากมายเลย ขอบคุณมากๆ ครับ

By: pitsanu
Contributor
on 3 October 2012 - 10:13 #484878

AES เป็นอัลกอรึทึมแบบสมมาตรไม่ใช่เหรอครับ?

อ้างอิง: fips-197.pdf

By: willwill
ContributorAndroid
on 3 October 2012 - 10:39 #484924 Reply to:484878
willwill's picture

พลาดไป ขออภัยครับ แก้ไขหัวข่าวแล้วครับ