jueves, 15 de noviembre de 2012
jueves, 1 de noviembre de 2012
Steganography - Part 2
This is the code that i use for the homework...
***********
***********
Este es el link de descarga:
Código
***********
***********
Este es el link de descarga:
Código
jueves, 25 de octubre de 2012
Cifrado de Flujo - Salsa20
Que es Salsa20?
Es un cifrado de flujo que esta construido por una función pseudo-aleatoria basada en 32-bit, ademas de una adición bit a bit (XOR) y las operaciones de rotación, que asigna un 256- bit clave, un 64-bit nonce y una posición de corriente de 64-bit a una salida de 512-bit.
Esto le da la ventaja a Salsa20 de que el usuario pueda buscar en cualquier posición en la secuencia de salida de manera eficiente. También ofrece una velocidad de alrededor 4-14 ciclos por byte en software modernos y el rendimiento del hardware es razonable.
The Salsa quarter-round function. Four parallel copies make a round. |
Función
Esta elección de las operaciones se evita la posibilidad de ataques de temporización en las implementaciones de software.
El estado inicial se compone de 8 palabras clave, de 2 palabras de la posición de corriente, 2 palabras de nonce (bits corriente esencialmente adicionales de posición), y 4 palabras fijas. 20 rondas de mezcla producir 16 palabras de salida de flujo de cifrado.
Internamente, el sistema de cifrado usa ademas bit a bit, 32-bit adicion mod 2^32, y constante distancia las operaciones de rotacion en un estado interno de 16 palabras de 32 bits.
Cada ronda consta de cuatro cuartos de vuelta operaciones, realizadas en cualquiera de las columnas o las filas del Estado de 16 palabras, dispuestas como un 4 × 4 matriz. Cada 2 rondas, el patrón se repite. Cada cuarto de vuelta modifica 4 palabras.
La función completa se define como sigue:
******
Salsa20 realiza 20 rondas de la mezcla en su entrada. Sin embargo, la reducción de variantes redondas Salsa20 / 8 y Salsa20/12 utilizando 8 y 12 vueltas respectivamente También se han introducido. Estas variantes se introdujeron para complementar la Salsa20 original, no para sustituirlo, y aún más eficaces en los puntos de referencia de la eStream Salsa20 ya competitivo.
A partir de 2012 , no hay ataques publicados sobre Salsa20/12 o el completo Salsa20/20; el mejor ataque conocido rompe 8 de los 12 o 20 rondas.
En 2005, Paul Crowley informó de un ataque a Salsa20 / 5 con una complejidad de tiempo estimado de 2 165 , y ganó el premio de 1.000 dólares EE.UU. Bernstein para "criptoanálisis Salsa20 más interesante". Este ataque, y todos los ataques posteriores se basan en diferencial truncado criptoanálisis . En 2006, Fischer, Meier, Berbain, Biasse y Robshaw informó de un ataque a Salsa20 / 6 con la complejidad hora estimada de 2 177 , y un ataque relacionada con llave en Salsa20 / 7 con complejidad hora estimada de 2 217.
Referencias:
jueves, 18 de octubre de 2012
Twofish block cipher
Orígenes
Su diseñador es Bruce Schneier y fue publicado por primera vez en el año de 1998. Este esta relacionado con el bloque de cifrado blowfish.
Twofish es un algoritmo de cifrado simétrico de con tamaño de bloque de 128 bits y tamaños de clave de hasta 256 bits.
Su diseñador es Bruce Schneier y fue publicado por primera vez en el año de 1998. Este esta relacionado con el bloque de cifrado blowfish.
El algoritmo de Twofish puede hacer lo siguiente:
- El algoritmo Twofish consta de 16 rondas. La unidad de encriptación / desencriptación, consta de varios modulos operativos.
- Cifrar los datos a 285 ciclos de reloj por bloque en un Pentium Pro, después de un ciclo de reloj 12700 clave configuración.
- Cifrar los datos a 26500 ciclos de reloj por bloque en una tarjeta inteligente 6805, después de un ciclo de reloj de 1750 clave de configuración.
Propósitos
Twofish fue diseñado para cumplir con los criterios de diseño del NIST para AES [NIST97b].
- Un algoritmo simétrico de bloques de 128 bits.
- Longitudes de clave de 128 bits, 192 bits y 256 bits.
- Diseño flexible
Twofish ha sido diseñado desde el principio con pre-rendimiento en mente. Es eficaz en una variedad de plataformas formas: 32-bit CPU, tarjetas inteligentes de 8-bits, y dedicado hardware VLSI. Sin embargo, Twofish ha sido diseñado para permitir que varias capas de compensaciones de rendimiento, dependiendo de la relativa importancia de la velocidad de cifrado, clave de configuración, uso de memoria, etc..
El resultado es un algoritmo muy flexible que puede ser implementado de manera eficiente en una variedad de aplicaciones criptográficas.
Planeacion de llave
La planeacion de la llave de un algoritmo es el mecanismo que distribuye el material de claves a las distintas partes de la cifra que lo necesitan, ampliando el material clave en el proceso. Esto es necesario por tres razones:
- Hay un menor número de bits de la clave proporcionados como entrada a el sistema de cifrado que se necesitan por el sistema de cifrado.
- Los bits de clave utilizados en cada serie debe ser único a la redonda, con el fin de evitar ataques [Wag95b].
- La cifra debe ser seguro frente a un atacante con un conocimiento parcial o control sobre algunos bits de la clave.
La unidad de programación de claves proporciona dos conjuntos diferentes de subclaves: S y K.
La unidad de programación clave junto con la unidad de cifrado / descifrado forma el bloque de cifrado completa.
Medidas Adicionales de Bloque
No existe una definición de Twofish para longitudes de bloque distinto de 128 bits. Mientras que puede ser teóricamente posible extender la construcción de bloque mayor tamaños.
Referencias:
www.schneier.com/paper-twofish-paper.pdf
teal.gmu.edu/courses/ECE646/project/specs_2005/TWOFISH.pdf
jueves, 20 de septiembre de 2012
RSA- Firmas digitales
Para la tarea de esta semana trabaje con lo que es autenticacion desde un web service.
jueves, 13 de septiembre de 2012
RSA
En esta semana trabajamos con algoritmos de clave publica.
La tarea de esta semana era elaborar un cliente-servidor y un generador de llaves rsa.
El codigo que utilice para generar mis llaves rsa es el siguiente
...
estas son algunas de las claves que me genero:
este es el codigo que utilice para elaborar el socket
Servidor
..
Cliente
..
Y bien, lo que es respecto al rsa pues las claves si me las genera, pero... (el gran pero llego! D:) tuve problemas al establecer la conexion entre el cliente-servidor y mi generador de claves .__. pero seguire intentado resolverlo, ya que lo necesitare para la siguiene tarea.. :)
Esto no termina aqui!! #Hedicho!
La tarea de esta semana era elaborar un cliente-servidor y un generador de llaves rsa.
El codigo que utilice para generar mis llaves rsa es el siguiente
...
estas son algunas de las claves que me genero:
este es el codigo que utilice para elaborar el socket
Servidor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import random | |
import socket | |
def get_pass(usuario): | |
file = open('llave_p.txt','r') | |
for line in archivo.readlines(): | |
if len(line) == 0: | |
continue | |
lin = line.split() | |
if lin[0] == usuario: | |
datos = [int(lin[1],int(lin[2]))] | |
return e,n | |
else: | |
line += 1 | |
file.close() | |
return False | |
def funcion(x): | |
return(x*x) #MUAJAJAJAJA!! :D | |
def main(): | |
# Se prepara el servidor | |
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
server.bind(("", 8002)) | |
server.listen(1) | |
print "Esperando clientes..." | |
# atender clientes | |
while 1: | |
# Se espera a un cliente | |
socket_cliente, datos_cliente = server.accept() | |
# Se escribe su informacion | |
print "conectado "+str(datos_cliente) | |
x=randinit(1,1000) | |
socket_cliente.send(str(x)) | |
usuario = socket_cliente.recv(1000) | |
seguir = True | |
seguir = True | |
while seguir: | |
peticion = socket_cliente.recv(1000) | |
if datos == False: | |
print 'mentiras' | |
server.close() | |
socket_cliente.close() | |
e=datos[0] | |
n = datos[1] | |
y = (int(peticion)**e)%n | |
if funcion(x) == y: | |
socket_cliente.send('holi') | |
else: | |
socket_cliente.send('fallo!!! D:') | |
socket_cliente.close() | |
main() |
Cliente
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import socket | |
import time | |
from random import randint | |
def get_pass(usuario): | |
file = open(usuario+'llave_p.txt','r') | |
for line in archivo.readlines(): | |
if lin(line) == 0: | |
continue | |
lin = line.split() | |
if lin[0] == usuario: | |
datos = [int(lin[1]),int(lin[2])] | |
return datos | |
else: | |
line += 1 | |
file.close() | |
return False | |
def funcion(x): | |
return(x*x) | |
def main(): | |
# conexion | |
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
print 'Soy un cliente!!' | |
s.connect(("localhost", 8001)) | |
x=s.recv(1024) | |
print 'x' | |
rx=int(x) | |
y=funcion(rx) | |
usuario = raw_input("Usuario: ") | |
datos=get_pass(usuario) | |
if datos == False: | |
print 'Mientes' | |
s.close() | |
cliente_socket.close() | |
d = datos[0] | |
n = datos[1] | |
r = str(por(y,d) %n) | |
s.send(usuario) | |
s.send(r) | |
s.close | |
main() |
Y bien, lo que es respecto al rsa pues las claves si me las genera, pero... (el gran pero llego! D:) tuve problemas al establecer la conexion entre el cliente-servidor y mi generador de claves .__. pero seguire intentado resolverlo, ya que lo necesitare para la siguiene tarea.. :)
Esto no termina aqui!! #Hedicho!
jueves, 6 de septiembre de 2012
Diffie-Hellman Key Exchange
In this week i worked in Diffie-Hellman Key Exchange method, in this practice i will talk about what i did
In this practice my teamates Vane and Rodolfo are Alice and Bob respectly, on this ocasion I will be Eve. These are the numbers they gave me:

