Está en la página 1de 19

UNIVERSIDAD TECNOLÓGICA

DE LA SELVA
UNIDAD ACADÉMICA DE BENEMÉRITO DE LAS AMÉRICAS

ASIGNATURA:
Metodología para el desarrollo de proyectos

UNIDAD TEMÁTICA:
investigación de metodologías

DOCENTE:
Ing. Fredy Lara Pereyra

ALUMNO:
Gabriela Uriostegui Romero

CARRERA:
Ing. Desarrollo y gestión de software

GRADO Y GRUPO:
7° A

FECHA DE ENTREGA:
05 de noviembre de 2022
Contenido
INTRODUCCION.......................................................................................................1
CRIPTOGRAFÍA ASIMÉTRICA.................................................................................2
¿Qué es la criptografía asimétrica?.......................................................................2
Principio de la criptografía de clave pública...........................................................2
¿Cómo funciona el cifrado asimétrico?..................................................................3
¿Dónde se usa el cifrado asimétrico?....................................................................4
Ejemplos de cifrado asimétrico..............................................................................4
Ventajas e inconvenientes del cifrado asimétrico..................................................5
ALGORITMO HASH..................................................................................................6
¿Qué es el algoritmo hash?...................................................................................6
¿Para qué se utilizan los valores hash?................................................................7
Propiedades de buen algoritmo de hash...............................................................8
SHA2....................................................................................................................10
Funcionamiento del SHA2....................................................................................10
Características de los diferentes tipos de SHA2..................................................10
SHA-256...............................................................................................................11
SHA2-384.............................................................................................................11
SHA2-512.............................................................................................................12
SHA2-224.............................................................................................................12
SHA-3...................................................................................................................12
Funcionamiento y características.........................................................................13
Algoritmos Hash KDF...........................................................................................13
Argon2..................................................................................................................16
CONCLUSIÓN.........................................................................................................17
INTRODUCCION
Una función criptográfica hash es un algoritmo matemático que transforma
cualquier dato entrante en una serie de caracteres de salida, con una longitud fija
o variable, dependiendo del algoritmo hash que estemos utilizando. En los
algoritmos de hash con longitud de salida fija, esta longitud será la misma
independientemente del tamaño de los datos de entrada. Los algoritmos hash que
están específicamente diseñados para proteger contraseñas, suelen ser variables.

pág. 1
CRIPTOGRAFÍA ASIMÉTRICA
¿Qué es la criptografía asimétrica?
El cifrado asimétrico, también conocido como criptografía asimétrica o de clave
pública, se utiliza para proteger archivos, carpetas y unidades completas contra el
acceso no autorizado e intercambiar mensajes confidenciales. Para este propósito,
se emplean unas claves que sirven para cifrar y descifrar los datos.
El concepto de la criptografía asimétrica nació en 1975, por lo que este ámbito se
considera muy joven, teniendo en cuenta que la historia de la criptografía se
remonta a más de 2000 años. La mayor ventaja de la criptografía de clave pública
es, al mismo tiempo, el mayor inconveniente del cifrado simétrico: las partes que
se comunican no tienen que compartir una sola clave común, sino que cada una
posee una clave privada distinta.
El método de clave secreta o cifrado simétrico esconde un problema que reside
sobre todo en el intercambio de las claves: como el destinatario debe conocer la
clave secreta, cuantos más participantes en la comunicación compartan una clave,
más confuso, complejo y, por lo tanto, más inseguro y vulnerable se vuelve este
intercambio.
El cifrado asimétrico es una alternativa muy práctica a este método, ya que cada
usuario tiene su propio par de claves.

Principio de la criptografía de clave pública


