- 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
135 lines
2.9 KiB
Markdown
135 lines
2.9 KiB
Markdown
# 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.
|