Hash Functions

1. SHA-256 — avalanche effect & padding

Nhập 2 chuỗi gần giống nhau để thấy hash thay đổi hoàn toàn (avalanche effect). Với Web Crypto API — đây là SHA-256 thật.

SHA-256 của chuỗi 1:
SHA-256 của chuỗi 2:

Padding của chuỗi 1

SHA-256 chia message thành block 512 bit. Padding: thêm 0x80, đủ 0x00, rồi 64-bit length.

Data 0x80 (pad start) 0x00 (padding) Length (8 byte)

2. Birthday collision simulator

Chọn kích thước hash (n bit), chạy thử ngẫu nhiên, đếm số lần thử đến khi có collision. So sánh với lý thuyết 2^(n/2).

16 bit

3. MD5 & SHA-1 — timeline sụp đổ

MD5 (128-bit)

1992
Ron Rivest thiết kế MD5 — cải tiến MD4.
1996
Boer & Bosselaers tìm weakness trong compression function MD5.
2004 ⚠
Wang et al.: collision thực trong vài giờ trên PC thường. MD5 cryptographically broken.
2008 ⚠
Sotirov et al.: chosen-prefix → forge CA certificate. Rouge CA tấn công SSL/TLS.
2012 ⚠
Flame malware: dùng MD5 forge Windows Update cert → inject malware vào hệ thống có update.
❌ MD5 = DEAD. Không dùng cho bất kỳ mục đích crypto nào.

SHA-1 (160-bit)

1995
SHA-1 chuẩn hóa bởi NSA/NIST.
2005
Wang et al.: attack lý thuyết ~2⁶³ ops (< brute 2⁸⁰). SHA-1 "weakened".
2017 ⚠
SHAttered (Google + CWI): 2 PDF khác nhau cùng SHA-1 hash. Cost: ~6,500 CPU-years.
2019–2020 ⚠
Chosen-prefix SHA-1 collision với $75k → $50k GPU budget. Git đang chuyển SHA-256.
❌ SHA-1 = DEAD. Không dùng cho signature, certificate, hay collision-resistant context.

SHA-256 & SHA-3 — An toàn

✓ SHA-256 (2001): vẫn an toàn 2024. Dùng trong TLS, Bitcoin, Git (khi chuyển).
✓ SHA-3/Keccak (2015): sponge construction — không bị length extension attack. Backup cho SHA-2.

4. Length Extension Attack

Minh họa: API ký request bằng SHA-256(secret ‖ message). Mallory biết hash nhưng không biết secret → forge request mới.

💡 Fix: Dùng HMAC thay vì hash trực tiếp. HMAC(K,M) = H((K⊕opad)‖H((K⊕ipad)‖M)) — double hashing với key mixing ngăn extension.