Hash SHA-256 VeriFactu: cálculo y encadenamiento
Algoritmo y procedimiento de cálculo del hash y el encadenamiento de registros VeriFactu según la especificación oficial AEAT. SHA-256 sobre cadena UTF-8 con formato campo=valor&campo=valor, salida hex de 64 caracteres, encadenamiento por fecha. Con ejemplo de cadena pre-hash, comparación con blockchain y librerías open source verificadas.
El hash de cada registro VeriFactu se calcula con el algoritmo SHA-256 sobre una cadena ASCII/UTF-8 con el formato nombreCampo1=valorCampo1&nombreCampo2=valorCampo2&.... La salida es una cadena hexadecimal de 64 caracteres. Cada registro N+1 incluye en su cálculo el hash del registro N (campo Huella), creando una cadena inalterable. Especificación oficial en Veri-Factu_especificaciones_huella_hash_registros.pdf publicada por la AEAT.
Cómo se construye la cadena antes del hash
Para un registro de alta de factura, el orden estricto de campos es:
- 1.
IDEmisorFactura— NIF emisor - 2.
NumSerieFactura— número y serie - 3.
FechaExpedicionFactura— dd-mm-yyyy - 4.
TipoFactura— código catálogo AEAT (F1, F2, R1-R5, etc.) - 5.
CuotaTotal— importe IVA - 6.
ImporteTotal— importe total - 7.
Huella— hash del registro anterior (vacío en el primero) - 8.
FechaHoraHusoGenRegistro— ISO-8601 con huso (ej. 2024-01-01T19:20:30+01:00)
Ejemplo de cadena pre-hash para el primer registro de la cadena (con Huella vacío):
Esta cadena se convierte a bytes UTF-8 y se le aplica SHA-256. La salida (64 chars hex) pasa a ser el campo Huella del registro siguiente.
Para un registro de anulación, los campos son: 1) IDEmisorFacturaAnulada, 2) NumSerieFacturaAnulada, 3) FechaExpedicionFacturaAnulada, 4) Huella (anterior), 5) FechaHoraHusoGenRegistro.
Fuentes: AEAT — Algoritmo cálculo huella/hash, Orden HAC/1177/2024.
Cómo se enlazan los registros entre sí
El encadenamiento es lo que da la propiedad de inalterabilidad al sistema. Cada registro N+1 incluye en su campo Huella el hash del registro N. Si alguien modifica un campo del registro N, el SHA-256 que se calculaba antes ya no coincide, y por tanto el campo Huella del registro N+1 (que es el SHA-256 antiguo) deja de cuadrar con el N actualizado. La cadena se rompe desde N en adelante.
- El encadenamiento es por fecha de generación del registro, no por número de factura ni por tipo. Un registro de anulación puede encadenar con un alta sin problema.
- El primer registro de la cadena tiene
Huella=(vacío), creando el ancla inicial. - En modalidad VERI*FACTU, la AEAT actúa como ancla temporal externa: aunque el atacante regenerara toda la cadena local, la AEAT detecta la divergencia con sus registros.
- En modalidad No-VERI*FACTU, además del hash se exige firma electrónica de cada registro (formato XAdES) para garantizar la integridad sin la red AEAT como ancla.
¿Es VeriFactu blockchain?
No técnicamente. Comparte el concepto de hash chain con blockchain, pero le falta el elemento de consenso distribuido. VeriFactu es una hash chain centralizada con la AEAT como ancla única — el mismo patrón estructural que usa Git para sus commits.
| Característica | VeriFactu | Blockchain (ej. Bitcoin) |
|---|---|---|
| Encadenamiento por hash | Sí | Sí |
| Algoritmo | SHA-256 | SHA-256 (doble SHA-256 en BTC) |
| Validador | AEAT (autoridad central) | Red distribuida P2P |
| Inmutabilidad | Por trazabilidad: alterar deja rastro | Por consenso distribuido |
| Coste por registro | 0 (envío SOAP a AEAT) | Variable (fees) |
| Privacidad de datos | Solo AEAT, emisor y receptor | Pseudónima en cadena pública |
| Modelo conceptual | Hash chain centralizada | Distributed ledger |
— FAQ
Preguntas frecuentes sobre el hash y encadenamiento VeriFactu
Algoritmo, formato de la cadena pre-hash, encadenamiento y comparación con blockchain.
Ver todas las preguntas¿Qué algoritmo de hash usa VeriFactu?+−
¿Qué campos entran en el cálculo del hash en un registro de alta?+−
¿Cómo funciona el encadenamiento entre registros?+−
¿Qué pasa con el primer registro de la cadena?+−
¿VeriFactu es blockchain?+−
¿Cómo se trata una factura rectificativa en el encadenamiento?+−
¿Las modalidades VERI*FACTU y No-VERI*FACTU usan el mismo hash?+−
¿Puedo verificar manualmente el hash de un registro?+−
Profundiza en VeriFactu técnico
¿Te toca implementar el algoritmo en tu sistema?
Si fabricas software o tu equipo necesita implementar el cálculo de hash y encadenamiento conforme a la Orden HAC/1177/2024, podemos ayudarte con el desarrollo y la verificación contra el entorno de pruebas AEAT.