Quiero almacenar una gran cantidad de claves simétricas de vida relativamente corta

0

Cada blob encriptado tendrá una vida útil bien definida, pero diferente. Algunos estarán alrededor por 5 minutos, otros por un día, otros por una semana, ninguno por más de un mes.

Me gustaría poder "eliminar" el archivo descartando la clave, incluso si el archivo ya no está bajo mi control, por ejemplo. en un medio de copia de seguridad en algún lugar, o robado por un atacante (oh my!).

Por otro lado, necesito que cada clave persista en caso de un bloqueo hasta que caduque su vida útil.

La confidencialidad es más importante que la disponibilidad: "Se ha ido para siempre" es generalmente mejor que "Eve lo tiene".

Así que tengo esta idea loca:

  • Un archivo 128 GiB se genera a partir de un PRNG seguro. La semilla se almacena de forma segura fuera de línea. (Eva obtiene la semilla = juego terminado)  
  • Cuando se necesita una nueva clave, se generará un número aleatorio de 32 bits. (o 31 bits más un bit G para la generación actual).  
  • Este número de 32 bits es un índice en este archivo de claves donde se almacena el material de clave real.

Ventajas:

  • Un atacante tendría que copiar todo el archivo para poder descifrar archivos sin conexión.
  • 4 bytes es potencialmente más fácil de almacenar / borrar atómicamente que 32 bytes
  • El archivo de clave podría almacenarse en un dispositivo de bloque sin formato sin capas de sistema de archivos.
  • La generación de claves en línea puede requerir menos entropía.

    Desventajas:

  • Puede ser más complejo que simplemente almacenar una clave de / dev / {u,} al azar en un archivo a medida que se genera.
  • ¿El disco busca exponer un canal lateral? Planeo ejecutar la aplicación exclusivamente en metal desnudo, por lo que no estoy extremadamente preocupado por esto.
  • El espacio ocupado por el archivo de claves se puede asignar a otros (mejores) usos.

    ¿Perdería mi tiempo intentando implementar esto porque hay una forma mejor conocida?

        
  • pregunta Terrel Shumway 21.08.2013 - 00:52
    fuente

    1 respuesta

    3

    La única mejora de seguridad de su esquema (sobre la situación en la que no lo aplica) reside en lo siguiente:

      

    Un atacante tendría que copiar todo el archivo para poder descifrar archivos sin conexión.

    El resto son solo consideraciones secundarias sobre problemas de rendimiento. El núcleo de la idea, desde el punto de vista de "seguridad", es que dificulta la obtención de todo el archivo de claves a través de su gran tamaño. De hecho, hay dos tipos de ataques que te preocupan:

    • Ataques en línea : el atacante subvierte su servidor y, como el servidor puede descifrar todos los archivos de datos, el atacante en línea puede hacer lo mismo siempre y cuando mantenga el control del servidor .

    • Ataques sin conexión : el atacante toma algunos datos del servidor y los utiliza para descifrar los archivos después de el atacante ha sido desalojado desde el servidor.

    Tu punto es hacer que los atacantes sin conexión sean más difíciles, es decir, hacerlos estrictamente menos poderosos que los atacantes en línea. Entonces diría que tu idea no funciona bien. De hecho, no es cierto que el atacante deba "copiar todo el archivo". El atacante necesitaría todo el archivo para poder descifrar todos los archivos; pero si obtiene solo 128 MB de todo el archivo, aún puede descifrar un archivo cada miles. Además, dependiendo de cómo se introduzca el atacante, "descargar" el archivo de clave completo podría no ser un problema para él. En particular, los atacantes a veces recuperan discos duros viejos y desechados de los basureros: si fallaban los componentes electrónicos de su disco, entonces no puede borrar fácilmente el contenido, pero un atacante motivado podría recuperar el disco, reemplazar la placa electrónica y leer el archivo completo. 128 GB no son más grandes que 128 bytes en estas condiciones: eso es solo un disco, que cabe en la palma de su mano.

    Aquí hay una mejor solución, que implica el uso de hardware resistente a la manipulación indebida, por ejemplo. una tarjeta inteligente o una hardware módulo de seguridad (este último es mucho más caro, pero ofrece un rendimiento mucho mejor). Ese dispositivo descifrará alegremente las manchas cifradas asimétricamente en nombre de su servidor, pero nunca proporcionará su clave privada. En esta configuración, el dispositivo contiene un par de claves asimétricas (por ejemplo, RSA); cuando se debe cifrar un archivo, se genera una clave simétrica aleatoria K , y esa clave se utiliza para cifrar el archivo con algún algoritmo de cifrado simétrico. La clave simétrica también está asimétricamente cifrada con la clave pública RSA del dispositivo. Cuando se va a descifrar un archivo, se invoca el dispositivo para recuperar la clave simétrica K y descifrar el archivo. K se mantiene en la RAM solo durante los pocos milisegundos necesarios para el cifrado o descifrado de los datos del archivo, y cada archivo tiene su propio K .

    Por construcción, un atacante en línea puede usar el dispositivo para descifrar archivos, pero una vez fuera de línea, no le queda nada. Este es un sistema de protección mucho más completo que las suposiciones sobre la supuesta dureza de la descarga de algunos gigabytes desde un servidor conectado a Internet.

        
    respondido por el Thomas Pornin 21.08.2013 - 17:31
    fuente

    Lea otras preguntas en las etiquetas