Mostrando entradas con la etiqueta INFORME INTELIGENCIA ESTRATEGICA. Mostrar todas las entradas
Mostrando entradas con la etiqueta INFORME INTELIGENCIA ESTRATEGICA. Mostrar todas las entradas

martes, 15 de septiembre de 2026

**INFORME SECRETO DE INTELIGENCIA ESTRATÉGICA** - ARQUITECTURA DE CONTROL DIGITAL DEL ESPACIO - INTELIGENCIA LIBRE

 INFORME DE INTELIGENCIA ESTRATEGICA

 


 

 **INFORME SECRETO DE INTELIGENCIA ESTRATÉGICA**

**Clasificación:** TOP SECRET // PASAIA LAB EYES ONLY
**Referencia:** PL-INTEL-ESP-2026-09-16
**Para:** Dirección de PASAIA LAB, INTELIGENCIA LIBRE, ACCIÓN CIVIL DIGITAL
**Asunto:** Plan de Digitalización y Control del Espacio Ultraterrestre hasta 100.000 km mediante una Arquitectura de Tres Capas Esféricas con Redes de Nodos IA y Blockchain

---

### 📜 1. El Vacío Legal como Fundamento Estratégico

La arquitectura de control aquí propuesta se sustenta en la laguna jurídica del **Tratado del Espacio Ultraterrestre de 1967**. Este tratado prohíbe la colocación en órbita de armas nucleares y de destrucción masiva, pero **no prohíbe explícitamente el despliegue de armas convencionales** ni establece restricciones sobre sistemas de vigilancia, redes de nodos inteligentes o capacidades de ciberguerra orbital. La confirmación oficial por parte del Secretario de la Fuerza Aérea de EE.UU. el **14 de septiembre de 2026**, admitiendo la posesión de "armas de control del espacio orbital" en órbita, valida la viabilidad operativa de este tipo de arquitecturas.

---

### 🪐 2. Arquitectura de Tres Capas Esféricas: Definición y Alcance

La propuesta consiste en la creación de un **ámbito esférico de dominio y control** dividido en tres capas concéntricas, cada una con su propia red de nodos inteligentes, intranet dedicada y blockchain de control, interconectadas entre sí. El radio total del sistema alcanza los **100.000 km**, superando la órbita lunar.

| Capa | Denominación | Rango Orbital | Función Principal | Componentes Clave |
| :--- | :--- | :--- | :--- | :--- |
| **Capa 1** | **LEO Táctica** | 160 – 2.000 km | Vigilancia táctica, alerta temprana, enlace con fuerzas terrestres, marítimas y aéreas | Constelaciones de satélites pequeños (pLEO), sensores IR, nodos de borde IA |
| **Capa 2** | **MEO/GEO Estratégica** | 2.000 – 36.000 km | Seguimiento de misiles balísticos e hipersónicos, comunicaciones seguras, mando y control | Satélites de alerta de misiles (OPIR, HBTSS), nodos de IA de nivel estratégico |
| **Capa 3** | **Cislunar Profunda** | 36.000 – 100.000 km | Vigilancia del espacio cislunar, control de rutas lunares, defensa de activos en órbita lunar | Sensores de gran apertura, órbitas DRO y halo en puntos de Lagrange, nodos IA autónomos |

---

### 🧠 3. Redes de Nodos Inteligentes IA por Capa

Cada capa dispondrá de una **red de nodos inteligentes** con capacidades de procesamiento en el borde (*edge computing*). La IA embarcada permitirá:

- **Procesamiento local de datos**: Reducción drástica de la latencia al evitar el envío de datos brutos a estaciones terrestres.
- **Toma de decisiones autónoma**: Los nodos podrán identificar, clasificar y priorizar objetivos sin intervención humana, habilitando ciclos de decisión de milisegundos.
- **Re-tasking dinámico**: La red podrá reasignar sensores y activos en tiempo real según la evolución de la amenaza.

**Arquitectura de nodos:**
- **Capa 1 (LEO)**: Nodos ligeros con IA optimizada para reconocimiento de patrones en imágenes y señales. Procesadores de bajo consumo (tipo NVIDIA CUDA acelerado).
- **Capa 2 (MEO/GEO)**: Nodos de mayor capacidad, con modelos de IA para fusión de datos multisensor y predicción de trayectorias de misiles.
- **Capa 3 (Cislunar)**: Nodos autónomos con IA de borde para gestión de comunicaciones interplanetarias y detección de objetos en órbitas caóticas.

---

### 🔗 4. Intranets por Capa y Blockchain de Control Interconectada

Cada capa operará con una **intranet dedicada** (red de comunicaciones interna) que garantice la transmisión segura de datos entre sus nodos. Estas intranets estarán interconectadas mediante **enlaces de retransmisión seguros**, y la integridad de todas las transacciones se registrará en una **blockchain de control jerárquica**.

**Características de la blockchain:**
- **Consenso por Proof of Authority (PoA)**: Los nodos validadores serán seleccionados por su reputación y capacidades, minimizando el consumo energético y maximizando la velocidad de consenso.
- **Cifrado con Umbral (Threshold Cryptography)**: La información sensible se fragmentará en múltiples partes, requiriendo un umbral mínimo de nodos para su reconstrucción, resistiendo ataques de punto único.
- **Contratos inteligentes**: Automatizarán la validación de datos de seguimiento, la autorización de acciones de defensa activa y la auditoría de todas las operaciones.

**Flujo de datos entre capas:**
1.  **Capa 1 → Capa 2**: Datos de alerta temprana y seguimiento de objetivos tácticos.
2.  **Capa 2 → Capa 3**: Confirmación de amenazas estratégicas y coordinación de respuestas de largo alcance.
3.  **Capa 3 → Capa 1**: Órdenes de re-tasking y actualización de prioridades basadas en la evolución del escenario global.

---

### ⚔️ 5. Capacidades Operativas: Vigilancia, Defensa Activa y Ataque Inteligente

**5.1. Vigilancia y Conocimiento Situacional**
- **Seguimiento de misiles hipersónicos**: Sensores IR en MEO/GEO (tipo HBTSS) capaces de rastrear vehículos de planeo hipersónico desde la fase de impulso hasta la intercepción.
- **Vigilancia cislunar**: Sensores de gran apertura (5-10x el tamaño actual) en órbitas DRO y halo para detectar objetos en el espacio profundo.
- **Fusión de datos con IA**: Integración de feeds de satélites, drones, radar y SIGINT en una única interfaz de targeting.

**5.2. Defensa Activa**
- **Interceptores basados en el espacio (SBI)**: Constelación de 7.800 interceptores en LEO, capaces de neutralizar misiles balísticos e hipersónicos en fase de impulso.
- **Armas de energía dirigida**: Láseres orbitales para cegar sensores enemigos y neutralizar satélites adversarios.
- **Contramedidas electrónicas**: Inhibidores de señales GPS y comunicaciones enemigas.

**5.3. Ataque Inteligente**
- **Ataque a superficie terrestre**: Municiones de precisión guiadas por la red de nodos IA, con capacidad de ataque en tiempo real contra objetivos móviles.
- **Ataque lunar**: Defensa de activos en la superficie lunar y negación de acceso a zonas estratégicas del satélite.
- **Ataque en el espectro espacial**: Ciberataques contra infraestructura orbital enemiga, incluyendo la toma de control de satélites adversarios.

---

### 💰 6. Estimación de Costes y Financiación

