En tant qu’algorithme zk-SNARK le plus largement utilisé pour les applications Ethereum Layer 2 et de calcul confidentiel, Groth16 doit son principal avantage à son extrême concision : quelle que soit la complexité du contenu prouvé, la preuve générée ne comporte que 3 points de courbe elliptique (environ 128 octets). Sa vérification on-chain est très rapide et les frais de Gas restent constants !
Ses quatre étapes fondamentales :
1️⃣ Aplatissement du programme (Flattening) : décomposer le code métier complexe et l’aplatir pour obtenir un circuit arithmétique élémentaire composé uniquement d’【additions, soustractions, multiplications et divisions】.
2️⃣ Système de contraintes de rang 1 (R1CS) : convertir chaque étape du calcul en une équation de contraintes matricielles (As) x (Bs) = C*s, afin de garantir que le prouveur ne « triche » pas.
3️⃣ Compression polynomiale (QAP) : utiliser l’interpolation de Lagrange pour compresser et fusionner des millions d’équations matricielles dispersées en 【une seule équation polynomiale unifiée】, ce qui réduit considérablement la charge de calcul.
4️⃣ Configuration de confiance et appariement bilinéaire : au lancement du projet, les paramètres cryptographiques sont générés lors d’une « cérémonie de configuration de confiance » ; le prouveur produit finalement les points [A], [B] et [C] ; le contrat on-chain utilise l’appariement bilinéaire (Pairing) et vérifie une seule équation pour confirmer l’authenticité de la preuve sans révéler la moindre information privée !
⚠️ Remarque : le système dépend d’une configuration de confiance initiale (les nombres aléatoires secrets utilisés pour générer les paramètres doivent être détruits, faute de quoi il existe un risque de falsification des preuves).