Precinto

El paquete de diagnóstico sale con un sello,
o sale marcado como retenido.

Precinto sanea el support bundle antes de que cruce el perímetro y emite un manifiesto firmado de lo que hizo y de lo que no pudo inspeccionar. Corre en tu máquina, sin red, sin credenciales y sin telemetría.

No dice: «este paquete ya no contiene secretos». Nadie puede decir eso, y un producto que lo prometa está mintiendo.

Dice: «este paquete fue procesado por la política X versión Y, con estas transformaciones y estas limitaciones comprobables».

La diferencia entre esas dos frases es el producto entero. La primera es una promesa que nadie puede sostener. La segunda es un hecho que un tercero puede verificar por su cuenta, sin confiar en nosotros.

Verificar un precinto Instalar Licencia Código Contacto

Por qué tiene que correr en tu máquina

No es una preferencia de arquitectura ni una postura: es una imposibilidad de la alternativa.

Nadie puede mandar su paquete lleno de datos sensibles a un servicio en la nube para preguntarle si contiene datos sensibles. La circularidad obliga a que la herramienta viva del lado del cliente. Por eso Precinto no tiene versión alojada, no tiene cuenta, no tiene panel y no va a tenerlos.

La misma lógica se aplica al verificador de esta web: valida la firma dentro de tu navegador, con la aritmética de curva incluida en la propia página. Podés desconectar la red, guardarla y seguir usándola.

Qué se instala

Un solo archivo de Python, sin dependencias más allá de cryptography para la firma. No hay servicio, no hay demonio, no hay puerto a la escucha, no hay proceso residente.

git clone https://github.com/hernaninverso/precinto.git && cd precinto

python3 precinto.py keygen --out claves
python3 precinto.py scan support-bundle.tar.gz \
        --profile perfiles/atlassian-dc.json \
        --out salida --sign claves/private.pem

Sale una copia saneada y un manifest.json. Códigos de salida: 0 pasa · 3 requiere revisión humana · 4 bloqueado.

Y qué no hace, nunca

Qué hace con lo que encuentra

SituaciónQué pasa
Una credencial reconocida por una regla exactaSe reemplaza por un pseudónimo estable
Una cadena ambigua, de alta entropíaSe enmascara igual y se marca con <REVISAR:…>. La revisión decide si se restaura, no si se tapa: dejar el valor en claro mientras alguien decide era dejarlo salir
Un formato que no se puede inspeccionar con garantíasEl archivo se bloquea entero. No sale
Una traza de diagnóstico legítimaQueda intacta. Anonimizar destruyendo el diagnóstico no sirve a nadie

Pseudónimos que conservan el diagnóstico

El mismo valor produce el mismo token dentro de un paquete: el equipo de soporte sigue viendo que «este usuario aparece en cuatro archivos» sin ver quién es. Otra ejecución usa otra sal, así que dos paquetes no se pueden cruzar ni revertir por diccionario. La sal es efímera y no se guarda en ningún lado.

Lo que el manifiesto no puede probar

Verificar una firma contra la clave que viaja dentro del mismo archivo es circular: demuestra que nadie lo alteró, pero cualquiera pudo firmarlo con su propia clave. Por eso Precinto devuelve NO PROBADA en ese caso, con código de salida 3, y nunca la palabra «verificada».

Para probar la procedencia hace falta la clave pública del emisor obtenida por un canal independiente del archivo. Es una distinción incómoda de explicar y fácil de omitir — y omitirla es exactamente cómo una herramienta de verificación termina certificando lo que no puede.

Y hay tres cosas más que una firma válida no demuestra, dichas antes de que las pregunte nadie:

Medido, no prometido

Sobre el banco sintético de canarios
Canarios plantados, en 14 clases17
Neutralizados — reemplazados por pseudónimo16
Retenidos — su archivo se bloqueó entero1
Escapados — presentes en la copia sin marcar0
Comprobaciones de regresión (Python + verificador web)75

El banco está en el repositorio y se regenera con semilla fija: cualquiera reproduce estos números en su máquina en menos de un minuto. Y el desglose distingue estados en vez de decir «contenido / no contenido», porque un banco binario se felicita a sí mismo — la primera versión de éste informaba 100% sin haber medido nada.

Estos números son de un banco sintético, no de datos reales. Miden que los detectores encuentran lo que se les plantó; no miden qué encontrarían en tus paquetes, que es la única pregunta que importa. Por eso el paso siguiente con un fabricante es correrlo sobre su corpus, en su máquina.

Licencia

Si vos…Entonces…
Lo corrés en tu infraestructura, para tus propios paquetesAGPL-3.0. No pagás nada y no hablás con nadie.
Lo auditás, lo modificás, lo integrás con tus herramientasAGPL-3.0. Igual.
Lo usás en una consultoría, sobre el paquete de tu clienteAGPL-3.0. Igual.
Lo redistribuís dentro de tu producto propietarioLicencia comercial, por producto. Distribución ilimitada aguas abajo.

El hecho por el que se cobra no es usar la herramienta: es redistribuirla dentro de un producto cerrado. Es el esquema de wolfSSL y de Qt, y los departamentos de compras ya saben leerlo.

La versión abierta es completa: no hay funciones recortadas, ni un motor distinto, ni una edición mutilada para forzar la compra. Si el proyecto dejara de mantenerse, lo que está publicado sigue sirviendo. Y la licencia comercial no apaga el software si no se renueva — la renovación habilita versiones y reglas nuevas, nunca es un interruptor sobre lo ya instalado. Poner un interruptor comercial dentro de infraestructura desconectada sería justo el tipo de cosa que este proyecto existe para no hacer.

Contacto

Para una licencia comercial, para reportar un fallo o para decirme que el enfoque está equivocado: precinto@eleata.io, o un asunto en el repositorio.

Si me escribís porque tu producto genera paquetes de diagnóstico, decime cuál es y te mando el perfil de partida para tu formato. No hace falta que me mandes ningún paquete — de hecho, preferiría que no lo hicieras.

Para fabricantes de software autoalojado

Si tu documentación le pide al cliente que revise el paquete antes de mandártelo, ya conocés el problema: ese pedido es lento, manual y propenso a error, y el que lo paga en horas es tu equipo de soporte cuando el paquete llega tarde o incompleto.

Precinto se integra después de tu generador de paquetes, con un perfil calibrado para tu formato. El cliente final no incorpora un proveedor privilegiado más: recibe una actualización tuya. Hay perfiles de partida para nueve productos en perfiles/, sin calibrar contra paquetes reales — eso se hace con tus datos, en tu máquina.