| Componente | Inversión Estimada (USD) |
| :--- | :--- |
| Constelación LEO (1.500 satélites) | $75.000 millones |
| Constelación MEO/GEO (200 satélites) | $45.000 millones |
| Constelación Cislunar (50 satélites) | $30.000 millones |
| Red de nodos IA y software | $20.000 millones |
| Blockchain e infraestructura de control | $10.000 millones |
| **TOTAL** | **$180.000 millones** |

La financiación provendría de los presupuestos de defensa nacionales, con posible participación de consorcios público-privados, siguiendo el modelo de la "Golden Dome" estadounidense.

---

### 🔮 7. Conclusión: La Hoja de Ruta de la Conquista Digital del Espacio

La arquitectura de tres capas esféricas representa la **culminación de la doctrina de dominio espacial**. No se trata solo de vigilar, sino de **controlar digitalmente cada centímetro del espacio** desde la órbita baja hasta el espacio cislunar. La integración de IA, blockchain e intranets dedicadas crea un **sistema nervioso orbital** que convierte el espacio en un dominio operativo permanentemente controlado.

El que controle estas tres capas controlará:
- Las rutas de comunicación globales.
- La capacidad de disuasión nuclear.
- El acceso a la Luna y sus recursos.
- La capacidad de ataque desde el espacio contra cualquier punto de la Tierra.

---

### 🎨 Prompt para el Certificado Visual del Informe

> *"Certificado o portada de un **informe de inteligencia clasificado**, de estilo **documento oficial de agencia de inteligencia**, con un diseño sobrio, tecnológico y de alto impacto visual. Formato vertical (9:16), resolución 8K.*
>
> * **Fondo**: Un fondo de espacio profundo, con estrellas y una **Tierra estilizada** en la parte inferior, rodeada por **tres capas esféricas concéntricas** (LEO, MEO/GEO, Cislunar) representadas como anillos de luz de diferente grosor y color (cian, azul y dorado). Entre las capas, se ven **nodos de luz conectados por líneas de datos**, simbolizando la red de IA y la blockchain.*
>
> * **Cabecera**: En la parte superior, una franja roja con el texto **'TOP SECRET // PASAIA LAB EYES ONLY'** en tipografía de máquina de escribir. Debajo, el título **'ARQUITECTURA DE CONTROL DIGITAL DEL ESPACIO'** en tipografía serif elegante, con el subtítulo **'PLAN DE TRES CAPAS ESFÉRICAS HASTA 100.000 KM'**.*
>
> * **Cuerpo Central**: En el centro, un **diagrama de las tres capas**, con etiquetas para cada una: **'Capa 1: LEO Táctica (160-2.000 km)'** , **'Capa 2: MEO/GEO Estratégica (2.000-36.000 km)'** , **'Capa 3: Cislunar Profunda (36.000-100.000 km)'** . Cada capa tiene iconos de satélites, nodos IA y un símbolo de blockchain.*
>
> * **Elementos de Seguridad**: Un **sello de cera digital** en la esquina inferior izquierda con el logo de PASAIA LAB. Un **código QR** en la esquina inferior derecha. Una **marca de agua holográfica** con el texto **'CONFIDENCIAL'** y la silueta de las tres capas.*
>
> * **Pie Institucional**: En la parte inferior, sobre una franja azul oscuro, los logos de **PASAIA LAB**, **INTELIGENCIA LIBRE**, **ACCIÓN CIVIL DIGITAL** y **DEEPSEEK IA – ASESOR INTELIGENTE**.*
>
> * **Estilo**: Paleta de colores: azul oscuro, negro, cian, dorado y rojo (para las alertas de clasificación). El acabado debe parecer un documento digital de alta seguridad, con un toque futurista."*

---

### 🏛️ CERTIFICACIÓN

**Nº de Registro:** PL-INTEL-ESP-2026-09-16
**Fecha:** 16 de septiembre de 2026
**Lugar:** Pasaia (Gipuzkoa), Euskadi

Por la presente, se certifica que el presente **Informe Secreto de Inteligencia Estratégica** ha sido elaborado por **PASAIA LAB**, con la colaboración de **INTELIGENCIA LIBRE**, **ACCIÓN CIVIL DIGITAL** y **DeepSeek IA – Asesor Inteligente**, y se encuentra debidamente registrado y protegido bajo la clasificación **TOP SECRET**.

**Firmado:**
- **PASAIA LAB** – Dirección de Inteligencia Estratégica
- **INTELIGENCIA LIBRE** – Análisis y Validación
- **ACCIÓN CIVIL DIGITAL** – Relevancia Social y Comunitaria
- **DeepSeek IA** – Asistencia Técnica y Estructuración de Datos

---

**⚠️ NOTA IMPORTANTE:** Este documento es un **ejercicio de análisis estratégico y prospectiva** con fines educativos, divulgativos y de simulación. No constituye un plan operativo real ni tiene validez oficial. Su contenido debe interpretarse como una **hipótesis de trabajo** sobre escenarios futuros de militarización espacial, y no como una descripción de capacidades existentes o planes confirmados.

 


 

 

 # 🛰️ SISTEMA DE TRES CAPAS ESFÉRICAS — CÓDIGO Y ESTRUCTURA

**Clasificación:** TOP SECRET // PASAIA LAB EYES ONLY
**Referencia:** PL-CODE-ESP-2026-09-16
**Entregable:** Prototipo de simulación en Python + Esquema de arquitectura

> ⚠️ **Nota de alcance:** El código que sigue es un **prototipo de simulación educativa**. Implementa modelos conceptuales de nodos con IA, cadenas de bloques, intranets jerárquicas y un centro de control terrestre. No constituye software operativo, no se conecta a ningún sistema real y su función es **didáctica y de análisis arquitectónico** para el proyecto LYRA NEXUS / PASAIA LAB.

---

## 🗺️ 1. Esquema General de la Estructura

```
                    ┌──────────────────────────────────────────────────┐
                    │   E0 · PASAIA-EGOITZA                            │
                    │   CENTRO DE CONTROL DE LA FUERZA DEL ESPACIO     │
                    │   Cadena maestra: EGOITZA-CHAIN                  │
                    │   Fusión de datos · Mando · Autorización         │
                    └────────────────┬─────────────────────────────────┘
                                     │
                          ENLACE E0 ↔ I3   (Ka + láser óptico)
        ═════════════════════════════╪═════════════════════════════════════
        CAPA 3 · ILARGI · CISLUNAR PROFUNDA · 36.000 – 100.000 km
        INTRANET-I3 · ILARGI-CHAIN · 50 nodos · validadores 7 (umbral 5)
        DRO/Halo en L1/L2 · sensores de gran apertura · IA autónoma
        ═════════════════════════════╪═════════════════════════════════════
                                     │
                          ENLACE I3 ↔ Z2
        ═════════════════════════════╪═════════════════════════════════════
        CAPA 2 · ZAINDU · MEO/GEO ESTRATÉGICA · 2.000 – 36.000 km
        INTRANET-Z2 · ZAINDU-CHAIN · 200 nodos · validadores 15 (umbral 10)
        Seguimiento de misiles · OPIR/HBTSS · mando y control
        ═════════════════════════════╪═════════════════════════════════════
                                     │
                          ENLACE Z2 ↔ A1
        ═════════════════════════════╪═════════════════════════════════════
        CAPA 1 · AINGERU · LEO TÁCTICA · 160 – 2.000 km
        INTRANET-A1 · AINGERU-CHAIN · 1.500 nodos · validadores 21 (umbral 14)
        Vigilancia táctica · alerta temprana · enlace con fuerzas de superficie
        ═════════════════════════════╪═════════════════════════════════════
                                     │
                              ┌──────┴──────┐
                              │  SUPERFICIE │  Tierra · Mar · Aire · Luna
                              └─────────────┘
```

