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
This commit is contained in:
134
03_MODELO_DATOS/hashes.md
Normal file
134
03_MODELO_DATOS/hashes.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user