Descifrando el desplazamiento arbitrario de un archivo encriptado

6

Quiero almacenar archivos cifrados en algún backend de almacenamiento que me permita obtener bytes X a través de Y del archivo cifrado. Obviamente puedo descifrar todo el archivo localmente y enviarlo de vuelta al cliente.

Sin embargo, si el archivo es muy grande, sería bueno poder descifrar arbitrariamente ese rango de bytes sobre la marcha. Si es posible, me gustaría poder descifrar las partes de diferentes servidores al mismo tiempo (por lo que no necesariamente tendré la cadena de descifrado completa a mano).

¿Hay algún modo de cifrado de bloque que permita algo como esto, o cualquier forma posible?

    
pregunta Anthony Kraft 16.12.2014 - 22:46
fuente

2 respuestas

2

Si puede requerir que los rangos estén alineados con bloques, los modos de cifrado de disco (LRW, XEX, XTS, CTR, etc.) parecen ideales para sus propósitos. El modo ECB también funciona con rangos alineados por bloques, pero es, modo ECB .

Si necesita una alineación de nivel de byte, el único modo que parece prometedor es modo OFB : usted calcula una secuencia de claves que incluye el rango que desea descifrar, luego XOR la sección apropiada de la secuencia de claves con la sección cifrada del archivo. Para un archivo grande, esto puede ser bastante ineficiente, ya que puede estar computando y descartando gigabytes de flujo de clave antes de llegar a la parte que va a usar.

    
respondido por el Mark 18.12.2014 - 05:07
fuente
0

Salsa20, al menos como se implementó en libSodium , parece ideal para esto:

  

Salsa20 es un cifrado de flujo desarrollado por Daniel J. Bernstein que expande una clave de 256 bits en 2 ^ 64 flujos accesibles al azar, cada uno de los cuales contiene 2 ^ 64 bloques de 64 bytes (512 bits) accesibles al azar.

     

...

     

La función crypto_stream_salsa20_xor_ic() es similar a crypto_stream_salsa20_xor() pero agrega la capacidad de establecer el valor inicial del contador de bloque a un valor distinto de cero, ic .

     

Esto permite el acceso directo a cualquier bloque sin tener que calcular los anteriores.

    
respondido por el Jens Alfke 27.07.2015 - 20:06
fuente

Lea otras preguntas en las etiquetas