ลองจินตนาการว่าคุณสามารถนำข้อมูลใด ๆ — คำเดียว นิยายเล่มหนึ่ง วิดีโอ 4 GB — และลดให้เป็นสตริงอักขระสั้น ๆ ขนาดคงที่ที่ระบุมันได้อย่างเฉพาะเจาะจง เปลี่ยนจุลภาคเดียวในต้นฉบับแล้วสตริงจะเปลี่ยนไปอย่างสิ้นเชิง และไม่มีทางย้อนกระบวนการเพื่อกู้คืนข้อมูลต้นฉบับได้
นั่นคือสิ่งที่ฟังก์ชันแฮชเข้ารหัสทำ มันเป็นหนึ่งในองค์ประกอบพื้นฐานที่สำคัญที่สุดของความปลอดภัยสมัยใหม่ และมันปกป้องเกือบทุกอย่างที่คุณทำออนไลน์อย่างเงียบ ๆ
อุปมาลายนิ้วมือ
แฮชทำงานเหมือนลายนิ้วมือดิจิทัล ลายนิ้วมือของคุณระบุตัวคุณได้อย่างเฉพาะเจาะจง แต่ไม่มีใครสามารถสร้างใบหน้าของคุณจากมันได้ เช่นเดียวกัน แฮชเข้ารหัสระบุข้อมูลชิ้นหนึ่งได้อย่างเฉพาะเจาะจงโดยไม่เปิดเผยว่าข้อมูลนั้นคืออะไร
ป้อน input ใด ๆ เข้าสู่ฟังก์ชันแฮชแล้วคุณจะได้ digest (เรียกอีกอย่างว่า hash value หรือ checksum) — สตริงอักขระ hexadecimal ขนาดคงที่ SHA-256 หนึ่งในอัลกอริทึมที่พบบ่อยที่สุด จะให้ output 64 อักขระเสมอไม่ว่า input จะมีขนาดเท่าไหร่
| Input | SHA-256 digest (16 อักขระแรก) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Wikipedia dump ทั้งหมด | (ยังคง 64 อักขระ) |
คุณสมบัติสำคัญสี่ประการ
ฟังก์ชันจะมีคุณสมบัติเป็นแฮชเข้ารหัสก็ต่อเมื่อตรงตามคุณสมบัติเหล่านี้:
- กำหนดได้แน่นอน Input เดียวกันจะให้ output เดียวกันเสมอ บนเครื่องใดก็ได้ เวลาใดก็ได้
- ทางเดียว (pre-image resistance) เมื่อได้แฮชแล้ว เป็นไปไม่ได้ในทางปฏิบัติที่จะหา input ดั้งเดิม คุณไม่สามารถ "ถอดแฮช" ข้อมูลได้
- ทนต่อการชน เป็นไปไม่ได้ในทางปฏิบัติที่จะหา input สองตัวที่ต่างกันซึ่งให้ digest เดียวกัน สำหรับ SHA-256 โอกาสของการชนโดยบังเอิญอยู่ที่ประมาณ 1 ใน 2^128 — ตัวเลขที่มากกว่าอะตอมในจักรวาลที่สังเกตได้
- เอฟเฟกต์หิมะถล่ม การเปลี่ยนบิตเดียวใน input จะพลิกประมาณครึ่งหนึ่งของบิตใน output ไม่มีรูปแบบหรือความสัมพันธ์ที่ตรวจจับได้ระหว่าง input ที่คล้ายกัน
ความแตกต่างสำคัญ: Hashing ไม่ใช่ encryption Encryption สามารถย้อนกลับได้ด้วยกุญแจ; hashing จงใจไม่สามารถย้อนกลับได้ คุณเข้ารหัสข้อมูลเพื่อปกป้องระหว่างการส่ง คุณแฮชข้อมูลเพื่อตรวจสอบความสมบูรณ์หรือเก็บหลักฐานโดยไม่เก็บต้นฉบับ
อัลกอริทึมแฮชทั่วไป
MD5 (1991)
- Output: 128 บิต (32 อักขระ hex)
- สถานะ: ถูกเจาะทางเข้ารหัส นักวิจัยสามารถสร้างการชนได้ในวินาทีบนแล็ปท็อป
- ยังพบใน: checksum ที่ไม่ใช่ด้านความปลอดภัยสำหรับดาวน์โหลดไฟล์และระบบเก่า
SHA-1 (1995)
- Output: 160 บิต (40 อักขระ hex)
- สถานะ: เลิกใช้สำหรับความปลอดภัย Google สาธิตการชนที่ใช้ได้จริงในปี 2017 (การโจมตี "SHAttered")
- ยังพบใน: Git repository เก่า, ใบรับรองเก่าบางส่วน
SHA-256 (2001)
- Output: 256 บิต (64 อักขระ hex)
- สถานะ: มาตรฐานปัจจุบัน ไม่มีการโจมตีที่ใช้ได้จริงที่ทราบ
- ใช้ใน: ใบรับรอง TLS, Bitcoin, การแฮชรหัสผ่าน, ลายเซ็นดิจิทัล, การตรวจสอบความสมบูรณ์ไฟล์
SHA-3 (2015)
- Output: แปรผัน (โดยทั่วไป 256 บิต)
- สถานะ: มาตรฐานล่าสุด อิงจากการออกแบบภายในที่แตกต่างอย่างสิ้นเชิง (Keccak sponge construction) จากตระกูล SHA-2
- ใช้ใน: ระบบที่มองไปข้างหน้า, Ethereum, สถานการณ์ที่ต้องการความหลากหลายของอัลกอริทึม
| อัลกอริทึม | ขนาด output | ปลอดภัย? | ความเร็ว |
|---|---|---|---|
| MD5 | 128 บิต | ไม่ | เร็วมาก |
| SHA-1 | 160 บิต | ไม่ | เร็ว |
| SHA-256 | 256 บิต | ใช่ | ปานกลาง |
| SHA-3-256 | 256 บิต | ใช่ | ปานกลาง |
Cryptographic hashing ใช้ที่ไหน
การจัดเก็บรหัสผ่าน
เมื่อคุณสร้างบัญชี ระบบที่ออกแบบมาอย่างดีจะไม่เก็บรหัสผ่านของคุณเป็นข้อความธรรมดา มันเก็บแฮช เมื่อคุณเข้าสู่ระบบ ระบบจะแฮชสิ่งที่คุณพิมพ์แล้วเปรียบเทียบกับค่าที่เก็บไว้ แม้ฐานข้อมูลจะถูกเจาะ ผู้โจมตีจะได้แฮช — ไม่ใช่รหัสผ่าน
ระบบสมัยใหม่ไปไกลกว่านั้นโดยเพิ่ม salt สุ่ม (ข้อมูลเพิ่มเติมที่เพิ่มก่อนแฮช) และใช้อัลกอริทึมที่ช้าโดยเจตนาเช่น bcrypt, scrypt หรือ Argon2 เพื่อทำให้การเดาแบบ brute-force เป็นไปไม่ได้ในทางปฏิบัติ
การตรวจสอบความสมบูรณ์ของไฟล์
ผู้จัดจำหน่ายซอฟต์แวร์เผยแพร่ SHA-256 checksum ควบคู่กับการดาวน์โหลด หลังจากดาวน์โหลด คุณคำนวณแฮชของไฟล์บนเครื่องของคุณแล้วเปรียบเทียบ ค่าที่ตรงกันพิสูจน์ว่าไฟล์ไม่ได้เสียหายหรือถูกดัดแปลงระหว่างการส่ง
ลายเซ็นดิจิทัล
เมื่อคุณลงลายเซ็นดิจิทัลในเอกสาร ระบบจะแฮชเอกสารก่อน แล้วเข้ารหัสแฮชด้วย private key ของคุณ ผู้รับถอดรหัสด้วย public key ของคุณแล้วเปรียบเทียบกับแฮชที่ตัวเองคำนวณจากเอกสาร นี่มีประสิทธิภาพมากกว่าการเข้ารหัสทั้งเอกสารและพิสูจน์ทั้งผู้เขียนและความสมบูรณ์
บล็อกเชน
แต่ละบล็อกในบล็อกเชนมีแฮชของบล็อกก่อนหน้า สร้างห่วงโซ่ที่ไม่สามารถเปลี่ยนแปลงได้ การแก้ไขธุรกรรมในอดีตจะเปลี่ยนแฮชของบล็อกนั้น ซึ่งทำลายห่วงโซ่จากจุดนั้นเป็นต้นไป ทำให้การดัดแปลงปรากฏทันที
ทำไม MD5 และ SHA-1 ถือว่าถูกเจาะ
อัลกอริทึมแฮช "ถูกเจาะ" เมื่อใครบางคนสามารถสร้าง input สองตัวที่ต่างกันโดยเจตนาซึ่งให้แฮชเดียวกัน (การชน) สิ่งนี้บ่อนทำลายทุกกรณีใช้งานที่พึ่งพาความเป็นเอกลักษณ์
- MD5: สามารถสร้างการชนได้ในวินาที นักวิจัยสร้างไฟล์ PDF สองไฟล์ที่ต่างกันแต่มี MD5 hash เหมือนกัน
- SHA-1: การโจมตี SHAttered ในปี 2017 สร้าง PDF สองไฟล์ที่ต่างกันแต่มี SHA-1 hash เหมือนกัน ต้องใช้เวลาประมวลผล CPU เดียวประมาณ 6,500 ปี (ทำได้ด้วยทรัพยากรคลาวด์)
กฎเชิงปฏิบัติ: อย่าใช้ MD5 หรือ SHA-1 สำหรับสิ่งที่เกี่ยวข้องกับความปลอดภัยเด็ดขาด — รหัสผ่าน ใบรับรอง ลายเซ็นดิจิทัล หรือการตรวจสอบความสมบูรณ์ที่อาจมีผู้ไม่ประสงค์ดีเกี่ยวข้อง ใช้ SHA-256 หรือ SHA-3 แทน
เรียนรู้เพิ่มเติม
Hashing เป็นหนึ่งในแนวคิดที่เข้าใจง่ายเมื่อคุณลองทดลอง ลองแฮชประโยค แล้วเปลี่ยนอักขระหนึ่งตัวและสังเกตเอฟเฟกต์หิมะถล่มด้วยตัวเอง
- วิธีสร้างและตรวจสอบแฮช — บทช่วยสอนทีละขั้นตอน
- Hash Generator — คำนวณ SHA-256, MD5, SHA-512 และอื่น ๆ ทันทีในเบราว์เซอร์
- Hash Identifier — วางแฮชที่ไม่รู้จักแล้วระบุอัลกอริทึม
