2009-06-25 21 views
5

Estoy haciendo un pequeño juego web que tiene tareas y soluciones, las soluciones se resuelven ingresando un código dado al usuario después de completar una tarea. Para tener algo de seguridad (contra hacer trampa) no quiero almacenar los códigos generados por el juego en texto plano. Pero como necesito poder darle un código a un jugador cuando él ha cumplido la tarea, no puedo hacerlo, ya que no puedo recuperarlo.Cuál es la encriptación "contraseña" python más segura

Entonces, ¿cuál es la forma más segura de encriptar/desencriptar algo usando python?

+0

mire aquí: http://stackoverflow.com/questions/172486/what-pure-python-library-to-use-for- aes-256-encryption –

+2

¿Cómo podría engañar si almacena esos códigos en texto plano? – innaM

+0

Solo por el hecho de que alguien obtenga un control de la tabla de la base de datos con los códigos ... – espenhogbakk

Respuesta

5

Si su secuencia de comandos puede decodificar las contraseñas, también lo hará alguien que ingrese a su servidor. El cifrado solo es realmente útil cuando alguien ingresa una contraseña para desbloquearlo; si permanece desbloqueado (o el script tiene la contraseña para desbloquearlo), el cifrado no tiene sentido

Es por eso que el hash es más útil, ya que es proceso unidireccional: incluso si alguien conoce el hash de su contraseña, no sabe el texto sin formato que debe ingresar para generarlo (sin mucha fuerza bruta)

No me preocuparía guardar las contraseñas del juego como Texto sin formato. Si le preocupa protegerlos, arregle las posibles inyecciones de SQL/etc, asegúrese de que su servidor web y otro software estén actualizados y configurados correctamente, y así sucesivamente.

¿Quizás piense en una forma de hacer que sea menos atractivo robar las contraseñas que jugar realmente el juego? Por ejemplo, había un juego (no recuerdo qué era) que si usaba el truco de omisión de nivel, pasaba al siguiente nivel pero no lo marcaba como "completo", o podía omitir el nivel pero no obtuvo ningún punto.O mira Proyecto Euler, puedes hacer cualquier nivel, pero solo obtienes puntos si ingresas la respuesta (y calcular la respuesta es el objetivo principal del juego, por lo que el engaño derrota el juego)

Si usted es realmente paranoico, usted podría posiblemente cripto utilización asimétrica, donde básicamente cifrar algo con key A, y sólo se puede leer con key B ..

me ocurrió con un concepto similar para el uso de cifrado GPG (populares asimétrica sistema criptográfico, utilizado principalmente para cifrado o firma de correo electrónico) to secure website data. No estoy muy seguro de cómo se aplicaría esto para asegurar las contraseñas de nivel de juego, y como dije, necesitarías ser realmente paranoico para siquiera considerar esto ...

En resumen, yo diría almacenar las contraseñas en texto sin formato, y concéntrese en sus preocupaciones de seguridad en otro lugar (el código de las aplicaciones web en sí)

+0

Estoy de acuerdo con usted en su mayor parte, y esto es con lo que termino de forma proporcional. También estoy pensando que si hago que sea "imposible" hacer injectons sql y cosas así no hay ningún problema en almacenar las contraseñas de nivel en texto plano, ya que nadie debería poder sacarlas, pero si las sacan , pueden "correr" a través del juego sin problema y ser el ganador ... Así que estaba pensando que solo por estar seguro, algo de encriptación no haría daño. – espenhogbakk

+0

Y las soluciones de encriptación GPG parecen un poco paranoicas sí :) – espenhogbakk

2

Si se trata de un juego web, ¿no puedes almacenar los códigos del lado del servidor y enviarlos al cliente cuando completa una tarea? ¿Cuál es la arquitectura de tu juego?

En cuanto a la encriptación, ¿puede intentar algo como pyDes?

5

El cifrado más seguro no es cifrado. Las contraseñas deben reducirse a un hash. Esta es una transformación de un solo sentido, lo que hace que la contraseña (casi) sea irrecuperable.

Al darle a alguien un código, puede hacer lo siguiente para que sea realmente seguro.

(1) generan una cadena aleatoria.

(2) darles la cadena.

(3) guarda el hash de la cadena que has generado.

Una vez.

Si "olvidan" el código, usted tiene que (1) asegurarse de que están autorizados a recibir el código, luego (2) hacer el proceso nuevamente (generar un nuevo código, dárselos, guardar el hash.)

+0

como decía la pregunta, los hash no son buenos, ya que tiene que poder decirle al jugador la contraseña –

+2

@Adrian: Buen punto. Sin embargo, creo que la pregunta es errónea. O bien, esto no es una seguridad real, en cuyo caso el cifrado no ayuda mucho. –

+0

Hubo otra publicación pero fue eliminada y creo que fue una muy buena idea: generar el hash de una cadena en el nombre de usuario + "_ mygame _" + level (¿quizás también agregar una sal para una mejor seguridad?) No sé quién publicó y lo borró después, pero creo que es un buen enfoque. –

0

Tu pregunta no está del todo clara. ¿Dónde quieres que ocurra el descifrado? De una forma u otra, el texto sin formato debe salir a la superficie, ya que necesita que los jugadores finalmente lo sepan.

Elija un cipher y termine con eso.

Cuestiones relacionadas