โšก CYBERMIND.FR // SECUBOX COMIX // OPORD-ZKP-001 โšก
PROUVE-LE
OU CASSE-TOI
๐Ÿ” Le guide ULTRA-VULGARISร‰ du Zero-Knowledge Proof Hamiltonien ๐Ÿ”
๐Ÿง  NP-COMPLET ๐Ÿ“ OEIS A000940 ๐Ÿ›ก OPENWRT ARM โšก FIAT-SHAMIR ๐Ÿ’€ 128-BIT SECURE
๐Ÿง™โ€โ™‚๏ธ GANDALF LE PROUVEUR
๐Ÿ’€ LE HASH SHA3-256
๐Ÿ•ต๏ธ LE Vร‰RIF NODE-B
๐Ÿ˜ˆ L'ATTAQUANT SCRIPT KIDDIE
ยซ SI TU NE COMPRENDS PAS APRรˆS ร‡A, RENDS TON BADGE DE Sร‰CURITร‰ ยป
01
C'EST QUOI LE PROBLรˆME DE BASE ?
Ou : pourquoi les mots de passe c'est de la merde depuis 1960
๐Ÿ˜ญ
PROB-01
Mร‰THODE CLASSIQUE
๐Ÿ˜ฐ
Mon mot de passe c'est Ch@t0nnE92!
"Tu envoies ton secret sur le rรฉseau. Bravo. Tu viens de le partager avec le monde."
BAM!
๐Ÿ•ต๏ธโ€โ™‚๏ธ
INTERCEPTร‰. MOT DE PASSE VOLร‰. GG WP NOOB.
LA SOLUTION ZKP
๐Ÿง™โ€โ™‚๏ธ
Je prouve que je connais le secret SANS JAMAIS LE DIRE...
MAGIE MATHร‰MATIQUE !
๐Ÿ˜ฑ AUTH CLASSIQUE
  • Tu envoies ton mot de passe en clair (ou presque)
  • Si le serveur est piratรฉ โ†’ ton mdp est volรฉ
  • Homme du milieu capte tout
  • Si base de donnรฉes leakรฉe โ†’ RIP
  • Rejouer l'auth โ†’ trivial
  • Ton chat s'appelle Chaton โ†’ crack en 0.3s
VS
๐Ÿ›ก AUTH ZKP HAMILTONIEN
  • Le secret H ne quitte JAMAIS ton nล“ud
  • Serveur compromis ? L'attaquant n'a rien
  • Interception rรฉseau โ†’ preuve inutile sans H
  • Base de donnรฉes leakรฉe โ†’ graphe public seulement
  • Anti-replay par session_nonce TTL 30s
  • Brute force : 10โถยฒ possibilitรฉs. Bonne chance.
