Aller au contenu principal

Spécification Cryptographique

Spécification complète de toutes les primitives cryptographiques utilisées dans le Savitri Network.

Schéma de Signature

PropriétéValeur
AlgorithmeEd25519
Bibliothèqueed25519-dalek
Clé privée32 octets
Clé publique32 octets (point d'Edwards compressé)
Signature64 octets
AdresseClé publique encodée en hexadécimal (64 caractères hex)

Signature de Transaction

message = from_hex_bytes || to_hex_bytes || amount_le_u64 || nonce_le_u64 || fee_le_u128
hash = SHA-256(message)
sig = Ed25519_sign(signing_key, hash)

Signature de Bloc

Les blocs sont signés par le proposant en utilisant Ed25519 sur le hachage de l'en-tête de bloc (SHA-512).

Identité des Pairs

Les pairs libp2p utilisent Ed25519 pour leurs clés d'identité de pair (distinctes des clés de compte).

Fonctions de Hachage

SHA-256

UtilisationEntréeSortie
Message de signature de transactionOctets TX canoniques32 octets
Engagement monolitheChamps d'en-tête32 octets
Hachage de déclaration ZKPChamps de déclaration32 octets
Dérivation de clé AESMot de passe32 octets

SHA-512

UtilisationEntréeSortie
Hachage de bloc"BLK" + octet de version + octets d'en-tête64 octets
Engagement des en-têtesArbre binaire des en-têtes de bloc64 octets

BLAKE3

UtilisationEntréeSortie
Hachage rapideUsage généralVariable
Calcul d'étatDonnées d'état32 octets

Keccak256

UtilisationEntréeSortie
Emplacements de stockage des contratsaddress || base_slot8 octets (u64)
Mappages imbriquéskey || inner_hash8 octets (u64)

Séparation de Domaine

Tous les calculs de hachage incluent des balises de domaine pour éviter les collisions inter-domaines :

DomaineBaliseHachageSortie
Bloc"BLK" + version: u8SHA-51264 octets
Racine TXBalise feuille "TXv1"Accumulateur progressif32 octets
Racine d'étatGraine "STATEv1-LE" + feuille "STATE"Instantané lexicographique32 octets

Racine des Transactions

Calculée comme un accumulateur progressif sur le bincode canonique des transactions :

accumulator = H("TXv1")
for tx in transactions:
leaf = bincode::serialize(tx)
accumulator = H(accumulator || leaf)
tx_root = accumulator

Racine d'État

Calculée à partir d'un instantané lexicographique de la base de données :

seed = H("STATEv1-LE")
for (key, value) in storage.iter_sorted():
leaf = H("STATE" || key || value)
seed = H(seed || leaf)
state_root = seed

Chiffrement

AES-256-GCM (Au Repos)

Utilisé pour :

  • Le chiffrement des clés privées dans le SDK
  • Le chiffrement des colonnes de base de données mobile
  • Le chiffrement des données des appareils dans le connecteur IoT
PropriétéValeur
AlgorithmeAES-256-GCM
Taille de clé256 bits
Taille du nonce96 bits (12 octets)
Taille de la balise128 bits (16 octets)
Dérivation de cléBasée sur un mot de passe

Chiffrement P2P

PropriétéValeur
ProtocoleNoise (modèle de poignée de main XX)
Échange de clésX25519
ChiffreChaChaPoly
MultiplexageYamux

Dérivation de Clés (Mobile)

BIP-39

  • Liste de mots : Anglais (2048 mots)
  • Entropie : 128 bits (12 mots) ou 256 bits (24 mots)
  • Mnémonique → Graine : PBKDF2-HMAC-SHA512 (2048 tours)

BIP-44

  • Chemin : m/44'/1337'/0'/0/0
  • Type de pièce : 1337 (Savitri)
  • Compte : 0
  • Changement : 0 (externe)
  • Index : 0

Hiérarchie des Clés

mnemonic → seed (512 bits)
→ master_key (via HMAC-SHA512)
→ m/44' → m/44'/1337' → m/44'/1337'/0'
→ m/44'/1337'/0'/0 → m/44'/1337'/0'/0/0
→ ed25519_private_key (32 bytes)
→ ed25519_public_key (32 bytes)
→ address (hex-encoded, 64 chars)

Preuves à Connaissance Nulle

Voir Architecture ZKP pour plus de détails.

BackendCourbeSystème de PreuveCas d'Usage
MockN/AToujours valideTests
ArkworksBN254Groth16Production
PLONKBN254PLONKUsage général

Propriétés de Sécurité

Opérations en Temps Constant

Toute vérification de signature utilise une comparaison en temps constant (via la crate subtle) pour prévenir les attaques par canal auxiliaire temporel.

Zéroïsation des Clés

Les clés privées sont zéroïsées à la libération en utilisant la crate zeroize dans le SDK et l'application mobile.

Protection contre la Rediffusion

  • Transactions : Basée sur le nonce (strictement croissant par compte)
  • Mises à jour FL : Nonce par session par entraîneur
  • Flux oracle : Suivi du numéro de séquence
  • Messages P2P : Déduplication Gossipsub