miércoles, 10 de julio de 2013

Cifrado de Flujo RC4


El algoritmo RC4 es un algoritmo de cifrado en flujo, utilizado en protocolos de cifrado en comunicaciones como Transport Layer Security (TLS/SSL) y Wired Equivalent privacy (WEP), fue desarrollado por Ronald Rivest en 1987,. El nombre completo del algoritmo es Rivest Cipher 4 y fue mantenido en secreto, pero en septiembre de 1994 se filtro la información del algoritmo y fue publicado en varios sitios web.  

Este algoritmo destaca por su simplicidad y rapidez en software, pero presenta debilidades que le impiden ser una opción para implementar en un sistema: en la clave existen patrones invariantes que se propagan también al estado interno del algoritmo, dando como resultado que los primeros bytes generados por el RC4 sean predecibles.Otra vulnerabilidad permite la recuperación de la clave secreta, cuando ésta se deriva de una concatenación con un vector inicial publico; al recopilar un gran número de mensajes y vectores iniciales la clave queda expuesta.

El RC4 genera un flujo pseudoaleatorio de bits a partir de la clave original, la cual se combina con el mensaje en claro por medio de la operación lógica XOR. El descifrado es exactamente igual, debido a la simetría que presenta la operación binaria XOR. La obtención de la clave presenta dos módulos importantes, que son el corazón del algoritmo: un arreglo de 0016 a FF16 permutado(llamado S), y dos indices de 8 bits(llamados i y j).

Para generar correctamente una clave se necesita un arreglo de 256 bytes correctamente permutados.

Algoritmo Generación de S:
*Se construye el arreglo S de 0016 a FF16 .
*Se parte con parámetros x=0 y y=0 .







Donde K[y] es un byte de la clave original, S[z] es un byte del arreglo y longK es la longitud en bytes de la clave utilizada.


Cifrado y Descifrado

Para la obtención de el criptograma de un mensaje en claro se debe generar la clave a partir del arreglo S permutado, que es un generador de claves pseudoaleatorio manejado por los indices i y j. Estos parámetros se ajustan en i=0 y j=0 con las siguientes operaciones:






El indice del elemento de la clave a cifrar es  Finalmente se obtiene el criptograma aplicando la operación XOR.




Este algoritmo sigue el mismo proceso para descifrar un mensaje, pero la operación XOR se realiza entre la clave generada por el algoritmo y el criptograma.

Bibliografía







martes, 9 de julio de 2013

Cifrado Skipjack

El cifrado Skipjack fue desarrollado por la NSA, Nacional Security Agency, esta contenido en los chip Clipper y Capstone y su implementacion solo esta permitida por hardware.

El chip Clipper es un microprocesador desarrollado por el gobierno de los Estados Unidos para se utilizado como dispositivo de cifrado por las compañias de telecomunicaciones dedicadas a la transmision de voz.

Capstone es el nombre de un proyecto a largo plazo desarrollado por el gobierno de los Estados Unidos para desarrollar estándares criptograficos para uso publico y de gobierno.

Skipjack es un cifrado simétrico que usa bloques de 64 bits y una clave de 80 bits, este utilizaba el programa Clipper, pero no tenia el deposito de claves incorporado, este es un algoritmo de alto riesgo, lo que quiere decir que había un elevado riesgo de que este fuera comprometido.

Este es mas lento que Bowfish y algunas propuestas AES, pero aun asi es el doble de rapido que DES en micros de 32 bits. Es rapido cuando se usa en tarjetas inteligentes y eficiente en hardware.

Skipjack es una red no equilibrada de Feistel.

El algoritmo de Feistel se denomina simétrico por rondas, realiza siempre las mismas operaciones cierto numero de veces. Los pasos de la red de Feistel son entre algunos mas:
*Se selecciona una cadena, N, normalmente de 64 o 128 bits, y se divide en dos subcadenas, L y R, de igual longitud
*Se toma una funcion, F y una clave Ki
*Se realizan una serie de operaciones complejas con F y Ki y con L o R
*La cadena obtenida se cambia por la cadena con la que no se han realizado operaciones, y se siguen haciendo las rondas.



La red no equilibrada de Feistel usa una estructura modificada en la cual L y R son de diferente tamaño.

Skipjack tiene un diseño mu simple y fragil ya que a cualquier modificacion que se le haga, hasta la mas minima, y este puede romperse.