02
LE LABYRINTHE SECRET
Cycle Hamiltonien 101 โ€” pour ta grand-mรจre et pour toi
๐Ÿ—บ
GRAPHE G (PUBLIC)
๐Ÿ—บ
Un rรฉseau de 50 nล“uds connectรฉs.
Tout le monde peut voir la carte.
CARTE PUBLIQUE !
CYCLE H (SECRET ๐Ÿ”’)
๐Ÿ—
Un chemin qui visite chaque nล“ud exactement une fois et revient au dรฉbut.
Toi seul connais ce chemin.
TOP SECRET !
POURQUOI C'EST HARD
๐Ÿ˜ฑ
Trouver H dans G = problรจme NP-complet.
Mรชme les meilleurs algos mettent l'รขge de l'univers pour n=50.
NP-HARD = GG NO RE
MAIS Vร‰RIFIER = FACILE
โœ…
Une fois qu'on te montre H, vรฉrifier qu'il est valide = O(n).
C'est l'asymรฉtrie magique de la crypto !
ASYMร‰TRIE FTW!
MEME-01
CE QUE PENSE TON CHEF
๐Ÿค“
C'est juste un genre de mot de passe compliquรฉ non ?
NON. C'EST DE LA SORCELLERIE MATHร‰MATIQUE.
MEME-02
ANALOGIE DU MONDE Rร‰EL
๐Ÿง™ Imagine : tu prรฉtends connaรฎtre un chemin dans un labyrinthe. Moi je brouille le labyrinthe entier. Je te demande soit de me montrer comment t'y retrouves dans le brouillard, soit de me montrer le chemin dans l'original. Tu peux pas prรฉparer les deux ร  l'avance si tu triches. ๐Ÿ˜ˆ
C'est รงa le ZKP. Voilร . Cours terminรฉ.
03
5 ร‰TAPES POUR PROUVER SANS RIEN DIRE
Le protocole NIZK Fiat-Shamir illustrรฉ comme si t'avais 8 ans
๐ŸŽฌ
ร‰TAPE 1 โ€” SETUP
Gร‰NรˆRE!
๐Ÿ—
CONSTRUIRE LE GRAPHE PIรˆGE
CE QUI SE PASSE VRAIMENT
๐Ÿง™โ€โ™‚๏ธ
Je gรฉnรจre un cycle hamiltonien H via Fisher-Yates + getrandom()...
...puis j'ajoute nร—1.0 arรชtes leurres au pif pour noyer H dans le graphe...
Rร‰SULTAT : G public (tout le monde voit la carte), H secret (seulement moi)!
๐Ÿ ANALOGIE SPAGHETTI : G c'est un plat de spaghettis enchevรชtrรฉs. H c'est le seul spaghetti qui va du bord gauche au bord droit en touchant chaque nouille exactement une fois. Bonne chance pour le trouver.
ร‰TAPE 2 โ€” COMMIT (SHA3-256)
๐ŸŽญ
CHOISIR UNE PERMUTATION ฯ€
Mรฉlanger tous les nล“uds du graphe au hasard. G devient G' = ฯ€(G). Mรชme graphe, nล“uds renommรฉs.
๐Ÿ”€ "Je mets un bonnet ร  l'รขne sur chaque ville du labyrinthe."
๐Ÿ”’
VERROUILLER CHAQUE ARรŠTE
Pour chaque paire (i,j) : gรฉnรฉrer un nonce 256 bits alรฉatoire. commit[i][j] = SHA3-256(bit โˆฅ nonce).
๐Ÿ“ฆ "Je mets chaque arรชte dans un coffre-fort et j'envoie les coffres fermรฉs."
๐Ÿ“จ
ENVOYER LA MATRICE
50ร—50 = 1250 commits envoyรฉs au vรฉrifieur. Il voit des hashes. Il comprend rien. C'est voulu.
๐Ÿคก "Vรฉrifieur : ok j'ai 1250 boรฎtes noires... cool?"
SHA3!
๐Ÿ”
commit[2][7] =
SHA3_256(
0x01 // arรชte prรฉsente
|| nonce_alรฉatoire
)
โ†’ a3f9c1...
VIEUX TEMPS : INTERACTIF
๐Ÿ’ฌ
Challenge : b = 0 ou 1 ?
Faut attendre la rรฉponse du vรฉrifieur. Lent. Chiant.
FIAT-SHAMIR!
โšก
LE HASH Dร‰CIDE ร€ TA PLACE
b = SHA3("ZKP-HAM-v1" โˆฅ G โˆฅ G' โˆฅ commits โˆฅ nonce)[0] & 1
NOUVELLE Rร‰ALITร‰ : NIZK
๐Ÿค–
Le vรฉrifieur n'a mรชme plus besoin d'รชtre lร  en direct !
La preuve est auto-suffisante. Non-Interactive. ROM.
Rร‰PONSE SI b = 0 ๐Ÿ”ต (CHALLENGE ISO)
๐Ÿง™โ€โ™‚๏ธ
Je rรฉvรจle ฯ€ ET tous les 1250 nonces.
Tu peux tout recalculer et vรฉrifier.
๐Ÿ—บ
G original
+ฯ€ PERMUTE
๐Ÿ—บ
G' mรฉlangรฉ
==? Vร‰RIFIE
โœ…
ACCEPT
Rร‰PONSE SI b = 1 ๐ŸŸ  (CHALLENGE CYCLE)
๐Ÿง™โ€โ™‚๏ธ
Je rรฉvรจle H' = ฯ€(H) dans G'.
Juste les 50 arรชtes du cycle + leurs nonces.
๐Ÿ—
H secret
+ฯ€ MASQUE
๐Ÿ—
H' dans G'
โœ“HC VALIDE
โœ…
ACCEPT
SOUNDNESS !
Pourquoi le tricheur se fait SYSTร‰MATIQUEMENT choper
๐Ÿ˜ˆ
LE TRICHEUR SANS H
Il doit committer AVANT de connaรฎtre le challenge. Il peut prรฉparer soit la rรฉponse-iso SOIT la rรฉponse-cycle. Pas les deux simultanรฉment.
Je parie sur b=0... ou b=1... MERDE.
PROBA DE SUCCรˆS
ยฝ
par round
2โปยนยฒโธ aprรจs 128 rounds
๐Ÿ’€
LA Rร‰ALITร‰ POUR L'ATTAQUANT
1 sur 340 282 366 920 938 463 463 374 607 431 768 211 456 chances de rรฉussir sans connaรฎtre H. C'est littรฉralement zรฉro.
RETRY LIMIT REACHED. BANNED 5min. ๐Ÿ’€
04
LES CHIFFRES QUI FONT PEUR
OEIS A000940 โ€” Pourquoi n=50 c'est AMPLEMENT suffisant
๐Ÿ“Š
ENTROPIE VS TAILLE DU GRAPHE (OEIS A000940)
n=20 ๐Ÿ› DEV
55 bits
๐Ÿ’€
n=35 โš  FAIBLE
80 bits
๐Ÿ˜ฌ
n=50 โœ… PROD
207 bits
๐Ÿ’ช
n=70 ๐Ÿš€ HIGH
330 bits
๐Ÿ›ก
n=100 ๐Ÿ† MAX
516 bits
๐ŸŒŒ
๐Ÿ“ FORMULE : a(n) โ‰ˆ (n-1)! / (4n) pour grand n. Notre n=50 donne ~10โถยฒ cycles distincts. L'univers observable a 10โธโฐ atomes. Tu vois l'idรฉe.
ANATOMIE D'UNE PREUVE NIZK (n=50)
๐Ÿ“ฆ
1250
commits SHA3
(50ร—50/2 paires)
๐ŸŽฒ
256
bits / nonce
(getrandom)
โšก
1
round NIZK
(Fiat-Shamir)
๐Ÿ›ก
128
bits sรฉcuritรฉ
ฮป target
Oร™ PART LE TEMPS CPU ?
  • 55% โ€” 1250ร— SHA3-256 (commits)
  • 20% โ€” Fiat-Shamir hash (gros input)
  • 15% โ€” Fisher-Yates permutation
  • 10% โ€” Sรฉrialisation / rรฉseau
๐Ÿคฏ MISE EN PERSPECTIVE : 10โถยฒ C'EST COMBIEN ?
โš›
10โธโฐ
Atomes dans l'univers observable
โฌ† PLUS GRAND QUE NOTRE ESPACE
โฑ
10โถยฒ
Cycles dans Kโ‚…โ‚€
(notre espace secret)
โ† C'EST NOTRE TRUC
๐Ÿ’ป
10ยนยฒ/s
Vitesse brute-force
du meilleur GPU
INSUFFISANT ร—10โตโฐ
๐ŸŒŒ
10โตโฐ ans
Pour brute-force
notre espace
UNIVERSES MORTS RIP
05
Dร‰PLOIEMENT SECUBOX โ€” LA VIE Rร‰ELLE
OpenWrt ARM, packages IPK, daemon procd et interface LuCI
๐ŸŒ
NODE-A : LE PROUVEUR
๐Ÿง™โ€โ™‚๏ธ
Je dรฉtiens H secret depuis init.sh
/etc/secubox/zkp/prover/
identity.graph (public)
identity.key.enc (๐Ÿ”’ AES-256-GCM)
LE Rร‰SEAU
SECUBOX-ZKPD
๐Ÿ“ก Port 7890
๐Ÿ” TLS transport
๐Ÿ“‹ Format TLV binaire
โฑ timeout 5s
๐Ÿšซ Ban 3 รฉchecs / 5min
๐Ÿ“Š syslog ANSSI
MAGIC: SECZ
NODE-B : LE Vร‰RIFIEUR
๐Ÿ•ต๏ธ
Je connais G public seulement
/etc/secubox/zkp/verifier/
trusted/node-a.pub
sessions/ (anti-replay TTL)
LUCI DASHBOARD
๐Ÿ–ฅ
โœ… ร‰tat du module
๐Ÿ”‘ Gestion des clรฉs
๐Ÿ‘ฅ Pairs de confiance
๐Ÿ”„ Rotation 90 jours
๐Ÿ“‹ Journal CSV ANSSI
๐Ÿ“ฆ ARBRE DE PACKAGES OPENWRT โ€” Dร‰PENDANCES
๐Ÿ“š luci-app-zkp Interface LuCI dashboard
โ†‘ DEPENDS
โš™ secubox-zkpd Daemon procd โ€” init.d โ€” UCI config
โ†‘ DEPENDS
๐Ÿ” zkp-hamiltonian Lib C99 + CLI: keygen prover verifier
โ†‘ DEPENDS
โš— libsodium โ‰ฅ 1.0.18 SHA3-256 + getrandom + sodium_memzero
โšก BUILD : make package/zkp-hamiltonian/compile -j$(nproc) V=s
๐Ÿ“ฒ INSTALL : opkg install zkp-hamiltonian_0.1.0-1_*.ipk
06
๐Ÿšจ OPSEC โ€” CE QUI PEUT FOIRER
Les piรจges qui transforment ton protocole parfait en passoire
๐Ÿ’€
rand() = MORT !
๐Ÿ˜ˆ
unsigned int seed = time(NULL);
ฯ€ = mauvaise_permutation();
Si tu utilises rand(), ta "permutation alรฉatoire" est dรฉterministe depuis l'heure systรจme. L'attaquant teste 86400 seeds max. Il trouve ฯ€ en quelques secondes. Game over.
โœ… SOLUTION : getrandom(buf, len, 0) โ€” jamais rand(), jamais time().
TIMING ATTACK !
โฑ
if (memcmp(a, b, 32) == 0)
return ACCEPT; // DANGEREUX !
memcmp() s'arrรชte au premier byte diffรฉrent. L'attaquant mesure le temps de rรฉponse en nanosecondes et reconstruit le hash byte par byte. C'est rรฉel. ร‡a marche vraiment.
โœ… SOLUTION : sodium_memcmp(a, b, 32) โ€” temps constant garanti.
โ˜  TABLE DES ERREURS FATALES โ€” SCORE : COMBAT
๐Ÿšจ ERREUR ๐Ÿ’€ CE QUE TU CROIS ๐Ÿ˜ฑ CE QUI SE PASSE VRAIMENT ๐Ÿ›ก FIX
rand() pour nonces "C'est alรฉatoire non ?" Prรฉdictible depuis l'heure. ฯ€ trouvรฉ en < 1s. getrandom()
memcmp() pour comparer commits "ร‡a compare les bytes" Timing leak. Hash reconstruit byte/byte. sodium_memcmp()
Pas de sodium_memzero() "Le GC va nettoyer" H reste en RAM. Core dump โ†’ secret volรฉ. explicit_bzero()
Pas de session_nonce "Qui va rejouer une preuve ?" L'attaquant rejoue indรฉfiniment. Auth permanente. nonce TTL 30s
Pas valider le cycle reรงu "Je fais confiance au prouveur" 50 arรชtes bidon โ†’ ACCEPT. Exploit trivial. validate_hamiltonian_cycle()
malloc() dans le code critique "La mรฉmoire c'est pas รงa" malloc() รฉchoue sur routeur 32Mo RAM = panic. Structs statiques
07
ROADMAP โ€” DANS QUEL ORDRE ON FAIT ร‡A ?
Le plan de bataille pour VS Code + Claude Agent
๐Ÿ—บ
[1]
๐Ÿ“
zkp_types.h
Graph, HamiltonianCycle, NIZKProof structs
[2]
โš—
zkp_crypto.c
SHA3 + commit + fiat_shamir + getrandom
[3]
๐Ÿ—บ
zkp_graph.c
Fisher-Yates + trapdoor + BFS connexitรฉ
[4]
โš”
zkp_prove.c
Algo Prouveur complet + memzero final
[5]
๐Ÿ›ก
zkp_verify.c
Algo Vรฉrifieur + validate_cycle + const-time
[6]
๐Ÿ“ก
zkp_serialize.c
Format TLV binaire + SECZ magic
[7]
๐Ÿงช
tests/ NIZK
completeness + soundness + antireplay + bench
[8]
๐Ÿ”ง
tools/ CLI
zkp_keygen zkp_prover zkp_verifier
[9]
CMAKE + OPENWRT MAKEFILES
Cross-compilation ARM, packages IPK, Config.in Kconfig
3 Makefiles : zkp-hamiltonian + secubox-zkpd + luci-app-zkp
+ files/ : secubox_zkp UCI config + init.d procd + init.sh
[10]
INTร‰GRATION SECUBOX-AUTH
secubox-zkpd daemon + LuCI + protocole rรฉseau TLV
Sรฉquence : ZKP_HELLO โ†’ ZKP_GRAPH_OFFER โ†’ ZKP_PROOF โ†’ ZKP_RESULT
Anti-replay : session_nonce + TTL 30s + nonce DB sessions/
โšก RรˆGLES D'OR โ€” GRAVร‰ES DANS LE SILICIUM โšก
  • ๐ŸŽฐ JAMAIS rand() โ€” getrandom() ou /dev/urandom, toujours.
  • โฑ TEMPS CONSTANT โ€” sodium_memcmp() sur TOUT ce qui touche aux secrets.
  • ๐Ÿงน SODIUM_MEMZERO โ€” ฯ€ et nonces effacรฉs immรฉdiatement aprรจs usage.
  • โœ… VALIDER LE CYCLE โ€” n arรชtes, n nล“uds distincts, connexe. Toujours.
  • โ™ป ANTI-REPLAY โ€” session_nonce 256 bits + TTL 30s + nonce DB.
  • ๐Ÿ“ต PAS DE printf() dans les libs โ€” syslog() en prod, stderr en test.
  • ๐Ÿ“ฆ PAS DE malloc() dans le code critique โ€” structs statiques uniquement.
  • โšก STACK < 4Ko par fonction โ€” on est sur ARM embarquรฉ 32Mo RAM.
  • ๐Ÿท -Wall -Wextra -Werror โ€” zรฉro warning = zรฉro tolรฉrance.
  • ๐Ÿ” CLร‰ CHIFFRร‰E โ€” AES-256-GCM + PBKDF2, jamais H en clair sur disque.
PROUVE-LE OU CASSE-TOI
ยซ L'attaquant a 2โปยนยฒโธ chances de rรฉussir. C'est littรฉralement moins que zรฉro. ยป
GANDALF // CYBERMIND.FR
NOTRE-DAME-DU-CRUET // SAVOIE
gerald@cybermind.fr
REFS : OEIS A000940
BLUM 1986 // FIAT-SHAMIR 1986
ANSSI CSPN // GPL-2.0-or-later
SECUBOX v0.1.0
OPENWRT ARM CORTEX
ZKPD PORT 7890
โš  CYBERMIND CONFIDENTIEL // OPORD-ZKP-001 โš 
SECUBOX MODULE ZKP-HAMILTONIAN v0.1.0 // ยฉ CYBERMIND.FR 2026 // PROVE IT OR GTFO