En el cifrado asimétrico, cada participante tiene un par de claves que consta de
una clave pública y una clave privada. Ambas se mantienen unidas mediante una
especie de llavero: con este sistema criptográfico, un algoritmo matemático vincula
estrechamente ambas claves, de manera que los datos que se cifran con la clave
pública solo pueden descifrarse con la clave privada. Para garantizar la protección
de los datos y la seguridad del cifrado simétrico, por lo tanto, es fundamental que
la clave privada se mantenga secreta para todos los demás participantes de la
comunicación.
En la práctica, el remitente de los datos siempre necesita la clave pública del
destinatario. En términos de cifrado, la clave pública tiene una función

pág. 2
unidireccional: permite cifrar los datos, pero no descifrarlos, porque solo el
destinatario puede hacerlo con su propia clave privada. No obstante, la clave
pública no solo se utiliza para el cifrado, sino que también permite verificar las
firmas digitales y autenticar a los participantes.
Las claves se emiten ya en el primer contacto. Al mismo tiempo, la clave privada
genera firmas digitales y, por lo tanto, puede autenticarse para otros participantes.
En resumen, la criptografía asimétrica permite a cualquier persona acceder a una
clave pública, pero descifrar los datos únicamente mediante la clave privada, por
lo que estos se intercambian de forma muy segura.

¿Cómo funciona el cifrado asimétrico?


Para iniciar el procedimiento de la criptografía asimétrica, el destinatario genera su
par de claves y comunica la clave pública a la otra parte, guardándose la clave
privada para sí. El proceso de transmisión es sencillo y se lleva a cabo a través de
organismos de certificación o mediante los llamados servidores de claves, en los
que se puede almacenar la clave. El remitente codifica su mensaje con esta clave
pública y puede enviarlo al destinatario como “texto secreto”. Desde el momento
del cifrado, el destinatario solo podrá descifrar este mensaje con su clave privada.
Por esta razón, en principio, el canal del mensaje puede elegirse libremente: si el
mensaje cifrado es interceptado, su contenido permanece oculto para el atacante.
Este principio de unidireccionalidad conforma todo el criptosistema asimétrico. Las
dos claves son completamente independientes una de otra: incluso si un atacante
conociera la clave pública, no le serviría para averiguar la clave privada. Para
garantizarlo, la clave pública emplea números primos bien definidos que se
multiplican y dan un resultado concreto. Por ejemplo, se utiliza un cálculo como el
siguiente:
23 x 199 = 4577
La clave privada, por su parte, emplea exclusivamente el resultado de este cálculo
(en el ejemplo, el número 4577). Resulta casi imposible averiguar los números
anteriores solo con este valor, porque la combinatoria es muy compleja. Hasta la
fecha, no existen métodos o algoritmos matemáticos que faciliten el cálculo
anterior.

pág. 3
¿Dónde se usa el cifrado asimétrico?
La criptografía de clave pública suele utilizarse en el tráfico de correo electrónico,
como en el método de cifrado estándarS/MIME, en las firmas digitales y
en protocolos criptográficos como SSL/TLS, SSH y HTTPS.
Por otro lado, los criptosistemas asimétricos pueden combinarse con métodos
simétricos. En este caso, las claves se intercambian primero mediante cifrado
asimétrico, pero la comunicación posterior se cifra simétricamente. Este sistema
de cifrado híbrido se utiliza cuando los usuarios requieren la velocidad de la
criptografía simétrica y la seguridad de la asimétrica.

Ejemplos de cifrado asimétrico


Probablemente, el programa de cifrado más popular sea Pretty Good Privacy, más
conocido por las siglas PGP. Se basa en la criptografía asimétrica y se utiliza para
cifrar correos electrónicos. Al instalar el programa, se generan una clave pública y
otra privada. La clave pública puede transferirse personalmente o almacenarse en
una base de datos central en la que todo el mundo puede buscar las claves de
ciertos propietarios. El remitente encripta sus datos con la clave pública y marca el
correo electrónico o mensaje como cifrado con PGP. El destinatario puede hacerlo
legible nuevamente utilizando la clave privada.
También los métodos de firma están estrechamente relacionados con la
criptografía de clave pública. RSA es el método más utilizado para hacer firmas
digitales. En este caso, el remitente codifica su mensaje con la clave privada, es
decir, que “firma” su mensaje con RSA. Después, ya puede enviar el mensaje. El
destinatario verifica la autenticidad del mensaje e identidad del emisor con su
clave pública.
El RSA se considera un procedimiento de firma antiguo, pero probado. Otras
alternativas que generan o reconocen firmas digitales mediante un método muy
similar son DSA (Digital Signature Algorithm o algoritmo de firma digital)
y ElGamal.
Un ejemplo concreto de protocolo criptográfico es el cifrado con SSL/TLS. Este
protocolo de red garantiza una comunicación segura, por ejemplo, entre el servidor
web y el navegador. Al mismo tiempo, comprueba la autenticidad del servidor.

