Add complete French (fr) and Chinese (zh) translations for all documentation: - Root files: README, CHANGELOG, SECURITY, BETA-RELEASE - docs/: All 16 core documentation files - DOCS/: All 19 deep-dive documents including embedded/ and archive/ - package/secubox/: All 123+ package READMEs - Misc: secubox-tools/, scripts/, EXAMPLES/, config-backups/, streamlit-apps/ Total: 346 translation files created Each file includes language switcher links for easy navigation between English, French, and Chinese versions. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.6 KiB
4.6 KiB
ZKP Hamiltonian
🌐 Langues: English | Français | 中文
Bibliothèque de preuve à divulgation nulle de connaissance (ZKP) basée sur le problème du cycle hamiltonien (Blum 1986) avec transformation NIZK via l'heuristique de Fiat-Shamir.
CyberMind.FR / SecuBox — Version 0.1.0
Aperçu
Cette bibliothèque implémente un protocole de preuve à divulgation nulle de connaissance (ZKP) qui permet à un Prouveur de convaincre un Vérificateur qu'il connaît un cycle hamiltonien dans un graphe, sans révéler le cycle lui-même.
Propriétés de sécurité
- Complétude : Un prouveur honnête avec connaissance de H convainc toujours le vérificateur
- Solidité : Un tricheur échoue avec une probabilité >= 1 - 2^(-128)
- Divulgation nulle : Le vérificateur n'apprend rien sur H
Compilation
Prérequis
- CMake >= 3.16
- OpenSSL (pour SHA3-256)
- Compilateur C99
Commandes de compilation
mkdir build && cd build
cmake ..
make
# Exécuter les tests
ctest --output-on-failure
# Ou exécuter les tests individuellement
./test_crypto
./test_graph
./test_protocol
./test_nizk
Compilation OpenWrt
make package/zkp-hamiltonian/compile V=s
Utilisation
Outils CLI
Générer une paire de clés
zkp_keygen -n 50 -r 1.0 -o identity
# Crée : identity.graph (public), identity.key (SECRET !)
Générer une preuve
zkp_prover -g identity.graph -k identity.key -o auth.proof
Vérifier une preuve
zkp_verifier -g identity.graph -p auth.proof
# Code de sortie : 0=ACCEPTÉ, 1=REJETÉ, 2=ERREUR
API C
#include "zkp_hamiltonian.h"
// Générer une paire de clés
Graph G;
HamiltonianCycle H;
zkp_generate_graph(50, 1.0, &G, &H);
// Prouveur : générer une preuve
NIZKProof proof;
zkp_prove(&G, &H, &proof);
// Vérificateur : vérifier la preuve
ZKPResult result = zkp_verify(&G, &proof);
if (result == ZKP_ACCEPT) {
// Authentifié !
}
Aperçu du protocole
- Configuration : Le prouveur génère (G, H) où H est un cycle hamiltonien dans G
- Génération de preuve :
- Générer une permutation aléatoire pi
- Calculer G' = pi(G)
- S'engager sur chaque arête de G' en utilisant SHA3-256
- Calculer le défi via Fiat-Shamir : c = H(G, G', engagements)
- Si c=0 : révéler pi et tous les nonces (preuve d'isomorphisme)
- Si c=1 : révéler pi(H) et les nonces des arêtes du cycle (preuve hamiltonienne)
- Vérification :
- Recalculer le défi Fiat-Shamir
- Vérifier que la réponse correspond aux engagements
Fichiers
zkp-hamiltonian/
├── include/
│ ├── zkp_types.h # Définitions de types
│ ├── zkp_crypto.h # Primitives cryptographiques
│ ├── zkp_graph.h # Opérations sur les graphes
│ └── zkp_hamiltonian.h # API principale
├── src/
│ ├── zkp_crypto.c # SHA3-256, engagements, RNG
│ ├── zkp_graph.c # Manipulation de graphes
│ ├── zkp_prove.c # Génération de preuve NIZK
│ ├── zkp_verify.c # Vérification de preuve NIZK
│ └── zkp_serialize.c # Sérialisation binaire
├── tests/
│ ├── test_crypto.c # Tests des primitives crypto
│ ├── test_graph.c # Tests des opérations sur graphes
│ ├── test_protocol.c # Complétude/solidité du protocole
│ └── test_nizk.c # Tests NIZK complets + benchmarks
├── tools/
│ ├── zkp_keygen.c # CLI de génération de clés
│ ├── zkp_prover.c # CLI de génération de preuves
│ └── zkp_verifier.c # CLI de vérification de preuves
├── CMakeLists.txt
└── README.md
Configuration
Options de compilation (CMake)
| Option | Défaut | Description |
|---|---|---|
OPENWRT_BUILD |
OFF | Activer les optimisations OpenWrt |
BUILD_TESTS |
ON | Compiler les exécutables de test |
BUILD_TOOLS |
ON | Compiler les outils CLI |
BUILD_SHARED_LIBS |
OFF | Compiler en bibliothèque partagée |
ZKP_MAX_N |
128 | Nombre maximum de noeuds du graphe |
Paramètres recommandés
| Paramètre | Recommandé | Description |
|---|---|---|
| n (noeuds) | 50-80 | Taille du graphe |
| extra_ratio | 0.5-1.5 | Ratio d'arêtes de camouflage |
Intégration SecuBox
Voir SECUBOX_INTEGRATION.md pour les détails sur :
- Intégration avec
secubox-auth - Protocole réseau (ZKP_HELLO, ZKP_PROOF, etc.)
- Configuration UCI
- Tableau de bord LuCI
Licence
GPL-2.0-or-later
Copyright (C) 2026 CyberMind.FR / SecuBox