Clear
Lead Graphic Papers

Password, Hash และ Rainbow table

ผู้เขียน: ไพชยนต์ วิมุกตะนันทน์
วันที่เผยแพร่: 5 ตุลาคม 2555
ปรับปรุงล่าสุด: 5 ตุลาคม 2555

Share on Facebook Share on Twitter Share on Google+

ในระยะนี้มีข่าวเกี่ยวกับองค์กรต่างๆ ทั้งของรัฐและเอกชนในต่างประเทศ ที่ถูกกลุ่มผู้ไม่ประสงค์ดีลักลอบขโมยข้อมูลออกมาอยู่บ่อยๆ ไม่ว่าจะด้วยเหตุผลทางการเมืองหรือเหตุผลอื่นๆ ก็ตาม แต่ทุกครั้งที่ข้อมูลในองค์กรเหล่านั้นหลุดออกมา สิ่งที่สูญเสียไปนอกจากข้อมูลที่เป็นความลับต่างๆ (รวมถึงความเชื่อมั่นที่มีต่อองค์กร) แล้ว บางครั้ง ข้อมูลส่วนบุคคล และรหัสผ่านของผู้ที่ใช้งานระบบสารสนเทศในองค์กรเหล่านั้นก็ถูกนำออกมาด้วย

ข้อมูลประเภทรหัสผ่านของบุคคลนั้น มีความสำคัญมากกว่าที่หลายคนคิด เพราะจากสถิติที่ผ่านมา พบว่าคนเรามักจะใช้รหัสผ่านซ้ำๆ กันในแต่ละระบบที่ตนเองใช้งาน เช่นผู้ใช้จำนวนไม่น้อยที่ใช้รหัสผ่านเดียวกันทั้งระบบอีเมล และ Web application ขององค์กร รวมถึงยังเอารหัสผ่านนี้ไปใช้กับอีเมลส่วนตัวด้วย [1] ทำให้เมื่อผู้ไม่ประสงค์ดีเจาะเอารหัสผ่านใน Web application ออกไปได้แล้ว ก็สามารถใช้รหัสผ่านนี้เพื่อเข้าถึงอีเมลของผู้ใช้คนนั้น ทั้งในองค์กรและอีเมลส่วนตัวได้อย่างสบาย

การเก็บรหัสผ่านในฐานข้อมูล หรือในไฟล์ข้อมูลก็ดี เป็นวิธีการปกติในการใช้งานรหัสผ่านของ Application ต่างๆ อยู่แล้ว ดังนั้นฐานข้อมูล หรือไฟล์ดังกล่าวนี้ จึงเปรียบเสมือนกุญแจเข้าสู่ระบบทั้งหมด ที่ผู้ดูแลระบบต้องคอยระมัดระวัง ไม่ให้ผู้ไม่ประสงค์ดีมาเอาออกไปได้ หรือถ้าเอาออกไปได้ก็ต้องนำไปใช้ประโยชน์ไม่ได้ ซึ่งในกรณีหลังนี้ ถ้าถามผู้เชี่ยวชาญด้านความมั่นคงปลอดภัย ก็คงได้คำตอบว่า อย่าเก็บรหัสผ่านเอาไว้แบบ Plain text นั่นเอง