pág. 4
Para ello, SSL/TLS utiliza el cifrado híbrido, por lo que combina los métodos
asimétrico y simétrico. La clave pública está firmada por un organismo de
certificación, y el certificado resultante, a su vez, está encriptado. El certificado
solo puede abrirse utilizando la clave pública del organismo de certificación. Para
este fin, el servidor web envía, por ejemplo, su clave pública certificada al
navegador, que verifica el certificado. Si este es válido, el navegador genera una
clave simétrica y la envía al servidor web. Ambos ahora utilizarán esta clave
común durante el resto de la sesión SSL/TLS para cifrar simétricamente su tráfico
de datos.

Ventajas e inconvenientes del cifrado asimétrico


El principal inconveniente de la criptografía de clave pública es la lentitud del
proceso de cifrado. Además, se requiere considerablemente más rendimiento
informático. Por lo tanto, como en el ejemplo del cifrado SSL mencionado
anteriormente, se ha desarrollado un sistema híbrido que combina el sistema
simétrico y el asimétrico. Los antiguos problemas de este método, como la
autenticación insegura y la alta vulnerabilidad al malware, ya se han resuelto
mediante certificados y firmas digitales, así como criptosistemas basados en ID.
Se recomienda el cifrado híbrido para sacar partido a lo mejor de ambos mundos.
El cifrado asimétrico asume la tarea de distribuir las claves, lo que evita el
engorroso procedimiento de transferencia de claves privadas de los criptosistemas
simétricos. El resultado es un proceso de cifrado seguro, rápido y práctico.

pág. 5
ALGORITMO HASH
¿Qué es el algoritmo hash?
Una función criptográfica hash- usualmente conocida como “hash”- es un
algoritmo matemático que transforma cualquier bloque arbitrario de datos en una
nueva serie de caracteres con una longitud fija. Independientemente de la longitud
de los datos de entrada, el valor hash de salida tendrá siempre la misma longitud.
Según un generador online de hash SHA-1, (SHA-1 es una de las funciones hash
más ampliamente utilizadas en la informática, junto con MD 5 y SHA-2) el hash de
mi nombre, Brian, es: 75c450c3f963befb912ee79f0b63e563652780f0. Como
probablemente cualquier otro Brian te lo puede decir, es muy común que muchas
personas cometan el error de escribir “Brain” (cerebro, en inglés) cuando intentan
escribir mi nombre. Es tan común, de hecho, que una vez tuve una licencia de
conducir con el nombre, “Brain Donohue,” pero eso es otra historia. El hash SHA-1
para “brain” (cerebro), siempre según el generador online de hash SHA-1, es:
8b9248a4e0b64bbccf82e7723a3734279bf9bbc4.
Como puedes ver, estas dos series son muy diferentes, a pesar de que la
diferencia entre el nombre “Brian” y la palabra “brain”, radica en la disposición de
dos vocales consecutivas (‘ia’ y ‘ai’, respectivamente). Yendo un poco más lejos, si
introduzco mi nombre sin la “B” mayúscula, el generador de SHA-1 vuelve de
nuevo con un hash completamente diferente:
760e7dab2836853c63805033e514668301fa9c47.
Te darás cuenta de que todos los hashes aquí tienen 40 caracteres de longitud, lo
cual no es sorprendente dado que, en ambos casos, la entrada es de cinco
caracteres. Sin embargo, lo más llamativo es que, si ingresamos todas las
palabras que ya llevamos escritas en este artículo, el generador de hash arroja lo
siguiente: db8471259c92193d6072c51ce61dacfdda0ac3d7.
Son 1.937 caracteres (con espacios incluidos) condensados, al igual que Brian y
Brain, en una serie de 40 caracteres. Si quisieras, podrías resumir las obras
completas de William Shakespeare con SHA-1 y el hash resultante seguiría siendo
de 40 caracteres. Por otra parte, no existen dos entradas que produzcan el mismo
hash de salida.