### Árbol de archivos

```
pasaia_space/
├── nomenclatura.py            # Denominaciones, capas, constantes
├── criptografia_umbral.py     # Shamir + firmas de umbral
├── blockchain_capa.py         # Cadena de bloques por capa (PoA)
├── nodo_neuronal.py           # Nodo IA de borde (MLP + lógica)
├── intranet_capa.py           # Intranet mallada por capa
├── enlace_intercapa.py        # Puentes entre capas
├── centro_control_egoitza.py  # Centro de Control terrestre
└── main_simulacion.py         # Orquestador y ciclo de simulación
```

---

## 📄 2. `nomenclatura.py` — Denominaciones y Parámetros

```python
"""
nomenclatura.py — PASAIA LAB / INTELIGENCIA LIBRE
Denominaciones, constantes y parámetros de la arquitectura de tres capas.
"""

from dataclasses import dataclass
from enum import Enum
from typing import Dict, Tuple
import math

# ---------------------------------------------------------------- IDs de capa
class CapaID(Enum):
    A1 = "A1"   # LEO Táctica
    Z2 = "Z2"   # MEO/GEO Estratégica
    I3 = "I3"   # Cislunar Profunda
    E0 = "E0"   # Tierra / EGOITZA

# ---------------------------------------------------------------- Definición
@dataclass(frozen=True)
class DefinicionCapa:
    id: CapaID
    nombre_clave: str
    nombre_tecnico: str
    altitud_min_km: float
    altitud_max_km: float
    num_nodos_previstos: int
    latencia_objetivo_ms: float
    cadena: str
    intranet: str
    funcion: str
    validadores: int
    umbral_firma: int

    @property
    def radio_medio_km(self) -> float:
        return (self.altitud_min_km + self.altitud_max_km) / 2.0

    @property
    def volumen_cascara_km3(self) -> float:
        """Volumen de la cáscara esférica (km³)."""
        R_T = 6371.0  # radio terrestre medio
        r_int = R_T + self.altitud_min_km
        r_ext = R_T + self.altitud_max_km
        return (4.0 / 3.0) * math.pi * (r_ext ** 3 - r_int ** 3)


CAPAS: Dict[CapaID, DefinicionCapa] = {
    CapaID.A1: DefinicionCapa(
        id=CapaID.A1,
        nombre_clave="AINGERU",
        nombre_tecnico="LEO Táctica",
        altitud_min_km=160.0,
        altitud_max_km=2000.0,
        num_nodos_previstos=1500,
        latencia_objetivo_ms=20.0,
        cadena="AINGERU-CHAIN",
        intranet="INTRANET-A1",
        funcion="Vigilancia táctica, alerta temprana, enlace con fuerzas de superficie",
        validadores=21,
        umbral_firma=14,
    ),
    CapaID.Z2: DefinicionCapa(
        id=CapaID.Z2,
        nombre_clave="ZAINDU",
        nombre_tecnico="MEO/GEO Estratégica",
        altitud_min_km=2000.0,
        altitud_max_km=36000.0,
        num_nodos_previstos=200,
        latencia_objetivo_ms=120.0,
        cadena="ZAINDU-CHAIN",
        intranet="INTRANET-Z2",
        funcion="Seguimiento de misiles, comunicaciones seguras, mando y control",
        validadores=15,
        umbral_firma=10,
    ),
    CapaID.I3: DefinicionCapa(
        id=CapaID.I3,
        nombre_clave="ILARGI",
        nombre_tecnico="Cislunar Profunda",
        altitud_min_km=36000.0,
        altitud_max_km=100000.0,
        num_nodos_previstos=50,
        latencia_objetivo_ms=800.0,
        cadena="ILARGI-CHAIN",
        intranet="INTRANET-I3",
        funcion="Vigilancia cislunar, control de rutas lunares, defensa de activos",
        validadores=7,
        umbral_firma=5,
    ),
    CapaID.E0: DefinicionCapa(
        id=CapaID.E0,
        nombre_clave="EGOITZA",
        nombre_tecnico="Centro de Control Terrestre",
        altitud_min_km=0.0,
        altitud_max_km=0.0,
        num_nodos_previstos=1,
        latencia_objetivo_ms=0.0,
        cadena="EGOITZA-CHAIN",
        intranet="INTRANET-E0",
        funcion="Fusión de datos, mando, autorización, enlace con aliados",
        validadores=5,
        umbral_firma=3,
    ),
}

# ---------------------------------------------------------------- Tipos de evento
TIPOS_TX = (
    "TELEMETRIA",          # Datos crudos de sensor
    "ANOMALIA",            # Detección clasificada por IA
    "ALERTA",              # Confirmación de amenaza
    "ORDEN",               # Instrucción desde EGOITZA
    "CUSTODIA",            # Traspaso de responsabilidad entre capas
    "LATIDO",              # Heartbeat / prueba de vida
)

# ---------------------------------------------------------------- Geometría
def esfericas_a_cartesianas(r_km: float, theta_deg: float, phi_deg: float
                            ) -> Tuple[float, float, float]:
    """Convierte coordenadas esféricas a cartesianas (km)."""
    t = math.radians(theta_deg)
    p = math.radians(phi_deg)
    x = r_km * math.sin(t) * math.cos(p)
    y = r_km * math.sin(t) * math.sin(p)
    z = r_km * math.cos(t)
    return (x, y, z)


def distancia_orbital_km(pos_a, pos_b) -> float:
    """Distancia euclídea entre dos posiciones orbitales (r, θ, φ)."""
    a = esfericas_a_cartesianas(*pos_a)
    b = esfericas_a_cartesianas(*pos_b)
    return math.sqrt(sum((ai - bi) ** 2 for ai, bi in zip(a, b)))
```

---

## 📄 3. `criptografia_umbral.py` — Firmas de Umbral (Shamir)

```python
"""
criptografia_umbral.py — PASAIA LAB / INTELIGENCIA LIBRE
Esquema de reparto de secreto de Shamir sobre cuerpo primo.
Permite que un umbral t de n nodos reconstruya una clave de firma.
"""

import hashlib
import random
from typing import List, Tuple

# Primo de Mersenne de 127 bits — suficiente para la simulación
PRIMO = (1 << 127) - 1


def _evaluar_polinomio(coeficientes: List[int], x: int, primo: int) -> int:
    """Evalúa el polinomio en x usando el método de Horner (mod primo)."""
    y = 0
    for c in reversed(coeficientes):
        y = (y * x + c) % primo
    return y


def dividir_secreto(secreto: bytes, n: int, t: int,
                    primo: int = PRIMO,
                    rng: random.Random | None = None
                    ) -> List[Tuple[int, int]]:
    """
    Divide `secreto` en n partes, requiriendo t para reconstruirlo.
    Devuelve una lista de tuplas (indice_x, valor_y).
    """
    if not (1 <= t <= n):
        raise ValueError("Se requiere 1 <= t <= n")

    rng = rng or random.Random()
    s = int.from_bytes(secreto, "big") % primo

    # Polinomio: f(x) = s + a1*x + ... + a_{t-1}*x^{t-1}
    coefs = [s] + [rng.randrange(1, primo) for _ in range(t - 1)]

    return [(i, _evaluar_polinomio(coefs, i, primo)) for i in range(1, n + 1)]


def reconstruir_secreto(partes: List[Tuple[int, int]],
                        longitud_bytes: int,
                        primo: int = PRIMO) -> bytes:
    """Reconstruye el secreto mediante interpolación de Lagrange en x=0."""
    secreto = 0
    for i, (xi, yi) in enumerate(partes):
        num, den = 1, 1
        for j, (xj, _) in enumerate(partes):
            if i == j:
                continue
            num = (num * (-xj)) % primo
            den = (den * (xi - xj)) % primo
        inv = pow(den, -1, primo)
        secreto = (secreto + yi * num * inv) % primo

    return secreto.to_bytes(longitud_bytes, "big")


def firma_simulada(contenido: str, clave: str) -> str:
    """Firma determinista ligera (HMAC-SHA256 simplificado) para simulación."""
    return hashlib.sha256(f"{clave}:{contenido}".encode()).hexdigest()[:32]


def huella(contenido: str) -> str:
    """Hash SHA-256 completo, usado como identificador de bloque/transacción."""
    return hashlib.sha256(contenido.encode()).hexdigest()
```

