Ocultar contraseña en archivo PHP?

Iniciado por @XSStringManolo, 1 Octubre 2019, 05:57 AM

0 Miembros y 1 Visitante están viendo este tema.

MinusFour

Cita de: string Manolo en  2 Octubre 2019, 17:01 PMNo no, cuando dije de cambiar el esquema, me refería a no dejar a los usuarios acceder a la información directamente usando la contraseña privada. Tengo pensado que para que accedan a la información me manden un correo. Yo la descifro offline y la envio descifrada al correo tras validar que sea el correo asociado a la información a la cual hace request.
Así aunque se comprometa el servidor no se puede hacer nada. Yo obtengo  la info en un equipo, desconecto la red, accedo a otro equipo offline que descifre y me devuelva la infofmación. Es un poco rollo, pero me parece más seguro haciendo unas cuantas comprobaciones.

No entiendo que estás ganando con todo esto. Tu cifras y descifras, el usuario cifra y descifra. Tu cifras el contenido de regreso a el usuario (para que lo lea) y descifras la información que te envia el usuario para poder cifrarla de regreso (para que tu puedas leer). Cada vez que el usuario quiera leer la información, tu tienes que descifrar, cifrar y el usuario volver a descifrar.

Si tu cifras la información con una algoritmo simétrico, ambos pueden cifrar y descifrar la información sin necesidad de que la otra persona cifre o descifre. Las llaves no son necesarias que las mantengas en un servidor online, porque el que las ocupa eres tú, no el servidor.

@XSStringManolo

Es por el funcionamiento del software. Obtengo los datos bancarios nada más se conecta el usuario a mi plataforma y los almaceno cifrados. A mi lo que me interesa es que si alguien hackea el server no pueda descifrar los datos bancarios de los usuarios.
El usuario no cifra nada.
Todos los usuarios deben poder acceder a sus datos bancarios y a los datos bancarios del resto de los usuarios de la plataforma.

El tema es que nadie externo a la plataforma que acceda al servidor obtenga los datos bancarios.

Entonces lo que de momento se me ocurre es cifrar todo con clave pública. Y la privada solo tenerla yo. Si cada cliente usa su clave, ni yo ni el resto de usuarios de la plataforma tienen acceso a toda la base de datos.

El tema está en proteger la contraseña, que solo yo la tenga. Asique lo único que se me ocurre es eso.

Mi idea es introducir a mano la contraseña en un liveCD desconectado de toda red para descifrar. Copiar en un pen los datos descifrados. Desconectar el equipo de la red. Volver a conectarla y enviar los datos descifrados de vuelta por otra ruta.
Así no se puede conseguir la contraseña de ninguna forma y yo elijo a que cliente darle que.



#!drvy

#22
Citar
Mi idea es introducir a mano la contraseña en un liveCD desconectado de toda red para descifrar. Copiar en un pen los datos descifrados. Desconectar el equipo de la red. Volver a conectarla y enviar los datos descifrados de vuelta por otra ruta.




Saludos

@XSStringManolo

Me refiero a desconectar de la red ELÉCTRICA para borrar la contraseña de la RAM al utilizarla en el LiveCD para descifrar. Después volver a enchufar, arrancar el equipo en LiveCD, conectar a internet y enviar el contenido descifrado.
Así en el caso que se infecte el equipo con malware si se introduce la contraseña, el malware no puede enviarla a ningún sitio. Lo máximo que puede conseguir es obtener el contenido descifrado. Pero no la clave privada que le permitiría descifrar toda la base de datos.




#!drvy

Es que no tiene ningún sentido lo que dices. Vuelve a leer lo que has puesto...


Saludos

@XSStringManolo

Cita de: #!drvy en  2 Octubre 2019, 22:01 PM
Es que no tiene ningún sentido lo que dices. Vuelve a leer lo que has puesto...


Saludos
Por qué no tiene sentido?

MinusFour

Cita de: string Manolo en  2 Octubre 2019, 20:16 PM
Es por el funcionamiento del software. Obtengo los datos bancarios nada más se conecta el usuario a mi plataforma y los almaceno cifrados. A mi lo que me interesa es que si alguien hackea el server no pueda descifrar los datos bancarios de los usuarios.
El usuario no cifra nada.
Todos los usuarios deben poder acceder a sus datos bancarios y a los datos bancarios del resto de los usuarios de la plataforma.

El tema es que nadie externo a la plataforma que acceda al servidor obtenga los datos bancarios.

Entonces lo que de momento se me ocurre es cifrar todo con clave pública. Y la privada solo tenerla yo. Si cada cliente usa su clave, ni yo ni el resto de usuarios de la plataforma tienen acceso a toda la base de datos.

El tema está en proteger la contraseña, que solo yo la tenga. Asique lo único que se me ocurre es eso.

Mi idea es introducir a mano la contraseña en un liveCD desconectado de toda red para descifrar. Copiar en un pen los datos descifrados. Desconectar el equipo de la red. Volver a conectarla y enviar los datos descifrados de vuelta por otra ruta.
Así no se puede conseguir la contraseña de ninguna forma y yo elijo a que cliente darle que.




Si tu tienes miedo que el servidor se comprometa, considera que toda la información entrante al sistema también es vulnerable. La info guardada en el servidor quizás este cifrada pero la que viene entrando no.

