Achronyme 0.1.2 publicado: la verificacion separada conserva errores operativos y salida JSON global arrow_right_alt

Generación de Pruebas y Confianza

Genera, empaqueta y verifica pruebas Achronyme sin confundir setup de desarrollo con confianza de producción.

Achronyme compila circuitos, genera witnesses y produce pruebas criptográficas en proceso. En 0.1.0, generar una prueba falla de forma cerrada hasta que el operador selecciona de dónde proviene la proving key.

Modos de confianza

ModoSelecciónUso previsto
Sin fuente de llaveDefaultCompilación, exportación de witness y verificación; se rechaza generar pruebas
Setup de desarrollo--insecure-dev-setupExperimentos y tests locales; las llaves de una sola parte no son confiables para producción
Store confiable--trusted-key-dir <dir>BN254 Groth16 de producción con llave de ceremonia ligada al circuito exacto

Las opciones de desarrollo y store son mutuamente excluyentes. Los mismos settings pueden expresarse en achronyme.toml, aunque un flag es más claro para comandos puntuales.

Compilar sin probar

Compilar el circuito y validar el witness no requiere una proving key:

ach circuit multiply.ach \
  --inputs "product=42,a=6,b=7" \
  --r1cs build/multiply.r1cs \
  --wtns build/multiply.wtns

La ruta R1CS exporta archivos .r1cs y .wtns compatibles con iden3. Valida el witness de forma independiente al cruzar entre herramientas:

snarkjs wtns check build/multiply.r1cs build/multiply.wtns

Pruebas de desarrollo

Activa el modo inseguro explícitamente al experimentar:

ach --insecure-dev-setup circuit multiply.ach \
  --inputs "product=42,a=6,b=7" \
  --prove

Los bloques inline prove {} usan la misma política:

ach --insecure-dev-setup run proof.ach

La prueba generada es criptográficamente real y útil para desarrollo, pero su llave local no aporta confianza de setup multi-party. No publiques esa llave como artefacto de producción.

Proving BN254 de producción

Un trusted-key store contiene un paquete inmutable y versionado para un R1CS optimizado exacto. Su manifest liga al menos:

  • hashes del R1CS y proving key final;
  • artefacto de fase 1 y digest publicado;
  • llave contribuida anterior al beacon;
  • cada ID y hash de contribuidor de fase 2;
  • beacon público final y evidencia de compromiso previo;
  • versión de la herramienta y evidencia del release.

Selecciona el store al ejecutar código de pruebas:

ach --trusted-key-dir ./trusted-keys run proof.ach

Si el circuito optimizado no existe o no coincide con el store, generar la prueba falla en lugar de crear una llave de reemplazo.

ach trusted-setup package valida y empaqueta artefactos de ceremonia ya verificados externamente. No ejecuta la ceremonia ni vuelve confiable una llave no confiable. Los operadores deben usar las guías versionadas de trusted setup y boss fight del repositorio core.

Verificación separada

Verificar no necesita configuración de proyecto, bandera insegura ni trusted store:

ach verify \
  --proof proof.json \
  --public public.json \
  --vkey verification_key.json \
  --curve bn254 \
  --format json

La curva es obligatoria. Se soporta verificación bn254 y bls12-381. Artefactos malformados, con curva incorrecta o alterados retornan status distinto de cero.

Backends y confianza del release

BackendCircuito y witnessPrueba de desarrolloProducción en 0.1.0
R1CS + Groth16, BN254SoportadoSoportado con opt-in explícitoSoportado con trusted-key store verificado
R1CS + Groth16, BLS12-381Las rutas soportadas varían por comandoSolo desarrolloNo es target de proving de producción
Plonkish + KZGRuta de desarrollo soportadaSolo desarrolloNo es target de proving de producción

La generación de verificadores Solidity y exportación snarkjs apuntan a BN254 Groth16. No generalices esas afirmaciones a cada curva o backend.

Proof values inline

let secret = 0p42
let commitment = poseidon(secret, 0p7)

let proof = prove(commitment: Public) {
    assert_eq(poseidon(secret, 0p7), commitment)
}

print(proof_json(proof))
print(proof_public(proof))
print(proof_vkey(proof))

El compilador infiere capturas witness y mantiene explícitos los inputs públicos declarados. I/O del host, creación de tareas y suspensión están prohibidos dentro del body determinista de prueba.

Clases de error

Espera que la generación rechace:

  • una fuente de llave faltante;
  • opciones de desarrollo y store simultáneas;
  • un circuito ausente del store;
  • diferencias de circuito, curva, transcript o manifest;
  • proof, public inputs o verification key malformados;
  • witnesses que no satisfacen los constraints.

Estos fallos forman parte del límite de confianza; no son molestias de setup que deban saltarse.

Lectura adicional

Navigation