Documento técnico sobre seguridad y privacidad (descripción general)Capítulo 5
Capítulo 5 Criptografía y gestión de claves
Este capítulo describe el cifrado de extremo a extremo (E2EE) y el límite de conocimiento cero de FileBolt, y especifica los parámetros de cryptoVersion=v1, las reglas de codificación, los modos de fallo y las restricciones del cliente. Las claves se generan y se usan en el cliente; el servidor y el almacenamiento de objetos solo manejan fragmentos cifrados y los metadatos necesarios.
5.0 Resumen
- El sistema NO DEBE recibir, almacenar ni registrar las claves de descifrado (CEK). El material de la CEK viaja únicamente en el fragmento de la URL (la parte tras
#), que no se envía al servidor en las solicitudes HTTP. - El cifrado usa AES-128-GCM (AEAD). Cada archivo usa una CEK independiente (16 bytes). El tamaño de los fragmentos es fijo (por ejemplo, 16 MB).
- Construcción del IV en v1: IV = noncePrefix(8B) || uint32_be(chunkIndex)(4B). El AAD vincula
transferId,fileIdychunkIndexpara impedir el intercambio de contexto y los ataques de repetición. - Los tokens del servidor solo controlan el acceso al texto cifrado y caducan; no conceden capacidad de descifrado.
5.1 Cifrado en tránsito (TLS)
5.1.1 Objetivo de seguridad
- Impedir las escuchas y la manipulación en los enlaces de subida, descarga y API.
- Proteger los tokens y el texto cifrado en tránsito.
5.1.2 Política de seguridad
- El sistema DEBE servir todas las páginas y API únicamente por HTTPS.
- El sistema DEBERÍA preferir TLS 1.3 y admitir TLS 1.2 cuando sea necesario; los protocolos y cifrados débiles DEBEN estar desactivados.
- El sistema DEBE habilitar HSTS con un valor razonable de
max-age.
5.2 Cifrado por fragmentos (AES-128-GCM)
5.2.1 Notas de diseño
- Los archivos se dividen en fragmentos de tamaño fijo; cada fragmento se cifra de forma independiente para permitir la transferencia en paralelo y la reanudación.
- La autenticación AEAD protege la integridad; cualquier fallo de autenticación DEBE provocar un cierre ante el fallo.
5.2.2 Política de seguridad
- Cada archivo DEBE usar una CEK distinta (16 bytes).
- El IV DEBE ser único para cada (archivo, chunkIndex). La v1 usa la codificación
noncePrefix+chunkIndex. - El AAD DEBE incluir (transferId, fileId, chunkIndex) para vincular el texto cifrado a su contexto.
5.3 Modelo de enlace de conocimiento cero
5.3.1 Restricciones clave
- La CEK (o el material de derivación) DEBE viajar únicamente en el fragmento de la URL y NO DEBE incluirse en los parámetros de consulta ni en las cabeceras.
- El servidor NO DEBE registrar los fragmentos; los registros DEBEN sanearse para evitar capturas accidentales.
- La política de referrer DEBERÍA impedir la fuga del fragmento mediante la navegación saliente (véase el capítulo 9).
5.4 Generación y gestión de claves
- Las claves DEBEN generarse con un generador de números aleatorios criptográficamente seguro (WebCrypto).
- Las claves DEBERÍAN mantenerse solo en memoria y borrarse cuando ya no se necesiten.
- Los clientes NO DEBEN guardar la CEK en ubicaciones visibles para el servidor (por ejemplo, cookies o parámetros de consulta).
5.5 Codificación y parámetros
- cryptoVersion=v1 identifica el conjunto de algoritmos y las reglas de IV/AAD.
- El manifiesto DEBE incluir los parámetros públicos necesarios (tamaño y número de fragmentos, noncePrefix, correspondencia de fileId), pero NO DEBE incluir la CEK.
5.6 Modos de fallo (cierre ante el fallo)
- Ante un fallo de descifrado o de autenticación AEAD, los clientes DEBEN abortar y NO DEBEN mostrar texto sin cifrar parcial.
- Ante una discrepancia de parámetros (transferId/fileId/chunkIndex), los clientes DEBEN cerrarse ante el fallo y DEBERÍAN notificar un error accionable.
5.7 ID de afirmaciones relacionados
- Consulta el Apéndice: ID de afirmaciones para ver la correspondencia de referencia.