Está describiendo algunos problemas diferentes.
Almacenamiento de credenciales y otros secretos
No quiero almacenar esta clave 'maestra' en el código fuente (PHP), en el disco o en cualquier otro lugar en texto sin formato.
Usted tiene razón al decir que los secretos de codificación son una mala idea, puede intentar usar algo como hashicorpo-vault ( Este artículo en particular puede también debe estar relacionado con su flujo de trabajo) o con un servicio de administración de claves como Amazon KMS .
Acceso cifrado multiusuario
Hay algunas estrategias diferentes para este tipo de configuración. Puede cifrar los datos con una clave compartida y luego cifrar esa clave para cada usuario utilizando la clave pública del usuario. A continuación, deberá actualizar la clave por archivo y volver a cifrar con la clave pública de cada usuario si hubiera algún cambio en la membresía del grupo de acceso.
La obtención de una clave basada en la contraseña puede ser complicada porque debe asegurarse de actualizar correctamente todas las claves y rehacer todo el cifrado si la contraseña del usuario cambia.
Es posible que desee ver proyecto Mylar de MIT , ya que trata de lograr algo similar al almacenamiento y acceso. modelo que describiste.
Escenario de infracción
Mi preocupación inicial es que si hay una violación de datos del código fuente y de los datos, entonces un atacante vería que la misma clave se cifró muchas veces (una vez para cada usuario). ¿Podría esto reducir la seguridad de la clave 'maestra'?
Si alguna vez descifras el lado del servidor y el atacante tiene acceso, pueden obtener la copia desencriptada de los datos.
Si está creando el usuario claves privadas usando la contraseña como semilla entonces tiene algunos riesgos, especialmente si las contraseñas se pueden identificar robándolas o invirtiendo los hashes.
Más en general
¿Esto podría reducir la seguridad de la clave 'maestra'? ¿Ya sea por patrones en los datos encriptados o probando que un intento de descifrado en un registro coincide con el de otro?
Creo que está preguntando si cifrar el mismo valor con múltiples claves diferentes para cada usuario haría que sea más fácil volver al valor de texto sin formato original (?).
Si conoce el valor de texto sin formato, es posible que pueda averiguar los otros valores de cifrado. Esto se conoce como un ataque " texto plano conocido ". Sin embargo, esto no significa que funcione si simplemente conoce dos resultados de cifrado diferentes y sabe que la entrada fue la misma, pero no conoce la entrada real.
Su pregunta también puede ser que, dada la función de cifrado f(key, masterkey)
y luego ejecutarlo una vez con key1
y luego con key2
, comparar los dos resultados le permitirá calcular masterkey
o conocer el resultado de% ¿Co_de% te permite calcular f(key1, masterkey)
?
Puede ser posible, pero dependería de los algoritmos específicos, si hay relleno, etc. Si hay una entropía significativa en los algoritmos, entonces los cambios leves en las entradas deberían dar salidas muy diferentes que no muestren patrones. También puede leer " teclas débiles " y ataques de texto simple elegido .