ถ้าไม่เก็บแบบ Plain text แล้วจะเก็บแบบใด ถ้าพูดถึงการเก็บข้อมูลให้เป็นความลับหลายคนคงนึกถึงการเข้ารหัสลับ (Encrypt) ซึ่งมีหลายรูปแบบด้วยกัน แต่การเก็บรหัสผ่านด้วยรหัสลับดูจะไม่เป็นวิธีที่ดีนัก เนื่องจากขึ้นชื่อว่าเป็นการเข้ารหัสลับแล้ว ก็ต้องมี Key ที่ใช้ถอดรหัสลับ (Decrypt) ซึ่งก็ไม่พ้นที่จะต้องเก็บเอาไว้ที่ใดที่หนึ่ง เช่นในตัว Application เอง ในกรณีนี้ ถ้าพิจารณาจากรูปแบบการโจมตีของผู้ไม่ประสงค์ดีที่ผ่านๆ มาแล้ว จะพบว่าส่วนมากผู้โจมตีจะสามารถเข้าถึงข้อมูลในเครื่อง Web server ได้ด้วย ดังนั้นนอกจากจะได้ข้อมูลที่มีการเข้ารหัสลับออกไปแล้ว ก็มักจะได้ Key ที่ส่วนมากจะซ่อนอยู่ในตัว Web application ออกไปด้วยเช่นกัน เปรียบเหมือนใช้ตู้เซฟอย่างดี แต่กลับวางกุญแจไว้บนโต๊ะข้างๆ กัน

Hashing

รูปแบบการเก็บรหัสผ่านที่นิยมใช้กันก็คือ การเก็บรหัสผ่านในรูปแบบของ Hash หรือชื่ออย่างเป็นทางการคือ Cryptographic Hash ความสามารถของ Hash คือ สร้าง “ข้อมูลแทนตัว” ของข้อมูลใดๆ ซึ่งในที่นี้คือรหัสผ่านนั่นเอง ข้อดีของ Hash ที่เหนือกว่าการเข้ารหัสลับก็คือค่า Hash หรือ “ข้อมูลแทนตัว” จะไม่สามารถถอดรหัส หรือกระทำการใดๆ เพื่อให้กลับออกมาเป็นค่าที่แท้จริงของข้อมูลนั้นๆ ได้ เช่นถ้าผู้ไม่ประสงค์ดี ได้ Hash ที่มีค่าเป็น 3fd7e602e98245a83eed414d798040e952e01cbee0979269d2a0150dbd37172030d6e8d6a2b1baaf23c2acfe1624d112b9fd6a7cd678b36e7aff411e9b09f0c7 ออกไปจากการเจาะระบบ ก็จะไม่สามารถทราบว่า รหัสผ่านที่แท้จริงคือ thisismysecretpassword เป็นอันขาด

ท่านผู้อ่านอาจจะสงสัยว่า ในเมื่อไม่มีทางที่จะ “ถอดรหัส” ค่า Hash ออกมาได้ ตัว Web application จะทราบได้อย่างไรว่าผู้ใช้งานป้อนรหัสผ่านเข้ามาถูกต้องแล้ว คำตอบก็คือ ตัว Web application ไม่จำเป็นต้องทราบว่ารหัสผ่านที่ถูกต้องคืออะไร ขอเพียงแค่เมื่อเอารหัสผ่านที่ผู้ใช้ป้อนเข้ามา ไปผ่าน Hash แบบเดียวกันกับที่ใช้กับรหัสผ่านที่เก็บในระบบ ถ้าผลที่ได้ออกมาตรงกับค่าที่เก็บเอาไว้ก็เป็นอันทราบได้แน่ว่า รหัสผ่านที่ผู้ใช้งานป้อนเข้ามานั้นถูกต้องแล้ว

