Cómo demostrar el estado de la técnica en software: guía para desarrolladores
Demostrar el estado de la técnica en software se reduce a una pregunta precisa: ¿puedes demostrar que un commit de Git específico existió en una fecha concreta, con evidencia de que ningún servidor interno, administrador de repositorios o tercero puede alterarlo? Esta guía explica exactamente cómo crear esa evidencia sin exponer tu código fuente.
Utilizarás Timestamp GIT, un servicio gestionado y una GitHub App que ancla los hashes de tus commits de Git en la blockchain de Bitcoin mediante el protocolo OpenTimestamps. El flujo de trabajo consiste en instalar una vez, hacer commits con normalidad y dejar que el anclaje nocturno automatizado produzca archivos de recibo .ots inmutables.
Al final de esta guía, habrás conseguido:
- Instalar la GitHub App en los repositorios que quieras proteger.
- Configurar dónde se entregan las pruebas criptográficas.
- Activar y confirmar una marca de tiempo anclada en Bitcoin para un commit real.
- Verificar la prueba mediante un panel público y una insignia.
- Resolver los problemas más comunes de permisos y entrega.
Requisitos previos
Antes de empezar, asegúrate de tener:
- Una cuenta de GitHub y al menos un repositorio que quieras proteger.
- Familiaridad básica con los commits y hashes de Git. No necesitas experiencia en criptografía ni blockchain.
- Una cuenta de Timestamp GIT. Los repositorios públicos usan el plan gratuito; los repositorios privados requieren el plan Pro Agency por 49 $/mes o Enterprise ZK por 199 $/mes.
- Opcional: Docker si planeas autoalojar Timestamp GIT en un entorno aislado o empresarial.
Paso a paso: configuración de Timestamp GIT
La vía gestionada no requiere nada en tus máquinas de desarrollo. Instalas la GitHub App una vez, seleccionas los repositorios y cada commit queda anclado en Bitcoin automáticamente cada noche.
Paso 1: Regístrate y conecta GitHub
Ve a Timestamp GIT e inicia sesión con tu cuenta de GitHub. El flujo SaaS gestionado es la vía predeterminada.
Si te autoalojas, empieza con el inicio rápido de Docker Compose:
services:
timestampgit:
image: rue1401/timestampgit:prod
ports:
- "8080:8080"
volumes:
- ./data:/app/data
restart: unless-stopped
valkey:
image: valkey/valkey:8
restart: unless-stopped
Luego ejecuta:
docker compose pull
docker compose up -d
docker compose logs -f timestampgit
La aplicación autoalojada está disponible en http://localhost:8080. En el primer arranque, un asistente de configuración te guía para conectar tu GitHub App y aplicar un archivo de licencia.
Paso 2: Instala la GitHub App de Timestamp GIT
Instala la GitHub App en los repositorios que quieras proteger.
En el modo estándar, Timestamp GIT necesita acceso de solo lectura al repositorio de origen. No es porque lea tu código —solo lee el hash del commit HEAD—, sino porque el sistema de permisos de GitHub no expone un nivel de acceso exclusivo para hashes.
Si las pruebas se entregan en un repositorio de destino separado, la app también necesita acceso de lectura y escritura a ese repositorio de destino.
Paso 3: Selecciona los repositorios que quieres supervisar
Desde el panel de Timestamp GIT, abre la página Tus repositorios y selecciona los repositorios que quieres supervisar.
Cada repositorio seleccionado se añade a la cadena de pruebas nocturna. Timestamp GIT no inspecciona el contenido de los archivos, el código fuente ni el contenido de las ramas más allá de los hashes de commit necesarios para el anclaje.
Paso 4: Configura la entrega de pruebas
Para cada repositorio supervisado, elige dónde deben escribirse las pruebas criptográficas:
- Una rama de marcas de tiempo dedicada dentro del mismo repositorio.
- Un repositorio espejo separado, que puede ser privado incluso si el repositorio de origen es público.
Timestamp GIT escribe los archivos de manifiesto y los recibos .ots en esa ubicación después de que se confirme el anclaje diario.
Paso 5: Opcional: activa el modo Enterprise ZK
Para equipos que requieren acceso cero al código fuente, el modo Enterprise ZK es un modelo de despliegue más sólido.
Durante la configuración, Timestamp GIT genera un flujo de trabajo de GitHub Action de 12 líneas. Añade ese archivo generado a tu repositorio en:
.github/workflows/timestampgit.yml
La acción se ejecuta en tu propia infraestructura, no en los sistemas de Timestamp GIT. Solo envía el hash del commit a la API de Timestamp GIT. En este modo, Timestamp GIT no necesita ningún acceso de lectura al repositorio de origen —solo acceso de lectura y escritura al repositorio de destino donde se entregan las pruebas.
Paso 6: Haz un commit para activar el proceso
Una vez configurada la supervisión, haz commit y push con normalidad:
git add .
git commit -m "feat: add payment webhook handler"
git push origin main
En el modo estándar, la GitHub App detecta automáticamente el nuevo hash del commit HEAD. En el modo Enterprise ZK, la GitHub Action envía el hash desde tu entorno de CI.
Paso 7: Espera el anclaje nocturno en Bitcoin
Timestamp GIT agrupa los hashes de commit pendientes en una cola en memoria. Cada noche, un worker:
- Agrupa los hashes pendientes por repositorio.
- Crea archivos de manifiesto diarios.
- Construye un árbol de Merkle a partir de los hashes de commit.
- Crea pruebas OpenTimestamps usando calendarios OTS públicos.
- Ancla la raíz de Merkle en la blockchain de Bitcoin.
La confirmación en Bitcoin normalmente tarda unas 3 horas. Después de la confirmación, el manifiesto y los archivos de recibo .ots se envían a la rama de marcas de tiempo o al repositorio espejo configurados.
Cómo confirmar que funcionó
Una vez que se complete la ejecución nocturna, puedes verificar la prueba de varias maneras.
1. Inspecciona la rama de marcas de tiempo
Haz fetch de la rama de marcas de tiempo y confirma que los archivos de manifiesto y los recibos .ots están presentes:
git fetch origin timestamps
git ls-tree -r --name-only origin/timestamps | head
El nombre exacto de la rama depende de tu configuración, pero la señal importante es la presencia de archivos .ots emparejados con los datos del manifiesto diario.
2. Usa la página de verificación pública
Timestamp GIT proporciona una página de verificación basada en navegador donde todo el cálculo de la cadena de Merkle se realiza localmente en tu navegador:
https://timestampgit.dev/verification/{user}/{repo}/{date}
Sustituye {user}, {repo} y {date} por tu repositorio y la fecha que quieras verificar.
3. Consulta la API de estado
Puedes confirmar el último bloque de Bitcoin anclado a través del endpoint público de estado:
curl https://timestampgit.dev/api/statusLast/acme/widget-api
La respuesta incluye la información del último bloque de Bitcoin anclado para el repositorio.
4. Descarga un certificado PDF
Para un día concreto, descarga un certificado PDF desde:
https://timestampgit.dev/api/report/{user}/{repo}/{date}
El registro de auditoría del repositorio también está disponible como CSV:
https://timestampgit.dev/api/audit/{user}/{repo}
5. Inserta una insignia de verificación
El panel de Timestamp GIT proporciona URLs de insignias y fragmentos de Markdown listos para copiar y pegar en tu README. Los repositorios privados añaden un HMAC cifrado a las URLs de las insignias para que solo los espectadores autorizados puedan ver la información de estado.
La insignia enlaza a una página de verificación pública donde cualquiera puede inspeccionar la prueba. El archivo .ots en sí sigue siendo un recibo estándar de OpenTimestamps, por lo que los auditores técnicos también pueden descargarlo y verificarlo de forma independiente contra la blockchain de Bitcoin usando herramientas estándar de OpenTimestamps.
Solución de problemas comunes
No hay pruebas después de 24 horas
Comprueba los permisos de la GitHub App. El modo estándar necesita al menos acceso de solo lectura al repositorio de origen. Confirma también que el repositorio sigue seleccionado en el panel de Timestamp GIT.
El estado del repositorio privado no es visible
Los repositorios privados usan URLs firmadas con HMAC. Asegúrate de que la insignia o el enlace de estado proviene del panel de Timestamp GIT e incluye el parámetro HMAC. El HMAC es específico de la instancia de servidor que lo generó.
La acción Enterprise ZK no entrega pruebas
Verifica que el archivo de flujo de trabajo generado está presente en .github/workflows/timestampgit.yml y que la GitHub Action está instalada en el repositorio. El repositorio de destino donde se entregan las pruebas debe tener acceso de lectura y escritura desde la configuración de tu acción.
La instancia Docker autoalojada no produce marcas de tiempo
Confirma que el archivo de licencia se cargó durante el asistente de configuración. Comprueba también que la instancia tiene la conectividad de red necesaria para el OAuth de la GitHub App y el anclaje de marcas de tiempo.
La verificación de la prueba falla
Asegúrate de que estás verificando el archivo .ots y la fecha correctos. Un recibo de un repositorio y una fecha no validará un commit de un día o repositorio diferente.
Preguntas frecuentes
P: ¿Qué es el estado de la técnica en software?
R: El estado de la técnica es la evidencia de que tu invención, como código, un algoritmo o un diseño, existía antes de una fecha determinada. Normalmente se usa para invalidar reclamaciones de patentes o demostrar la autoría.
P: ¿Cómo demuestra el anclaje en Bitcoin el estado de la técnica?
R: El hash de tu commit de Git se incrusta en una transacción de Bitcoin mediante el protocolo OpenTimestamps. Una vez confirmado en un bloque, la marca de tiempo es inmutable y verificable por cualquiera, lo que demuestra que el hash existía en ese momento.
P: ¿Timestamp GIT es gratuito para proyectos de código abierto?
R: Sí. Timestamp GIT ofrece un plan gratuito para repositorios públicos. Los repositorios privados requieren un plan de pago, ya sea Pro Agency o Enterprise ZK.
P: ¿Puedo usar Timestamp GIT sin exponer mi código fuente?
R: Sí. En el modo estándar, solo se leen los hashes de commit —no el código fuente. En el modo Enterprise ZK, una GitHub Action envía solo hashes desde tu propia infraestructura, por lo que el código fuente nunca sale de tu entorno.
P: ¿Cuánto tarda en confirmarse una marca de tiempo?
R: El worker nocturno agrupa y ancla los hashes después de medianoche. La confirmación en Bitcoin normalmente tarda unas 3 horas después de la transacción de anclaje, así que espera que los archivos de prueba .ots aparezcan poco después.
Conclusión
El historial de Git por sí solo no es una evidencia sólida del estado de la técnica, porque puede editarse, eliminarse o descartarse como interesado. Un recibo de OpenTimestamps anclado en Bitcoin es matemáticamente más difícil de ignorar.
Timestamp GIT hace que esto sea práctico para desarrolladores en activo: instala la GitHub App una vez, selecciona un repositorio y sigue haciendo commits como de costumbre. El anclaje nocturno, la entrega de pruebas, las insignias, los certificados PDF y los CSV de auditoría se gestionan automáticamente. Nunca necesitas ejecutar comandos de OpenTimestamps ni interactuar manualmente con la blockchain de Bitcoin.
Empieza gratis con repositorios públicos en Timestamp GIT.
Publicaciones relacionadas
- Cómo proteger tu software de los trolls de patentes
- Olvídate de la CLI: una mejor forma de marcar temporalmente los commits de Git
- Marcado temporal de Git autoalojado con Docker: una guía