CommandsStyle

miércoles, 12 de julio de 2017

¿Tus contraseñas van al gimnasio?

¡Hola de nuevo, visitante del averno!

En el post de hoy vamos a ver como de fuerte es una contraseña.

Contraseña fuerte
Contraseña fuerte
Una contraseña fuerte es una contraseña que para adivinarse utilizando todas las combinaciones posibles se tarde tanto tiempo que no sea algo que se pueda plantear por términos de coste temporal.

O lo que es lo mismo, que tengamos que utilizar un algoritmo de fuerza bruta que utilice todas las combinaciones de caracteres permitidos para conseguir averiguar la contraseña y que al tener que probar muchas contraseñas, se tarde demasiado y no sea algo factible.

Con esto en la cabeza, vamos a empezar a hacer cálculos:

Supongamos que utilizamos el alfabeto español, que consta de 27 letras o caracteres (a, b, c, d, e, f, g, h, i, j, k, l, m, n, ñ, o, p, q, r, s, t, u, v, w, x, y, z)

Si utilizando únicamente el alfabeto español creamos una contraseña de 4 caracteres de largo (Como puede ser la palabra “hola”), el número de contraseñas posibles con este número de símbolos y con una longitud de 4 caracteres, es el siguiente:

27*27*27*27 = 27^4 = 531.441

531.441 puede parecernos un numero de contraseñas muy alto, pero un ordenador puede probar miles de contraseñas en unas horas.

Ahora bien, todo el mundo sabe que las letras pueden ser mayúsculas y minúsculas.

Si utilizamos el alfabeto español, con las letras mayúsculas y minúsculas, entonces el alfabeto que utilizamos para generar las contraseñas consta de 54 símbolos (a, b, c, d, e, f, g, h, i, j, k, l, m, n, ñ, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, Ñ, O, P, Q, R, S, T, U, V, W, X, Y, Z)

Ahora supongamos que creamos una contraseña de 4 caracteres de largo, como en el caso anterior, pero en este caso utilizamos las letras mayúsculas y creamos una contraseña (Como puede ser la palabra “Hola”).

Si un atacante quiere averiguar nuestra contraseña, necesitara probar todas las letras mayúsculas, y todas las letras minúsculas.

Como la longitud de la contraseña es 4, el número de posibles contraseñas con las mayúsculas y minúsculas de longitud 4 es:

54*54*54*54 = 54^4 = 8.503.056

Como vemos, añadiendo las mayúsculas, la contraseña se vuelve mucho más complicada de averiguar utilizando fuerza bruta. Pero… no vamos a quedarnos aquí.
Queremos una contraseña más robusta todavía, así que además de las letras mayúsculas y minúsculas, vamos a introducir los números.

Si introducimos los números, el número de símbolos con el que podemos crear la contraseña será de 64 (a, b, c, d, e, f, g, h, i, j, k, l, m, n, ñ, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, Ñ, O, P, Q, R, S, T, U, V, W, X, Y, Z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9).

Utilizando este alfabeto de 64 símbolos, vamos a crear una contraseña de 4 caracteres de longitud (Por ejemplo “Hol4”).

El número de posibles contraseñas de 4 caracteres de longitud y 64 posibles símbolos asciende a:

64*64*64*64 = 64^4 = 16.777.216

El número de posibles contraseñas ha crecido un poco respecto al caso anterior, pero… ¡todavía se puede mejorar!

Vamos a introducir caracteres no alfanuméricos al alfabeto con el que generamos las contraseñas, en este caso vamos a añadir los caracteres “ !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, ~ ” lo que suma un total de 33 caracteres (Si no me equivoco :P).

Si sumamos estos 33 caracteres al alfabeto que teníamos anteriormente, obtenemos un alfabeto de 97 símbolos (a, b, c, d, e, f, g, h, i, j, k, l, m, n, ñ, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, Ñ, O, P, Q, R, S, T, U, V, W, X, Y, Z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, ~).

Con este alfabeto de 97 símbolos, vamos a crear una contraseña de 4 caracteres de longitud igual que en los casos anteriores. (Por ejemplo “Ho!4”).

El número de posibles contraseñas de 4 caracteres de longitud y 97 posibles símbolos asciende a:

97*97*97*97 = 97^4 = 88.529.281

Ahora podemos decir que tenemos un alfabeto completito, pero… 88.529.281 posibles contraseñas… todavía son “pocas”.

Para mejorar la complejidad de la contraseña llegado este punto, lo único que podemos hacer el aumentar su longitud.

Vamos a suponer una contraseña de 8 caracteres de longitud, utilizando el alfabeto de 97 símbolos que hemos visto anteriormente.(Esto es, una contraseña como puede ser “3l@verNo”)

El número de posibles contraseñas de 8 caracteres de longitud utilizando 97 símbolos es de:

97*97*97*97*97*97*97*97 =  97^8 = 7.837.433.594.376.961

¡Este número ya está mucho mejor!

Pero hay veces que queremos proteger cuentas de administrador o información utilizando una contraseña aún más fuerte, así que vamos a ver cuántas posibles contraseñas hay con una longitud de 16 caracteres y un alfabeto de 97 símbolos. (Una contraseña como por ejemplo “1nf0rm@ticoAvern”).

97*97*97*97*97*97*97*97*97*97*97*97*97*97*97*97 = 97^16 = 61.425.365.346.268.570.446.197.767.595.521

Con 61.425.365.346.268.570.446.197.767.595.521 posibles contraseñas seguro que a nadie se le ocurre hacer una fuerza bruta probándolas todas para robarte la contraseña.

Por otro lado, es frecuente que las aplicaciones o sistemas operativos te obliguen a utilizar una longitud mínima en las contraseñas, con lo que hay combinaciones que no hay que probar en un ataque de fuerza bruta.

Por ejemplo, si un sistema nos pide una longitud mínima de 8 caracteres, un atacante nunca probara las contraseñas que tengan de 1 a 7 caracteres de longitud.

Es por ello que partiendo del ejemplo anterior, en el que planteábamos que el número de posibles contraseñas de 8 caracteres de longitud utilizando 97 símbolos era de 7.837.433.594.376.961, un atacante no probara todas ellas, ya que las que miden de 1 a 7 caracteres no las probara.

Entonces tenemos que no probara las contraseñas de 1 carácter de longitud, es decir, no probara las primeras 97 contraseñas.

Tampoco probara las de 2 caracteres de longitud, es decir:

97*97 = 97^2 = 9.409

Y así sucesivamente hasta las de 7 caracteres.

Si queremos calcular el número de contraseñas que no probara un atacante lo haremos de la siguiente manera:

97 + (97^2) + (97^3) + (97^4) + (97^5) + (97^6) + (97^7) = 81.639.933.274.759

Como podemos ver, no probara 81.639.933.274.759


Una vez visto todos los cálculos, podemos concluir que una contraseña fuerte, hace los ataques de fuerza bruta sean totalmente inviables.

Es por ello por lo que se suelen utilizar diccionarios con un número limitado de contraseñas para probar.



Espero que os haya gustado el post y que ahora seleccionéis contraseñas más seguras para protegeros.

miércoles, 5 de julio de 2017

Y tú… ¿firmas y/o cifras?

Hoy vamos a tratar el tema de la de criptografía asimétrica. Hoy he elegido este tema, ya que en futuros post vamos a tratar temas que se apoyaran en lo que veremos a continuación.

Y tú… ¿firmas y/o cifras?
Y tú… ¿firmas y/o cifras?


AVISO: Lo que vamos a encontrarnos a continuación, es una super-simplificación para explicar el funcionamiento del firmado y el cifrado de información. Es una simplificación, porque es un post para que se entienda la lógica del funcionamiento que siguen estos procesos, pero no voy a entrar en el funcionamiento a bajo nivel.

Para entender la criptografía asimétrica, también llamada criptografía de clave pública, hay que tener clara una cosa. Las claves van a estar formadas por dos “partes” o dos claves, que son una clave pública y una clave privada.

Aquí es muy importante saber que la clave pública podemos distribuirla libremente, como su propio nombre indica, es pública.

No es así con la clave privada. Esta clave tenemos que guardarla celosamente y no debemos compartirla.

Para entender el funcionamiento, vamos a poner un ejemplo con 3 sujetos ficticios: Juan, María y Pedro.

Las claves de estos 3 individuos son las que vemos a continuación:

Juan
Clave PrivadaClave Pública
Jcpv394867Jcp928347

María
Clave PrivadaClave Pública
Mcpv92783Mcp823375

Pedro
Clave PrivadaClave Pública
Pcpv02837Pcp982374

Estas claves no las vamos a poder elegir nosotros, normalmente haremos uso de algún proceso que nos proporcione cada par de claves.

Haciendo uso de la criptografía de clave pública, comúnmente vamos a poder realizar dos operaciones: firmar y cifrar.

Supongamos ahora que nuestros tres sujetos, han intercambiado sus claves, de forma que ahora tienen un “almacén de claves” donde van a guardar las claves que se han ido intercambiando.

Juan
Clave Privada
Clave Pública
Jcpv394867Jcp928347
Almacén de claves
Clave Publica De María (CPM)Mcp823375

María
Clave Privada
Clave Pública
Mcpv92783Mcp823375
Almacén de claves
Clave Publica De Pedro (CPP)Pcp982374
Clave Publica De Juan (CPJ)Jcp928347