pág. 6
Aquí hay una foto, cortesía de Wikimedia Commons, que ilustra este concepto
para aquellos que prefieren el aprendizaje visual:

¿Para qué se utilizan los valores hash?


Es una excelente pregunta. Sin embargo, la respuesta es que los hashes
criptográficos se utilizan para un montón de cosas.

Para mí y para ti, la forma más común del hash tiene que ver con las contraseñas.
Por ejemplo, si alguna vez olvidas tu contraseña de algún servicio en línea,
probablemente tengas que resetearla. Cuando se restablece una contraseña, por
lo general no recibes una clave en texto plano. Eso es debido a que los servicio en
línea no almacenan las contraseñas en texto plano, sino que las almacenan bajo
el valor hash de la contraseña. De hecho, el servicio (a menos que utilices una

pág. 7
contraseña demasiado simple, que haga que el valor hash sea ampliamente
conocido) no tiene idea de cuál es la contraseña real.

Para que quede claro, si recibes una contraseña en texto plano, quiere decir que
el servicio en línea que estás utilizando no está haciendo un hashing de tu
contraseña. Eso sería realmente vergonzoso.

Si lo deseas, puedes probar esto por ti mismo en un generador inverso de hash


online. Si generas un valor hash de una contraseña débil (tales como “contraseña”
o “123456”) y luego ingresas esa entrada en un generador inverso de hash, lo más
probable es que el generador inverso reconozca ese valor hash para cualquiera de
esas dos contraseñas. En mi caso, el generador inverso de hash reconoció los
hashes de ‘brain’ (cerebro) y ‘Brian’, pero no el hash que incluía todo cuerpo de
este texto. Por lo tanto, se puede deducir que la integridad del hash de salida
depende totalmente de los datos de entrada que, en definitiva, podría ser cualquier
cosa.

Por otra parte, las funciones criptográficas hash se utilizan también para asegurar
la “integridad de los mensajes”. En pocas palabras, para estar seguros  de que
algunas comunicaciones o archivos no fueron alterados de alguna forma, se
pueden examinar los hash creados antes y después de la transmisión de los
datos. Si los dos hash son idénticos, significa que no ha habido ninguna alteración.

Propiedades de buen algoritmo de hash


Hay algunos rasgos clave que todos los buenos hashes comparten, y las
resumimos a continuación:

Determinismo: un algoritmo hash debe ser determinista, lo que significa que


siempre le brinda una salida de tamaño idéntico, independientemente del tamaño
de la entrada con la que comenzó, esto significa que, si está codificando una sola
oración, la salida resultante debe ser del mismo tamaño que la que obtendría al
codificar un libro completo.

Resistencia previa a la imagen: la idea en este punto, es que un algoritmo hash


fuerte es uno que es resistente a la imagen previa, lo que significa que no es

pág. 8
factible invertir un valor hash para recuperar el mensaje de texto sin formato de
entrada original, por lo tanto, el concepto de hash es irreversible, tiene funciones
unidireccionales.

