Tip:
Highlight text to annotate it
X
Hay muchos algoritmos de hash conocidos, y por supuesto, puedes escribir el tuyo propio,
pero no debes escribir nunca el tuyo propio.
La primera lección que aprenderás en CS387 es la de no escribir el tuyo propio,
al menos para nuestros objetivos.
Por supuesto, si estás construyendo una tabla hash, puedes hacer lo que quieras,
pero si lo vas a utilizar con fines de seguridad, no escribas el tuyo propio.
Así que si lo que quiers es aprender a hacer una tabla hash, haz lo que quieras.
Por supuesto, probablemente alguien lo habrá hecho mejor, pero, ¡ey! nunca lo sabrás.
Pero de todas formas, algunos algoritmos populares son CRC32,
que básicamente se ha diseñado para fines de revisión.
Si pretendes enviar a alguien un montón de información, como un archivo grande
deberás incluir también un CRC de este archivo, y esta es una manera fácil
de comprobar de que tienes el archivo completo, y no está corrompido
porque puedes enviar un hash con más facilidad que un archivo completo.
Puedes copiar y pegar un hash. Son unos pocos bits.
Puedes verificar que el archivo recibido tiene el mismo CRC que el enviado.
Así no tienes que verificar bit por bit de que tienes el archivo correcto.
CRC es muy rápido. Su verdadero y único propósito es hacer revisiones.
Básicamente, crear un hash de un archivo grande.
Sus propiedades de seguridad no son muy buenas.
Es muy fácil encontrar lo que nosotros llamamos colisión,
que es cuando 2 cosas revisan el mismo valor,
lo cual es todo el propósito de un hash: poder obtener un valor diferente
para casi cualquier cosa que vayamos a revisar.
Obviamente, si el tamaño de la entrada es sustancialmente mayor que el de salida,
sí, van a haber colisiones.
El problema es que es difícil encontrarlas, y con CRC32, es fácil encontrarlas.
La razón por la que usarías CRC es porque no te preocupan las colisiones,
solo te preocupa la velocidad y, CRC es muy rápido.
Al algoritmo hash más popular es todavía md5,
que se solía usar porque solía ser rápido, no tan rápido 'ish' como CRC32,
pero bastante rápido y la gente pensaba que era bastante seguro, aunque no lo es.
Md5 se ha averiado repetidamente durante los últimos años,
y es fácil encontrar colisiones md5.
Dada una X que hace hash hacia una Y, es muy fácil que esta Y encuentra otra X
que haga hash hacia ella, lo que, como verás, es un gran problema.
Así que no vamos a usar bd5 mucho en esta clase.
Bueno, tiene sus casos de uso ¿vale?
Si tienes una entrada limitada, es difícil encontrar una colisión.
Hay una cierta clase de ataques, haciendo X larga y más larga,
que es una manera fácil de encontrar una colisión en md5.
Pero si limitas la longitud de X, no tendrás que preocuparte demasiado de su vulnerabilidad.
Así que ten esto en cuenta.
Cuando realmente te preocupen los datos, no uses md5.
El segundo hash más popular es Sha1.
Este no es tan rápido, pero es bastante seguro, justo ahora estamos viendo demostraciones
de gente que encuentra colisiones en sha1.
Aún es bastante bueno. Es el segundo y más usado hash después de md5.
Pero para que las cosas vayan adelante, debes usar algo como, por ejemplo, sha256,
que es como adivinarás una versión más grande de sha1.
No es realmente, el algoritmo, creo yo, que se ha cambiado también.
Así que digamos que este 'ish' es seguro, y este es bastante busno.
Va a tardar un poco.
Por supuesto, le compensa la velocidad.
Cuanto mejor sea el algoritmo de hash por ahora, más lento será.
Básicamente están organizados en coste y seguridad,
así que no sorprende que haya una correlación inversa entre coste y seguridad.
Pero así son las cosas.
Así que depende del problema con el que estés trabajando,
deberás realmente tomar una decisión.
Pero para nuestros fines, no vamos a tener demasiado tráfico.
Usaremos probablemente sha256 para la mayoría de las cosas.
Así que permíteme que te muestre cómo deberías usarlos.