¿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.

Campos requeridos para la generación de la Huella (Hash)
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.

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).

Diferencias entre VeriFactu y Blockchain
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 DELETE o UPDATE que 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.