acta-verificador
Comprueba un acta de evidencia de Eleion Acta sin necesitar ningún secreto, sin contactar a nadie y sin permiso de nadie.
Si usted contrató un trabajo de verificación y recibió un acta, esta herramienta le permite comprobar por su cuenta —o dársela a su auditor para que la compruebe— que el archivo no fue alterado después de emitido y que lo emitimos nosotros.
Se publica bajo Apache-2.0 a propósito. Una verificación que dependiera de nuestro permiso, de nuestro servidor o de un secreto compartido no sería una verificación. Si mañana Eleion desaparece, sus actas se siguen pudiendo comprobar.
Instalación
# Solo integridad de la cadena: no instala ninguna dependencia
pip install acta-verificador
# Además, comprobar la firma (agrega `cryptography`)
pip install 'acta-verificador[firma]'
También funciona sin instalar nada: copie el directorio src/acta_verificador
al lado del acta y ejecútelo desde ahí. El nivel de integridad no necesita más que
la biblioteca estándar de Python.
Uso
# Comprobación completa: hace falta la clave pública que publicamos aparte
acta-verificar acta.json --clave-publica <clave>
# Solo integridad de la cadena (no requiere ninguna biblioteca externa)
acta-verificar acta.json
# Para encadenar en un script
acta-verificar acta.json --clave-publica <clave> --json
Códigos de salida:
| Código | Significado |
|---|---|
0 |
El acta verifica: cadena íntegra y procedencia probada. |
1 |
El acta no verifica. |
2 |
La cadena es íntegra, pero la procedencia no se pudo probar. |
3 |
No se pudo leer el archivo. |
Desde Python:
from acta_verificador import verificar_archivo
r = verificar_archivo("acta.json", clave_publica_b64=CLAVE)
print(r.ok, r.entradas, r.motivos)
Use verificar_archivo, no verificar(json.load(...)). El cargador de la
biblioteca estándar se queda en silencio con la última de dos claves repetidas,
y eso permite escribir un acta que le muestra una organización a quien la abre y
otra al programa que la comprueba. verificar_archivo rechaza esos archivos; un
diccionario ya parseado no permite detectarlo, porque para entonces la clave
repetida ya no existe.
Los dos niveles, y por qué están separados
Nivel 1 — integridad. Que el acta sea autoconsistente: ninguna entrada alterada, eliminada, insertada ni reordenada. Se comprueba con la biblioteca estándar de Python únicamente. Quien audita no instala nada.
Nivel 2 — procedencia. Que la hayamos emitido nosotros. Necesita
cryptography para comprobar la firma Ed25519.
Un acta puede tener integridad sin procedencia: alguien puede copiar el formato y armar un acta coherente con su propia clave. Por eso la clave pública hay que tomarla de un canal distinto del acta. Si no se aporta, la herramienta comprueba la coherencia interna y devuelve «procedencia no probada» — nunca «verificada». Es la diferencia entre comprobar que un documento no tiene tachaduras y comprobar quién lo firmó.
Qué prueba y qué no
Prueba que el contenido del acta es exactamente el que se emitió, que está completo, que las entradas están en el orden en que ocurrieron, que pertenece a la organización que dice, y —con la clave publicada aparte— que la emitimos nosotros.
No prueba que lo medido sea cierto. Un acta firmada de una medición mal hecha es un acta válida de una medición mal hecha. La cadena garantiza que nadie tocó el registro después; el criterio de la medición es otra discusión, y se defiende con el método, no con criptografía. Decir lo contrario sería vender humo con una firma digital encima.
Y tampoco protege contra nosotros. Quien tiene la clave privada puede rehacer el acta entera —cambiar un número, recalcular todos los eslabones, volver a firmar— y el resultado verifica igual. Una cadena firmada demuestra integridad frente a cualquiera menos frente a quien la produjo. Lo decimos acá porque es lo primero que pregunta un auditor riguroso y porque la tentación es no mencionarlo.
Lo que lo resuelve es un sellado de tiempo de un tercero (RFC 3161): una autoridad ajena firma que este hash existía en esta fecha, y a partir de ahí rehacer el acta deja de ser posible sin que el sello delate el cambio. Un acta sin un sello RFC 3161 válido no protege frente a quien la emitió. En ese caso la afirmación defendible es «esta acta no fue alterada después de que usted la recibió» —y conservar su copia al recibirla ya le da a usted esa garantía, sin depender de nadie.
Cada organización tiene su propia cadena
El primer eslabón incorpora el identificador de la organización y su clave pública. Consecuencia buscada: su acta no verifica bajo los datos de ningún otro cliente, y para entregarle lo suyo no hace falta entregarle una sola línea de nadie más. Una cadena única y global no permitiría eso: para reverificar la propia habría que recibir la de todos.
Ejemplo incluido
En ejemplo/ hay un acta y su clave pública. Pruebe a modificar cualquier número
dentro de acta-demo.json y vuelva a correr el verificador: tiene que rechazarla.
Desarrollo
python3 -m venv .venv && ./.venv/bin/pip install -e '.[dev]'
./.venv/bin/python -m pytest -q
La batería cubre acta intacta, dato alterado, entrada eliminada, entrada insertada con hash recalculado, reordenamiento, cambio de organización, acta de un cliente presentada bajo la clave de otro, recorte con cierre recalculado, firma ajena, acta forjada con clave propia, entradas malformadas de todo tipo, y la propiedad de que dos organizaciones nunca colisionan en el primer eslabón.
El formato está especificado en FORMATO.md con el detalle necesario
para escribir otra implementación desde cero. Si usted escribe la suya y difiere de
esta, queremos saberlo.
Copyright 2026 Eleion · Apache-2.0
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 acta_verificador-0.1.1.tar.gz.
File metadata
- Download URL: acta_verificador-0.1.1.tar.gz
- Upload date:
- Size: 50.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f68bcf889cdb6ba5f7c04acd464e33b5280b05bd3cbaa2bf3b3f4c196b2c818
|
|
| MD5 |
d9f38535f8e2e199de58c784d1eb06fc
|
|
| BLAKE2b-256 |
b24ca8f9e342a441c1c7d2f430f3eaaf7fc893164bffb234b6ccea1c072eba91
|
File details
Details for the file acta_verificador-0.1.1-py3-none-any.whl.
File metadata
- Download URL: acta_verificador-0.1.1-py3-none-any.whl
- Upload date:
- Size: 35.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8afe343f7345f03cad9200e43b550edb49b4604ef32c0d6edbb808d6b26b8698
|
|
| MD5 |
e583c50878dd01e217e50dd63da6aa21
|
|
| BLAKE2b-256 |
ece10b4c08deb72cf59b153c079bd314a9dab21fe20b29b493c46b760ff51bf2
|