Verificación de Chapa_
Cada Chapa lleva un hash de verificación que prueba que los datos no han sido manipulados. Aquí te explicamos exactamente cómo funciona.
Por qué existe la verificación
Las Chapas son SVGs embebibles que viven en READMEs, portfolios y currículums. Dado que se muestran fuera de Chapa, cualquiera podría teóricamente editar un SVG para inflar su puntuación, cambiar su arquetipo o fabricar métricas. El hash de verificación hace que eso sea detectable.
Cada Chapa incluye un código hexadecimal corto en su borde derecho. Ese código es una huella criptográfica de los datos de la Chapa. Cualquiera puede pegarlo en la página de verificación para confirmar que la Chapa es auténtica y ver los valores originales.
Cómo funciona
El hash se genera usando HMAC-SHA256, un código de autenticación de mensajes ampliamente utilizado y estándar en la industria. El proceso tiene tres pasos:
- Construir un payload determinista — los campos de datos de la Chapa se concatenan en un orden fijo, separados por barras verticales. Los mismos datos siempre producen la misma cadena de payload.
- Firmar el payload — el payload se firma con una clave secreta que solo conoce el servidor de Chapa. Esto produce un resumen hexadecimal de 64 caracteres.
- Truncar a 32 caracteres — los primeros 32 caracteres hexadecimales (128 bits) se usan como código de verificación. Esto proporciona una resistencia a colisiones sólida mientras se mantiene lo suficientemente compacto para mostrarse en la Chapa.
Cuando se genera una Chapa, el registro de verificación (hash + datos originales) se almacena en el lado del servidor. Para verificar, cualquiera puede buscar el hash y comparar los valores almacenados con lo que muestra la Chapa.
Qué datos se firman
El payload HMAC incluye todos los campos significativos mostrados en la Chapa, en este orden exacto:
| Campo | Ejemplo | Por qué se incluye |
|---|---|---|
| Handle | juan294 | Vincula la Chapa a un desarrollador específico |
| Compuesto ajustado | 72 | La puntuación de impacto principal mostrada en la Chapa |
| Confianza | 85 | Garantiza que la calificación de confianza no pueda inflarse |
| Nivel | High | Evita que el nivel sea cambiado |
| Arquetipo | Builder | Bloquea la etiqueta del arquetipo a los datos |
| Entrega | 80 | Cada puntuación de dimensión se firma individualmente |
| Calidad | 55 | (ver arriba) |
| Constancia | 68 | (ver arriba) |
| Alcance | 45 | (ver arriba) |
| Total de commits | 312 | Métricas clave visibles en la Chapa |
| PRs fusionadas | 47 | (ver arriba) |
| Revisiones enviadas | 89 | (ver arriba) |
| Fecha | 2026-02-14 | Los mismos datos en días diferentes producen hashes diferentes |
Las puntuaciones de dimensión de punto flotante se redondean a enteros antes de firmar. Los handles se pasan a minúsculas. Esto garantiza que el payload sea completamente determinista — los mismos datos de Chapa en el mismo día siempre producen el mismo hash.
Qué garantiza
- Integridad de datos — si se ha alterado cualquier campo de la Chapa (puntuación, nivel, arquetipo, dimensiones, métricas), el hash no coincidirá y la verificación fallará.
- Autenticidad — solo el servidor de Chapa puede producir un hash válido porque solo él conoce el secreto de firma. Nadie más puede falsificar un hash que pase la verificación.
- Vinculación de fecha — la fecha forma parte del payload, por lo que un hash válido de enero no puede reutilizarse en febrero. Esto garantiza que la verificación refleje un momento específico en el tiempo.
Qué no garantiza
Ser transparente implica ser honesto sobre las limitaciones también:
- No es una blockchain — los registros de verificación se almacenan en una base de datos con un TTL de 30 días. Después de 30 días, el registro caduca y el hash ya no se puede verificar. La Chapa en sí sigue siendo válida; solo caduca la búsqueda.
- Confianza en Chapa — el sistema prueba que la Chapa fue generada por Chapa y no ha sido modificada desde entonces. No prueba de forma independiente que los datos subyacentes de la plataforma sean precisos — confía en GitHub, Bitbucket y Codeberg como fuentes de datos.
- No es a prueba de manipulación a nivel SVG — cualquiera puede editar un archivo SVG. El hash no impide la edición; hace que la edición sea detectable. Una Chapa modificada fallará la verificación.
Cómo verificar una Chapa
- Encuentra el código hexadecimal de 32 caracteres en el borde derecho de cualquier Chapa.
- Ve a la página de verificación e introduce el código.
- El resultado mostrará los datos originales de la Chapa — compáralos con lo que muestra la Chapa.
También puedes usar la API directamente: GET /api/verify/<hash> devuelve una respuesta JSON con el registro de verificación completo. Límite de 30 solicitudes por minuto por IP.
Decisiones de diseño
| Decisión | Justificación |
|---|---|
| HMAC-SHA256 | Estándar de la industria, ampliamente auditado y soportado de forma nativa en Node.js. La seguridad depende del secreto de la clave, no del secreto del algoritmo. |
| Truncamiento a 32 caracteres | 128 bits del hash — resistencia a colisiones sólida (resistencia al cumpleaños de 2^64) mientras se mantiene lo suficientemente compacto para imprimirse en una Chapa. |
| TTL de 30 días | Las Chapas se regeneran diariamente. Una ventana de 30 días es generosa para la verificación mientras mantiene el almacenamiento acotado. |
| Almacenamiento fire-and-forget | Si la base de datos no está disponible temporalmente, la Chapa se sigue renderizando. La verificación es un extra, no un bloqueador. |
| Fecha en el payload | Evita la reutilización indefinida de hashes antiguos. Mismo desarrollador, mismos datos, día diferente = hash diferente. |
Pruébalo tú mismo
Cada Chapa tiene un hash de verificación. Pégalo para ver los datos autenticados detrás de cualquier Chapa.
Verificar una Chapa