Hash นั้นมีหลายแบบ ที่เป็นที่รู้จักกันมากที่สุดดูเหมือนจะเป็น MD5 ซึ่งมีข่าวใหญ่เมื่อหลายปีมาแล้วว่ามีผู้ Crack ได้สำเร็จ จนเกิดความวิตกกังวลไปทั่ว โดยเฉพาะผู้ที่ได้ยินข่าวมาโดยไม่ทราบรายละเอียดที่แท้จริง รายละเอียดของเรื่องนี้ก็คือ Hash ทุกชนิด มีข้อจำกัดอยู่อย่างหนึ่งคือการเกิด Collision หรือการซ้ำกันของค่า Hash ซึ่งถ้าลองพิจารณาดูแล้วจะเห็นว่าเรื่องนี้ไม่ใช่เรื่องแปลกเลย เนื่องจากคุณสมบัติของ “ข้อมูลแทนตัว” ที่ Hash สร้างขึ้นจะมีความยาวคงที่เสมอสำหรับ Hash แต่ละแบบ เช่นในกรณีของ MD5 จะมีขนาด 16 ไบต์ (128 บิต) ดังนั้นค่า MD5 ทั้งหมดในโลกนี้ที่จะมีได้คือ 256^16 หรือ 2^128 ค่าเท่านั้น ในขณะที่ข้อมูลที่ต้องการหาค่า Hash นั้นอาจเป็นข้อมูลอะไรก็ได้ ซึ่งย่อมมีความหลากหลายมากกว่า จำนวน 256^16 หรือ 2^128 แน่นอน จึงเป็นไปได้ที่จะพบว่ามีข้อมูลมากกว่า 1 ชุด ที่มีค่า Hash ตรงกัน และเช่นกัน สำหรับการใช้ Hash เก็บข้อมูลรหัสผ่าน ก็ย่อมมีโอกาสที่จะมีรหัสผ่านมากกว่า 1 ชุด ที่ให้ค่า Hash ออกมาตรงกันด้วย

ดูเหมือน Hash collision จะเป็นกฏธรรมชาติที่ไม่สามารถหลีกเลี่ยงได้ แต่ในกรณีของ MD5 จะมีความพิเศษมากขึ้นอีกขั้น เมื่อมีผู้ค้นพบวิธีการสร้างข้อมูลใดๆ ก็ตาม ให้มีค่า Hash ตรงกัน [2] จึงทำให้หน่วยงานด้านความปลอดภัยต่างๆ เช่น US-CERT ได้ระบุว่า MD5 เป็น Hash แบบที่มีความมั่นคงปลอดภัยไม่เพียงพอในปัจจุบัน [3] และควรหลีกเลี่ยงไปใช้การ Hash แบบอื่น ส่วน NIST ก็ได้แนะนำให้หน่วยงานรัฐบาลของสหรัฐฯ ใช้การ Hash แบบ SHA-2 [4] ซึ่งมีความยาวของค่า Hash ตั้งแต่ 28 ไบต์ (224 บิต) ขึ้นไปแทน

Hash cracking

อย่างไรก็ตาม การมีจุดอ่อนเรื่อง Hash collision ก็ยังไม่ใช่จุดอ่อนโดยตรงที่จะทำให้การเก็บรหัสผ่านด้วย MD5 ไม่มั่นคงปลอดภัย เพราะถึงแม้ผู้โจมตีจะได้รหัสผ่านที่ถูก Hash ด้วย MD5 เอาไว้ออกไป ก็ยังไม่สู้จะมีประโยชน์ต่อการใช้เข้าสู่ระบบนัก (ยกเว้นมีความผิดพลาดในการออกแบบ Application ซึ่งจะกล่าวถึงในโอกาสหน้า) ผู้โจมตีจำเป็นต้องหาทาง “ถอดรหัส” ของค่า Hash ออกมาให้เป็นรหัสผ่านได้เสียก่อน

ความจริงแล้ว Hash ไม่สามารถถอดรหัสได้ เนื่องจาก Hash ทุกชนิด ไม่ใช่การเข้ารหัส กระบวนการ Hash คือกระบวนการที่เรียกว่า “ฟังก์ชั่นทางเดียว” (One way function) ที่ไม่สามารถกระทำการย้อนกลับ (Reverse) ได้ ลองคิดถึงการนำข้อมูลขนาด 1 เทระไบต์ มา Hash ด้วย MD5 ซึ่งจะได้ 16 ไบต์เสมอ ถ้าสามารถหาวิธีแปลงข้อมูล 16 ไบต์กลับเป็น 1 เทระไบต์ ได้ก็เท่ากับว่า MD5 เป็นวิธีการบีบอัดข้อมูลที่ดีที่สุดในโลก

