Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Proteger el contenido de la base de datos

Iniciado por Altair, 15 de Junio de 2014, 08:08:36 AM

« anterior - próximo »

Altair

Buenas,

estoy ahora mismo con unas pruebas para almacenar información en MySQL, usando la distribución Debian.

Dado que la idea es que cualquiera se pueda bajar el servidor y el cliente, la pregunta que tengo es: ¿cifro la información de la base de datos?. Por cierto, según ciertas web el término correcto es cifrar y descifrar, no encriptar y desencriptar.

El escenario es este: una persona se baja el servidor, lo instala y crea todo el sistema. X usuarios se bajan el cliente y se conectan al servidor.

Hay datos que por su naturaleza estan cifrados, por ejemplo el email y el password de los usuarios y admins.

Sin embargo hay otros datos de los jugadores que son más sensibles, como la cantidad de recursos que tiene y su tipo. La idea es que dichos datos queden protegidos de cambios no autorizados. Ejemplo: el admin del servidor se conecta y que quita recursos a un jugador y le da recursos a otro jugador. Puede que haga eso porque uno le cae bien y el otro le cae mal, o que lo haga simplemente porque sí, o por lo que sea.

El tipo de cifrado ya lo tengo mas o menos pensado, pero no se si esta es la mejor opción o hay alguna otra mejor.

Gracias.

Starky

Buenos días Altair,

Espero poder ayudarte, voy a intentarlo, aunque todo lo que diga está sujeto a que lo compruebes, porque hace tiempo que no miro nada de esto, prácticamente una década.

Al grano, yo monté un juego online masivo (típica web de enlaces que trabaja contra una BBDD, por ejemplo, Ogame) y con respecto a los datos a guardar te recomiendo tengas muuucho cuidado con el tema de la LOPD.

Desde que guardes cualquier dato de carácter personal (ya has nombrado el email), estás sujeto a ella, esto incluye (o incluía) registrarte en una web del gobierno para registrar tu actividad y demás documentos que tienes que conocer y tener listos, las multas por incumplimiento son saladas (creo recordar que podrían estar en 30.000€).

El tema de encriptación o cifrado, realmente no se la diferencia de los términos, pero lo que si se, es que nosotros sólo encriptabamos el password y los algoritmos de encriptación no permiten desencriptarlos "en teoría". Me refiero a los típicos como el MD5.

Sobre si cifrar los datos para protección, supongo que dependerá de la seguridad que quieras mantener. Se supone que el admin no va a atentar contra la integridad de los mismos y si queda alguna duda, siempre se puede configurar con accesos con permisos.

Por ejemplo, en nuestro juego teníamos gente que nos ayudaba al matenimiento, pero lo hacían a través de la Web con funciones limitas y controladas. A la BD sólo accedíamos los creadores del game. Nunca ciframos datos, sólo lo habríamos hecho para cumplir la LOPD.

Espero haberte ayudado y sino al menos lo intente :D

Altair

Hola,

gracias por la respuesta, lo de los temas legales ya lo conocía, aunque siempre va bien recordarlo un poco por encima por si acaso. De todas formas eso afecta de forma limitada, ya que dichas leyes afectan a españoles y territorio español, si tanto el servidor como el cliente no lo son, ya no tienen efecto esas leyes, sino otras.

De todas formas eso de poner una seguridad basada en permisos, creo que también depende. Una persona que tenga acceso de root puede acceder a lo que quiera y cambiarlo, pero de momento para simplificar las cosas voy a suponer que se puede confiar en el. Al fin y al cabo, si los jugadores ven que no pueden confiar en el admin de un servidor posiblemente se largarán a otro servidor.

Vicente

Cita de: Altair en 15 de Junio de 2014, 08:08:36 AM
Hay datos que por su naturaleza estan cifrados, por ejemplo el email y el password de los usuarios y admins.

Seguro que quieres decir cifrados? No querras decir que guardas un hash criptografico de ellos? Porque si los has cifrado, donde guardas la clave para descifrarlos?

Cita de: Altair en 15 de Junio de 2014, 08:08:36 AM
Sin embargo hay otros datos de los jugadores que son más sensibles, como la cantidad de recursos que tiene y su tipo. La idea es que dichos datos queden protegidos de cambios no autorizados. Ejemplo: el admin del servidor se conecta y que quita recursos a un jugador y le da recursos a otro jugador. Puede que haga eso porque uno le cae bien y el otro le cae mal, o que lo haga simplemente porque sí, o por lo que sea.

Este problema no tiene que ver con cifrado, tiene que ver con permisos, y ademas no tiene solucion. Siempre habra alguien que puede acceder a los datos y cambiarlos, tienes que asegurarte que las personas que tienen permiso para hacer eso son de confianza.

Un saludo

Vicente

