Saltar al contenido principal

Especificación Criptográfica

Especificación completa de todas las primitivas criptográficas utilizadas en Savitri Network.

Esquema de Firmas

PropiedadValor
AlgoritmoEd25519
Bibliotecaed25519-dalek
Clave privada32 bytes
Clave pública32 bytes (punto de Edwards comprimido)
Firma64 bytes
DirecciónClave pública codificada en hexadecimal (64 caracteres hex)

Firma de Transacciones

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)

Firma de Bloques

Los bloques son firmados por el proponente usando Ed25519 sobre el hash del encabezado de bloque (SHA-512).

Identidad de Pares

Los pares libp2p usan Ed25519 para sus claves de identidad de par (separadas de las claves de cuenta).

Funciones de Hash

SHA-256

UsoEntradaSalida
Mensaje de firma de transacciónBytes canónicos TX32 bytes
Compromiso monolíticoCampos del encabezado32 bytes
Hash de enunciado ZKPCampos del enunciado32 bytes
Derivación de clave AESContraseña32 bytes

SHA-512

UsoEntradaSalida
Hash de bloque"BLK" + byte de versión + bytes de encabezado64 bytes
Compromiso de encabezadosÁrbol binario de encabezados de bloque64 bytes

BLAKE3

UsoEntradaSalida
Hash rápidoUso generalVariable
Cómputo de estadoDatos de estado32 bytes

Keccak256

UsoEntradaSalida
Ranuras de almacenamiento de contratosaddress || base_slot8 bytes (u64)
Mapeos anidadoskey || inner_hash8 bytes (u64)

Separación de Dominios

Todos los cómputos de hash incluyen etiquetas de dominio para prevenir colisiones entre dominios:

DominioEtiquetaHashSalida
Bloque"BLK" + version: u8SHA-51264 bytes
Raíz TXEtiqueta de hoja "TXv1"Acumulador progresivo32 bytes
Raíz de estadoSemilla "STATEv1-LE" + hoja "STATE"Instantánea lexicográfica32 bytes

Raíz de Transacciones

Calculada como un acumulador progresivo sobre bincode canónico de transacciones:

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

Raíz de Estado

Calculada a partir de una instantánea lexicográfica de la base de datos:

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

Cifrado

AES-256-GCM (En Reposo)

Usado para:

  • Cifrado de claves privadas en el SDK
  • Cifrado de columnas de base de datos móvil
  • Cifrado de datos de dispositivos en el conector IoT
PropiedadValor
AlgoritmoAES-256-GCM
Tamaño de clave256 bits
Tamaño de nonce96 bits (12 bytes)
Tamaño de etiqueta128 bits (16 bytes)
Derivación de claveBasada en contraseña

Cifrado P2P

PropiedadValor
ProtocoloNoise (patrón de intercambio XX)
Intercambio de clavesX25519
CifradoChaChaPoly
MultiplexaciónYamux

Derivación de Claves (Móvil)

BIP-39

  • Lista de palabras: Inglés (2048 palabras)
  • Entropía: 128 bits (12 palabras) o 256 bits (24 palabras)
  • Mnemónico → Semilla: PBKDF2-HMAC-SHA512 (2048 rondas)

BIP-44

  • Ruta: m/44'/1337'/0'/0/0
  • Tipo de moneda: 1337 (Savitri)
  • Cuenta: 0
  • Cambio: 0 (externo)
  • Índice: 0

Jerarquía de Claves

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)

Pruebas de Conocimiento Cero

Consulta Arquitectura ZKP para más detalles.

BackendCurvaSistema de PruebaCaso de Uso
MockN/ASiempre válidoPruebas
ArkworksBN254Groth16Producción
PLONKBN254PLONKUso general

Propiedades de Seguridad

Operaciones en Tiempo Constante

Toda la verificación de firmas usa comparación en tiempo constante (mediante el crate subtle) para prevenir ataques de canal lateral por tiempo.

Eliminación Segura de Claves

Las claves privadas se borran de forma segura al hacer drop usando el crate zeroize tanto en el SDK como en la aplicación móvil.

Protección contra Repetición

  • Transacciones: Basada en nonce (incremento monótono por cuenta)
  • Actualizaciones FL: Nonce por ronda por entrenador
  • Fuentes de oráculos: Seguimiento de número de secuencia
  • Mensajes P2P: Deduplicación mediante Gossipsub