ดังนั้น การ “ถอดรหัส” ของ Hash ในความหมายที่เข้าใจกันทั่วไปก็หมายถึง การหาค่าตั้งต้นก่อนที่จะถูก Hash นั่นเอง ซึ่งวิธีการที่นิยมใช้กันก็คือ การใช้วิธีพยายามสุ่มรหัสผ่านที่เป็นไปได้ทีละค่า และนำไปผ่าน Hash แบบเดียวกับที่ใช้ Hash รหัสผ่านที่ได้มา แล้วเทียบกันจนกว่าจะพบค่าที่ตรงกัน ซึ่งอาจเรียกได้ว่าเป็นการ Bruteforce รูปแบบหนึ่ง ซึ่งถ้าหากรหัสผ่านมีความยาวหรือความซับซ้อนมาก กว่าจะสุ่มหารหัสผ่านที่ถูกต้องพบได้ก็ย่อมต้องใช้เวลานาน

การหาค่าตั้งต้นของ Hash จำเป็นต้องใช้ความสามารถของคอมพิวเตอร์ในการคำนวณค่า ซึ่งปัจจุบันนิยมใช้ GPU (Graphic Processing Unit) ของการ์ดแสดงผล (Display Adapter หรือ Display Card) มาคำนวณแทน เนื่องจากมีความสามารถในการคำนวณทางคณิตศาสตร์ดีกว่า CPU มาก และสามารถเพิ่มขยายความสามารถได้ด้วยการเพิ่มจำนวนการ์ดแสดงผลในเครื่อง คอมพิวเตอร์ ซึ่งสะดวกกว่าการเปลี่ยน CPU หรือเพิ่มจำนวน CPU

จากการทดลองด้วยโปรแกรม oclHashcat ซึ่งเป็นโปรแกรมที่ใช้หาค่าตั้งต้นของ Hash ด้วยการสุ่มค่า บนเครื่องคอมพิวเตอร์ที่ใช้ GPU ของ ATI รุ่น RADEON 5450 ซึ่งเป็น GPU รุ่นพื้นฐาน พบว่า สำหรับรหัสผ่านที่มีความยาว 6 ตัวอักษร และประกอบด้วยตัวอักษรทั้งตัวเล็กตัวใหญ่ สัญลักษณ์ และตัวเลข จะใช้เวลาไม่เกิน 1 ชั่วโมง ในการสุ่มค่าจนครบทุกค่าที่เป็นไปได้ใน Hash ชนิด MD5 นั่นหมายความว่า ถ้าผู้ใช้งานใช้รหัสผ่านที่มีความยาวเพียง 6 ตัวอักษรในระบบที่ใช้ Hash ชนิด MD5 ผู้โจมตีจะสามารถ “ถอดรหัส” ได้อย่างแน่นอนในเวลาไม่เกิน 1 ชั่วโมง แม้จะใช้เพียง GPU รุ่นพื้นฐานที่มีอายุร่วม 2 ปีแล้ว แต่ถ้าเพิ่มความยาวรหัสผ่านเป็น 8 และ 9 ตัวอักษร จะต้องใช้เวลามากขึ้นเป็นกว่า 300 วัน และกว่า 10 ปีตามลำดับ เพื่อสุ่มค่าจนครบทุกค่าที่เป็นไปได้ บน GPU ตัวเดิม

สำหรับตัวเลขของระยะเวลาตรงนี้คงต้องมีการอธิบายเพิ่มเติมเล็กน้อยว่า เป็นระยะเวลา “สูงสุด” ที่ต้องใช้ ซึ่งทั้งนี้ขึ้นอยู่กับรูปแบบการสุ่มค่าของโปรแกรม เช่นถ้ารหัสผ่านที่แท้จริงเป็น 000000001 และโปรแกรมเริ่มสุ่มตั้งแต่ 000000000 ก็คงทราบได้ทันทีว่าไม่ต้องรอถึง 10 ปีแน่นอน

