¿Es seguro ocultar secretos de esta manera?

1

Tengo n secretos para ocultar, mi objetivo es recordar solo una semilla y derivarla de la semilla. ¿Es este un enfoque seguro?

Calcular n teclas:

k(1) = seed XOR secret(1)
...
k(n) = seed XOR secret(n)

Almacene estas claves en una aplicación, solicitando al usuario una semilla y calcule los secretos usando XOR.

El usuario obtendrá un resultado incluso usando una semilla incorrecta y no sabe si obtuvo los secretos correctos.

¿Cuáles son los inconvenientes al almacenar estas claves en un lugar donde cualquiera puede mirar?

Editar : según las respuestas y otras lecturas, hice algo como esto:

  • Use la semilla como contraseña para que un PBKDF2 genere una clave AES y IV
  • Escriba los secretos en formato JSON
  • Encriptar el texto JSON con la clave AES y IV generados a partir de la semilla
  • El texto cifrado se almacena dentro de la aplicación
  • La semilla se usa como entrada para calcular la clave y la IV en tiempo de ejecución

Cualquier otro pensamiento sería apreciado

    
pregunta sguerrini97 11.01.2018 - 11:27
fuente

2 respuestas

5

Es poco probable que esto sea seguro por varias razones. Principalmente, XOR solo es seguro para una almohadilla de una sola vez, usted está reutilizando la clave (su "semilla" es la clave aquí).

Si una parte conoce algún secreto individual, puede calcular la semilla y, por lo tanto, leer todos los demás. Es decir. secreto ([conocido]) XOR [valor conocido] produce semilla. Esto elimina por completo el punto de tener múltiples secretos únicos: puede utilizar el valor semilla en cualquier lugar como secreto.

  

El usuario obtendrá un resultado incluso usando una semilla incorrecta y no sabe si obtuvo los secretos correctos.

¿Los valores secretos de texto simple son binarios aleatorios? Si no es así, un atacante puede atacar con fuerza bruta los valores de semilla y luego revisar manualmente las semillas que solo proporcionan caracteres imprimibles para cada clave. Si los secretos son palabras o frases, esto se vuelve aún más fácil.

¿Por qué estás tratando de reinventar la rueda? Básicamente, ha descrito un administrador de contraseñas fuera de línea con un cifrado muy pobre. ¿Por qué no solo usar un administrador de contraseñas fuera de línea que usa un esquema de encriptado seguro moderno y confiable?

    
respondido por el Hector 11.01.2018 - 11:39
fuente
1

Se recomienda seguir la lógica del algoritmo de cifrado utilizado. El algoritmo no tendrá en cuenta la estructura del archivo que debe cifrarse.

Por ejemplo, XOR'ing un archivo que contiene:

  • 0x00 bytes como relleno convertirán esta parte a la clave en sí misma.

  • la propia clave en el bytecode dará como resultado 0x00 bytes.

La clave luego se filtra al comparar el archivo antes y después del cifrado.

Lo mismo se aplica a todas las funciones lógicas, incluidas:

  • NO
  • AND

  • OR

  • Todas las permutaciones de ellos.

La pérdida de la clave se puede mitigar dejando las partes que forman parte de la clave o 0x00 sin cambios.

    
respondido por el AXANO 12.01.2018 - 14:06
fuente

Lea otras preguntas en las etiquetas