Estoy escribiendo un nivel para un juego en el que el jugador tiene una ventaja si conoce una contraseña. Quiero que no sea factible encontrar la contraseña mirando el código fuente del nivel.
El problema es que los niveles del idioma se escriben en un lenguaje de scripting ad-hoc sin bibliotecas criptográficas, así que tengo que implementarlo todo.
Además, ingresar contraseñas dentro del juego es un poco incómodo, así que me gustaría que la contraseña no sea más grande que un entero aleatorio de 64 bits, lo que debería proporcionar suficiente entropía para evitar un ataque de fuerza bruta.
Una posibilidad que he considerado es almacenar un semiprime grande y hacer que la contraseña sea uno de sus factores. La validación es muy fácil de implementar, pero los semiprimos deben tener factores mucho más grandes que 64 bits para estar seguros. He considerado almacenar los primeros 448 bits de un factor de 512 bits y tener la contraseña en los 64 bits restantes, pero no tengo idea si esto es seguro.
Otra posibilidad es implementar SHA-256 y almacenar el hash de la contraseña. Por supuesto, esto sería mucho más difícil de implementar.
Así que mis preguntas son:
-
Si se almacena un semiprime de 1024 bits junto con los primeros 448 bits de uno de sus factores, ¿se pueden encontrar los 64 bits restantes de ese factor?
-
¿Puedo usar otro esquema de validación de contraseña fácil de implementar pero difícil de descifrar?