Files
system-docs/03_MODELO_DATOS/hashes.md
ARCHITECT 6ea70bd34f Update to Skynet v7 - Complete documentation restructure
- Nueva estructura de carpetas según Skynet v7
- Añadidos schemas SQL completos
- Documentación de entidades, componentes e integraciones
- Modelo de seguridad actualizado
- Infraestructura y operaciones reorganizadas
2025-12-29 18:23:41 +00:00

2.9 KiB

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

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

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.