Vamos a ver, que si no confías en el servidor porque no puedes asegurar el servidor entonces lo único que te queda es que el usuario desconfíe del servidor y te envié la información cifrada.

Pero bueno, supongo que ya es algo si guardas la información cifrada. Mejor usa un servicio donde no tengas que manejar la información del cliente en lo absoluto.

#!drvy

#27
Estas planteando un caso en el que quieres automatizar el guardado y la "lectura" de información  pero en realidad estas "manualizando" todo el proceso utilizando métodos "primitivos" para el supuesto tratado de datos. (con primitivos me refiero a no automatizados, lentos y que están enfocados a ataques poco probables (véase, que te infecten por descifrar un archivo el cual has poblado tu, dado que lo has tenido que cifrar tu..).

Imaginate que 50 clientes te piden sus datos... si tardas un promedio de 5 minutos en arrancar una distro y descifrar, para luego tardar otros 5 minutos (siendo generosos) en arrancarla otra vez y enviar los datos, tardarias 500 minutos (es decir, 8 horas).

Un método que por cierto no previene de ninguna forma el hecho de que si obtienen acceso a tu servidor, pueden interceptar los datos que los clientes meten, es decir, ya tendrían los datos antes de que tu siquiera empieces a "salvaguardarlos".

¿Y todo esto para que? ¿Para que tu seas el único que pueda acceder a dicho archivo? Y qué pasa si te olvidas de la clave, o la apuntas en algún sitio y te roban en casa o te mueres o si simplemente se te rompe el PC.. los clientes se quedan sin poder acceder a la información porque todo el proceso se centra en un único ser vivo...


Saludos

@XSStringManolo

Cita de: #!drvy en  3 Octubre 2019, 00:52 AM
Estas planteando un caso en el que quieres automatizar el guardado y la "lectura" de información  pero en realidad estas "manualizando" todo el proceso utilizando métodos "primitivos" para el supuesto tratado de datos. (con primitivos me refiero a no automatizados, lentos y que están enfocados a ataques poco probables (véase, que te infecten por descifrar un archivo el cual has poblado tu, dado que lo has tenido que cifrar tu..).

Imaginate que 50 clientes te piden sus datos... si tardas un promedio de 5 minutos en arrancar una distro y descifrar, para luego tardar otros 5 minutos (siendo generosos) en arrancarla otra vez y enviar los datos, tardarias 500 minutos (es decir, 8 horas).

Un método que por cierto no previene de ninguna forma el hecho de que si obtienen acceso a tu servidor, pueden interceptar los datos que los clientes meten, es decir, ya tendrían los datos antes de que tu siquiera empieces a "salvaguardarlos".

¿Y todo esto para que? ¿Para que tu seas el único que pueda acceder a dicho archivo? Y qué pasa si te olvidas de la clave, o la apuntas en algún sitio y te roban en casa o te mueres o si simplemente se te rompe el PC.. los clientes se quedan sin poder acceder a la información porque todo el proceso se centra en un único ser vivo...


Saludos
No está basado solo en que me infecten utilizando un archivo que genero yo. Puedes hacer MITM para modificar el archivo, atacar la red físicamente, explotar vulns, etc. Poco probables? Después de la IngSocial con dbd va el MITM en frecuecia de ataques.

Nada me prohibe tratar la información de forma automatizada una vez se descifra a mano. A mi lo que me interesa es utilizarla de forma autónoma. No que todo el proceso tenga que ser como tal.

El coche "anda solo" pero tienes que abrir la puerta, meter la llave, encenderlo, apagarlo para repostar, volver a encenderlo...

Si 50 clientes me piden sus datos descifro los 50 a la vez porque usan todos la misma clave. Hago una función para que se obtengan los datos de cada cliente por separado y se envien a cada correo. Solo tengo que poner la contraseña a mano. (Ya tengo una función creada que no ocupa ni 20 lineas que prácticamente ya lo hace para otra parte del software.)

Pueden obtener los datos de los nuevos clientes sin cifrar. Pero esto no les serviría para obtener toda la base de datos.

Su cuentas siguen siendo sus cuentas. Disponen de su PIN asique no perderían acceso a sus cuentas en ningún momento. Si me muero me preocupa poco que el servicio quede offline :xD

Me interesa automatizar por 2 motivos:
1) Porque no puedo estar activo cuando llegue un nuevo cliente con su cuenta bancaria y no es buena idea dejar los datos en el servidor sin cifrar.

2) Para no tener que clasificar y operar con la información a mano porque me daría trabajo.

Me da igual que las operaciones se realicen hoy, o dentro de 1 mes mientras se siga el procedimiento en base a unas pautas.

#!drvy

CitarPuedes hacer MITM para modificar el archivo, atacar la red físicamente, explotar vulns, etc. Poco probables? Después de la IngSocial con dbd va el MITM en frecuecia de ataques

Precisamente he dicho poco probables porque el MITM lo pueden hacer en cualquier punto menos en en el que usas una distro live para descifrar el archivo... por tanto no lo considero un ataque poco probable y tampoco es que te estés protegiendo de el. Lo único que intentas proteger es una contraseña maestra. No proteges ni la entrada ni la salida de datos.

De que te sirve proteger al actor si pueden pillar el guion y las escenas...


Saludos