เครื่องมือสร้าง Hash MD5 และ SHA

พิมพ์หรือวางข้อความแล้วค่า hash จะขึ้นครบทั้งห้าแบบพร้อมกัน คุณจึงไม่ต้องรู้ก่อนว่า checksum ที่จะเทียบใช้อัลกอริทึมไหน ระบบคำนวณจากไบต์ UTF-8 เหมือนที่เครื่องมือบนบรรทัดคำสั่งทำ ส่วน MD5 กับ SHA-1 ใส่ไว้เพราะ checksum และระบบเก่ายังใช้กันอยู่ และมีป้ายกำกับไว้ว่าไม่เหมาะกับรหัสผ่านหรือลายเซ็นดิจิทัล

ค่า hash ของข้อความด้านบน
อัลกอริทึมค่า Hashการทำงาน

ควรใช้อัลกอริทึมไหน

อัลกอริทึมความยาวเหมาะกับกันการชนกันโดยเจตนาได้ไหม
MD532 ตัวอักษร hexตรวจว่าไฟล์ที่ดาวน์โหลดมาครบไหมไม่ได้: ทำให้ชนกันใช้เวลาไม่กี่นาที
SHA-140 ตัวอักษร hexรหัสอ็อบเจกต์ของ Git ระบบเก่าไม่ได้: แตกจริงมาตั้งแต่ปี 2017
SHA-25664 ตัวอักษร hexตัวเลือกตั้งต้นสำหรับงานใหม่ทุกอย่างได้
SHA-38496 ตัวอักษร hexกรณีที่มีข้อกำหนดให้ใช้ค่ายาวขึ้นได้
SHA-512128 ตัวอักษร hexเหมือนข้างบน และเร็วกว่า SHA-256 บนเครื่อง 64 บิตได้

ความต่างในคอลัมน์สุดท้ายแคบกว่าที่ฟังดู MD5 ใช้ตรวจไฟล์ที่ดาวน์โหลดมาไม่ครบได้สบาย เพราะไฟล์เสียเป็นอุบัติเหตุ และอุบัติเหตุไม่ทำให้ค่า hash ชนกันพอดี แต่ใช้ไม่ได้ในที่ที่ ผู้โจมตีเลือกข้อมูลเข้าเองได้ เพราะการชนกันคือตัวการโจมตี

สิ่งหนึ่งที่ทั้งหมดนี้ไม่ได้มีไว้ทำคือเก็บรหัสผ่าน เพราะถูกออกแบบมาให้เร็ว ซึ่งตรงข้ามกับที่การเก็บรหัสผ่านต้องการ ให้ใช้ bcrypt, scrypt หรือ Argon2 ที่จงใจทำให้ช้า

วิธีตรวจไฟล์ที่ดาวน์โหลดกับ checksum ที่ประกาศไว้

  1. คำนวณ hash ของไฟล์บนเครื่องคุณเอง ไม่ต้องลงโปรแกรมเพิ่ม บน macOS หรือ Linux ใช้ shasum -a 256 ชื่อไฟล์ บน Windows ใช้ certutil -hashfile ชื่อไฟล์ SHA256
  2. เทียบกับค่าที่ประกาศไว้ข้างลิงก์ดาวน์โหลด
  3. ถ้าไม่ตรง แปลว่าไฟล์ที่ได้ไม่ใช่ไฟล์ที่เขาเผยแพร่ ลองโหลดใหม่ก่อนจะคิดไปไกล เพราะไฟล์โหลดไม่ครบพบบ่อยกว่าไฟล์ถูกแก้ไขมาก

ถ้าอยากเทียบทีละตัวอักษรแทนการเพ่งในหน้าจอ terminal ก็วางทั้งสองค่าลงในช่องด้านบนได้

สิ่งที่ควรรู้ว่าวิธีนี้พิสูจน์อะไร มันพิสูจน์ว่าไฟล์ตรงกับที่เว็บนั้นประกาศไว้ ถ้าตัวเว็บเองถูกเจาะ ค่า checksum ก็ถูกประกาศโดยผู้โจมตีคนเดียวกัน สิ่งที่กันกรณีนั้นได้คือลายเซ็นดิจิทัล ไม่ใช่ checksum

ทำไมข้อความเดียวกันถึงได้ค่า hash ไม่เท่ากัน

hash คำนวณจากไบต์ ไม่ใช่จากตัวอักษร อะไรก็ตามที่เปลี่ยนไบต์จะเปลี่ยนค่าทั้งหมด

  • การขึ้นบรรทัดใหม่ต่อท้าย ตัวการอันดับหนึ่ง คำสั่ง echo "abc" คำนวณจากสี่ไบต์ ไม่ใช่สามไบต์ ให้ใช้ echo -n หรือ printf แทน
  • การเข้ารหัสอักขระ เครื่องมือนี้ใช้ UTF-8 เหมือนเครื่องมือบนบรรทัดคำสั่ง ระบบที่ใช้ UTF-16 จะได้คนละค่าจากข้อความเดียวกัน
  • อักขระที่มองไม่เห็น ช่องว่างแบบไม่ตัดบรรทัดที่คัดลอกมาจากหน้าเว็บไม่ใช่ช่องว่างธรรมดา และอักขระ carriage return จากไฟล์ฝั่ง Windows ก็ไม่ใช่ความว่างเปล่า

คำถามที่พบบ่อย

ทำไมยังมี MD5 ทั้งที่ไม่ปลอดภัยแล้ว

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

ใช้กับไฟล์ได้ไหม

ไม่ได้ ช่องนี้รับเฉพาะข้อความที่พิมพ์หรือวาง แต่เครื่องคุณทำได้อยู่แล้วโดยไม่ต้องลงโปรแกรมเพิ่ม บน macOS และ Linux ใช้ shasum -a 256 ชื่อไฟล์ ส่วนบน Windows ใช้ certutil -hashfile ชื่อไฟล์ SHA256

ทำไมค่าที่ได้จาก terminal ไม่ตรงกัน

เกือบทุกครั้งเป็นเพราะขึ้นบรรทัดใหม่ต่อท้าย คำสั่ง echo จะเติมให้อัตโนมัติ ทำให้ echo "abc" คำนวณจากสี่ไบต์แทนที่จะเป็นสามไบต์ ถ้าจะเทียบกับที่พิมพ์ในเว็บนี้ ให้ใช้ echo -n หรือ printf แทน

ข้อความของฉันถูกอัปโหลดไหม

ไม่ ค่า SHA คำนวณด้วยระบบเข้ารหัสที่ติดมากับเบราว์เซอร์ ส่วน MD5 คำนวณด้วย JavaScript บนหน้านี้ และนโยบายความปลอดภัยของเว็บกำหนด connect-src ‘none’ เบราว์เซอร์จึงบล็อกการเรียกเครือข่ายจากหน้านี้