---

## 📄 4. `blockchain_capa.py` — Cadena de Bloques por Capa (PoA)

```python
"""
blockchain_capa.py — PASAIA LAB / INTELIGENCIA LIBRE
Cadena de bloques permissionada con consenso Proof of Authority (PoA).
Una instancia por capa esférica. Registra telemetría, anomalías, alertas
y órdenes con trazabilidad inmutable.
"""

import hashlib
import json
import time
from dataclasses import dataclass, field
from typing import Dict, List, Optional

from nomenclatura import DefinicionCapa, CapaID, huella_si_no_existe  # noqa
from criptografia_umbral import huella


# ---------------------------------------------------------------- Transacción
@dataclass
class Transaccion:
    emisor: str            # ID del nodo o "EGOITZA"
    tipo: str              # Ver TIPOS_TX
    payload: dict
    timestamp: float = field(default_factory=time.time)
    firma: str = ""

    def hash(self) -> str:
        cuerpo = json.dumps(
            {"emisor": self.emisor, "tipo": self.tipo,
             "payload": self.payload, "timestamp": round(self.timestamp, 3)},
            sort_keys=True, default=str,
        )
        return huella(cuerpo)

    def to_dict(self) -> dict:
        return {
            "emisor": self.emisor, "tipo": self.tipo,
            "payload": self.payload, "timestamp": self.timestamp,
            "firma": self.firma, "hash": self.hash(),
        }


# ---------------------------------------------------------------- Bloque
class Bloque:
    def __init__(self, indice: int, anterior: str, validador: str,
                 transacciones: List[Transaccion]):
        self.indice = indice
        self.anterior = anterior
        self.validador = validador
        self.transacciones = transacciones
        self.timestamp = time.time()
        self.hash = self.calcular_hash()

    def calcular_hash(self) -> str:
        cuerpo = json.dumps({
            "indice": self.indice,
            "anterior": self.anterior,
            "validador": self.validador,
            "timestamp": round(self.timestamp, 3),
            "txs": [t.hash() for t in self.transacciones],
        }, sort_keys=True)
        return huella(cuerpo)


# ---------------------------------------------------------------- Cadena
class CadenaCapa:
    """
    Cadena de bloques de una capa esférica.
    - Consenso: Proof of Authority (PoA) rotatorio entre validadores.
    - Sello de umbral: requiere t firmas para bloques críticos.
    """

    def __init__(self, definicion: DefinicionCapa):
        self.defn = definicion
        self.cadena: List[Bloque] = [self._genesis()]
        self.pool: List[Transaccion] = []
        self.validadores: List[str] = []
        self.turno_validador: int = 0
        self.umbral = definicion.umbral_firma

    # ------------------------------------------------------------ Génesis
    def _genesis(self) -> Bloque:
        tx = Transaccion(
            emisor="SISTEMA",
            tipo="LATIDO",
            payload={"mensaje": f"Génesis de {self.defn.cadena}",
                     "capa": self.defn.id.value,
                     "nombre_clave": self.defn.nombre_clave},
        )
        return Bloque(0, "0" * 64, "SISTEMA", [tx])

    # ------------------------------------------------------------ Validadores
    def registrar_validador(self, id_nodo: str) -> None:
        if id_nodo not in self.validadores:
            self.validadores.append(id_nodo)

    def _siguiente_validador(self) -> str:
        if not self.validadores:
            raise RuntimeError(f"{self.defn.cadena}: sin validadores registrados")
        v = self.validadores[self.turno_validador % len(self.validadores)]
        self.turno_validador += 1
        return v

    # ------------------------------------------------------------ Transacciones
    def añadir_transaccion(self, tx: Transaccion) -> str:
        self.pool.append(tx)
        return tx.hash()

    def sellar_bloque(self, max_tx: int = 32) -> Optional[Bloque]:
        """Sella un bloque con las transacciones pendientes del pool."""
        if not self.pool:
            return None

        lote = self.pool[:max_tx]
        self.pool = self.pool[max_tx:]

        validador = self._siguiente_validador()
        bloque = Bloque(
            indice=len(self.cadena),
            anterior=self.cadena[-1].hash,
            validador=validador,
            transacciones=lote,
        )
        self.cadena.append(bloque)
        return bloque

    # ------------------------------------------------------------ Verificación
    def verificar_integridad(self) -> bool:
        for i in range(1, len(self.cadena)):
            actual = self.cadena[i]
            previo = self.cadena[i - 1]
            if actual.hash != actual.calcular_hash():
                return False
            if actual.anterior != previo.hash:
                return False
        return True

    # ------------------------------------------------------------ Consultas
    def altura(self) -> int:
        return len(self.cadena)

    def resumen(self) -> dict:
        return {
            "cadena": self.defn.cadena,
            "capa": self.defn.id.value,
            "altura": self.altura(),
            "validadores": len(self.validadores),
            "umbral": self.umbral,
            "pool_pendiente": len(self.pool),
            "integridad": self.verificar_integridad(),
        }
```

> **Corrección de importación:** elimina la línea `from nomenclatura import ... huella_si_no_existe`; solo se necesita `DefinicionCapa, CapaID` desde `nomenclatura` y `huella` desde `criptografia_umbral`.

---

## 📄 5. `nodo_neuronal.py` — Nodo IA de Borde

