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 el que fija la especificación técnica de la AEAT, campo por campo: desde el NIF del emisor hasta la fecha y hora exactas de generación, pasando por el hash del registro anterior.
- 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, ese hash deja de coincidir con la Huella que guarda el registro siguiente, y la cadena se rompe desde ahí 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
Qué algoritmo criptográfico exacto usa VeriFactu hoy en día, cómo se construye el formato completo de la cadena pre-hash, cómo funciona el encadenamiento entre facturas consecutivas y en qué se parece y se diferencia de verdad de una blockchain real conocida.
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
Tres piezas más para completar el detalle técnico: la especificación completa del código QR de la factura, si existe de verdad software homologado por la propia AEAT, y cómo se integra todo esto vía API REST dentro de ERPNext mismo.
Las normas, en su fuente
Lo que se afirma aquí sobre la normativa sale de estos textos oficiales, no de un resumen de terceros ni de un blog citando a otro blog. Enlazamos siempre la versión consolidada, así que cuando la norma se modifica el enlace sigue llevando a la que está en vigor y no a una redacción que ya no aplica.
- Orden HAC/1177/2024, de 17 de octubre, por la que se desarrollan las especificaciones técnicas, funcionales y de contenido referidas en el Reglamento que establece los requisitos que deben adoptar los sistemas y programas informáticos de facturación
Las especificaciones técnicas de VeriFactu: formato del registro, huella y código QR.
¿Te toca implementar el algoritmo en tu sistema?
Si fabricas software o tu equipo necesita implementar el cálculo de hash, el encadenamiento y el código QR conforme a la Orden HAC/1177/2024, podemos ayudarte con el desarrollo, la firma de la declaración responsable y la verificación contra el entorno de pruebas de la AEAT.