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:


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

  1. Conexión UDP/QUIC establecida.
  2. 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"
  3. Derivación de clave de sesión (ECDH → HKDF-SHA256).
  4. 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