Bibliográfica:

Cifrado SkipJack,  Applied Cryptography, B. Schneider   

Feistel Cypher


Estenografía

La esteganografía es la parte de la criptografia en la que se estudian y aplican técnicas que permiten ocultar mensajes u objetos, dentro de otros, llamados portadores, de modo que no se perciba su existencia. 


Programa (Incompleto)

El programa le pregunta al usuario cual es el mensaje que el desea ocultar dentro de la imagen, debido a que el programa esta incompleto solo puede guardar el mensaje que este recibe y no lo puede descifrar.




Ejecución
Las imagenes superiores son la imagenes originales.
El mensaje a ocultar sera: Hola a todos

Imágenes














Conclusion:

La esteganografía puede ser un método bueno para ocultar información a la vista de todos pero si uno no la sabe manejar de la manera adecuada esta puede ser evidente y uno puede recuperar el mensaje.

domingo, 30 de junio de 2013

Generación de números pseudoaleatorios en Python, Java y C#

¿Que es un numero pseudoaleatorio?

Los números pseudoaleatorios son aquellos generados por un proceso que aparenta la producción de números aleatorios cuando no son aleatorios realmente, esta secuencia de números no muestra ningún patrón desde un punto de vista estadístico.

Codigo

Utilizando los lenguajes de Python, Java y C# determinaremos que tan efectivos son cada uno para darnos números pseudoaleatorios basándonos en la "Distribucion Uniforme" nos dice que los resultados aleatorios de variables continuas tienen la misma probabilidad.

Python

Java

C#



Como se pudo observar en los códigos se generaron 20000 números aleatorios de 0 y 1 y se realizo 18 corridas de dichos programas, los resultados de la celda superior es la cantidad de 1 obtenidos y la celda inferior son los 0:


Corridas123456789
Python10092993610039999398359984100291002110037
9908100649961100071016510016997199799963
Java9940998599421004710079100409933100209871
10060100151005899539921996010067998010129
C#9957994410027996199981001410066996510034
10043100569973100391000299869934100359966



101112131415161718
9875983999231000010181991510001100179919
101251016110077100009819100859999998310081
996298919940101371005299459874994610090
100381010910060986399481005510126100549910
986598701007310026100291011610016995810138
101351013099279974997198849984100429862


Sacando un promedio y porcentaje  se obtuvo los siguientes resultados:

10
Python49.8988888950.10111111
Java49.91550.085
C#49.9841666750.01583333


En Gráfica:



Conclusion

El lenguaje C# estuvo mas cercano a lo descrito por la "Distribución Uniforme" ya que acorde a esta, ambos números deben de tener la misma probabilidad de salir.

Bibliografia


Libro: Python al descubierto       Autor: Arturo Fernández Montoro

Libro: Visual C# 3 Edición         Autor: Javier Ceballos

Titulo: Números Pseudoaleatorios 
URL: https://es.wikipedia.org/wiki/N%C3%BAmero_pseudoaleatorio

Titulo: Distribucion Uniforme Continua
URL: http://es.wikipedia.org/wiki/Distribuci%C3%B3n_uniforme_continua




miércoles, 26 de junio de 2013

Encriptacion y Desencriptacion de un mensaje

El principal objetivo del programa es el preguntarle al usuario la cantidad y tamaño de claves que desea crear para encriptar un mensaje, una ves creado los archivos se le preguntara al usuario si desea enciptar o desencriptar un mensaje, ingrese el mensaje y lo encripte o desencripte.

Enseguida se muestra el código (Incompleto).



El código esta incompleto y tiene errores en la encriptacion ya que al momento de leer el codigo del el archivo, si es que hay números de dos o mas dígitos, al capturarlo en una lista separa todos los elementos, se podrá guardar los valores de la lista en otra lista y asegurarnos de que omita los espacios en blanco y otros datos no deseados, luego teniendo el mensaje, el código de encriptacion y el alfabeto a utilizar y podrás cambiar la letra del mensaje por una del alfabeto basándote en el codigo conseguido del documento y luego eliminar dicho código para no volver a utilizarlo.

Bibliográfias:

Libro: Python al descubierto       Autor: Arturo Fernández Montoro

Titulo: The Python Tutorial    URL: http://docs.python.org/2/tutorial/