Esquema de validación de contraseña ad-hoc fácil de implementar

2

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?

pregunta cardboard_box 11.08.2016 - 01:14
fuente

2 respuestas

3

El problema con el método que ha sugerido es que es básicamente una exposición de clave parcial de RSA. Estás exponiendo algunos bits de un factor de semiprime. La encuesta ataques de RSA de Dan Boneh enumera un teorema de Coppersmith que indica que si el n / 4 Se conocen los bits menos significativos o más significativos de un factor de N, entonces N puede factorizarse de manera eficiente. Ya que quieres filtrar mucho más que n / 4, creo que tu método sería susceptible a ese ataque.

La buena noticia es que Boneh ofrece información sobre algo que podría funcionar:

  

Es interesante que los sistemas de cifrado discretos basados en registros, como el sistema de clave pública de ElGamal, no parezcan susceptibles a la exposición parcial de la clave. De hecho, si se dan g ^ x mod p y una fracción constante de los bits de x, no se conoce ningún algoritmo de tiempo polinomial para calcular el resto de x.

Por lo tanto, podría seleccionar algunas x aleatorias, una gran prima (1024 bits) p, y un generador g (en la práctica, usaría algunos valores estándar de NIST para P y g). Compute g ^ x mod p, guárdelo en su software. Almacena un número de bits de x en tu programa. El usuario debe suministrar los bits restantes de x. Llame a sus bits más los bits almacenados x '. Calcula g ^ x 'mod p y ve si coincide con lo que has almacenado.

Creo que la declaración de Boneh no ha cambiado desde que se publicó. Eso tal vez sea algo que quiera preguntar en Crypto.SE, junto con recomendaciones de cuántos bits deben omitirse del código fuente.

    
respondido por el mikeazo 11.08.2016 - 19:55
fuente
-1

No sé si algún juego no requiere conexión a Internet ahora, ¿por qué no usar un servidor para realizar la autenticación?

No importa cómo cifre la contraseña, siempre que se guarde en algún lugar del cliente, se puede romper. Especialmente después de que el algoritmo que diseñó se filtre o se agriete, la autenticación será prácticamente inútil.

    
respondido por el user3894299 11.08.2016 - 04:59
fuente

Lea otras preguntas en las etiquetas