P=7
g=3
X=3
Y=2
References
http://es.wikipedia.org/wiki/Diffie-Hellman
In this practice my teamates Vane and Rodolfo are Alice and Bob respectly, on this ocasion I will be Eve. These are the numbers they gave me:

P=7
g=3
X=3
Y=2
From this i used the following formulas to obtain x, y and K.
X=g^x%P
Y=g^y%P
K=X^y%P
K=Y^%P
References
http://es.wikipedia.org/wiki/Diffie-Hellman
jueves, 30 de agosto de 2012
Prueba de aleatoriedad
La tarea para esta semana es realizar una prueba de aleatoriedad para el programa generador de claves y verificar si realmente es aleatorio nuestro generador.
Existen varios tipos de pruebas, pero para esto yo utilice la prueba monobit, esta prueba consiste en evaluar la frecuencia con la que aparecen 0 y 1, y verifica si esta secuencia es realmente aleatoria.
Para evaluar mi generador de claves, utilice el siguiente codigo:
Como resultado obtuve el siguiente:
Existen varios tipos de pruebas, pero para esto yo utilice la prueba monobit, esta prueba consiste en evaluar la frecuencia con la que aparecen 0 y 1, y verifica si esta secuencia es realmente aleatoria.
Para evaluar mi generador de claves, utilice el siguiente codigo:
Como resultado obtuve el siguiente:
Con esta prueba llege a la conclusion de que :
Mi clave no es segura ya que estuve realizando una gran cantidad de claves (alrededor de 100) para ver si esto alguna vez cambiaba, pero el resultado siempre fue el mismo.
Referencias
domingo, 12 de agosto de 2012
Suscribirse a:
Entradas (Atom)