ถ้ารหัสผ่านมีการเก็บด้วย Hash แบบอื่น เช่น SHA-1 หรือ SHA-2 ซึ่งใช้เวลาในการคำนวณมากกว่า ระยะเวลาที่ใช้ในการหาค่าตั้งต้นก็ย่อมนานขึ้นไปอีก ดังนั้นแนวคิดของการใช้ Hash ที่คำนวณยากขึ้น (เช่น SHA-2 ขนาด 512 บิต) ย่อมช่วยให้การ “ถอดรหัส” เป็นไปได้ยากขึ้น รวมถึงการใช้รหัสผ่านที่มีความยาวมากๆ เช่น 9 ตัวอักษรขึ้นไป หรือใช้ Salt ช่วย ในการเพิ่มความยาวของรหัสผ่านเข้าไปอีกชั้นหนึ่ง

Rainbow Table

ถึงแม้ GPU ระดับปานกลางที่สามารถคำนวณ Hash แบบ MD5 ได้ในระดับ 10 ล้าน Hash ต่อวินาที [5] จะราคาไม่แพงมากนัก แต่ก็ไม่ใช่ทุกคนที่จะมี GPU แบบนี้ใช้งาน จึงมีผู้คิดค้นวิธีที่สามารถนำผลลัพธ์จากการคำนวณ Hash มาใช้ซ้ำได้หลายๆ ครั้ง โดยไม่ต้องเสียเวลาคำนวณใหม่ หลักการคือเก็บค่ารหัสผ่านที่สุ่มขึ้นมา พร้อมกับค่า Hash ที่คำนวณออกมาได้เอาไว้ในไฟล์ โดยอาจแบ่งแยกตามความยาวของรหัสผ่านเพื่อให้ใช้งานได้ง่าย เวลานำมาใช้งานก็เพียงแค่เทียบค่า Hash ที่ต้องการหาค่าตั้งต้นมาเทียบกับค่าที่มีในไฟล์ วิธีนี้ก็จะใช้แค่ความสามารถในการค้นหาข้อมูลเท่านั้น ไม่จำเป็นต้องใช้ความสามารถในการคำนวณเลย ไฟล์ที่เก็บข้อมูล Hash และค่าตั้งต้นนี้เรียกว่า Rainbow Table

สำหรับผู้ที่มี GPU ดีๆ ใช้งาน อาจจะยอมเสียเวลาครั้งเดียวเพื่อสร้าง Hash ตามความยาว ความซับซ้อน และรูปแบบการ Hash ที่ต้องการออกมาเก็บเอาไว้ ส่วนครั้งต่อไปที่ต้องการใช้งานก็เอาไฟล์นี้ไปใช้ได้ทันที แต่ถ้าไม่มี GPU หรือไม่ต้องการเสียเวลาก็อาจใช้วิธีดาวน์โหลด Rainbow Table ที่มีผู้สร้างขึ้นมาเสร็จแล้ว และมีแจกจ่ายบนอินเตอร์เน็ตมาใช้งาน ซึ่ง Rainbow Table ที่มีแจกจ่ายนี้ ส่วนมากจะอยู่ในรูปแบบเฉพาะสำหรับโปรแกรม “ถอดรหัส” Hash แต่ละตัว เช่นไฟล์ชนิด .rti สำหรับโปรแกรม rcracki_mt [6] และแบ่งแยกตามชนิดของ Hash ความยาวของค่าตั้งต้น (ในที่นี้คือรหัสผ่าน) กับความซับซ้อนของรหัสผ่าน เช่น มีสัญลักษณ์พิเศษหรือไม่ เป็นต้น