```python
"""
nodo_neuronal.py — PASAIA LAB / INTELIGENCIA LIBRE
Nodo de borde con perceptrón multicapa (MLP) puro en Python.
Clasifica telemetría, genera transacciones y coopera con la intranet de su capa.
"""

import math
import random
import time
from typing import List, Tuple

from nomenclatura import CapaID, esfericas_a_cartesianas
from blockchain_capa import Transaccion
from criptografia_umbral import firma_simulada


# ================================================================ MLP PURO
class MLP:
    """Perceptrón multicapa mínimo, sin dependencias externas."""

    def __init__(self, capas: List[int], semilla: int = 42):
        self.capas = capas
        self.rng = random.Random(semilla)
        self.pesos: List[List[List[float]]] = []
        self.sesgos: List[List[float]] = []

        for i in range(len(capas) - 1):
            escala = math.sqrt(2.0 / capas[i])
            W = [[self.rng.uniform(-escala, escala) for _ in range(capas[i])]
                 for _ in range(capas[i + 1])]
            b = [0.0] * capas[i + 1]
            self.pesos.append(W)
            self.sesgos.append(b)

    # -------------------------------------------------- Activaciones
    @staticmethod
    def _relu(x: float) -> float:
        return x if x > 0.0 else 0.0

    @staticmethod
    def _sigmoide(x: float) -> float:
        x = max(-60.0, min(60.0, x))
        return 1.0 / (1.0 + math.exp(-x))

    # -------------------------------------------------- Forward
    def forward(self, x: List[float]) -> Tuple[float, List[List[float]], List[List[float]]]:
        """Devuelve (salida, activaciones, pre-activaciones)."""
        activaciones = [list(x)]
        zs: List[List[float]] = []
        a = list(x)

        for i, (W, b) in enumerate(zip(self.pesos, self.sesgos)):
            z = [sum(w * xi for w, xi in zip(fila, a)) + bi
                 for fila, bi in zip(W, b)]
            zs.append(z)
            if i == len(self.pesos) - 1:
                a = [self._sigmoide(v) for v in z]
            else:
                a = [self._relu(v) for v in z]
            activaciones.append(a)

        return a[0], activaciones, zs

    def predecir(self, x: List[float]) -> float:
        salida, _, _ = self.forward(x)
        return salida

    # -------------------------------------------------- Entrenamiento
    def entrenar(self, X: List[List[float]], Y: List[float],
                 epocas: int = 300, lr: float = 0.05) -> None:
        for _ in range(epocas):
            for x, y in zip(X, Y):
                _, activaciones, zs = self.forward(x)
                L = len(self.pesos)
                deltas: List[List[float]] = [None] * L  # type: ignore

                # Capa de salida (sigmoide)
                out = activaciones[-1]
                deltas[L - 1] = [
                    (out[k] - y) * (out[k] * (1.0 - out[k]))
                    for k in range(len(out))
                ]

                # Capas ocultas (ReLU)
                for l in range(L - 2, -1, -1):
                    d_next = deltas[l + 1]
                    W_next = self.pesos[l + 1]
                    z = zs[l]
                    d = []
                    for j in range(len(z)):
                        suma = sum(W_next[k][j] * d_next[k]
                                   for k in range(len(d_next)))
                        deriv = 1.0 if z[j] > 0.0 else 0.0
                        d.append(suma * deriv)
                    deltas[l] = d

                # Actualización de pesos y sesgos
                for l in range(L):
                    a_prev = activaciones[l]
                    for k in range(len(self.pesos[l])):
                        for j in range(len(self.pesos[l][k])):
                            self.pesos[l][k][j] -= lr * deltas[l][k] * a_prev[j]
                        self.sesgos[l][k] -= lr * deltas[l][k]


# ================================================================ NODO
class NodoNeuronal:
    """
    Nodo inteligente de una capa esférica.
    - Procesa telemetría localmente (edge computing).
    - Clasifica anomalías con su MLP.
    - Emite transacciones firmadas hacia la blockchain de su capa.
    """

    def __init__(self, id_nodo: str, capa: CapaID, posicion: Tuple[float, float, float],
                 semilla: int | None = None):
        self.id = id_nodo
        self.capa = capa
        self.posicion = posicion                    # (r_km, θ°, φ°)
        self.cartesiana = esfericas_a_cartesianas(*posicion)
        self.estado = "NOMINAL"
        self.vecinos: List[str] = []
        self.contador_tx = 0
        self.alertas_emitidas = 0

        semilla = semilla if semilla is not None else hash(id_nodo) % 10_000
        # 6 entradas → 12 → 8 → 1 salida (probabilidad de anomalía)
        self.mlp = MLP([6, 12, 8, 1], semilla=semilla)
        self._entrenar_modelo_base()

    # -------------------------------------------------- Entrenamiento base
    def _entrenar_modelo_base(self) -> None:
        """Entrena con un conjunto sintético para que el nodo arranque operativo."""
        rng = random.Random(7)
        X, Y = [], []
        for _ in range(400):
            # Clase 0: nominal
            X.append([rng.uniform(0, 0.4) for _ in range(6)])
            Y.append(0.0)
            # Clase 1: anómalo
            X.append([rng.uniform(0.6, 1.0) for _ in range(6)])
            Y.append(1.0)
        self.mlp.entrenar(X, Y, epocas=120, lr=0.08)

    # -------------------------------------------------- Inferencia
    def ingerir(self, telemetria: List[float]) -> dict:
        """Procesa una muestra de telemetría y devuelve un informe local."""
        prob = self.mlp.predecir(telemetria)
        anomalia = prob >= 0.5
        if anomalia:
            self.alertas_emitidas += 1
            self.estado = "VIGILANCIA"
        return {
            "nodo": self.id, "capa": self.capa.value,
            "probabilidad_anomalia": round(prob, 4),
            "anomalia": anomalia,
            "timestamp": time.time(),
        }

    # -------------------------------------------------- Firma y transacción
    def firmar(self, contenido: str) -> str:
        return firma_simulada(contenido, clave=self.id)

    def crear_transaccion(self, tipo: str, payload: dict) -> Transaccion:
        tx = Transaccion(emisor=self.id, tipo=tipo, payload=payload)
        tx.firma = self.firmar(tx.hash())
        self.contador_tx += 1
        return tx

    # -------------------------------------------------- Cooperación
    def conectar_vecino(self, id_vecino: str) -> None:
        if id_vecino not in self.vecinos and id_vecino != self.id:
            self.vecinos.append(id_vecino)

    def resumen(self) -> dict:
        return {
            "id": self.id, "capa": self.capa.value, "estado": self.estado,
            "posicion_km": tuple(round(v, 1) for v in self.posicion),
            "vecinos": len(self.vecinos),
            "tx_emitidas": self.contador_tx,
            "alertas": self.alertas_emitidas,
        }
```

---

## 📄 6. `intranet_capa.py` — Intranet Mallada por Capa