Resistencia a la colisión: una colisión ocurre cuando dos objetos chocan. Bueno,
este concepto se traslada a la criptografía con valores hash, si dos muestras
únicas de datos de entrada dan como resultado resultados idénticos, se conoce
como colisión. Esta es una mala noticia y significa que el algoritmo que está
utilizando para codificar los datos no funciona y, por lo tanto, es inseguro,
básicamente, la preocupación aquí es que alguien podría crear un archivo
malicioso con un valor hash artificial que coincida con un archivo genuino (seguro)
y hacerlo pasar por real porque la firma coincidiría, por lo tanto, un algoritmo hash
bueno y confiable es aquel que es resistente a estas colisiones.

Efecto de avalancha: lo que esto significa es que cualquier cambio realizado en


una entrada, sin importar cuán pequeño sea, dará como resultado un cambio
masivo en la salida, esencialmente, un pequeño cambio (como agregar una coma)
se convierte en algo mucho más grande, de ahí el término » efecto avalancha «.

Velocidad hash: los algoritmos hash deben funcionar a una velocidad razonable,
en muchas situaciones, los algoritmos hash deberían calcular los valores hash
rápidamente, esto se considera una propiedad ideal de una función hash
criptográfica, sin embargo, esta propiedad es un poco más subjetiva. Verás, más
rápido no siempre es mejor porque la velocidad debe depender de cómo se
utilizará el algoritmo hash, a veces, lo que se desea es un algoritmo hash más
rápido, y otras veces es mejor usar uno más lento que tome más tiempo para
ejecutarse, el primero es mejor para las conexiones a sitios web y el segundo es
mejor para el hash de contraseñas.

SHA2
En sus inicios el algoritmo SHA (Secure Hash Algorithm o Algoritmo de Hash
Seguro) fue creado por la NSA y el NIST con el objetivo de generar hashes o
códigos únicos en base a una norma. En 1993 nació el primer protocolo SHA,
también llamado SHA-0, pero apenas se utilizó y no tuvo demasiada repercusión.

pág. 9
Un par de años más tarde, vio la luz una variante mejorada más resistente y
segura, el SHA-1, que se ha utilizado durante muchos años para firmar los
certificados digitales SSL/TLS de millones de webs. Unos años más tarde se creó
SHA-2, que tiene cuatro variantes según el número de bits de salida, son SHA2-
224, SHA2-256, SHA2-384 y SHA2-512. Actualmente, por seguridad ya no se
utiliza SHA1, sino que es muy recomendable utilizar SHA2 o SHA3 (dentro de la
familia SHA).

Funcionamiento del SHA2


Los algoritmos de hash solamente funcionan en una dirección, podemos generar
el hash de cualquier contenido, o la huella digital, pero con el hash o la huella
digital no hay forma de generar el contenido inicial. La única forma de hacerlo, es
mediante diccionario o fuerza bruta, por lo que nos podría llevar miles de años
(actualmente) conseguir la información inicial.

Entre las muchas y diferentes formas de crear hashes, el algoritmo SHA2-256 es


uno de los más usados gracias a su equilibrio entre seguridad y velocidad, es un
algoritmo muy eficiente y tiene una alta resistencia a colisiones, algo muy
importante para mantener la seguridad de este algoritmo de hash. Para que un
algoritmo hash sea seguro, no se deben conocer colisiones. Por ejemplo, el
método de verificar los Bitcoins está basado en SHA2-256.

Características de los diferentes tipos de SHA2


Tamaño de salida: es el tamaño de caracteres que formarán el hash.

Tamaño del estado interno: es la suma hash interna, después de cada compresión
de un bloque de datos.

Tamaño del bloque: es el tamaño del bloque que maneja el algoritmo.

Tamaño máximo del mensaje: es el tamaño máximo del mensaje sobre el que
aplicamos el algoritmo.

Longitud de la palabra: es la longitud en bits de la operación que aplica en cada


ronda el algoritmo.

pág. 10
Interacciones o rondas: es el número de operaciones que realiza el algoritmo para
obtener el hash final.

Operaciones soportadas: son las operaciones que lleva a cabo el algoritmo para
obtener el hash final.

