Lab 6: Hash Functions - MD5, SHA256, dan Collisions
Target: Memahami hash functions - properti, penggunaan, dan kelemahan
Tools:python3,openssl
Konsep
Hash function mengubah data input (berapapun panjangnya) menjadi fingerprint ukuran tetap. Sifat penting: satu arah (tidak bisa reverse).
Praktikum
cd ~ && mkdir crypto-lab6 && cd crypto-lab6
python3 << 'PYEOF'
import hashlib
messages = ["Hello", "Hello ", "hello", "Hello World!"]
print("=== Hash dari Pesan Serupa ===")
for msg in messages:
md5 = hashlib.md5(msg.encode()).hexdigest()
sha256 = hashlib.sha256(msg.encode()).hexdigest()
print(f"'{msg}'")
print(f" MD5: {md5}")
print(f" SHA256: {sha256}")
print()
# 2. Avalanche effect - 1 bit change
print("=== Avalanche Effect ===")
text1 = "The quick brown fox jumps over the lazy dog"
text2 = "The quick brown fox jumps over the lazy cog" # 1 char beda!
h1 = hashlib.sha256(text1.encode()).hexdigest()
h2 = hashlib.sha256(text2.encode()).hexdigest()
print(f"SHA256('{text1}'): {h1}")
print(f"SHA256('{text2}'): {h2}")
# Count different bits
bits_diff = sum(bin(a ^ b).count('1') for a, b in zip(bytes.fromhex(h1), bytes.fromhex(h2)))
print(f"Bit berbeda: {bits_diff} dari 256 bit ({bits_diff/256*100:.1f}%)")
print()
# 3. MD5 collision demo (conceptual)
print("=== MD5 Collision ==*")
print("MD5 sudah terbukti memiliki collision (two different inputs, same hash).")
print("Contoh nyata: dua file .py berbeda bisa punya MD5 sama!")
print("Gunakan SHA256 atau SHA3 sebagai gantinya.")
PYEOF
️ Analisis
| Hash | Bit Length | Collision? | Status |
|---|---|---|---|
| MD5 | 128 | ✅ Terbukti | ❌ Jangan gunakan |
| SHA1 | 160 | ✅ Terbukti (SHAttered) | ❌ Jangan gunakan |
| SHA256 | 256 | ❌ Belum | ✅ Aman |
| SHA3-256 | 256 | ❌ Belum | ✅ Recommended |
Refleksi: Hash adalah sidik jari digital. Gunakan SHA256 atau SHA3. Jangan pernah gunakan MD5 atau SHA1 untuk keamanan - sudah terbukti bisa dimanipulasi.
Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy