7.0 KiB
7.0 KiB
NOTARIO - Sistema de Sellado Blockchain
Version: 2.0
Dependencia: S-CONTRACT.md
Estado: Especificacion
1. Introduccion
NOTARIO es el modulo responsable del sellado inmutable de registros criticos en blockchain. Opera como la ultima capa de confianza del ecosistema GRACE.
+---------------------------------------------------------------------+
| PRINCIPIO NOTARIO |
| |
| "Lo que NOTARIO sella, nadie lo altera" |
+---------------------------------------------------------------------+
2. Arquitectura
+---------------------------------------------------------------------+
| NOTARIO |
+---------------------------------------------------------------------+
| |
| SYS_LOG (Libro Diario) |
| | |
| | (procesos completados + auditados) |
| v |
| +-----------------+ |
| | BATCH COLLECTOR | Agrupa registros por ventana temporal |
| +-----------------+ |
| | |
| v |
| +-----------------+ |
| | MERKLE BUILDER | Construye arbol Merkle del batch |
| +-----------------+ |
| | |
| v |
| +-----------------+ |
| | BLOCKCHAIN TX | Publica hash raiz en blockchain |
| +-----------------+ |
| | |
| v |
| SYS_LOG (UPDATE blockchain_tx_ref) |
| |
+---------------------------------------------------------------------+
3. Dos Franjas Temporales
3.1 Franja Interna
Tiempo del sistema para:
- Procesar operaciones
- Ejecutar auditoria SENTINEL
- Preparar datos para consolidacion
Duracion tipica: Minutos a horas
3.2 Franja Blockchain
Tiempo de NOTARIO para:
- Agrupar registros en batches
- Construir pruebas criptograficas
- Publicar en blockchain
- Confirmar transacciones
Duracion tipica: Horas a dias (segun volumen y costos)
4. Ciclo de Sellado
1. RECOLECTAR
- Query SYS_LOG WHERE audit_status = 'DEEP_PASS'
- AND blockchain_pending = FALSE
- AND blockchain_tx_ref IS NULL
2. AGRUPAR
- Crear batch con ventana temporal (ej: 24h)
- Asignar notario_batch_id
3. CONSTRUIR MERKLE
- Ordenar registros por trace_id
- Calcular hash de cada registro
- Construir arbol binario
- Obtener merkle_root
4. FIRMAR
- Firmar merkle_root con llave de NOTARIO
- Generar timestamp certificado
5. PUBLICAR
- Enviar transaccion a blockchain
- Esperar confirmaciones
6. ACTUALIZAR
- UPDATE SYS_LOG SET blockchain_tx_ref = tx_hash
- INSERT NOTARIO_BATCHES con detalles
5. Tabla NOTARIO_BATCHES
CREATE TABLE NOTARIO_BATCHES (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
batch_id UUID UNIQUE NOT NULL,
-- Ventana temporal
window_start TIMESTAMPTZ NOT NULL,
window_end TIMESTAMPTZ NOT NULL,
-- Contenido
records_count INTEGER NOT NULL,
trace_ids UUID[] NOT NULL,
-- Merkle
merkle_root CHAR(64) NOT NULL,
merkle_tree JSONB,
-- Firma
signature TEXT NOT NULL,
signing_key_id VARCHAR(100),
signed_at TIMESTAMPTZ NOT NULL,
-- Blockchain
blockchain_network VARCHAR(50) DEFAULT 'ethereum',
blockchain_tx_ref VARCHAR(100),
blockchain_block BIGINT,
blockchain_timestamp TIMESTAMPTZ,
confirmations INTEGER DEFAULT 0,
-- Estado
status VARCHAR(20) DEFAULT 'PENDING',
-- Metadata
created_at TIMESTAMPTZ DEFAULT NOW(),
CONSTRAINT valid_status CHECK (
status IN ('PENDING', 'SUBMITTED', 'CONFIRMED', 'FAILED')
)
);
CREATE INDEX idx_notario_status ON NOTARIO_BATCHES(status);
CREATE INDEX idx_notario_window ON NOTARIO_BATCHES(window_start, window_end);
6. Verificacion de Integridad
Para verificar que un registro no ha sido alterado:
def verify_record_integrity(trace_id, notario_batch_id):
"""
Verifica que un registro esta incluido en un batch sellado.
"""
# 1. Obtener batch
batch = get_batch(notario_batch_id)
# 2. Verificar que trace_id esta en el batch
assert trace_id in batch.trace_ids
# 3. Obtener registro
record = get_syslog_record(trace_id)
# 4. Calcular hash del registro
record_hash = sha256(serialize(record))
# 5. Verificar inclusion en merkle tree
proof = get_merkle_proof(batch.merkle_tree, trace_id)
assert verify_merkle_proof(record_hash, proof, batch.merkle_root)
# 6. Verificar firma del batch
assert verify_signature(batch.merkle_root, batch.signature, batch.signing_key_id)
# 7. Verificar que merkle_root esta en blockchain
tx = get_blockchain_tx(batch.blockchain_tx_ref)
assert tx.data == batch.merkle_root
return True
7. Integracion con S-CONTRACT
7.1 Campos en Response
"audit": {
"blockchain_pending": true,
"blockchain_tx_ref": null,
"notario_batch_id": "uuid-batch"
}
7.2 Campos post-sellado
"audit": {
"blockchain_pending": false,
"blockchain_tx_ref": "0x1234...abcd",
"notario_batch_id": "uuid-batch"
}
8. Configuracion
notario:
enabled: true
# Ventana de agregacion
batch_window_hours: 24
min_records_per_batch: 10
max_records_per_batch: 10000
# Blockchain
network: ethereum
contract_address: "0x..."
gas_limit: 100000
# Firma
signing_key: kv://production/signing/notario
# Reintentos
max_retries: 3
retry_delay_minutes: 60
9. Checklist de Implementacion
- Crear tabla NOTARIO_BATCHES
- Implementar recolector de registros
- Implementar constructor Merkle tree
- Configurar llave de firma
- Integrar con proveedor blockchain
- Implementar verificador de integridad
- Crear workflow de sellado periodico
- Configurar alertas para fallos
Fin del Documento NOTARIO - Version 2.0
Sistema GRACE - "Lo que NOTARIO sella, nadie lo altera"