ความเชื่ออย่างหนึ่งเกี่ยวกับ Rainbow Table ก็คือ มันสามารถ “ถอดรหัส” Hash ได้ทุกชนิด เรียกว่าการที่ผู้ไม่ประสงค์ดีได้ Hash ของรหัสผ่านไปนั้นก็เท่ากับได้รหัสผ่านไปโดยตรงนั่นเอง ความเชื่อนี้อาจจะไม่ผิดโดยสิ้นเชิง แต่อาจกล่าวได้ว่า ยังไม่ถูกต้องนัก เพราะการที่จะใช้ Rainbow Table ในการหารหัสผ่านที่ถูกต้องจาก Hash ใดๆ จะต้องใช้ Rainbow Table ที่สร้างขึ้นมาจาก Hash ที่ตรงกัน ความยาวรหัสผ่านตรงกัน (ไม่มากกว่าหรือน้อยกว่า) และมีความซับซ้อนระดับเดียวกันหรือมากกว่า ขั้นแรก ผู้ที่จะ “ถอดรหัส” Hash จะต้องรู้ว่าเป็น Hash ชนิดใด จากนั้นก็ต้องเดาความซับซ้อนของรหัสผ่าน ว่าต้องใช้ระดับใด ซึ่งในส่วนนี้อาจจะใช้วิธีเลือกความซับซ้อนที่สูงที่สุดเอาไว้ก่อนก็ได้ ส่วนสุดท้าย ที่ยากที่สุด คือ เดาความยาวของรหัสผ่าน เพราะอย่างที่ทราบแล้วว่า ค่า Hash จะมีค่าความยาวคงที่ ไม่ว่าจะมีค่าตั้งต้นขนาดเท่าไหร่ก็ตาม การพิจารณาความยาวของค่าตั้งต้นจากค่า Hash จึงเป็นไปได้ยาก ผู้ไม่ประสงค์ดีจะรู้ได้ว่า Rainbow Table ที่นำมาใช้มีความยาวของค่าตั้งต้นไม่ตรงกับรหัสผ่านที่ Hash เอาไว้ได้ก็ต่อเมื่อเสียเวลาลงมือไปแล้วเท่านั้น

นอกจากนี้ ในปัจจุบันก็ยังไม่ได้มีการสร้าง Rainbow Table ขึ้นมาสำหรับ Hash ทุกชนิด หรือทุกความยาวของรหัสผ่าน เพราะถึงแม้จะมี CPU หรือ GPU ที่มีความสามารถสูงๆ มากมาย แต่สำหรับ Hash ที่ต้องใช้พลังในการประมวลผลมาก เช่น SHA-2 ขนาด 256 บิตขึ้นไป รวมถึง Hash พื้นฐานเช่น MD5 เอง ในระดับความยาว 10 หรือ 12 ตัวอักษร หรือใช้ MD5 ซ้ำๆ หลายๆ ครั้ง ก็ยังจะต้องใช้เวลาในการสร้าง Rainbow Table มากจนไม่สามารถใช้ GPU ทั่วไปได้ ทำให้ยังไม่พบว่ามีการสร้าง Rainbow Table สำหรับ Hash ประเภทนี้ขึ้นมาแจกจ่ายเช่นกัน

Salting

