Skip to main content

VOPRF sobre ristretto255 con pruebas DLEQ: cliente del servicio Quipu OPRF

Project description

quipu-voprf

VOPRF (OPRF verificable) sobre ristretto255 con pruebas DLEQ. Son las primitivas que hablan con un quipu-oprf-server.

Argon2 solo:  robas la BD -> fuerza bruta offline, a la velocidad de tu GPU.
Con VOPRF:    robas la BD -> no puedes derivar nada sin la clave del servidor.
              Cada intento exige una peticion que el operador ve, limita y corta.

El servidor nunca ve la entrada (llega cegada) y no puede mentir sobre el resultado: adjunta una prueba DLEQ de que uso la misma k de su clave publica, y el cliente la verifica contra una clave fijada fuera de banda.

Licencia: Apache-2.0 (distinta del núcleo)

El núcleo de Quipu es AGPL-3.0-or-later. Este crate no, y es deliberado.

Es lo único que un cliente del servicio Quipu OPRF debe enlazar dentro de su servidor de autenticación. Si arrastrara la AGPL, el copyleft de red alcanzaría al SaaS del cliente — y nadie enchufa eso a su auth. Poner Apache solo en el SDK no bastaba: la licencia de un envoltorio no relicencia su dependencia, así que había que separar el código de verdad.

Lo que se cede son ~270 líneas de matemática de curva estándar. No es el foso: el foso son el servidor, la clave k y la biblioteca post-cuántica completa, que siguen AGPL. Apache-2.0 y no MIT por la concesión expresa de patentes, que es lo que revisa el departamento legal de una empresa.

Apache-2.0 fluye hacia AGPL-3.0, así que el núcleo puede seguir usando este crate sin fricción. Al revés no funcionaría — de ahí la dirección de la dependencia.

Uso

use quipu_voprf::{Server, blind, finalize};

// Servidor (guarda k; publica Y = k·G)
let server = Server::from_seed(&seed);
let public_key = server.public_key();

// Cliente: cegar
let (state, blinded) = blind(b"contraseña");

// Servidor: evaluar + probar
let (evaluated, proof) = server.evaluate(&blinded).unwrap();

// Cliente: verificar la prueba contra la clave FIJADA y finalizar
let secret = finalize(b"contraseña", &state, &evaluated, &proof, &public_key)
    .expect("la prueba DLEQ no valida: servidor deshonesto o clave incorrecta");

finalize devuelve None si la prueba no valida. No lo ignores: significa que el servidor no es el que fijaste, o que rotó su clave.

Conforme a RFC 9497

Ciphersuite ristretto255-SHA512, modo VOPRF (contextString = "OPRFV1-\x01-ristretto255-SHA512"). Verificado contra los vectores oficiales del Apéndice A.1.2: cargo test -p quipu-voprf.

Los tests cubren DeriveKeyPair, Blind, BlindEvaluate + GenerateProof y Finalize contra los vectores 1 y 2 (lote 1). El vector 3 es de lote 2 y este API no expone lotes: queda fuera de alcance, y se dice en vez de fingir cobertura.

Interoperable con cualquier otra implementación de RFC 9497.

Nota: la construcción propia nunca se publicó

Durante el desarrollo hubo una construcción propia (quipu/v2/voprf), inspirada en la RFC pero no conforme. Nunca llegó a PyPI: 0.2.0 es la primera versión publicada, y nace conforme. Se documenta aquí porque la instancia oprf.xiliux.com sí la sirvió hasta el 2026-07-17, y su clave pública cambió al migrar. La construcción vieja era: dominio propio, hash_to_curve sin expand_message_xmd y transcripción DLEQ propia. No interoperaba con nadie ni heredaba el análisis de seguridad de la RFC. Se eliminó, no se deprecó: dejarla solo invitaba a usarla por error.

Lo que cambia, y no es reversible:

  • La salida pasa de 32 a 64 bytes (Hash es SHA-512; truncarla haría fallar los vectores).
  • La clave pública del servidor cambia para la misma semilla: ahora se deriva con DeriveKeyPair (§3.2), con info = "quipu-oprf-server-v1".
  • Todo secreto endurecido con la versión anterior queda invalidado.

Se hizo con cero clientes, que era la única ventana: el dominio está horneado en cada secreto y, como k, no rota nunca.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quipu_voprf-0.2.2.tar.gz (28.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

quipu_voprf-0.2.2-cp39-abi3-win_amd64.whl (156.1 kB view details)

Uploaded CPython 3.9+Windows x86-64

quipu_voprf-0.2.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (257.5 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

quipu_voprf-0.2.2-cp39-abi3-macosx_11_0_arm64.whl (215.8 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file quipu_voprf-0.2.2.tar.gz.

File metadata

  • Download URL: quipu_voprf-0.2.2.tar.gz
  • Upload date:
  • Size: 28.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for quipu_voprf-0.2.2.tar.gz
Algorithm Hash digest
SHA256 8feaccd3d54eece8b5e6b74e4695bb99e4c7ba687ce95727385362ac58642d7b
MD5 79739756434f8eac474680df4d70a4cc
BLAKE2b-256 85dc7b39050de986bbed1f160931e0d420ba41d0efbd79f3dc5255ac33e955b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for quipu_voprf-0.2.2.tar.gz:

Publisher: release.yml on isazajuancarlos/quipu

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quipu_voprf-0.2.2-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: quipu_voprf-0.2.2-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 156.1 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for quipu_voprf-0.2.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 cfcb470ce5e0eae51ca28e56d87bba0f9f294a50fd70ed51581d32aea3d307f9
MD5 a2ac1e4303ce695bf7d25e898b9dbcd0
BLAKE2b-256 661bd0577b929c2c5fa6ebfeb72c6950a24b861eb4dfae89516d97f6af5bd040

See more details on using hashes here.

Provenance

The following attestation bundles were made for quipu_voprf-0.2.2-cp39-abi3-win_amd64.whl:

Publisher: release.yml on isazajuancarlos/quipu

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quipu_voprf-0.2.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for quipu_voprf-0.2.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 93e4ab830bc611ccc427f6384a43174d18a86370cfc9719581daf4fef432afdb
MD5 121e820b6d185a597b475411d2e8ebba
BLAKE2b-256 93490512467a040ba8dabb5227c8d5511f4f6ac5739061f04fba8e2eba54899e

See more details on using hashes here.

Provenance

The following attestation bundles were made for quipu_voprf-0.2.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on isazajuancarlos/quipu

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quipu_voprf-0.2.2-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for quipu_voprf-0.2.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e2d51b061f1101d80d26c1bd51a0ff531f0f61c4953d3676f53ff05d2718cca4
MD5 78c2a5fc3a164e79e40c4ffa76d7c9cc
BLAKE2b-256 e6055c349248d281c163832150cefee4b9e5b0ab2bdce34f743b818e7b825433

See more details on using hashes here.

Provenance

The following attestation bundles were made for quipu_voprf-0.2.2-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on isazajuancarlos/quipu

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page