Tengo un problema en el que un archivo cifrado almacenado en un servidor debe ser descifrado a través de una lista precomputada de contraseñas que se usan solo una vez: OTP se aplica básicamente al cifrado. El archivo se encuentra en un estado seguro mientras está activo y descifrado, no se puede modificar ni ver públicamente. Mientras está en reposo, se puede ver y modificar públicamente, por lo que no puedo almacenar una lista de contraseñas en el servidor, ya que el servidor a menudo no está en un estado seguro y el archivo debe transferirse a menudo de manera muy pública. manera en que será casi definitivamente visto. Después de discutir esto con un amigo, se sugirió algo basado en Diffie-Hellman. Mi pregunta es qué tan seguro podría ser.
Concepto
La idea es generar una lista de hashes y almacenar solo la lista de g^H_n
junto con el archivo cifrado. El archivo se cifra cada vez tomando un hash, g^H_n
, un valor de trabajo aleatorio r
y cifrando el archivo con la clave (g^H_n)^r
. Finalmente, g^r
se almacena públicamente en el archivo. Para descifrar, el usuario proporciona H_n
que se puede usar para calcular (g^r)^H_n
y descifrar el archivo. Luego, volver a cifrar es simplemente hacer lo mismo con g^H_(n-1)
tomado de la lista y un nuevo valor de trabajo aleatorio.
Si en algún punto alguien obtiene el archivo públicamente (como cuando el archivo está en reposo), solo sabrán g^r
, que no se puede usar para calcular la clave. Aparte del último hash utilizado para cifrar, todos los demás hash se cifran junto con el archivo, por lo que las claves futuras tampoco se pueden manipular.
Pregunta
Parece que funcionaría bastante bien, pero estoy nervioso por hacer algo como esto sin saber con qué facilidad podría romperse, y no puedo encontrar ningún método existente para hacer lo mismo. Espero que alguien pueda señalar cualquier falla importante en esto que se haya pasado por alto.