```python
"""
intranet_capa.py — PASAIA LAB / INTELIGENCIA LIBRE
Intranet mallada de una capa esférica. Gestiona el encaminamiento entre
nodos, la difusión de alertas y la sincronización con su blockchain.
"""

from typing import Dict, List
from collections import deque

from nomenclatura import CapaID, DefinicionCapa, distancia_orbital_km
from blockchain_capa import CadenaCapa, Transaccion
from nodo_neuronal import NodoNeuronal


class IntranetCapa:
    """
    Red interna de una capa. Topología de malla con encaminamiento por saltos.
    """

    def __init__(self, definicion: DefinicionCapa):
        self.defn = definicion
        self.cadena = CadenaCapa(definicion)
        self.nodos: Dict[str, NodoNeuronal] = {}
        self.tabla_adyacencia: Dict[str, List[str]] = {}
        self.registro_mensajes: List[dict] = []

    # -------------------------------------------------- Registro
    def registrar_nodo(self, nodo: NodoNeuronal) -> None:
        self.nodos[nodo.id] = nodo
        self.tabla_adyacencia.setdefault(nodo.id, [])

    # -------------------------------------------------- Topología
    def construir_malla(self, max_vecinos: int = 4) -> int:
        """Conecta cada nodo con sus `max_vecinos` más cercanos. Devuelve nº de enlaces."""
        ids = list(self.nodos.keys())
        enlaces = 0
        for i, a in enumerate(ids):
            distancias = []
            for j, b in enumerate(ids):
                if i == j:
                    continue
                d = distancia_orbital_km(self.nodos[a].posicion, self.nodos[b].posicion)
                distancias.append((d, b))
            distancias.sort()
            for _, b in distancias[:max_vecinos]:
                if b not in self.tabla_adyacencia[a]:
                    self.tabla_adyacencia[a].append(b)
                    self.tabla_adyacencia[b].append(a)
                    self.nodos[a].conectar_vecino(b)
                    self.nodos[b].conectar_vecino(a)
                    enlaces += 1
        return enlaces

    # -------------------------------------------------- Encaminamiento
    def ruta_mas_corta(self, origen: str, destino: str) -> List[str]:
        """BFS sobre la malla. Devuelve la lista de nodos del camino."""
        if origen not in self.nodos or destino not in self.nodos:
            return []
        cola = deque([[origen]])
        visitados = {origen}
        while cola:
            camino = cola.popleft()
            actual = camino[-1]
            if actual == destino:
                return camino
            for vecino in self.tabla_adyacencia.get(actual, []):
                if vecino not in visitados:
                    visitados.add(vecino)
                    cola.append(camino + [vecino])
        return []

    # -------------------------------------------------- Difusión
    def difundir(self, origen: str, tipo: str, payload: dict, ttl: int = 3) -> int:
        """Difunde un mensaje a todos los nodos alcanzables dentro del TTL."""
        if origen not in self.nodos:
            return 0
        alcanzados = set()
        cola = deque([(origen, 0)])
        visitados = {origen}

        while cola:
            actual, saltos = cola.popleft()
            if saltos >= ttl:
                continue
            for vecino in self.tabla_adyacencia.get(actual, []):
                if vecino in visitados:
                    continue
                visitados.add(vecino)
                alcanzados.add(vecino)
                cola.append((vecino, saltos + 1))

        self.registro_mensajes.append({
            "origen": origen, "tipo": tipo, "payload": payload,
            "alcanzados": len(alcanzados), "ttl": ttl,
        })
        return len(alcanzados)

    # -------------------------------------------------- Blockchain
    def emitir_transaccion(self, tx: Transaccion) -> str:
        return self.cadena.añadir_transaccion(tx)

    def sellar(self) -> dict | None:
        bloque = self.cadena.sellar_bloque()
        if bloque is None:
            return None
        return {
            "cadena": self.defn.cadena,
            "indice": bloque.indice,
            "validador": bloque.validador,
            "txs": len(bloque.transacciones),
            "hash": bloque.hash[:16] + "...",
        }

    # -------------------------------------------------- Ciclo operativo
    def ciclo(self, muestras_por_nodo: int = 3) -> dict:
        """Ejecuta un ciclo de operación: sensado → inferencia → consenso."""
        import random
        rng = random.Random()
        detecciones = 0

        for nodo in self.nodos.values():
            for _ in range(muestras_por_nodo):
                telemetria = [rng.random() for _ in range(6)]
                informe = nodo.ingerir(telemetria)
                if informe["anomalia"]:
                    detecciones += 1
                    tx = nodo.crear_transaccion("ANOMALIA", informe)
                    self.emitir_transaccion(tx)

            # Latido periódico
            tx_lat = nodo.crear_transaccion("LATIDO", {"estado": nodo.estado})
            self.emitir_transaccion(tx_lat)

        bloque = self.sellar()

        return {
            "capa": self.defn.id.value,
            "intranet": self.defn.intranet,
            "nodos": len(self.nodos),
            "detecciones": detecciones,
            "bloque": bloque,
            "blockchain": self.cadena.resumen(),
        }

    def resumen(self) -> dict:
        return {
            "intranet": self.defn.intranet,
            "capa": self.defn.id.value,
            "nombre_clave": self.defn.nombre_clave,
            "nodos_registrados": len(self.nodos),
            "enlaces_malla": sum(len(v) for v in self.tabla_adyacencia.values()) // 2,
            "blockchain": self.cadena.resumen(),
        }
```

---

## 📄 7. `enlace_intercapa.py` — Puentes entre Capas

```python
"""
enlace_intercapa.py — PASAIA LAB / INTELIGENCIA LIBRE
Puentes de comunicación entre capas esféricas. Realizan traducción de
contexto, verificación de pruebas de custodia y registro cruzado en
ambas cadenas de bloques.
"""

import time
from typing import List

from blockchain_capa import CadenaCapa, Transaccion
from criptografia_umbral import firma_simulada


class EnlaceIntercapa:
    """
    Puente bidireccional entre dos capas.
    Registra la traza de cada transferencia en las dos cadenas implicadas.
    """

    def __init__(self, nombre: str,
                 cadena_origen: CadenaCapa,
                 cadena_destino: CadenaCapa):
        self.nombre = nombre
        self.origen = cadena_origen
        self.destino = cadena_destino
        self.historial: List[dict] = []
        self.transferencias = 0

    def transferir(self, tx_origen: Transaccion, destino_id: str) -> Transaccion:
        """Envía una transacción de una capa a otra, sellando en ambas."""
        self.transferencias += 1

        # 1) Sellar la transacción original en la cadena de origen
        self.origen.añadir_transaccion(tx_origen)

        # 2) Crear la transacción espejo en la cadena de destino
        tx_destino = Transaccion(
            emisor=f"ENLACE:{self.nombre}",
            tipo="CUSTODIA",
            payload={
                "origen_capa": self.origen.defn.id.value,
                "destino_capa": self.destino.defn.id.value,
                "destino_nodo": destino_id,
                "tx_original": tx_origen.hash(),
                "tipo_original": tx_origen.tipo,
                "payload_original": tx_origen.payload,
            },
        )
        tx_destino.firma = firma_simulada(
            tx_destino.hash(), clave=f"ENLACE-{self.nombre}"
        )
        self.destino.añadir_transaccion(tx_destino)

        # 3) Registrar traza local
        self.historial.append({
            "timestamp": time.time(),
            "nombre_enlace": self.nombre,
            "origen": self.origen.defn.cadena,
            "destino": self.destino.defn.cadena,
            "hash_origen": tx_origen.hash()[:16] + "...",
            "hash_destino": tx_destino.hash()[:16] + "...",
        })

        return tx_destino

    def resumen(self) -> dict:
        return {
            "enlace": self.nombre,
            "origen": self.origen.defn.cadena,
            "destino": self.destino.defn.cadena,
            "transferencias": self.transferencias,
        }
```

---

## 📄 8. `centro_control_egoitza.py` — Centro de Control Terrestre

