TDCTF Academy Logo TDCTF ACADEMY

Expert 3: Zero-Knowledge Proofs - Membuktikan Tanpa Mengungkap

Target: Memahami zero-knowledge proofs - membuktikan Anda tahu sesuatu tanpa mengungkapkan apa yang Anda tahu
Tools: python3


Praktikum

Konsep ZKP:

  • Completeness: Jika statement benar, verifier selalu menerima
  • Soundness: Jika statement salah, prover tidak bisa menipu verifier
  • Zero-Knowledge: Verifier tidak belajar apapun selain bahwa statement itu benar
cd ~ && mkdir crypto-exp3 && cd crypto-exp3

python3 << 'PYEOF'
import hashlib, random

# === DEMO 1: Ali Baba Cave (3-color map simplified) ===
# Prover tahu password, membuktikan tanpa mengungkap password

class ZKPDemo:
def __init__(self):
self.secret = random.randint(1, 1000000) # rahasia prover

# === PROTOCOL: Prover membuktikan tahu secret ===
def commit(self):
"""Step 1: Prover kirim commitment"""
self.r = random.randint(1, 1000000)
self.commitment = hashlib.sha256(f"{self.secret}{self.r}".encode()).hexdigest()
return self.commitment

def respond(self, challenge):
"""Step 3: Prover respond to challenge"""
if challenge == 0:
return self.r # reveal random
else:
return self.secret # reveal secret? NO - ini bukan ZKP

def verify(self, commitment, challenge, response, secret):
"""Step 2 & 4: Verifier"""
if challenge == 0:
return hashlib.sha256(f"{secret}{response}".encode()).hexdigest() == commitment
else:
return False # simplified

# === DEMO 2: Graph Isomorphism (conceptual) ===
print("=== Zero-Knowledge Proof: Graph Coloring ==*")
print()
print("Skenario: Membuktikan peta bisa diwarnai 3 warna")
print("tanpa mengungkapkan warna sebenarnya")
print()

# Iterasi pengulangan = confidence level
print(f"{'Round':<8} {'Chance Prover Cheat':<25} {'Confidence'}")
print("-"*45)
confidence = 1.0
for round_num in range(1, 11):
confidence *= 0.5 # 50% chance per round
print(f"{round_num:<8} {f'1/{2**round_num}':<25} {f'{(1-confidence)*100:.2f}%':<12}")

print()
print("🔬 Analisis:")
print(" - Setiap round, verifier pilih edge random untuk diperiksa")
print(" - Prover harus membuka warna kedua node yang berdekatan")
print(" - Jika warna berbeda, edge valid!")
print(" - Setelah 10 round: confidence 99.9% bahwa peta valid!")
print(" - Tapi verifier TIDAK TAHU warna asli - hanya tahu edge itu valid!")
print()

# === DEMO 3: zk-SNARKs (konseptual) ===
print("=== zk-SNARKs di Dunia Nyata ==*")
print(" ✅ Zcash - Transaksi cryptocurrency anonim")
print(" ✅ Tornado Cash - Ethereum privacy mixer")
print(" ✅ zk-Rollups - Ethereum scaling (10x lebih murah)")
print(" ✅ MATIC - Polygon zkEVM")
print()
print("Zero-Knowledge memungkinkan:")
print(" • Membuktikan usia >18 tanpa tunjuk KTP")
print(" • Membuktikan cukup saldo tanpa tunjuk total")
print(" • Membuktikan KYC done tanpa kirim dokumen")
PYEOF

Temuan

Jenis ZKP Ukuran Proof Kompleksitas
Interactive (classic) Kecil Linear
zk-SNARKs 200 bytes Setup perlu trusted
zk-STARKs 100KB No trusted setup
Bulletproofs 1.5KB No trusted setup

Refleksi: Zero-knowledge proofs adalah salah satu penemuan kriptografi terpenting - memisahkan verifikasi dari pengetahuan. Di era digital di mana privasi terancam, ZKP memungkinkan kita membuktikan identitas, usia, atau kepemilikan tanpa mengungkap data pribadi.


Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy

PADA HALAMAN INI