SHA-256
Tiene un tamaño de salida de 256 bits, un tamaño de estado interno de 256 bits,
un tamaño de bloque de 512 bits, el tamaño máximo del mensaje que puede
manejar es de 264 – 1, la longitud de la palabra es de 32 bits, y el número de
rondas que se aplican son 64, así como las operaciones que aplica al hash son +,
and, or, xor, shr y rot. La longitud del hash siempre es igual, no importa lo grande
que sea el contenido que uses para generar el hash: ya sea de sola una letra o
una imagen ISO de 4GB de tamaño, el resultado siempre será una sucesión de 40
letras y números.

SHA2-384
Este algoritmo es diferente en cuanto a características, pero su funcionamiento es
el mismo. Tiene un tamaño de salida de 384 bits, un tamaño de estado interno de
512 bits, un tamaño de bloque de 1024 bits, el tamaño máximo del mensaje que
puede manejar es de 2128 – 1, la longitud de la palabra es de 64 bits, y el número
de rondas que se aplican son 80, así como las operaciones que aplica al hash son
+, and, or, xor, shr y rot. Este algoritmo es una versión más segura que el SHA2-
256, puesto que se aplican más rondas de operaciones y también puede aplicarse
sobre una información más extensa. Este algoritmo de hash se suele utilizar para
comprobar la integridad de los mensajes y la autenticidad en las redes privadas
virtuales. Un aspecto negativo, es que es algo más lento que SHA2-256, pero en
determinadas circunstancias puede ser una muy buena opción usar este.

SHA2-512
Como en todos los SHA2, el funcionamiento es el mismo, cambian una sola
característica. Tiene un tamaño de salida de 512 bits. El resto de características
son iguales que el SHA2-384. 512 bits de tamaño de estado interno, 1024 bits de
tamaño de bloque, 2128 – 1 para el tamaño máximo del mensaje, 64 bits de

pág. 11
longitud de palabra, y son 80 el número de rondas que se le aplican. Este
algoritmo también aplica las mismas operaciones en cada ronda +, and, or, xor,
shr y rot.

SHA2-224
No hemos comentado este algoritmo como principal, porque su hermano mayor
(SHA2-256) se usa mucho más, ya que la diferencia computacional entre ambos
es irrisoria y SHA2-256 está mucho más estandarizado. Lo mencionamos porque,
por lo menos hasta el momento, no se han encontrado colisiones para este
algoritmo, lo que lo convierte en una opción segura y utilizable.

En la siguiente tabla podremos comprobar mucho mejor las diferencias entre todos
los algoritmos en base a sus características.

Veréis que en la tabla aparecen previamente los algoritmos hash MD5, SHA-0 y
SHA-1, los hemos dejado fuera porque, aunque se han utilizado mucho tiempo
atrás, ya se han encontrado colisiones y ya no es seguro utilizarlos, por lo que en
la actualidad se usan SHA2, en todas sus variantes, y SHA3.

Para dejar claro el concepto de colisión y que se entienda correctamente os


explicamos que, en informática, una colisión de hash es una situación que se
produce cuando dos entradas distintas a una función de hash producen la misma
salida.

SHA-3
SHA3 es el algoritmo de hash que pertenece a la familia SHA más nuevo, fue
publicado por el NISH en 2015, pero aún no se está utilizando ampliamente.
Aunque forma parte de la misma familia, su estructura interna es bastante
diferente. Este nuevo algoritmo de hash se basa en la «construcción de
esponjas». La construcción de esta esponja se basa en una función aleatoria o
permutación aleatoria de datos, permite ingresar cualquier cantidad de datos y
generar cualquier cantidad de datos, además, la función es pseudoaleatoria con
respecto a todas las entradas anteriores. Esto permite a SHA-3 tener una gran
flexibilidad, el objetivo está en sustituir a SHA2 en los típicos protocolos TLS o de

pág. 12
VPN que utilicen este algoritmo de hash para comprobar la integridad de los datos
y la autenticidad de los mismos.