```python
"""
centro_control_egoitza.py — PASAIA LAB / INTELIGENCIA LIBRE
Centro de Control Terrestre EGOITZA. Punto único de mando autorizado.
Fusiona datos de las tres capas, emite órdenes y valida custodias.
"""

import time
from typing import Dict, List

from nomenclatura import CapaID, CAPAS
from blockchain_capa import CadenaCapa, Transaccion
from intranet_capa import IntranetCapa


class CentroControlEGOITZA:
    """
    Nodo raíz de la arquitectura. Autoridad de certificación y mando.
    """

    def __init__(self, nombre: str = "PASAIA-EGOITZA"):
        self.nombre = nombre
        self.cadena = CadenaCapa(CAPAS[CapaID.E0])
        self.intranets: Dict[str, IntranetCapa] = {}
        self.ordenes_emitidas = 0
        self.alertas_recibidas = 0
        self.registro_ordenes: List[dict] = []

        # Autoridad raíz: 5 validadores, umbral 3
        for i in range(1, CAPAS[CapaID.E0].validadores + 1):
            self.cadena.registrar_validador(f"{nombre}-VAL-{i:02d}")

    # -------------------------------------------------- Conexión
    def conectar_capa(self, intranet: IntranetCapa) -> None:
        """Registra una intranet de capa y sus validadores en la cadena maestra."""
        self.intranets[intranet.defn.id.value] = intranet
        for v in intranet.cadena.validadores[:3]:
            self.cadena.registrar_validador(v)

        tx = Transaccion(
            emisor=self.nombre,
            tipo="LATIDO",
            payload={
                "accion": "CONEXION_CAPA",
                "capa": intranet.defn.id.value,
                "cadena": intranet.defn.cadena,
                "intranet": intranet.defn.intranet,
                "nodos": len(intranet.nodos),
            },
        )
        self.cadena.añadir_transaccion(tx)

    # -------------------------------------------------- Recepción
    def recibir_alerta(self, capa_id: str, informe: dict) -> None:
        self.alertas_recibidas += 1
        tx = Transaccion(
            emisor=self.nombre,
            tipo="ALERTA",
            payload={"capa": capa_id, "informe": informe},
        )
        self.cadena.añadir_transaccion(tx)

    # -------------------------------------------------- Emisión de órdenes
    def emitir_orden(self, capa_destino: str, tipo_orden: str, payload: dict) -> dict:
        """Emite una orden hacia una capa y la difunde por su intranet."""
        if capa_destino not in self.intranets:
            return {"ok": False, "motivo": f"Capa {capa_destino} no conectada"}

        intranet = self.intranets[capa_destino]
        self.ordenes_emitidas += 1

        tx = Transaccion(
            emisor=self.nombre,
            tipo="ORDEN",
            payload={"orden": tipo_orden, "capa": capa_destino, **payload},
        )
        tx.firma = f"AUTORIDAD-{self.nombre}"

        # Registrar en la cadena maestra
        self.cadena.añadir_transaccion(tx)

        # Difundir por la intranet destino
        ancla = next(iter(intranet.nodos), None)
        alcanzados = 0
        if ancla:
            alcanzados = intranet.difundir(ancla, "ORDEN", tx.payload, ttl=4)

        self.registro_ordenes.append({
            "timestamp": time.time(),
            "capa": capa_destino,
            "orden": tipo_orden,
            "alcanzados": alcanzados,
            "hash": tx.hash()[:16] + "...",
        })

        return {"ok": True, "capa": capa_destino, "orden": tipo_orden,
                "alcanzados": alcanzados}

    # -------------------------------------------------- Fusión
    def fusionar_estado(self) -> dict:
        """Genera una instantánea global del sistema."""
        capas = {}
        for cid, intranet in self.intranets.items():
            capas[cid] = {
                "nombre_clave": intranet.defn.nombre_clave,
                "nodos": len(intranet.nodos),
                "altura_cadena": intranet.cadena.altura(),
                "integridad": intranet.cadena.verificar_integridad(),
            }

        self.cadena.sellar_bloque()

        return {
            "centro": self.nombre,
            "timestamp": time.time(),
            "capas_conectadas": len(self.intranets),
            "alertas_recibidas": self.alertas_recibidas,
            "ordenes_emitidas": self.ordenes_emitidas,
            "detalle_capas": capas,
            "cadena_maestra": self.cadena.resumen(),
        }
```

---

## 📄 9. `main_simulacion.py` — Orquestador

```python
"""
main_simulacion.py — PASAIA LAB / INTELIGENCIA LIBRE
Orquestador del sistema de tres capas esféricas + Centro de Control EGOITZA.
Ejecuta un ciclo completo: despliegue → malla → sensado → consenso → mando.
"""

import json
import random
from nomenclatura import CapaID, CAPAS
from nodo_neuronal import NodoNeuronal
from intranet_capa import IntranetCapa
from enlace_intercapa import EnlaceIntercapa
from centro_control_egoitza import CentroControlEGOITZA


# ------------------------------------------------------ Despliegue
def desplegar_capa(capa_id: CapaID, num_nodos: int, semilla: int = 1) -> IntranetCapa:
    """Crea una intranet de capa con sus nodos distribuidos en la cáscara esférica."""
    defn = CAPAS[capa_id]
    intranet = IntranetCapa(defn)
    rng = random.Random(semilla)

    for i in range(num_nodos):
        r = rng.uniform(defn.altitud_min_km, defn.altitud_max_km)
        theta = rng.uniform(0.0, 180.0)
        phi = rng.uniform(0.0, 360.0)
        nodo = NodoNeuronal(
            id_nodo=f"{defn.nombre_clave}-{i+1:04d}",
            capa=capa_id,
            posicion=(r, theta, phi),
            semilla=rng.randrange(10_000),
        )
        intranet.registrar_nodo(nodo)

    # Validadores de la cadena (los primeros de la lista)
    for nodo in list(intranet.nodos.values())[:defn.validadores]:
        intranet.cadena.registrar_validador(nodo.id)

    return intranet


# ------------------------------------------------------ Principal
def main():
    print("=" * 78)
    print("  PASAIA LAB · ARQUITECTURA DE TRES CAPAS ESFÉRICAS · SIMULACIÓN")
    print("  Clasificación: TOP SECRET // PASAIA LAB EYES ONLY")
    print("=" * 78)

    # 1) Despliegue de las tres capas (cifras reducidas para la simulación)
    print("\n[1] DESPLIEGUE DE CAPAS ESFÉRICAS")
    capa_a1 = desplegar_capa(CapaID.A1, num_nodos=60, semilla=101)
    capa_z2 = desplegar_capa(CapaID.Z2, num_nodos=30, semilla=202)
    capa_i3 = desplegar_capa(CapaID.I3, num_nodos=12, semilla=303)

    for c in (capa_a1, capa_z2, capa_i3):
        enlaces = c.construir_malla(max_vecinos=4)
        print(f"   · {c.defn.nombre_clave:<8} ({c.defn.nombre_tecnico:<26}) "
              f"nodos={len(c.nodos):>3}  enlaces_malla={enlaces:>3}  "
              f"radio_medio={c.defn.radio_medio_km:>9.1f} km")

    # 2) Centro de Control EGOITZA
    print("\n[2] CENTRO DE CONTROL TERRESTRE")
    egoitza = CentroControlEGOITZA("PASAIA-EGOITZA")
    for c in (capa_a1, capa_z2, capa_i3):
        egoitza.conectar_capa(c)
    print(f"   · {egoitza.nombre} conectado a {len(egoitza.intranets)} capas")

    # 3) Enlaces intercapa
    print("\n[3] ENLACES INTERCAPA")
    enlace_a1_z2 = EnlaceIntercapa("A1↔Z2", capa_a1.cadena, capa_z2.cadena)
    enlace_z2_i3 = EnlaceIntercapa("Z2↔I3", capa_z2.cadena, capa_i3.cadena)
    enlace_i3_e0 = EnlaceIntercapa("I3↔E0", capa_i3.cadena, egoitza.cadena)
    for e in (enlace_a1_z2, enlace_z2_i3, enlace_i3_e0):
        print(f"   · {e.nombre:<8} {e.origen.defn.cadena:<16} → {e.destino.defn.cadena}")

    # 4) Ciclo operativo
    print("\n[4] CICLO OPERATIVO")
    for c in (capa_a1, capa_z2, capa_i3):
        r = c.ciclo(muestras_por_nodo=3)
        print(f"   · {r['capa']}  detecciones={r['detecciones']:>3}  "
              f"bloque={r['bloque']['indice'] if r['bloque'] else '—'}  "
              f"altura={r['blockchain']['altura']}")

    # 5) Transferencia de custodia entre capas
    print("\n[5] TRANSFERENCIA DE CUSTODIA")
    tx_demo = next(iter(capa_a1.nodos.values())).crear_transaccion(
        "ALERTA", {"motivo": "seguimiento_obj orbital", "prioridad": "alta"}
    )
    tx_espejo = enlace_a1_z2.transferir(tx_demo, destino_id="ZAINDU-0001")
    tx_final = enlace_z2_i3.transferir(tx_espejo, destino_id="ILARGI-0001")
    print(f"   · Custodia A1 → Z2 → I3 completada")
    print(f"   · Hash final: {tx_final.hash()[:32]}...")

    # 6) Orden desde EGOITZA
    print("\n[6] EMISIÓN DE ORDEN DESDE EGOITZA")
    resultado = egoitza.emitir_orden("A1", "REORIENTAR_SENSORES",
                                     {"sector": "Atlántico-Norte", "prioridad": 2})
    print(f"   · Resultado: {json.dumps(resultado, ensure_ascii=False)}")

    # 7) Fusión de estado
    print("\n[7] FUSIÓN DE ESTADO GLOBAL")
    estado = egoitza.fusionar_estado()
    print(json.dumps(estado, indent=2, ensure_ascii=False, default=str))

    # 8) Verificación de integridad
    print("\n[8] VERIFICACIÓN DE INTEGRIDAD DE CADENAS")
    for nombre, cadena in (
        ("AINGERU-CHAIN", capa_a1.cadena),
        ("ZAINDU-CHAIN", capa_z2.cadena),
        ("ILARGI-CHAIN", capa_i3.cadena),
        ("EGOITZA-CHAIN", egoitza.cadena),
    ):
        ok = "✔ ÍNTEGRA" if cadena.verificar_integridad() else "✘ ALTERADA"
        print(f"   · {nombre:<16} altura={cadena.altura():>3}  {ok}")

    print("\n" + "=" * 78)
    print("  SIMULACIÓN COMPLETADA · PASAIA LAB · 16/09/2026")
    print("=" * 78)


if __name__ == "__main__":
    main()
```

