- Keyhive es un proyecto de investigación para construir un sistema de control de acceso local-first que pueda funcionar sin conexión y sin servidor central, con el objetivo de aplicar a la colaboración en documentos un nivel de seguridad comparable al de Signal
- Mediante un modelo de delegación de permisos (Capability Model) sincronizable incluso en entornos distribuidos, un CRDT de gestión de grupos y E2EE basada en causalidad (Causal Keys), hace posible un control de acceso seguro a los datos incluso durante la colaboración
- El protocolo criptográfico central BeeKEM garantiza Forward Secrecy y Post-Compromise Security sin servidor central, y puede escalar a grupos de miles de personas
- Beelay, la capa de sincronización de Keyhive, mejora la velocidad de sincronización de grandes documentos locales usando sincronización de conjuntos basada en RIBLT y el método de compresión Sedimentree
- Con este proyecto, Ink & Switch presenta la tecnología base para una plataforma de colaboración segura sin dependencia de servidores y busca expandir el ecosistema de software offline-first
Resumen de Keyhive
- Keyhive es una investigación para implementar control de acceso sobre datos colaborativos en un entorno local-first sin usar servidores en la nube
- La autenticación tradicional en la nube, como OAuth, depende de verificar permisos mediante un servidor central, pero en un modelo local-first los datos y los permisos deben moverse juntos
- Para ello, Keyhive adopta un diseño basado en delegación de permisos (capability) y construye una capa distribuida de autenticación y cifrado
- El objetivo es lograr una seguridad de colaboración completamente descentralizada, manteniendo una experiencia amigable para el usuario como la de Google Docs o GitHub
Filosofía de diseño y componentes
- Keyhive fue diseñado bajo el principio de que la capa de control de acceso debe existir antes que la capa de datos
- Por eso, la estructura de almacenamiento y sincronización también debe seguir el modelo de cifrado y gestión de permisos
- Tres componentes principales:
- Convergent Capabilities: un nuevo modelo de permisos apto para CRDT, con el que es posible demostrar criptográficamente la delegación entre entidades
- Group Management CRDT: permite agregar o quitar grupos y revocar permisos sin servidor central
- E2EE with Causal Keys: administra claves según la estructura causal del documento para lograr un cifrado eficiente
Convergent Capabilities
- Un modelo que combina las ventajas de los permisos de objeto existentes (Object-capability) y los permisos basados en certificados (Certificate-capability)
- Al incluir el estado del CRDT, mantiene la convergencia incluso sin conexión
- Con un esquema de delegación basado en clave pública, usuarios, grupos y documentos pueden tratarse como entidades equivalentes
- Ejemplo: un usuario puede formar un grupo de dispositivos y un documento puede representar una unidad de equipo para asignar permisos de acceso
BeeKEM: protocolo de acuerdo de claves de grupo
- BeeKEM es un protocolo CGKA de acuerdo continuo de claves de grupo que funciona sin servidor central
- Hereda la estructura de TreeKEM, pero fue mejorado para operar solo con orden causal (Causal Order)
- Está diseñado sobre criptografía estándar usando únicamente intercambio de claves Diffie-Hellman y la función hash BLAKE3
- Características principales:
- Maneja en estado distribuido todas las operaciones: agregar o quitar miembros del grupo, resolver conflictos por actualizaciones concurrentes y restaurar nodos vacíos
- En caso de conflictos de concurrencia, mantiene la seguridad mediante el algoritmo de fusión de “Conflict Key”
- Rendimiento logarítmico en el caso general y lineal en el peor caso
Beelay: protocolo de sincronización de confianza mínima
- Beelay es un protocolo basado en RPC que sincroniza los datos y permisos de Keyhive; el servidor solo retransmite datos cifrados
- Los mensajes se autentican con firmas Ed25519 e incluyen protección contra ataques de repetición y ataques de intermediario (PITM)
- Procedimiento central de operación:
- Logra sincronización rápida de grandes volúmenes de datos calculando diferencias de conjuntos mediante RIBLT (Rateless Invertible Bloom Lookup Table)
- Sincroniza secuencialmente el grafo de membresía (relaciones entre grupos y documentos), el estado de las colecciones de documentos y el cuerpo de los documentos
- Mediante la estructura Sedimentree, comprime y fusiona el grafo de commits de Automerge, reduciendo el ancho de banda en la sincronización de documentos grandes
Flujo de sincronización
- Sincronización del grafo de membresía: sincroniza grupos y relaciones de permisos
- Sincronización de colecciones de documentos: identifica documentos modificados
- Sincronización CGKA: fusiona operaciones de BeeKEM
- Sincronización del cuerpo del documento: transmisión comprimida basada en Sedimentree
- En el caso típico de un solo cambio, la sincronización completa se termina con solo 2 viajes de ida y vuelta
Planes a futuro
- Actualmente Keyhive está publicado como versión pre-alpha, con implementación basada en Rust y bindings para WASM/TypeScript
- Más adelante se prevé publicar validaciones de seguridad y artículos sobre rendimiento, con el objetivo de establecer un modelo estándar de seguridad para sistemas de colaboración local-first
Aún no hay comentarios.