SHA-3 nació como una alternativa a los SHA2, pero no porque usar SHA-2 sea
inseguro, sino porque querían tener un plan B en caso de un ataque exitoso contra
SHA2, de esta forma, tanto SHA-2 como SHA-3 convivirán durante bastantes
años, de hecho, SHA-3 no se utiliza masivamente como sí ocurre con SHA-2.

Funcionamiento y características
SHA-3 usa una construcción de «esponja», los datos se «absorben» y se
procesan para mostrar una salida con la longitud deseada. En la fase de absorción
de los datos, se usa la operación XOR y después se transforman en una función
de permutación. SHA-3 permite que tengamos bits adicionales de información,
para proteger a la función hash de ataques de extensión, algo que ocurre con
MD5, SHA-1 y SHA-2. Otra característica importante, es que es muy flexible,
haciendo que se puedan probar ataques criptoanalíticos y usarlo en aplicaciones
ligeras. Actualmente SHA2-512 es el doble de rápido que SHA3-512, pero este
último se podría implementar a través de hardware, por lo que entonces sí podría
ser igual de rápido e incluso más rápido.

Algoritmos Hash KDF


La diferencia entre KDF (Key Derivation Function) y una función de hash para
contraseñas, es que la longitud con KDF es diferente, mientras que una función de
hash para contraseñas siempre tendrá la misma longitud de salida. Dependiendo
de si estamos hasheando claves de cifrado o contraseñas almacenadas en una
base de datos, es recomendable utilizar unos algoritmos de hashing u otros. Por
ejemplo, en el caso de las contraseñas almacenadas, es recomendable que el
algoritmo hash tarde un tiempo de por ejemplo 5 segundos en calcularse, pero que
luego sea muy robusto y sea muy costoso el poder crackearlo.

Los desarrolladores menos expertos que no conozcan todas las posibilidades de


los algoritmos hash KDF, pensarán que son mejores las funciones de hash

pág. 13
criptográficas genéricas unidireccionales de longitud fija y resistentes a colisiones,
como son SHA2-256 o SHA2-512, sin pensar dos veces en el posible problema
que estas pueden tener. El problema de los hashes de longitud fija es que son
rápidas, esto permite a un atacante crackear la contraseña muy rápidamente con
un ordenador potente. Los hashes de longitud variable son más lentos, esto es
ideal para que los crackeadores de contraseñas tarden más tiempo en obtenerla.

La comunidad criptográfica se unió para introducir funciones de hash diseñadas


específicamente para contraseñas, donde se incluye un «coste». Las funciones de
derivación de claves también se diseñaron con un «coste». Basándose en las
funciones de derivación de claves basadas en contraseñas y las funciones de
hash diseñadas específicamente para contraseñas, la comunidad diseñó varios
algoritmos para usarlos en la protección de contraseñas.

Los algoritmos más populares para proteger las contraseñas son:

 Argon2 (KDF)
 scrypt (KDF)
 bcrypt
 PBKDF2 (KDF)

La principal diferencia entre un KDF y una función de hash de contraseñas, es que


la longitud con los KDF es arbitraria, y en las típicas funciones hash de
contraseñas como MD5, SHA-1, SHA2-256, SHA2-512 tienen una salida de
longitud fija.

Para el almacenamiento de contraseñas, la amenaza es que la base de datos de


claves se filtre a Internet, y que los crackeadores de contraseñas de todo el mundo
trabajen en los hashes de la base de datos para recuperar las contraseñas.

Tomando como ejemplo el almacenamiento de contraseñas en una base de datos,


cuando iniciamos sesión para acceder a un sitio web, siempre es necesario que el
hashing de la clave se haga rápido, para no tener que estar esperando sin poder
acceder, pero esto supone un problema, y es que se podría crackear de forma
más rápida, sobre todo si usamos la potencia de las GPU junto con Hashcat.

pág. 14
bcrypt, sha256crypt, sha512crypt y PBKDF2

En la siguiente tabla hay una comparación de varios algoritmos de hash