จากที่กล่าวมาแล้วว่า รหัสผ่านยิ่งยาว ยิ่งต้องใช้เวลามากในการ “ถอดรหัส” แต่การบังคับให้ผู้ใช้งานระบบใดๆ สร้างรหัสผ่านขนาด 10 ตัวอักษรขึ้นไปก็อาจจะไม่เป็นการสะดวกแก่ผู้ใช้งานนัก วิธีการหนึ่งที่สามารถนำมาใช้เพิ่มความยาวให้กับรหัสผ่านโดยมีผลกระทบกับผู้ ใช้น้อยก็คือการเพิ่มข้อมูลที่สุ่มขึ้นมาจำนวนหนึ่งเข้าไปในรหัสผ่านที่ผู้ ใช้ป้อนก่อนจะนำไป Hash ข้อมูลชุดที่เพิ่มขึ้นนี้เรียกว่า Salt ตัวอย่างเช่น เมื่อผู้ใช้งานตั้งค่ารหัสผ่านขึ้นมาเป็น “secretpassword” ซึ่งมีความยาว 14 ตัวอักษร ระบบจะสุ่มค่า Salt ขึ้นมาค่าหนึ่ง สมมุติให้เป็นค่า “fojgshU1” ซึ่งมีความยาว 8 ตัวอักษร ก่อนที่จะนำรหัสผ่านไปเก็บ ระบบจะนำรหัสผ่านกับ Salt มาต่อกัน แล้วจึงหา Hash ซึ่งจะเท่ากับ Hash นี้มีค่าตั้งต้นถึง 22 ตัวอักษร ซึ่งต้องใช้เวลาในการ “ถอดรหัส” นานกว่า Hash ของรหัสผ่านเดิมมาก ถึงแม้ว่าผู้ไม่ประสงค์ดีจะสามารถอ่านค่า Salt ของแต่ละรหัสผ่านได้โดยตรง (เนื่องจากปกติจะเก็บ Salt เป็น Plain Text) แต่ก็ไม่ได้ช่วยให้การสุ่มหารหัสผ่านที่ถูกต้องง่ายขึ้นแต่อย่างใด เพราะอุปสรรคของการ “ถอดรหัส” Hash อยู่ที่จำนวนครั้งที่ต้องคำนวณ Hash เป็นสำคัญ ในกรณีที่ให้รหัสผ่านเป็นตัวอักษรตัวเล็ก ตัวใหญ่ และตัวเลขเท่านั้น ซึ่งจะมีความเป็นไปได้ 62 แบบ จะเท่ากับว่า ถ้ารหัสผ่านยาว 14 ตัวอักษร ผู้ไม่ประสงค์ดีอาจต้อง Hash ถึง 62^14 ครั้ง ถึงจะได้ค่ารหัสผ่านที่ถูกต้อง แต่ถ้าเพิ่ม Salt เข้าไปอีก 8 ตัวอักษร จำนวนครั้งที่อาจต้องใช้จะมีถึง 62^22 ครั้ง ต่างกันถึง 218,340,105,584,896 เท่า ซึ่งเป็นเวลาที่เพิ่มขึ้นอย่างมหาศาลทีเดียว

Conclusion

  1. ควรเก็บรหัสผ่านในรูปแบบ Hash เท่านั้น การเข้ารหัสลับ (Encyption) อาจไม่แตกต่างจากการเก็บรหัสผ่านเป็น Plain Text เมื่อถูกโจมตี
  2. รหัสผ่านยิ่งยาว ยิ่งใช้เวลาในการ “ถอดรหัส” มาก
  3. MD5 ยังเพียงพอที่จะใช้เก็บรหัสผ่าน ถ้าใช้ถูกวิธี แต่ก็ยังสู้ SHA-2 เมื่อใช้งานอย่างถูกวิธีเช่นกันไม่ได้
  4. การใช้ Salt หรือ Hash ซ้ำๆ หลายๆ ครั้งช่วยเพิ่มความมั่นคงปลอดภัยได้
  5. ที่ดีที่สุดคือ ระวังอย่าให้รหัสผ่านที่เก็บอยู่ ถูกเข้าถึงได้จากบุคคลภายนอก

อ้างอิง

  1. http://www.pcworld.com/article/161078/one_third_use_same_password.html
  2. http://www.win.tue.nl/hashclash/
  3. http://www.kb.cert.org/vuls/id/836068
  4. http://csrc.nist.gov/groups/ST/hash/policy.html
  5. http://majuric.org/software/cudamd5/
  6. http://www.freerainbowtables.com/en/download/
Clear