zcatp2p/CLAUDE.md
reugenio 36d6d3a699 docs: Añadir disclaimer seguridad TLS
Documentado que la implementación TLS 1.3 es específica para el
protocolo BEP, no es un stack TLS de propósito general, y no ha
sido auditada profesionalmente.

Las primitivas criptográficas (X25519, ChaCha20-Poly1305) sí
provienen de std.crypto de Zig.

Recomendación auditoría Gemini 2025-12-19.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 13:55:49 +01:00

123 lines
5.8 KiB
Markdown

# zcatp2p - Protocolo P2P para comunicación directa entre empresas
## Descripción
Librería Zig para comunicación P2P segura entre instancias de Simifactu.
Permite intercambio directo de documentos (facturas, certificados) entre empresas
sin necesidad de email ni servicios cloud.
## Disclaimer de Seguridad (TLS)
⚠️ **Implementación TLS específica**: Esta librería incluye una implementación
de TLS 1.3 escrita en Zig puro, optimizada para el protocolo BEP (Block Exchange
Protocol) de Syncthing.
**Importante:**
- **NO es un stack TLS de propósito general** - está diseñado específicamente
para este protocolo P2P
- **NO ha sido auditado profesionalmente** - no debe usarse como reemplazo de
OpenSSL, BearSSL u otras librerías TLS establecidas
- Las primitivas criptográficas subyacentes (X25519, ChaCha20-Poly1305) sí
provienen de `std.crypto` de Zig, que es código bien probado
**Uso recomendado:** Para comunicación P2P entre instancias de Simifactu en
redes controladas. Para aplicaciones que requieran TLS auditado, usar librerías
establecidas.
---
## Objetivos
1. **Seguridad**: E2E cifrado con TLS 1.3 + ChaCha20-Poly1305
2. **Descentralizado**: Sin servidor central obligatorio
3. **Sin dependencias externas**: Implementación completa en Zig puro
4. **Compatible con NAT**: STUN + relay para atravesar firewalls
## Arquitectura
```
┌─────────────────────────────────────────────────────────┐
│ zcatp2p Library │
├─────────────────────────────────────────────────────────┤
│ API Layer │
│ ├── p2p.init() / p2p.deinit() │
│ ├── p2p.connect(device_id) │
│ ├── p2p.send(data) │
│ └── p2p.receive() -> data │
├─────────────────────────────────────────────────────────┤
│ Protocol Layer │
│ ├── Message framing (Header + Payload) │
│ ├── Compression (LZ4) │
│ └── Encryption (ChaCha20-Poly1305) │
├─────────────────────────────────────────────────────────┤
│ Connection Layer │
│ ├── TLS 1.3 handshake │
│ ├── Certificate-based identity │
│ └── Connection multiplexing │
├─────────────────────────────────────────────────────────┤
│ Discovery Layer │
│ ├── Local: UDP broadcast/multicast │
│ ├── Global: HTTPS announce/query │
│ └── Cache de direcciones conocidas │
├─────────────────────────────────────────────────────────┤
│ NAT Traversal Layer │
│ ├── STUN client │
│ ├── UPnP/NAT-PMP port mapping │
│ └── Relay fallback │
└─────────────────────────────────────────────────────────┘
```
## Estructura de archivos
```
zcatp2p/
├── CLAUDE.md # Este archivo
├── PROTOCOL.md # Especificación detallada del protocolo
├── API.md # Documentación de la API
├── build.zig # Build system
└── src/
├── main.zig # Exports públicos
├── identity.zig # Device ID, certificados
├── crypto.zig # ChaCha20-Poly1305, SHA256, etc.
├── tls.zig # TLS 1.3 implementation
├── http.zig # HTTP/1.1 client
├── protocol.zig # Message framing
├── discovery.zig # Local + global discovery
├── stun.zig # STUN client
├── relay.zig # Relay protocol
├── nat.zig # UPnP IGD / NAT-PMP port mapping
└── connection.zig # Connection management
```
## Referencias
- Syncthing BEP (Block Exchange Protocol): `/mnt/cello2/arno/re/recode/referencias/syncthing/`
- RFC 5389 (STUN)
- RFC 8446 (TLS 1.3)
- RFC 8439 (ChaCha20-Poly1305)
## Estado
- [x] Especificación del protocolo (PROTOCOL.md)
- [x] API design (API.md)
- [x] Implementación crypto (SHA256, ChaCha20-Poly1305)
- [x] Implementación TLS 1.3 (X25519, HKDF, handshake completo)
- [x] Implementación discovery local (UDP broadcast)
- [x] Implementación STUN client
- [x] Implementación relay client (con TLS handshake)
- [x] Tests unitarios (44 tests)
- [x] Discovery global (HTTPS API)
- [x] UPnP/NAT-PMP port mapping
- [x] Integración completa de red
- [x] **Identity persistence** (Device ID persistente entre reinicios)
- [x] **Conexión via relay** (para NAT symmetric)
## Comandos
```bash
# Ejecutar tests
zig build test
# Compilar ejemplo
zig build run
```