ampliamente utilizados, con su correspondiente coste en una tabla. Veréis que
está resaltado la fila verde donde un posible factor de trabajo podría significar
gastar 0.5 segundos en hash de la contraseña, lo que es una relación bastante
buena, y una fila roja donde un posible factor de trabajo podría significar dedicar 5
segundos completos a crear una clave de cifrado basada en contraseña, lo que es
malo por la pérdida de eficiencia.

Hay que tener en cuenta que, para bcrypt, esto significa que, para el hash de
contraseñas, un factor de 13 proporcionaría un coste de aproximadamente 0,5
segundos para codificar la contraseña, mientras que un factor de 16 me acercaría
a un coste de aproximadamente 5 segundos para crear una contraseña basada en
llave. Para sha256crypt, sha512crypt y PBKDF2, eso parece ser
aproximadamente 640.000 y 5.120.000 iteraciones respectivamente.

scrypt
Cuando pensamos en pasarnos a scrypt es porque las cosas se están poniendo
un poco más difíciles. Con bcrypt, sha256crypt, sha512crypt y PBKDF2, nuestro
coste es completamente un factor de carga de la CPU, a mayor capacidad de
procesamiento, mayor eficiencia del algoritmo. La parte mala es que aún son
víctimas de FPGA y ASIC específicos de algoritmos. Para combatir esto, se puede
incluir un coste de memoria. Con scrypt tendremos un coste tanto de CPU como
de RAM.

En la siguiente tabla se puede ver una comparativa con diferentes valores de


coste.

Estas pruebas se han realizado con una CPU de cuatro núcleos de un solo
procesador, se ha tratado de limitar el coste «p» a 1, 2 y 4. Se ha limitado también
el uso de la RAM y así no tener que interrumpir el resto de acciones en curso que

pág. 15
se estaban llevando a cabo. Por lo que se ha limitado el coste «r» a 4, 8 y 16
multiplicado por 128 bytes (512 bytes, 1024 bytes y 2048 bytes).

Argon2
Argon2 tiene dos versiones distintas: Argon2d y Argon2i; el primero depende de
los datos (d) y el segundo es independiente de los datos (i). Se supone que el
primero es resistente al crackeo de la GPU, mientras que el segundo es resistente
a los ataques de canal lateral. En otras palabras, Argon2d sería adecuado para el
hash de contraseñas, mientras que Argon2i sería adecuado para la derivación de
claves de cifrado.

Argon2 tiene un coste de CPU y un coste de RAM, ambos se manejan por


separado. El coste de la CPU se maneja a través de iteraciones estándar, como
con bcrypt o PBKDF2, y el coste de la RAM se maneja aumentando
específicamente la memoria. Cuando se comenzaron a hacer pruebas con este
algoritmo, se vio que simplemente con manipular las iteraciones se acababa
pareciendo mucho a bcrypt, pero a su vez, se podía afectar el tiempo total que
tomaba calcular el hash simplemente manipulando la memoria. Al combinar los
dos, se descubrió que las iteraciones afectaban al coste de CPU más que al de la
RAM, pero ambos tenían una participación significativa en el tiempo de cálculo,
como se puede ver en las tablas a continuación. Al igual que con scrypt, también
tiene un coste de paralelización, que define la cantidad de subprocesos que desea
que trabajen en el problema:

La nota a tener en cuenta en este proceso de parametrización, es que el coste de


la RAM varía entre 256 KiB y 16 MiB, además del número de iteraciones y el coste
de recuento del procesador. A medida que aumentamos la RAM usada en la
parametrización, podremos reducir nuestro coste de iteración.

pág. 16
CONCLUSIÓN
Podemos resumir el uso de estos algoritmos hash a lo siguiente: al aplicar hash a
las contraseñas, ya sea para almacenarlas en el disco o para crear claves de
cifrado, se deben utilizar criptográficas basadas en contraseñas, diseñadas
específicamente para el problema a tratar.

pág. 17

También podría gustarte