¿Qué es el hash encadenado?
Un hash es una función matemática que toma un conjunto de datos (de tamaño variable) y lo convierte en una cadena de texto de longitud fija. Una característica fundamental es que la más mínima modificación en los datos de entrada producirá un hash completamente diferente a la salida.
El Reglamento que desarrolla la Ley Antifraude (RD 1007/2023) exige el uso del algoritmo SHA-256 (Secure Hash Algorithm 256-bit). Este algoritmo, definido en el estándar FIPS 180-4 del NIST, genera una huella de 256 bits, representada habitualmente como una cadena de 64 caracteres hexadecimales.
Por qué SHA-256 y no otros algoritmos
A diferencia de algoritmos anteriores como MD5 o SHA-1, SHA-256 se considera criptográficamente seguro y resistente a colisiones (la probabilidad de que dos conjuntos de datos distintos generen el mismo hash es infinitesimal). La AEAT impone este estándar para garantizar la integridad a largo plazo de los registros fiscales.
Cómo funciona el encadenamiento
La gran novedad de VeriFactu (y de TicketBAI en las haciendas forales) es que el hash no solo se calcula sobre los datos de la factura actual, sino que incluye el hash de la factura inmediatamente anterior.
Esto crea un encadenamiento criptográfico. El hash del registro N incluye el hash del registro N-1, que a su vez incluía el de N-2. El resultado es una cadena inmutable:
Registro 1: Hash₁ = SHA-256(DatosFactura₁)
Registro 2: Hash₂ = SHA-256(DatosFactura₂ + Hash₁)
Registro 3: Hash₃ = SHA-256(DatosFactura₃ + Hash₂)
Registro N: Hashₙ = SHA-256(DatosFacturaₙ + Hashₙ₋₁)
Campos que entran en el cálculo del hash
Según las especificaciones técnicas dictadas por la Orden HAC/1177/2024, la cadena de entrada para generar el hash se construye concatenando una serie de campos específicos del registro de facturación de alta (o anulación), en un orden estricto y sin espacios ni separadores intermedios.
| Orden | Campo | Descripción |
|---|---|---|
| 1 | IDEmisorFactura | NIF del emisor de la factura. |
| 2 | NumSerieFactura | Número de factura, incluyendo serie si existe. |
| 3 | FechaExpedicionFactura | Fecha en formato DD-MM-YYYY. |
| 4 | TipoFactura | F1 (Factura normal), F2 (Factura simplificada / Ticket), etc. |
| 5 | CuotaTotal | Suma de las cuotas repercutidas. |
| 6 | ImporteTotal | Importe total de la factura. |
| 7 | HuellaAnterior | El hash SHA-256 (64 caracteres) del registro anterior. |
| 8 | FechaHoraHusoGenRegistro | Timestamp exacto de la generación del registro. |
¿Qué ocurre si se 'rompe' la cadena?
El objetivo fundamental de la Ley Antifraude es erradicar el software de doble uso (programas que permiten borrar o modificar ventas). El hash encadenado es la herramienta técnica para lograrlo.
Consecuencias de la alteración de registros
Si una empresa intenta borrar o modificar un registro intermedio (ej: Registro 2), el Hash₂ original cambia. Al verificar el Registro 3, su cálculo (que incluye el Hash₂ antiguo) ya no coincidirá. La AEAT detectará inmediatamente una discontinuidad criptográfica ("salto en la cadena"), lo cual es prueba irrefutable de manipulación, desencadenando inspecciones y sanciones de hasta 50.000€.
Hash encadenado vs Blockchain
Es común referirse a este sistema como una "cadena de bloques fiscal", pero es importante establecer las diferencias técnicas entre el esquema de VeriFactu y una Blockchain real (como Bitcoin o Ethereum).
| Característica | VeriFactu (Hash Encadenado) | Blockchain Tradicional |
|---|---|---|
| Estructura | Encadenamiento criptográfico (SHA-256) | Encadenamiento criptográfico (SHA-256, Keccak, etc.) |
| Libro Mayor (Ledger) | Centralizado (BBDD del ERP y Servidores AEAT) | Distribuido (Copias en miles de nodos) |
| Consenso | No existe. La autoridad central (AEAT) da validez. | Mecanismos distribuidos (PoW, PoS). |
| Privacidad | Privado. Solo visible para emisor y AEAT. | Generalmente público o permisionado. |
VeriFactu no es una blockchain en sentido estricto porque carece de descentralización y consenso, pero sí hereda la principal ventaja de la estructura de datos: la inmutabilidad retrospectiva.
Implicaciones prácticas para el software (SIF)
Los desarrolladores de Sistemas Informáticos de Facturación (SIF) se enfrentan a nuevos desafíos a nivel de arquitectura de base de datos y flujos de trabajo:
- Almacenamiento permanente: El SIF debe persistir de forma segura no solo los datos de la factura, sino también el hash generado (huella) y conservarlo junto a la factura.
- Prohibición de borrado físico (DELETE): Las bases de datos transaccionales del módulo de facturación no pueden ejecutar operaciones
DELETEoUPDATEque alteren los campos fiscalmente relevantes o la huella. - Secuencialidad estricta: La generación del hash exige que el registro anterior esté completamente procesado. En sistemas de alta concurrencia, esto requiere bloqueos o colas para asegurar que el orden criptográfico coincida con el orden de generación.
- Primer registro: Para el primer registro emitido por un SIF (donde no existe un Hash anterior), la normativa define un valor por defecto que suele ser una cadena vacía o ceros, según las especificaciones de detalle del momento.
Ejemplo XML del campo hash
En el esquema XML (mensaje RegistroAlta) que se envía a la Agencia Tributaria, la huella SHA-256 calculada se incluye dentro del bloque del registro de la factura. Un fragmento simplificado se vería así:
<sf:RegistroFactura>
<sf:IDFactura>
<sf:IDEmisorFactura>B12345678</sf:IDEmisorFactura>
<sf:NumSerieFactura>FA-2027-0001</sf:NumSerieFactura>
<sf:FechaExpedicionFactura>01-01-2027</sf:FechaExpedicionFactura>
</sf:IDFactura>
<!-- ... otros campos de detalle ... -->
<sf:Huella>e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855</sf:Huella>
</sf:RegistroFactura>
La implementación correcta del encadenamiento SHA-256 es el requisito sine qua non para que un sistema reciba la Declaración Responsable y pueda operar legalmente bajo la normativa VeriFactu.