Criptografia Desde 0
Bueno como el mismo titulo lo dice, tratare de poco a poco ir dando una instruccion y unas bases para que hacer en este mundo, es decir, metodos de cifrado, de desencriptacion, algoritmos, entre otros, no voy a decirles como es que hagan esto o tal otro, solo como que deben saber, que temas deben manejar para que a partir de lo que ustedes quieran eligan un camino, tratare de ser lo mas sencillo posible y avanzar despacio para no perder a nadie en el camino, entonces no diciendo mas empecemos con esto.
Para empezar necesitamos una definicion clara de que es
criptografia, aqui la cito:
La criptografía es la ciencia que estudia la transformación de un determinado mensaje en un código de forma tal que a partir de dicho código solo algunas personas sean capaces de recuperar el mensaje original. En general se utiliza para ello una palabra clave o 'password' con la cual se cifra el mensaje, el código resultante solamente puede ser descifrado por aquellos que conozcan el password.
Espero que desde este momento ya tengan clara la definicion.
Otro factor que se debe tener en cuenta para empezar a trabajar con formulas criptograficas y algoritmos, son los
algoritmos asimetricos o de llave publica, bueno
estos han demostrado su eficacia en entornos de comunicacion inseguros como Internet. Su novedad fundamental es que constan de una pareja de claves unicas, de la que una de ellas se hace publica, y la otra es privada para nosotros. Lo que se cifra con una, se descifra unicamente con la otra, y con este simple concepto jugamos.
Aqui les dejo un ejemplo que lo hice lo mas claro posible para que entiendan el proceso de cifrado.
Si A quiere mandarle algo cifrado a B, A le solicita su clave publica a B y cifra el mensaje con ella. De esta forma solo B podra tener acceso al contenido descifrandolo con su clave privada.
Si A quiere mandarle un mensaje m a B, pero B necesita asegurarse de que realmente viene de A, y que nadie a modificado su contenido, procedemos de la siguiente forma. A genera un hash del mensaje m, H(m), y lo cifra con su privada H(m)Ka. Esto es lo que se conoce como firma digital. Luego A manda el mensaje m, la firma H(m)Ka y su clave publica a B. B descifra H(m)Ka con la publica de A, genera un hash del mensaje original H2(m) y lo compara con el H(m). Si coincide es que todo esta bien.
Si no lo entienden, posteen la duda.
Otro concepto necesario es
algoritmos simetricos o de clave privada. Los
algoritmos simétricos usan la misma llave para encriptacion y desencriptacion (o la llave del desencriptacion se deriva fácilmente de la llave del encriptacion), es decir, la llave para abrir el archivo solo la tiene el destinatario o la persona que lo tenga que recibir, entonces lo que se hace en el proceso es que el remitente o el cifrador coge su mensaje A y lo cifra por medio de una llave publica, cuando lo recibe el destinatario el mensaje A, el lo desencripta con una llave privada que aparentemente solo la tiene el.
Para finalizar esta primera parte pondre un articulo de
Unravel de Aritmetica Modular, preferi escoger el articulo que el desarrollo porque me parece que tiene una explicacion mucho mas clara y sencilla de lo que se tratar este proceso matematico y que es importante para el cifrado asimetrico o de llave publica, entonces aqui se los dejo.
Aritmetica ModularSupongamos que nos ponemos a sumar o restar horas, en un reloj de esfera de 12 horas, nada de digitales. Si son las 8 y le sumamos 6 horas, nos quedan las 2. O sea, cuando pasamos de 12 empezamos por el 1.
Pues eso es aritmetica modular. En este caso seria modulo 12.
Asi podemos decir que 8 + 6 mod 12 = 2
La unica diferencia es que en la aritmetica modular incluimos el cero. Entonces en nuestro caso del reloj los numeros que existirian serian del 0 al 11. No habria por ejemplo el 12, porque "daria la vuelta" y pasaria a ser cero, o el 13 que pasaria a ser 1. Solo existen esos numeros.
Ahora en modulo 7. Nuestro universo de numeros seria {0,1,2,3,4,5,6}.
Si hiceramos 3*5, en los numero reales seria 15, pero en modulo 7 serian 2 vueltas (7+7) y uno mas. O sea, 3*5 mod 7 = 1.
Como vemos, en realidad lo que hacemos para calcular el modulo es dividir 15 entre 7 y quedarnos con el resto, que es 1.
De esta misma forma, si dividimos 64 entre 7, nos sigue quedando que el resto es 1 (lo unico que hemos hecho es "darle mas vueltas" al reloj), asi que podemos decir que 64 = k*7 + 1. K nos da igual porque es el numero de vueltas que le vamos a dar al reloj.
De forma generica, si un numero a (el 64) mod n (el 7) = resto (el 1), a = k*n + resto.
Bien, ahora vamos a fijarnos en este mismo ejemplo. Vemos que en mod 7, 3*5 = 1. Al igual que con los níºmeros reales, si dos níºmeros se multiplican y dan 1, es que son inversos (5 * 1/5 = 1).
Asi podemos decir que 3 y 5 son inversos en modulo 7.
Hay una propiedad, que os la teneis que creer, que dice que un numero a tiene inversa modulo n, si no existe ningun numero (excepto 1) menor que a y menor que n que los divida de forma exacta.
Esto es a lo que se llama primos relativos. 8 y 5 serian primos relativos, porque no hay ningun níºmero que los divida, aunque 8 no sea primo. Su maximo comun divisor es 1.
En el ejemplo del modulo 7, vemos que todos los numeros (el cero no cuenta) tienen que tener inversa, porque 7 es primo absoluto y no va a existir ningun numero que lo divida.
* La inversa del 1 es el 1: 1 * 1 = 1 que dividido entre 7 es igual a cero y resto 1, (1*1 mod 7 =1)
* La inversa del 2 es el 4: 2 * 4 = 8 que dividido entre 7 es igual a 1 y de resto 0, (2*4 mod 7 = 1)
etc...
Sustitucion MonoalfabeticaUna mejora al cifrador de César es la de relacionar a cada letra del alfabeto con un carácter. En este sistema, llamado sustitución monoalfabética, la clave consistirá en la cadena completa de caracteres del alfabeto. El ataque a estos anteriores sistemas es aprovechar las propiedades estadísticas de los lenguajes. Sabiendo el idioma del texto en claro y calculando el porcentaje de ocurrencias de letras y de combinaciones de dos y tres letras se puede adivinar una palabra y así deducir la clave.
--> de wikipedia
Un ejemplo:
A --> 1
B --> 2
...
Z --> 27
Donde las letras son los caracteres y los numeros sus representaciones...
Podriamos encriptar la cadena "ABZZ" asi: "1 2 27 27" ...
Esta si bien no es la primera, es una de las primeras formas de criptografia q hay, y tambien la forma mas facil de romper ...
Saludos!
rufiopunkrock, tshadow