¿Podría el hash SHA256 superpuesto comenzar a circular en algún punto?

0

Tengo un sistema que necesita enviar una clave al usuario. Esta clave se utiliza para la validación después del trabajo y debe mostrarse que no la cambiamos a mitad del trabajo, por lo que enviamos al usuario en medio del hash con SHA256 y, una vez finalizado el trabajo, enviamos la clave real y el clave hash para que pudiera comprobar si la clave era la misma.

La clave original es una cadena formada por 32 números hexadecimales entre 0x00 y 0xff , por lo que las claves son así:

key:        6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b
hashed_key: e0bc614e4fd035a488619799853b075143deea596c477b8dc077e309c0fe42e9

key:        d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35
hashed_key: d8bdf9a0cb27a193a1127de2924b6e5a9e4c2d3b3fe42e935e160c011f3df1fc

Esto necesitará un máximo de 2 * 10^77 hashes para crackear usando fuerza bruta y es poco probable que alguien tenga suficiente espacio en HD para crear una base de datos para todas las claves posibles

La clave que construimos es probablemente un hash de otra cosa, por ejemplo, en los ejemplos son hashes a 1 y 2 respectivamente, pero podrían ser para cualquier otra cadena, usamos algunos números complejos y aleatorios (verdadero aleatorio) para generar nuevos hash seguros que es muy poco probable que se repitan.

¿Qué pasaría si seguimos aplicando SHA256 una y otra vez? en algún punto se daría vuelta?

¿Y dado que tenemos una clave de longitud fija para ser hash, sería más fácil de romper? ¿Hay algún otro método más eficiente para esto que la fuerza bruta?

Este sistema funciona con dinero (juegos de azar) y tuvimos algunos problemas con las "rachas de la suerte", así que estoy tratando de entender si realmente fue suerte. ¿O alguien rompió nuestro sistema?

EDITAR clarificación de contenido

Las computadoras no pueden crear secuencias aleatorias reales, dado que tiene los valores iniciales que podría recrear cualquier secuencia, esto es lo que usamos para garantizar la probabilidad. Cada usuario tiene en todo momento 3 claves de servidor y 2 claves de cliente:

  • claves del servidor
    1. la clave antigua, utilizada en la ejecución anterior, revelada y presentada junto con un hash equivalente
    2. la clave actual, utilizada en la ejecución actual, oculta y solo hash presentado
    3. la siguiente clave, utilizada en la siguiente ejecución, oculta y solo hash presentado
  • claves de cliente
    1. la clave antigua, utilizada en la ejecución anterior
    2. la clave actual, siendo utilizada

En cualquier ejecución dada, el número ganador se encuentra utilizando una función que calcula un número a partir de un hash generado con esta función hmac(server_key, current_bet_index + client_key)

Cuando el usuario cambia la clave de cliente, la clave del servidor también se cambia a la siguiente, y la anterior se revela y le da al usuario la oportunidad de revisar las apuestas anteriores.

    
pregunta Nicos Karalis 22.02.2015 - 17:37
fuente

1 respuesta

1

Mi mejor comprensión de tu pregunta es:

Dado un hash, de una función de hash conocida, si me aplico el hash varias veces, ¿volveré a recibir el mismo número?

En ese caso, la respuesta es "Posiblemente en un tiempo muy, muy, muy, muy largo, dependiendo exactamente del algoritmo que uses y de cómo lo uses".

Una palabra sobre multi-hashing

En cualquier caso, en un contexto de contraseña (que entiendo que no es tu contexto) no querrías simplemente aplicar el mismo hash una y otra vez a ciegas sin entender algunas ramificaciones más profundas. En el caso de las contraseñas, desea una solución de hashing iterativa que agregue trabajo para reducir la velocidad de los crackers.

enlace

Mi consejo para ti

Para los propósitos de un juego de cartas, podría tener más sentido simplemente cifrar las tarjetas de los clientes, enviarlas al servidor y enviar los resultados al usuario. En su sistema (como lo entiendo) la lógica relativa al estado de ganancia se lleva a cabo en el cliente, que puede ser manipulada.

En su lugar, simplemente asegúrese de que haya una conexión segura entre el cliente y el servidor, y haga toda la lógica en el lado del servidor. Tal vez se hicieron complicados ajustes de hashing para apuestas en línea como esta antes del uso ubicuo de https.

Lo que creo que estás intentando hacer

Creo que la razón por la que le proporcionas el hash al cliente es para que puedas proporcionar algún tipo de garantía de que el juego no está manipulado. Está intentando implementar algo como lo siguiente:

enlace

Sin embargo, para lograr esto en un juego como el póquer, deberá desarrollar un sistema criptográfico complejo y auditado, que (al tiempo que garantiza la imparcialidad del juego para un teórico) puede hacer poco para asegurar la imparcialidad para un usuario no técnico. .

Si proporciona más información sobre lo que intenta hacer, haré todo lo posible para actualizar la respuesta.

    
respondido por el baordog 23.02.2015 - 05:05
fuente

Lea otras preguntas en las etiquetas