Pedro
Clave Privada
Clave Pública
Pcpv02837Pcp982374
Almacén de claves
Clave Publica De María (CPM)Mcp823375

Ahora que ya conocemos las dos partes de una clave (La pública y la privada) y que hemos visto que las claves publicas hay que compartirlas, vamos a explicar cómo funciona el proceso de firmado y de cifrado.

La firma
El proceso de firmado se realiza utilizando la clave privada. Cuando firmamos un fichero, siempre, siempre, SIEMPRE vamos a utilizar la clave privada.

El resultado de un proceso de firma es propiamente una “firma digital”.

Hay que tener en cuenta que, para realizar una firma, se utilizan todos los bits de un fichero, por lo que si firmamos un fichero y más tarde lo modificamos, tendremos que realizar de nuevo el proceso de firmado para obtener una firma válida para el fichero modificado.

Vale y… ¿Para qué nos sirve una firma digital?

Haciendo uso de la clave pública correspondiente a la clave privada con la que se firmó el fichero, podemos verificar si la firma es correcta o no lo es.

Además, como únicamente se puede firmar haciendo uso de la clave privada, podemos verificar la identidad del firmante.

Veamos un ejemplo:
Supongamos que Juan firma un fichero, el proceso de firma vamos a representarlo de la siguiente manera:

Firma (fichero, CPVJ) = opasuiisjfahwoi

Como podemos ver, el resultado de la firma del fichero de Juan, haciendo uso de su clave privada, es “opasuiisjfahwoi”. El resultado de una firma es un conjunto de caracteres que sirve para verificar quien ha firmado el fichero, y si ha sido modificado a posteriori de realizar la firma.

Ahora supongamos que Juan, envía el fichero y la firma del fichero a María y Pedro.

Para verificar la firma, es necesaria la clave pública de Juan, por lo que… el pobre Pedro no podrá verificar si la firma es válida, ya que no tiene la clave pública de Juan.

Sin embargo, María sí que tiene la clave pública de Juan, por lo que, haciendo uso de la clave pública de Juan, el fichero y la firma del fichero, podrá verificar si la firma es válida o no, es decir, podrá verificar si el fichero realmente lo ha firmado Juan, y si el fichero no ha sufrido modificaciones después de que Juan lo firmara.

El proceso de verificación de firma, vamos a representarlo de la siguiente manera:

Verificación (fichero,firma, CPJ) = VALIDO

Como el fichero no ha sido modificado, la firma es la que ha realizado Juan, y la clave pública utilizada en la verificación es la de Juan, el proceso dará como resultado que la firma es válida.

En caso de que el fichero estuviese modificado, vamos a llamarlo fichero1, el resultado sería el siguiente:

Verificación (fichero1, firma, CPJ) = INVALIDO

Si por un casual, María se confunde, e intenta verificar el fichero original con la clave pública de Pedro, el resultado sería:

Verificación (fichero, firma, CPP) = INVALIDO

Ni que decir tiene que, si el fichero ha sido modificado, y la clave pública que se utiliza no es correcta, la verificación dará como resultado “invalido”

Verificación (fichero1, firma, CPP) = INVALIDO

Vale, enviar un documento firmado está muy bien para saber quién lo ha firmado y si ha sufrido modificaciones a posteriori, pero… ¿Qué hago si quiero enviar un fichero a alguien y que nadie pueda leerlo? Para eso está el cifrado de la información.

Como podemos ver, la firma digital, nos permite comprobar:
  • Integridad
  • Autenticación de origen
  • No repudio


El Cifrado
El proceso de cifrado nos permite crear un mensaje/fichero (a partir de un mensaje/fichero original) que únicamente podrá descifrar la persona que contenga la “clave” necesaria para el proceso de descifrado.

Para el proceso de cifrado se utiliza siempre, siempre, SIEMPRE la clave pública de la persona a la que vamos a enviar el mensaje/fichero cifrado.

Supongamos que Juan quiere enviar un fichero cifrado a María, el proceso de cifrado sería el siguiente:

Cifrado (fichero, CPM) = ficheroCifrado

Ahora, Juan, lo único que tiene que hacer es enviar el fichero “ficheroCifrado” a María, y ella lo descifrará utilizando el siguiente proceso:

Descifrado (ficheroCifrado, CPVM) = fichero

Como podemos ver, ha sido necesaria la clave privada de María, por lo que si por alguna razón, el fichero “ficheroCifrado” hubiese llegado a manos de Pedro, le faltaría la clave privada de María para poder descifrar el fichero y por tanto no podría descifrarlo.

El proceso de cifrado nos proporciona:
  • Confidencialidad

Y con esto llegamos al final del post de hoy, espero que con él podamos entender de forma básica como funciona el proceso de cifrado y firmado haciendo uso de la criptografía asimétrica.