En criptografía , un blob aleatorio uniforme acolchado o PURB es una disciplina para formatos de datos cifrados diseñados para minimizar la fuga de información no intencionada, ya sea de sus metadatos de formato de cifrado o de su longitud total. [1]
Cuando se crea correctamente, el contenido de un PURB es indistinguible de una cadena de bits aleatoria uniforme para cualquier observador sin una clave de descifrado relevante. Por lo tanto, un PURB no filtra información a través de encabezados u otros metadatos de texto claro asociados con el formato de datos cifrados. Esta práctica de "higiene" de minimización de fugas contrasta con los formatos de datos cifrados tradicionales, como Pretty Good Privacy , que incluyen información de codificación de metadatos de texto claro, como la aplicación que creó los datos, la versión del formato de datos, la cantidad de destinatarios para los que se cifran los datos, las identidades o claves públicas de los destinatarios y los cifrados o conjuntos que se utilizaron para cifrar los datos. Si bien dichos metadatos de cifrado se consideraban no sensibles cuando se diseñaron estos formatos cifrados, las técnicas de ataque modernas han encontrado numerosas formas de emplear esos metadatos filtrados incidentalmente para facilitar los ataques, por ejemplo, identificando datos cifrados con cifras débiles o algoritmos obsoletos, tomando huellas digitales de aplicaciones para rastrear usuarios o identificar versiones de software con vulnerabilidades conocidas, o técnicas de análisis de tráfico como la identificación de todos los usuarios, grupos y claves públicas asociadas involucradas en una conversación a partir de un mensaje cifrado observado entre solo dos de ellos.
Además, un PURB se rellena hasta un conjunto restringido de longitudes posibles, con el fin de minimizar la cantidad de información que los datos cifrados podrían potencialmente filtrar a los observadores a través de su longitud total. Sin relleno, los objetos cifrados, como archivos o cadenas de bits de hasta bits de longitud, pueden filtrar hasta bits de información a un observador, es decir, la cantidad de bits necesarios para representar la longitud exactamente. Un PURB se rellena hasta una longitud representable en un número de punto flotante cuya mantisa no es más larga (es decir, no contiene más bits significativos) que su exponente. Esta restricción limita la cantidad máxima de información que la longitud total de un PURB puede filtrar a bits, una reducción asintótica significativa y la mejor que se puede lograr en general para formatos cifrados de longitud variable cuya sobrecarga multiplicativa está limitada a un factor constante del tamaño de la carga útil sin relleno. Esta fuga asintótica es la misma que se obtendría al rellenar objetos cifrados hasta una potencia de alguna base, como una potencia de dos. Sin embargo, permitir algunos bits de mantisa significativos en la representación de la longitud en lugar de solo un exponente reduce significativamente la sobrecarga del relleno. Por ejemplo, el relleno hasta la siguiente potencia de dos puede imponer una sobrecarga de hasta el 100 % al duplicar casi el tamaño del objeto, mientras que el relleno de un PURB impone una sobrecarga de como máximo el 12 % para cadenas pequeñas y disminuye gradualmente (hasta el 6 %, 3 %, etc.) a medida que los objetos se hacen más grandes.
La evidencia experimental indica que en conjuntos de datos que comprenden objetos como archivos, paquetes de software y videos en línea, dejar los objetos sin rellenar o rellenarlos hasta un tamaño de bloque constante a menudo los deja identificables de forma única solo por la longitud total. [2] [3] [1] Rellenar objetos hasta una potencia de dos o hasta una longitud PURB, por el contrario, garantiza que la mayoría de los objetos sean indistinguibles de al menos algunos otros objetos y, por lo tanto, tengan un conjunto de anonimato no trivial . [1]
Debido a que una PURB es una disciplina para diseñar formatos cifrados y no un formato cifrado en particular, no existe un único método prescrito para codificar o decodificar PURB. Las aplicaciones pueden utilizar cualquier esquema de cifrado y codificación siempre que produzca una cadena de bits que parezca uniformemente aleatoria para un observador sin una clave apropiada, siempre que se cumplan los supuestos de dureza adecuados , por supuesto, y siempre que la PURB se rellene con una de las longitudes permitidas. Por lo tanto, las PURB correctamente codificadas no identifican la aplicación que las creó en su texto cifrado. Por lo tanto, una aplicación de decodificación no puede determinar fácilmente antes del descifrado si una PURB fue cifrada para esa aplicación o para su usuario, salvo que intente descifrarla con cualquier clave de descifrado disponible .
La codificación y decodificación de un PURB presenta desafíos de eficiencia técnica, ya que las técnicas de análisis tradicionales no son aplicables porque, por definición, un PURB no tiene marcadores de metadatos que un analizador tradicional pueda usar para discernir la estructura del PURB antes de descifrarlo. En cambio, un PURB debe descifrarse primero sin tener en cuenta su estructura interna y luego analizarse solo después de que el decodificador haya utilizado una clave de descifrado adecuada para encontrar un punto de entrada criptográfico adecuado en el PURB.
La codificación y decodificación de PURBs destinados a ser descifrados por varios destinatarios, claves públicas y/o cifrados diferentes presenta el desafío técnico adicional de que cada destinatario debe encontrar un punto de entrada diferente en una ubicación distinta en el PURB que no se superponga con los de los otros destinatarios, pero el PURB no presenta metadatos de texto claro que indiquen las posiciones de esos puntos de entrada o incluso el número total de ellos. El documento que propuso los PURB [1] también incluyó algoritmos para cifrar objetos para múltiples destinatarios utilizando múltiples conjuntos de cifrados. Con estos algoritmos, los destinatarios pueden encontrar sus respectivos puntos de entrada en el PURB con solo un número logarítmico de descifrados de prueba utilizando criptografía de clave simétrica y solo una costosa operación de clave pública por conjunto de cifrado.
Un tercer desafío técnico es representar el material criptográfico de clave pública que se debe codificar en cada punto de entrada de una PURB, como la clave pública efímera Diffie-Hellman que necesita un receptor para obtener el secreto compartido, en una codificación indistinguible de los bits aleatorios uniformes. Debido a que las codificaciones estándar de los puntos de curva elíptica se distinguen fácilmente de los bits aleatorios, por ejemplo, se deben utilizar algoritmos de codificación indistinguibles especiales para este propósito, como Elligator [4] y sus sucesores. [5] [6]
La principal ventaja de privacidad que ofrecen las PURB es una garantía sólida de que los datos correctamente cifrados no filtran nada de manera incidental a través de metadatos internos que los observadores podrían usar fácilmente para identificar debilidades en los datos o el software utilizado para producirlos, o para identificar la aplicación o el usuario que creó la PURB. Esta ventaja de privacidad puede traducirse en un beneficio de seguridad para los datos cifrados con cifrados débiles u obsoletos, o mediante software con vulnerabilidades conocidas que un atacante podría explotar basándose en información observable trivialmente obtenida de los metadatos de texto sin formato.
Una desventaja principal de la disciplina de cifrado PURB es la complejidad de la codificación y descodificación, porque el descodificador no puede depender de técnicas de análisis convencionales antes del descifrado. Una desventaja secundaria es la sobrecarga que agrega el relleno, aunque el esquema de relleno propuesto para PURB incurre en solo un pequeño porcentaje de sobrecarga para objetos de tamaño significativo.
El relleno Padme propuesto en el artículo de PURB solo crea archivos de tamaños específicos muy distintos. Por lo tanto, un archivo cifrado a menudo puede identificarse como cifrado PURB con un alto grado de confianza, ya que la probabilidad de que cualquier otro archivo tenga exactamente uno de esos tamaños de relleno es muy baja. Otro problema de relleno ocurre con los mensajes muy cortos, donde el relleno no oculta de manera efectiva el tamaño del contenido.
Una crítica a la complejidad y los costos generales que implica el cifrado PURB es que el contexto en el que se almacena o transmite un PURB puede a menudo filtrar metadatos sobre el contenido cifrado de todos modos, y dichos metadatos están fuera del ámbito o control del formato de cifrado y, por lo tanto, no pueden ser abordados por el formato de cifrado solo. Por ejemplo, la elección de una aplicación o usuario del nombre de archivo y directorio en el que almacenar un PURB en el disco puede indicar que un observador puede inferir la aplicación que probablemente lo creó y con qué propósito, incluso si el contenido de datos del PURB en sí no lo hace. De manera similar, cifrar el cuerpo de un correo electrónico como un PURB en lugar de con el formato tradicional PGP o S/MIME puede eliminar la fuga de metadatos del formato de cifrado, pero no puede evitar la fuga de información de los encabezados de correo electrónico de texto simple o de los hosts de punto final y servidores de correo electrónico involucrados en el intercambio. No obstante, normalmente hay disciplinas separadas pero complementarias disponibles para limitar dicha fuga de metadatos contextuales, como las convenciones de nombres de archivo adecuadas o el uso de direcciones de correo electrónico seudónimas para comunicaciones confidenciales.