วิธีใช้งาน
- พิมพ์หรือวางข้อความ ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” เพื่อป้อนไบต์ หรือคลิก “เปิดไฟล์” เพื่อเลือกไฟล์ที่ต้องการตรวจสอบ
- คง SHA-256 ไว้ที่ “อัลกอริทึม” แล้วเลือกเอาต์พุตเป็น “hex (ตัวพิมพ์เล็ก)” “HEX (ตัวพิมพ์ใหญ่)” หรือ Base64
- วางเช็กซัมจากหน้าดาวน์โหลดลงในช่อง “เปรียบเทียบกับ” หากขึ้นว่า “ตรงกัน” แสดงว่าไฟล์เหมือนกันทุกประการ
- คัดลอกผลลัพธ์ หรือคัดลอก SHA-384, SHA-512 หรือไดเจสต์อื่นจากตาราง “อัลกอริทึมทั้งหมด”
SHA-256 คืออะไร
SHA-256 เป็นสมาชิกที่ใช้กันแพร่หลายที่สุดในตระกูล SHA-2 ออกแบบโดย NSA และได้รับการกำหนดเป็นมาตรฐานโดย NIST ในปี 2002 ใน FIPS 180-2 ปัจจุบันกำหนดไว้ใน FIPS 180-4 และ RFC 6234 ก็อธิบายอัลกอริทึมชุดเดียวกันพร้อมโค้ดอ้างอิง SHA-256 ประมวลผลบล็อกขนาด 512 บิตใน 64 รอบด้วยการคำนวณแบบ 32 บิต และให้ไดเจสต์ขนาด 256 บิต คือเลขฐานสิบหก 64 อักขระหรือ Base64 44 อักขระ ยังไม่มีการโจมตีแบบหาการชนกันหรือหาพรีอิมเมจ (preimage) ที่ทำได้จริง และ SHA-256 เป็นตัวเลือกมาตรฐานสำหรับ:
- ใบรับรองและแฮนด์เชกของ TLS รวมถึงการลงนามโค้ด
- Bitcoin ซึ่งใช้ SHA-256 สองครั้งสำหรับแฮชของบล็อก การพิสูจน์การทำงาน (proof of work) และ ID ของธุรกรรม (เช็กซัมในที่อยู่ Base58Check ก็มาจากการแฮชสองครั้งแบบเดียวกัน)
- ไฟล์เช็กซัมอย่าง
SHA256SUMSไดเจสต์ของอิมเมจคอนเทนเนอร์ (sha256:...) และ Subresource Integrity
การตรวจสอบไฟล์ที่ดาวน์โหลด
เปิดไฟล์ที่ดาวน์โหลดมาแล้ววางเช็กซัมของผู้เผยแพร่ลงในช่อง “เปรียบเทียบกับ” ตัวพิมพ์เล็กหรือใหญ่ไม่มีผล และใช้ค่า Base64 ได้เช่นกัน “ตรงกัน” หมายความว่าไฟล์เหมือนกับไฟล์ที่ใช้สร้างเช็กซัมทุกไบต์ แต่ไม่ได้พิสูจน์ว่าใครเป็นผู้สร้างไฟล์ ดังนั้นควรนำเช็กซัมมาจากเว็บไซต์ HTTPS ของผู้เผยแพร่หรือจากไฟล์ SHA256SUMS ที่มีลายเซ็น ไม่ใช่จากมิเรอร์ที่ให้บริการดาวน์โหลดไฟล์นั้น
สำหรับข้อความ แฮชคำนวณจากไบต์ ไม่ใช่จากอักขระ การจบบรรทัดแบบ Windows (CRLF) เครื่องหมายลำดับไบต์ (BOM) หรือการใช้ UTF-16 แทน UTF-8 ล้วนทำให้ได้ SHA-256 ที่ต่างกันโดยสิ้นเชิง ใช้ตัวเลือก “การเข้ารหัสอักขระ” หรืออินพุตเลขฐานสิบหกเพื่อแฮชไบต์ชุดเดียวกับที่ระบบอื่นแฮชไว้ทุกไบต์
การโจมตีแบบขยายความยาวและรหัสผ่าน
SHA-256 เสี่ยงต่อการโจมตีแบบขยายความยาว (length extension) เช่นเดียวกับ MD5, SHA-1 และ SHA-512 หากรู้ค่า SHA-256(secret + message) และความยาวของข้อมูลลับ ผู้โจมตีสามารถคำนวณแฮชที่ถูกต้องของข้อความนั้นซึ่งต่อท้ายด้วยแพดดิงและข้อมูลที่ตนเลือกได้ โดยไม่ต้องรู้ข้อมูลลับเลย หากต้องการลงนามหรือยืนยันความถูกต้องของข้อมูลด้วยคีย์ ให้ใช้ HMAC-SHA256 จาก ตัวสร้าง HMAC แทนการนำคีย์และข้อความมาแฮชรวมกัน
ความเร็วยังเป็นเหตุผลที่ SHA-256 แบบธรรมดาไม่เหมาะกับการจัดเก็บรหัสผ่าน ใครก็ตามที่ได้แฮชไปสามารถลองเดารหัสผ่านได้เร็วเท่ากับที่การ์ดกราฟิกของตนคำนวณ SHA-256 ได้ และรหัสผ่านที่เหมือนกันก็ให้แฮชที่เหมือนกัน ให้ใช้ Argon2id, scrypt, bcrypt หรือ PBKDF2-HMAC-SHA256 ที่ตั้งจำนวนรอบไว้สูง ซึ่งทั้งหมดนี้ใช้ salt
SHA-256 ในบรรทัดคำสั่งและในโค้ด
$ printf 'abc' | sha256sum
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad -
sha256sum -c SHA256SUMS # Linux: ตรวจสอบไฟล์ตามรายการ
shasum -a 256 file.iso # macOS
certutil -hashfile file.iso SHA256 # Windows
Get-FileHash file.iso # PowerShell (ค่าเริ่มต้นคือ SHA256)
# Python
hashlib.sha256(data).hexdigest()
// Node.js
crypto.createHash('sha256').update(data).digest('hex')
ค่าของ abc คือเวกเตอร์ทดสอบ (test vector) จากมาตรฐาน ลองพิมพ์ abc ด้านบนเพื่อดูผลลัพธ์เดียวกัน ตาราง “อัลกอริทึมทั้งหมด” ยังแสดงค่า SHA-384, SHA-512, SHA-1, MD5 และ CRC ของอินพุตของคุณด้วย
ตัวอย่าง
| อินพุต (UTF-8) | SHA-256 |
|---|---|
Hello, World! | dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f |
Base64.is | 63f2f446bc11a1f96175c0f77bdac08ca1b184ba42c3a42c34ddcbce00b1b800 |
你好 | 670d9743542cae3ea7ebe36af56bd53648b0a1126162e78d81a32934a711302e |
คำถามที่พบบ่อย
ถอดรหัส SHA-256 ได้หรือไม่
ไม่ได้ SHA-256 เป็นแฮชทางเดียว ไม่ใช่การเข้ารหัสลับ “ตัวถอดรหัส” ออนไลน์เพียงค้นหาแฮชในตารางของอินพุตที่รู้จัก จึงพบได้แค่รหัสผ่านที่ใช้กันทั่วไปและสตริงสั้น ๆ แต่หาข้อมูลที่ยาวหรือสุ่มไม่ได้เลย
ทำไม SHA-256 ของฉันจึงไม่ตรงกับเช็กซัมที่เผยแพร่ไว้
ส่วนใหญ่เป็นเพราะไฟล์ดาวน์โหลดมาไม่ครบหรือเป็นคนละเวอร์ชัน หรือคุณแฮชชื่อไฟล์แทนตัวไฟล์ ให้โหลดตัวไฟล์ด้วย “เปิดไฟล์” และตรวจสอบด้วยว่าค่าทั้งสองใช้อัลกอริทึมเดียวกัน ค่าเลขฐานสิบหก 128 อักขระมาจากแฮชขนาด 512 บิตอย่าง SHA-512 ไม่ใช่จาก SHA-256
จะได้แฮช SHA-256 ในรูป Base64 ได้อย่างไร
sha256- แม้ว่า sha384- จะพบบ่อยกว่า) และส่วนหัว HTTP Content-Digest ทั้งเลขฐานสิบหกและ Base64 บรรจุข้อมูล 32 ไบต์ชุดเดียวกัน แปลงไปมาได้ด้วย Base64 เป็น HexSHA-256 กับ SHA-2 เหมือนกันหรือไม่
SHA-2 เป็นตระกูลอัลกอริทึม ได้แก่ SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 และ SHA-512/256 โดย SHA-256 เป็นสมาชิกที่ใช้บ่อยที่สุด ส่วน SHA-3 (FIPS 202) เป็นการออกแบบแยกต่างหากที่อิงกับ Keccak และให้ผลลัพธ์ต่างกัน
แฮช SHA-256 ยาวเท่าใด
= SHA3-256 และ BLAKE2s มีความยาวเท่ากัน เครื่องมือระบุชนิดแฮชจะแสดงรายการอัลกอริทึมที่เป็นไปได้เหล่านี้สำหรับแฮชที่ไม่ทราบชนิด