Cita de: Starky en 16 de Junio de 2014, 01:19:53 PM
El tema de encriptación o cifrado, realmente no se la diferencia de los términos, pero lo que si se, es que nosotros sólo encriptabamos el password y los algoritmos de encriptación no permiten desencriptarlos "en teoría". Me refiero a los típicos como el MD5.

No hay algoritmos de encriptacion que no permiten ser desencriptados. MD5 NO es un algoritmo de encriptacion, es un hash criptografico.

Una funcion hash es una funcion "resumen": tu le das algo, da igual su tamano, y te lo resume en N bits (en el caso de MD5 128 bits).

Dado que cualquier cosa puede entrar en el Hash, pero el hash solo tiene 2^128 posibles salidas, va a haber infinitas entradas que producen la misma salida.

Es decir, quizas el usuario utilizo de password "perro" y eso en tu base de datos guardas un hash que es "0101000101010100000". Pero puede darse el caso, que alguien intente usar esa cuenta, y ponga de password "gato" y resulte que el hash de "perro" y "gato" son el mismo.

Los hashes criptograficos como MD5, SHA... intentan minimizar ese caso (que se llama colision), pero siguen existiendo y es imposible evitarlas.

Un saludo

Starky

Gracias por la aclaración, como te dije yo de términos ni idea y tampoco tengo especial interés en este apartado :D

En su días lo usé y listo, jejejeje. Disculpa mi ignorancia ;D

Vicente

Cita de: Starky en 16 de Junio de 2014, 06:20:00 PM
Gracias por la aclaración, como te dije yo de términos ni idea y tampoco tengo especial interés en este apartado :D

En su días lo usé y listo, jejejeje. Disculpa mi ignorancia ;D

Es una confusion muy habitual, pero es importante entender que pasa realmente para no llevarse sustos luego :)

Altair

Citar
Seguro que quieres decir cifrados? No querras decir que guardas un hash criptografico de ellos? Porque si los has cifrado, donde guardas la clave para descifrarlos?

Correcto, me refiero a un hash.

Citar
Este problema no tiene que ver con cifrado, tiene que ver con permisos, y ademas no tiene solucion. Siempre habra alguien que puede acceder a los datos y cambiarlos, tienes que asegurarte que las personas que tienen permiso para hacer eso son de confianza.

Ciertamente siempre habrá forma de acceder.

Lo que se me ocurrió, que aún no se si tiene mucho sentido, es que ciertas contraseñas esten divididas en varias partes y que sólo el programa sabe como combinarlas. Por ejemplo la contraseña de admin podría ser "ABFG"; sólo el admin del servidor conoce "AB" y la tiene que introducir cada vez que la quiera usar, y al mismo tiempo sólo el programa conoce "FG" y está localizada en el propio programa. Al unirse, ABFG, es cuando puede accederse.


Vicente

Cita de: Altair en 17 de Junio de 2014, 06:33:02 AM
Lo que se me ocurrió, que aún no se si tiene mucho sentido, es que ciertas contraseñas esten divididas en varias partes y que sólo el programa sabe como combinarlas. Por ejemplo la contraseña de admin podría ser "ABFG"; sólo el admin del servidor conoce "AB" y la tiene que introducir cada vez que la quiera usar, y al mismo tiempo sólo el programa conoce "FG" y está localizada en el propio programa. Al unirse, ABFG, es cuando puede accederse.

Que mas da que el administrador tenga que escribir AB o ABFG para acceder? La cosa es que el administrador escribe una contrasena y entra en el sistema, no veo que consigas nada con esto.

Altair

Citar
Que mas da que el administrador tenga que escribir AB o ABFG para acceder? La cosa es que el administrador escribe una contrasena y entra en el sistema, no veo que consigas nada con esto.

Es un tipo de acceso diferente. El administrador puede acceder a la base de datos, pero el contenido está cifrado y para descifrarlo se necesita una clave compuesta de varias partes. El administrador sólo tiene una de esas partes. Cuando el programa se ejecuta es cuando se pueden unir todas las partes de la clave y entonces descifrar.

Puede que se vea mejor con un ejemplo:

Contenido sin cifrar: hola
Contenido cifrado: jpmt

Clave completa: ASFTMY.

Parte del admin: ASF.

Parte del usuario: TMY

Se ejecuta el programa, se unen las claves, contenido descifrado.

Vicente

Vale, que estás hablando de dos cosas, la base de datos y por otro lado tu software que accede a esa base de datos.

Pero todo esto no evita que se cambie el contenido de la base de datos. Es decir, el contenido está cifrado pero el administrador puede seguir cambiando los datos. Solo que ahora tiene que tener mas cuidado. Si por ejemplo, quiere poner a un usuario a cero, pues lo que hace es buscar a otro usuario que esté a cero con el software, buscarlo en la base de datos, ver como se ha cifrado el cero y copiarlo.

Y eso sin contar que estar cifrando y descifrando todo pues hará que tu servidor vaya más lento y esas cosas. No creo que te merezca la pena desconfiar de tu administrador tanto.

Un saludo!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.