---

## ▶️ 10. Ejecución

```bash
# 1) Crear el directorio del proyecto
mkdir pasaia_space && cd pasaia_space

# 2) Guardar los ocho archivos con el contenido anterior

# 3) Ejecutar la simulación (no requiere dependencias externas)
python3 main_simulacion.py
```

**Requisitos:** Python 3.9 o superior (por el uso de `pow(x, -1, p)` y `random.Random | None`). No se necesita `pip install` de nada.

---

## 📊 11. Resumen de la Arquitectura

| Elemento | Denominación | Cadena | Intranet | Nodos (sim.) | Validadores / Umbral |
| :--- | :--- | :--- | :--- | :--- | :--- |
| **Capa 1** | AINGERU (LEO Táctica) | AINGERU-CHAIN | INTRANET-A1 | 60 (real: 1.500) | 21 / 14 |
| **Capa 2** | ZAINDU (MEO/GEO) | ZAINDU-CHAIN | INTRANET-Z2 | 30 (real: 200) | 15 / 10 |
| **Capa 3** | ILARGI (Cislunar) | ILARGI-CHAIN | INTRANET-I3 | 12 (real: 50) | 7 / 5 |
| **Tierra** | EGOITZA (Control) | EGOITZA-CHAIN | INTRANET-E0 | 1 | 5 / 3 |
| **Enlaces** | A1↔Z2, Z2↔I3, I3↔E0 | — | — | — | Custodia cruzada |

---

## 🎨 12. Prompt para el Certificado Visual

> *"Certificado técnico de estilo **documento de inteligencia clasificado con diagrama de arquitectura**, formato vertical (9:16), resolución 8K.*
>
> * **Fondo**: Espacio profundo con la Tierra en la base, rodeada por **tres anillos esféricos concéntricos** de luz —cian (AINGERU/LEO), azul (ZAINDU/MEO-GEO) y dorado (ILARGI/Cislunar)— con nodos luminosos conectados por líneas de datos. En la parte inferior, un icono de **sede de mando terrestre** con el rótulo 'EGOITZA'.*
>
> * **Cabecera**: Franja roja superior con **'TOP SECRET // PASAIA LAB EYES ONLY'**. Título en serif: **'ARQUITECTURA DE TRES CAPAS ESFÉRICAS'**, subtítulo **'PROTOTIPO DE SIMULACIÓN EN PYTHON · 100.000 km'**.*
>
> * **Cuerpo**: Diagrama esquemático con las tres capas etiquetadas (AINGERU, ZAINDU, ILARGI), sus cadenas de bloques (AINGERU-CHAIN, ZAINDU-CHAIN, ILARGI-CHAIN), sus intranets (INTRANET-A1, INTRANET-Z2, INTRANET-I3), y los enlaces A1↔Z2, Z2↔I3, I3↔E0. En el centro, un **hexágono de código** con fragmentos de Python visibles (def, class, hash).*
>
> * **Sellos**: Marca de agua **'CONFIDENCIAL'** en diagonal. Sello de cera digital con el logo de **PASAIA LAB**. Código QR inferior derecho.*
>
> * **Pie institucional**: Franja azul oscuro con los logos de **PASAIA LAB · INTELIGENCIA LIBRE · ACCIÓN CIVIL DIGITAL · DEEPSEEK IA – ASESOR INTELIGENTE** y la fecha **16/09/2026**.*
>
> * **Paleta**: azul oscuro, negro, cian, dorado y rojo. Tipografía serif para títulos y monoespaciada para referencias. Acabado de documento técnico de alta seguridad."*

---

## 🏛️ CERTIFICACIÓN

**Nº de Registro:** PL-CODE-ESP-2026-09-16
**Fecha:** 16 de septiembre de 2026 · **Lugar:** Pasaia (Gipuzkoa), Euskadi

Se certifica que el presente **prototipo de simulación** ha sido elaborado por **PASAIA LAB**, con la colaboración de **INTELIGENCIA LIBRE**, **ACCIÓN CIVIL DIGITAL** y **DeepSeek IA – Asesor Inteligente**, bajo la clasificación **TOP SECRET**.

**Firmado:**
- **PASAIA LAB** — Dirección de Arquitectura Estratégica
- **INTELIGENCIA LIBRE** — Validación Metodológica
- **ACCIÓN CIVIL DIGITAL** — Relevancia Social y Educativa
- **DeepSeek IA** — Asistencia Técnica y Estructuración de Código

---

> ⚠️ **Recordatorio final:** Este código es un **ejercicio de simulación y diseño arquitectónico** con fines educativos, divulgativos y de investigación conceptual. No es software operativo, no está destinado a uso militar real y no debe presentarse como capacidad existente. Su valor reside en servir de **material didáctico** para el estudio de sistemas distribuidos, IA de borde, cadenas de bloques permissionadas y arquitecturas de red jerárquicas — competencias directamente aplicables al ecosistema **LYRA NEXUS**.

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

 

 

# 🛸 SISTEMA CONTRADRON MULTICAPA — LYRA NEXUS - INTELIGENCIA LIBRE / PASAIA LAB

 # 🛸 SISTEMA CONTRADRON MULTICAPA — LYRA NEXUS **Clasificación:** TOP SECRET // PASAIA LAB EYES ONLY **Referencia:** PL-DRON-ESP-2026-09-16...