Protocolo Orzatty (PO)
Comunicación peer-to-peer cifrada de extremo a extremo sobre QUIC.
Protocol Orzatty (PO) es un protocolo de transferencia de datos directo P2P sobre UDP. Envuelve el transporte QUIC con un handshake criptográfico personalizado, un formato de cable binario y una capa de gestión de sesiones.
Propiedades clave:
- 🔒 E2EE Obligatorio — ChaCha20-Poly1305 en cada trama de datos. Sin modo texto plano.
- 🆔 Identidad descentralizada — Pares de claves Ed25519, sin necesidad de Autoridades Certificadoras (CA).
- 🔑 Perfect forward secrecy — X25519 ECDH efímero por sesión.
- ⚡ Transporte QUIC/UDP — Sin bloqueo de cabeza de línea TCP (head-of-line blocking).
- 🎯 API de 2 líneas — Conecta o escucha con una sola llamada de función en Rust.
Quick Start (Como librería en Rust)
La implementación principal de PO está escrita en Rust. Importa el crate po-node.
Servidor (Escuchar)
use po_node::Po;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Servidor — 2 líneas para conexión cifrada
let mut server = Po::bind(4433).await?;
let (channel, data) = server.recv().await?.unwrap();
println!("Recibido: {}", String::from_utf8_lossy(&data));
Ok(())
}
Cliente (Conectar)
use po_node::Po;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Cliente — conectar y enviar
let mut client = Po::connect("192.168.1.5:4433").await?;
client.send(b"Hello, encrypted world!").await?;
client.close().await?;
Ok(())
}
Uso por Línea de Comandos (CLI)
Puedes construir la herramienta CLI para probar conexiones P2P manualmente.
# Construir la CLI
cargo build --release -p po-cli
# Iniciar chat cifrado e interactivo
./target/release/po-cli chat 4433 # Modo escucha
./target/release/po-cli chat 10.0.0.5:4433 # Modo conectar
Flujo de Conexión y Handshake
- Conexión UDP/QUIC establecida.
- Handshake criptográfico de 3 vías:
- Iniciador → Respondedor: Ed25519 pubkey + ephemeral X25519 key + firma
- Respondedor → Iniciador: Ed25519 pubkey + ephemeral X25519 key + firma
- Iniciador → Respondedor: Confirmación cifrada "PO_READY"
- Derivación de clave de sesión (ECDH → HKDF-SHA256).
- Todos los datos posteriores se cifran con ChaCha20-Poly1305.
Primitivas Criptográficas
| Propósito | Algoritmo | Estándar |
|---|---|---|
| Identidad de Nodo | Ed25519 | RFC 8032 |
| Intercambio de Claves | X25519 ECDH | RFC 7748 |
| Cifrado Simétrico | ChaCha20-Poly1305 | RFC 8439 |