Tienda
0


















La Huella hash en un registro Veri*Factu: definición, funcionamiento y cálculo

Fecha: 2025-02-18 14:43:19
Autor: Alex Rubio



Introducción

En el ámbito de la facturación electrónica y la trazabilidad de registros contables, la huella hash juega un papel fundamental en el cumplimiento de los requisitos de integridad y seguridad establecidos por la Agencia Estatal de Administración Tributaria (AEAT) en España. En el contexto del sistema Veri*Factu, la huella hash es un mecanismo criptográfico que permite garantizar la autenticidad de cada registro de facturación y su encadenamiento con registros previos.

Este artículo detalla qué es la huella hash, en qué se basa y cómo se calcula en un registro Veri*Factu.

¿Qué es la huella hash y para qué se utiliza?

La huella hash es el resultado de aplicar un algoritmo de función hash criptográfica a ciertos datos de un registro de facturación. Su objetivo es garantizar la inalterabilidad y la autenticidad del registro, asegurando que cualquier modificación posterior sea detectable.

La principal característica de la huella hash es que actúa como una firma digital única de los datos sobre los que se calcula. Si un solo bit de la información cambia, la huella hash resultante será completamente distinta. Esto permite detectar alteraciones y asegurar la cadena de trazabilidad de los registros de facturación.

El concepto de "huella" proviene de la analogía con una huella dactilar: aunque el tamaño de la huella es menor que la información original, sigue identificándola de manera única y confiable.

Algoritmo Utilizado

El algoritmo que se utiliza en Veri*Factu para calcular la huella hash es SHA-256. Este algoritmo pertenece a la familia de funciones criptográficas SHA-2 y genera un valor hash de 256 bits (64 caracteres en formato hexadecimal).

SHA-256 es ampliamente utilizado en el ámbito de la seguridad informática , dado que proporciona una fuerte resistencia contra colisiones (es decir, es altamente improbable que dos conjuntos de datos diferentes generen el mismo hash).

Datos de Entrada para el Cálculo de la Huella

El cálculo de la huella en Veri*Factu se basa en una serie de campos extraídos de los registros de facturación, los cuales dependen del tipo de registro que se está procesando. Existen tres tipos principales:

1. Registro de Facturación de Alta

Los campos a incluir en la cadena para calcular la huella son:

  • IDEmisorFactura: Identificación del emisor de la factura.
  • NumSerieFactura: Número de serie de la factura.
  • FechaExpedicionFactura: Fecha de expedición de la factura.
  • TipoFactura: Código del tipo de factura.
  • CuotaTotal: Importe total de cuotas impositivas.
  • ImporteTotal: Importe total de la factura.
  • Huella (registro anterior): Hash del registro de facturación inmediatamente anterior (si existe).
  • FechaHoraHusoGenRegistro: Fecha y hora de generación del registro.

2. Registro de Facturación de Anulación

En este caso, los campos utilizados para la generación del hash son:

  • IDEmisorFacturaAnulada: Identificación del emisor de la factura anulada.
  • NumSerieFacturaAnulada: Número de serie de la factura anulada.
  • FechaExpedicionFacturaAnulada: Fecha de expedición de la factura anulada.
  • Huella (registro anterior): Hash de la factura anulada.
  • FechaHoraHusoGenRegistro: Fecha y hora de generación del registro.

3. Registro de Evento

Para registros de evento, la cadena de datos a procesar incluye:

  • NIF del emisor y del obligado a emitir.
  • ID del evento.
  • Identificación del sistema informático.
  • Versión del software de facturación.
  • Número de instalación.
  • Tipo de evento.
  • Huella del evento anterior (si aplica).
  • Fecha y hora de generación del evento.

Formato y Tratamiento de Datos

Antes de calcular la huella hash, los datos se organizan en una cadena de caracteres con el formato:

nombreCampo1=valorCampo1&nombreCampo2=valorCampo2&...&nombreCampoN=valorCampoN

Algunos aspectos clave en el tratamiento de los datos:

  • Se eliminan los espacios en los valores de los campos.
  • Los valores numéricos se tratan sin importar la cantidad de ceros a la derecha en los decimales (por ejemplo, 123.1 y 123.10 se consideran equivalentes).
  • Si un campo no tiene valor, se incluye solo el nombre seguido de =.

Por ejemplo, para un registro de facturación de alta, la cadena de entrada podría ser:

IDEmisorFactura=89890001K&NumSerieFactura=12345678/G33&FechaExpedicionFactura=01-01-2024&TipoFactura=F1&CuotaTotal=12.35&ImporteTotal=123.45&Huella=&FechaHoraHusoGenRegistro=2024-01-01T19:20:30+01:00

Esta cadena se convierte a bytes en formato UTF-8 antes de aplicar el algoritmo SHA-256.

Generación del Hash

El siguiente paso es aplicar SHA-256 a la cadena de entrada. En términos generales, este proceso puede implementarse en cualquier lenguaje de programación que soporte SHA-256.

Resultado del Hash

El resultado obtenido será una cadena hexadecimal de 64 caracteres. Para el ejemplo anterior:

3C464DAF61ACB827C65FDA19F352A4E3BDC2C640E9E9FC4CC058073F38F12F60

Esta huella se almacenará en el campo correspondiente del registro de facturación y se utilizará para validar la integridad de la información.

Validación

El sistema Veri*Factu de la AEAT recalculará la huella hash de los registros recibidos. Si el valor calculado no coincide con el informado en el registro, este será marcado como "Aceptado con errores", lo que puede implicar la necesidad de una revisión manual o la posible invalidez del registro.

Conclusión

La huella hash en Veri*Factu es un mecanismo fundamental para garantizar la integridad y autenticidad de los registros de facturación. Gracias al uso de SHA-256 y a la estructura encadenada de los registros, se asegura la trazabilidad de la información y se previenen alteraciones no autorizadas.

Este sistema refuerza la seguridad fiscal y permite a la AEAT contar con un sistema de validación robusto, asegurando que cada factura registrada sea genuina y no manipulada.

<?php
function calcularHuellaVeriFactu($datos)
{
    // Concatenar los datos en el formato requerido
    $cadena = "IDEmisorFactura=" . $datos['IDEmisorFactura'] .
              "&NumSerieFactura=" . $datos['NumSerieFactura'] .
              "&FechaExpedicionFactura=" . $datos['FechaExpedicionFactura'] .
              "&TipoFactura=" . $datos['TipoFactura'] .
              "&CuotaTotal=" . $datos['CuotaTotal'] .
              "&ImporteTotal=" . $datos['ImporteTotal'] .
              "&Huella=" . $datos['Huella'] . // Huella del registro anterior
              "&FechaHoraHusoGenRegistro=" . $datos['FechaHoraHusoGenRegistro'];

    // Convertir la cadena a formato UTF-8
    $cadena_utf8 = utf8_encode($cadena);

    // Aplicar SHA-256 y convertir el resultado a hexadecimal en mayúsculas
    $hash = strtoupper(hash('sha256', $cadena_utf8));

    return $hash;
}

// Ejemplo de datos de entrada para un registro de facturación de alta
$datosRegistro = [
    "IDEmisorFactura" => "89890001K",
    "NumSerieFactura" => "12345678/G33",
    "FechaExpedicionFactura" => "01-01-2024",
    "TipoFactura" => "F1",
    "CuotaTotal" => "12.35",
    "ImporteTotal" => "123.45",
    "Huella" => "", // Sin huella previa en el primer registro
    "FechaHoraHusoGenRegistro" => "2024-01-01T19:20:30+01:00"
];

// Calcular la huella hash
$huellaGenerada = calcularHuellaVeriFactu($datosRegistro);

// Mostrar el resultado
echo "Huella Hash Generada: " . $huellaGenerada . PHP_EOL;
?>

 

 


Comparte en tus redes sociales


Comentarios de nuestros usuarios

¿Tienes algo que agregar? ¡Déjanos tu comentario!