# Hashes e Identificadores **Versión:** 1.0 **Estado:** Definición --- ## Visión General El sistema usa SHA-256 para identificación única e inmutable de todos los elementos. ``` CONTENIDO → SHA-256 → 64 caracteres hexadecimales ``` --- ## Tipos de Hash | Prefijo | Tipo | Descripción | |---------|------|-------------| | **h_maestro** | Tag HST | Hash de etiqueta semántica | | **h_instancia** | Contexto | Identidad del servidor/instancia | | **h_entrada** | Contenedor | Hash de ingesta en secretaría | | **h_bloque** | BCK | Hash de bloque consolidado | | **h_milestone** | MST | Hash de milestone | | **h_item** | ITM | Hash de ítem (plano ideal) | | **h_player** | PLY | Hash de identidad | | **h_loc** | LOC | Hash de ubicación | | **h_flag** | FLG | Hash de marco jurídico | --- ## Fórmulas ### h_maestro (HST) ``` h_maestro = SHA-256(grupo:ref) Ejemplo: h_maestro = SHA-256("hst:person") ``` ### h_entrada (Secretaría) ``` h_entrada = SHA-256(timestamp:origen:contenido) ``` ### h_bloque (BCK) ``` h_bloque = SHA-256(h_instancia:secuencia:hash_previo:hash_contenido) hash_contenido = SHA-256(contenido_serializado) ``` ### h_milestone (MST) ``` h_milestone = SHA-256(h_instancia:secuencia:tipo:contenido) ``` ### h_item (ITM) ``` h_item = SHA-256(h_instancia:secuencia:tipo:contenido) ``` ### h_loc (LOC) ``` h_loc = SHA-256(lat:lon:precision) ``` --- ## Encadenamiento ``` Bloque 1 Bloque 2 Bloque 3 ┌────────────┐ ┌────────────┐ ┌────────────┐ │h_bloque: A │──────►│hash_prev: A│──────►│hash_prev: B│ │ │ │h_bloque: B │ │h_bloque: C │ └────────────┘ └────────────┘ └────────────┘ ``` --- ## Verificación ### Integridad de Contenido ```python import hashlib import json def verificar_integridad(bloque): contenido_serializado = json.dumps(bloque['contenido'], sort_keys=True) hash_calculado = hashlib.sha256(contenido_serializado.encode()).hexdigest() return hash_calculado == bloque['hash_contenido'] ``` ### Encadenamiento ```python def verificar_cadena(bloque, bloque_previo): return bloque['hash_previo'] == bloque_previo['h_bloque'] ``` --- ## Propiedades | Propiedad | Descripción | |-----------|-------------| | **Determinista** | Mismo input → mismo hash | | **Único** | Colisión prácticamente imposible | | **Irreversible** | No se puede obtener contenido desde hash | | **Fijo** | Siempre 64 caracteres | --- ## Uso en Trazabilidad ``` Bloque (Feldman) │ └── h_entrada ──► Contenedor (Secretaría) │ └── archivos_hashes ──► R2 Storage ``` Cualquier registro final puede rastrearse hasta su origen.