Codec criptográfico post-cuántico híbrido con endurecimiento online verificable (VOPRF) y canal visual de glifos.
Project description
Quipu
Librería de codificación con protección criptográfica y simbología propia.
🇬🇧 Quipu is a free/libre (AGPL-3.0) library that encrypts and encodes data using only vetted cryptographic primitives (XChaCha20-Poly1305, Argon2id, HKDF), with a hybrid post-quantum mode (X25519 + ML-KEM-768) and a verifiable online hardening mode (VOPRF + DLEQ). It never invents primitives — security lives in the keys, not in hiding the format.
Filosofía "rueda y oruga": donde existe buena criptografía, la reutilizamos (XChaCha20-Poly1305, Argon2id, HKDF, ML-KEM, X25519); donde hay terreno nuevo (representación, simbología, formato), innovamos. Nunca inventamos primitivas criptográficas: la seguridad vive en la clave + el AEAD, no en la representación.
Qué hace
Protege datos y los representa como símbolos (texto denso, glifos, o una imagen), de forma reversible y autenticada.
datos → KDF(passphrase+pepper) → AEAD → contenedor → codec base-N → diccionario → símbolos
Modos
| Modo | API (Rust) | Descripción |
|---|---|---|
| Simétrico (passphrase) | api::encode / api::decode |
Argon2id + XChaCha20-Poly1305 |
| Post-cuántico (clave pública) | api::encode_to_recipient / decode_as_recipient |
Híbrido X25519 + ML-KEM-768 (transcript ligado estilo X-Wing) |
| Canal visual | api::encode_to_image / decode_from_image |
Salida PNG lossless |
| Canal robusto (impreso) | api::encode_to_robust_image / decode_from_robust_image |
+ Reed-Solomon (corrige errores de canal) |
| Glifos nativos | api::encode_to_glyph_image / decode_from_glyph_image |
Alfabeto de glifos propio, reconocible |
| Online (endurecimiento) | api::encode_online / decode_online |
VOPRF verificable (prueba DLEQ): el cliente detecta un servidor deshonesto |
| Firmado (autenticidad) | api::encode_signed / decode_verified |
Firma híbrida Ed25519 + ML-DSA-65 (combinador AND). Autenticidad y no-repudio verificables; no confidencialidad |
Diccionarios (simbología enchufable)
dictionaries::ascii94()— 94 símbolos ASCII (copy-paste universal).dictionaries::flagship()— 4096 glifos (12 bits/símbolo, ~2× más denso).dictionaries::from_range(start, count)— alfabeto a medida.glyphopt— selección de glifos por máxima separabilidad (base para glifos por IA).
Galería de glifos
La misma carga cifrada puede representarse como texto denso, como una imagen PNG, o con un alfabeto de glifos propio (geométrico o generado orgánicamente). La simbología es pública (Kerckhoffs): no aporta ni resta seguridad, solo representación.
| Alfabeto de glifos | Secreto en glifos | Glifos nativos | Glifos generativos |
|---|---|---|---|
Seguridad y endurecimiento
- Precapas: normalización NFKC, pepper, padding Padmé (oculta longitud), binding de contexto (AAD), HKDF (separación de subclaves).
- Antihacker: borrado de claves en memoria (
zeroize), comparación en tiempo constante, validación de parámetros KDF, errores uniformes. - Hackerbot: red-team interno (tamper/truncation/uniqueness). Encontró y se corrigió un DoS por parámetros Argon2 maliciosos.
- Security Lab (features
lab/lab-offline, no viajan en el build publicado): red-team adaptativo que se ataca a sí mismo. Núcleo en CI (fuga de formato + falsificación de firmas) con corpus encadenado y meta-tests que fallan si se debilita una defensa antihacker; y un banco offline aislado (contenedor sin red) para timing y coste de guessing acelerado por IA.cargo run --example securitylab --features lab·bash lab/run.sh. Verlab/README.mdyTHREAT_MODEL.md§9.
Uso (Rust)
use quipu::api::{encode, decode, Options};
use quipu::dictionaries;
let dict = dictionaries::ascii94();
let sym = encode(b"secreto", "passphrase", &dict, &Options::default());
let data = decode(&sym, "passphrase", &dict, b"").unwrap();
Firma híbrida (autenticidad verificable por terceros, post-cuántica):
use quipu::api::{encode_signed, decode_verified};
use quipu::{dictionaries, pqsign};
let dict = dictionaries::ascii94();
let (vk, sk) = pqsign::generate_keypair();
let signed = encode_signed(b"acta oficial", &sk, &dict);
let msg = decode_verified(&signed, &vk, &dict).unwrap(); // falla si se altera
Uso (Python)
pip install quipu-crypto # se instala como "quipu-crypto", se importa como "quipu"
import quipu
s = quipu.encode(b"secreto", "passphrase")
assert quipu.decode(s, "passphrase") == b"secreto"
# Post-cuántico
pub, sec = quipu.generate_keypair()
s = quipu.encode_to_recipient(b"secreto", pub)
assert quipu.decode_as_recipient(s, sec) == b"secreto"
# Firma híbrida (autenticidad, post-cuántica)
vk, sk = quipu.generate_signing_keypair()
signed = quipu.encode_signed(b"acta oficial", sk)
assert quipu.decode_verified(signed, vk) == b"acta oficial" # falla si se altera
Ejemplos funcionales
Round-trip de todos los modos, listo para correr:
cargo run --example quickstart # Rust (examples/quickstart.rs)
python examples/quickstart.py # Python (examples/quickstart.py)
Construir y probar
cargo test # tests unit + property
cargo clippy --all-targets # lint
cargo run --example demo # demo simétrico + glifos
cargo run --example v2demo # post-cuántico + OPRF + imagen
cargo run --example hackerbot # red-team
cargo run --example testplatform --release # batería completa
cargo run --example securitylab --features lab # laboratorio de seguridad (red-team adaptativo)
bash lab/run.sh # banco offline aislado (timing + guessing) — Etapa B
# Fuzzing (nightly)
cargo +nightly fuzz run parse_container
# Bindings Python
source venv/bin/activate
maturin develop --features python
python tests/python/test_quipu.py
Estado
v1 + v1.1 + v2 + firmas implementados con TDD estricto. 104 tests Rust +
Wycheproof + 8 Python verdes, clippy limpio, fuzzing sin crashes, Miri sin UB.
Modo online con VOPRF verificable (prueba DLEQ), KEM híbrido con transcript
ligado estilo X-Wing, firma híbrida Ed25519 + ML-DSA-65 (combinador AND), y
pre-auditoría propia (ver INFORME_PREAUDITORIA.txt y MODELO_DE_AMENAZA.txt).
Security Lab (red-team adaptativo auto-hospedado): 14 ataques en CI
(--features lab) + banco offline de timing/guessing (--features lab-offline).
⚠️ Proyecto en desarrollo. La pre-auditoría interna NO sustituye una auditoría criptográfica independiente: no usar para proteger datos críticos reales hasta ese sello externo.
Documentación
docs/SPEC.md— especificación técnica (formato del contenedor, KDF, modo híbrido, VOPRF/DLEQ, separación de dominios).docs/THREAT_MODEL.md— modelo de amenaza (EN) · originalMODELO_DE_AMENAZA.txt(ES).docs/PRE_AUDIT.md— pre-auditoría interna (EN) · originalINFORME_PREAUDITORIA.txt(ES).SECURITY.md— política de seguridad y reporte de fallos.CONTRIBUTING.md— cómo contribuir ·CHANGELOG.md.LICENSING.md— modelo de licenciamiento dual.docs/announcement.md— artículo de diseño (EN/ES).docs/superpowers/specs/2026-07-01-quipu-security-lab-design.md— diseño del Security Lab (red-team adaptativo, featurelab).
⚠️ La pre-auditoría interna es preparación, no sustituye una auditoría independiente. Ese sello externo es el siguiente paso del proyecto (solicitud enviada al OTF Security Lab).
Licencia
Modelo de licencia dual (open-core):
- AGPL-3.0-or-later para uso abierto (ver
LICENSE). - Licencia comercial para producto propietario cerrado o SaaS sin abrir código.
- El servidor OPRF se ofrece además como servicio gestionado de pago.
Detalles en LICENSING.md. Contacto: isazajuancarlos@gmail.com
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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quipu_crypto-0.3.0.tar.gz.
File metadata
- Download URL: quipu_crypto-0.3.0.tar.gz
- Upload date:
- Size: 162.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d52c96823c692e926e5377261806e365ef9a2fc9394d50b510ac7d62c1618c2d
|
|
| MD5 |
cffaa1e30f9fe1114787cabc270b816a
|
|
| BLAKE2b-256 |
4bf1b506ce85ad5f2c95257401cafaf7311386c389b4fe1cec65172a5c9acbdc
|
Provenance
The following attestation bundles were made for quipu_crypto-0.3.0.tar.gz:
Publisher:
release.yml on isazajuancarlos/quipu
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
quipu_crypto-0.3.0.tar.gz -
Subject digest:
d52c96823c692e926e5377261806e365ef9a2fc9394d50b510ac7d62c1618c2d - Sigstore transparency entry: 2046995015
- Sigstore integration time:
-
Permalink:
isazajuancarlos/quipu@c4e39df0b9c7c725c2d943b1f6a0a5cd857331c6 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/isazajuancarlos
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c4e39df0b9c7c725c2d943b1f6a0a5cd857331c6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file quipu_crypto-0.3.0-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: quipu_crypto-0.3.0-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 417.5 kB
- Tags: CPython 3.9+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13c7ea320359ad1021f985c67bd6b2013945b7dd5850eca4537a184509a2a908
|
|
| MD5 |
6045f301ff9fb7db6656927c7afac83e
|
|
| BLAKE2b-256 |
54013803710036dfeff0f614c83f74ee26a5b76a5a1b21e119d55b93f72d1e90
|
Provenance
The following attestation bundles were made for quipu_crypto-0.3.0-cp39-abi3-win_amd64.whl:
Publisher:
release.yml on isazajuancarlos/quipu
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
quipu_crypto-0.3.0-cp39-abi3-win_amd64.whl -
Subject digest:
13c7ea320359ad1021f985c67bd6b2013945b7dd5850eca4537a184509a2a908 - Sigstore transparency entry: 2046995952
- Sigstore integration time:
-
Permalink:
isazajuancarlos/quipu@c4e39df0b9c7c725c2d943b1f6a0a5cd857331c6 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/isazajuancarlos
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c4e39df0b9c7c725c2d943b1f6a0a5cd857331c6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file quipu_crypto-0.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: quipu_crypto-0.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 573.6 kB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95a0d27df96160ca7e17aa33e1c738290e0fc12228067f22745228e5f6b06376
|
|
| MD5 |
b586760c3c1b346f6661ed93685c7763
|
|
| BLAKE2b-256 |
b113050faa04025fbf5dce215e43c7dca02cacc7aaceaca16df740e101f3c507
|
Provenance
The following attestation bundles were made for quipu_crypto-0.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on isazajuancarlos/quipu
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
quipu_crypto-0.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
95a0d27df96160ca7e17aa33e1c738290e0fc12228067f22745228e5f6b06376 - Sigstore transparency entry: 2046995328
- Sigstore integration time:
-
Permalink:
isazajuancarlos/quipu@c4e39df0b9c7c725c2d943b1f6a0a5cd857331c6 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/isazajuancarlos
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c4e39df0b9c7c725c2d943b1f6a0a5cd857331c6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file quipu_crypto-0.3.0-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: quipu_crypto-0.3.0-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 517.9 kB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b11b71925bd1900499a7728383e7ec98e1a9ab88d1f5cba725a57b72dac5fec4
|
|
| MD5 |
8f849f04a289edf1e56832aad313cf04
|
|
| BLAKE2b-256 |
d0dee2c34c80be78c46202e9714958e58b99e05f8512ae87b5778f7cfedfdc4c
|
Provenance
The following attestation bundles were made for quipu_crypto-0.3.0-cp39-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yml on isazajuancarlos/quipu
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
quipu_crypto-0.3.0-cp39-abi3-macosx_11_0_arm64.whl -
Subject digest:
b11b71925bd1900499a7728383e7ec98e1a9ab88d1f5cba725a57b72dac5fec4 - Sigstore transparency entry: 2046995645
- Sigstore integration time:
-
Permalink:
isazajuancarlos/quipu@c4e39df0b9c7c725c2d943b1f6a0a5cd857331c6 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/isazajuancarlos
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c4e39df0b9c7c725c2d943b1f6a0a5cd857331c6 -
Trigger Event:
push
-
Statement type: