Tarea Realizada para la Materia de Seguridad de la información y criptografía Caso de estudio: Anonimidad en Linea
lunes, 15 de julio de 2013
martes, 9 de julio de 2013
Esteganografía [programa 4 [P4]]
Tarea Realizada para la Materia de Seguridad de la información y criptografía Esteganografía, [Programa 4 [P4]].
Ocultar un mensaje (secreto) dentro de otro (público), por ejemplo archivos de imagen,
sonido, etc.
Al ejecutar el código se necesita la siguiente sintaxis:
Implementando código para ocultar un mensaje de texto, en una imagen
Descripción:
Ocultar un mensaje (secreto) dentro de otro (público), por ejemplo archivos de imagen,
sonido, etc.
Intentando no afectar a la estadística propiedades del mensaje público con el fin de evitar la
detección.
detección.
para ocultar información:
python esteganografia.py imagen.ext -o
para descifrar el mensaje oculto:
python esteganografia.py imagen.ext -d
de preferencia .ext = .png .tiff .bmp con los archivos con formato ,jpg no funcionara.
from PIL import Image from sys import argv '''Convierte el Mensaje a binario''' ''' Convierte binario cada letra en el string, omite los espacios 'b' y toma solo de 8-bits para representar el valor de la letra en binario''' def strToNumToBin(string): '''recorre el string y va convirtiendo caracter en caracter en numero y despues en binario''' return [bin(ord(caracter))[2:].zfill(8) for caracter in string] #devuelve el arreglo[] '''URL:http://code.activestate.com/recipes/578291-string-to-binary/ @Shawn''' '''Convierte Binario a String''' def binToNumToStr(binario): '''recorrre la cadena binaria bit por bit convirtiendo en numero y despues en string :3''' return [chr(int(bit,2)) for bit in binario] #devuelve el arreglo[] :') '''Ejemplo :B binario (oviusly base 2) a numero y de numero a caracter probar en interprete de python :3 >>chr(int('10011010',2))''' def main(): entrada= None comando= None try: '''Intenta tomar los argumentos de entrada''' imagen = argv[1] comando = argv[2] except: '''Si no los recibio correctamente los pregunta interactivamente''' imagen = raw_input('Archivo de Imagen: ') comando = raw_input('-d para decifrar el mensaje oculto \t -o para ocultar mensaje: ') data = Image.open(imagen).convert('RGB') #abre imagen de acuerdo a la entrada '''Comando para Ocultar el mensaje dentro de la imagen''' if comando == '-o': (w, h) = data.size #tamanio de imagen resultado = Image.new('RGB', (w, h)) #asigna a resultado los datos de la imagen original nuevo = resultado.load() #carga resultado a nueva imagen que generamos pixel = data.load() #carga pixeles '''Entrada de Mensaje ''' mensaje = raw_input('Mensaje a Ocultar:') bits=[] #cadenita de bits donde se alojara el numero en binario de el largo del mensaje for caracter in mensaje: #checa cada caracter en el mensaje bits+= strToNumToBin(caracter) # y acumula cuantos lleva largo = len(bits) #con esto definimos el largo del mensaje cosabin= strToNumToBin(mensaje)#convierte el mensaje en binario c = 0 #contador for x in xrange(w): #recorre la imagen for y in xrange(h): # base por altura :3 (w,h) ,i think r, g, b = pixel[x, y] #los pixeles adquieren coordenadas if c < largo: #recorremos el num binario del largo del mensaje bit por bit if (int(bits[c]) % 2) == 0: if b % 2 == 1:#IMPAR cuando es impar c: b = 0 #y si el canal azul es impar le asigna uno if b>254: #si se pasa de los 254 que es su color b=253 #le restamos para que este dentro de los rangos #no estoy segura que funcione ._. elif b<0: #si no alcanza el minimo para ser un color b=1 #se queda en 1 dentro de color azul else: if b % 2 == 0:#PAR b = 1 #y si el canal azul es impar se le asigna uno if b>254: #si se pasa de los 254 que es su color b=253 #le restamos para que este dentro de los rangos #no estoy segura que funcione ._. nuevo[x, y] = r, g, b c += 1 print bits#numero en binario del largo del mensaje print largo#numero del largo en decimal ._. #if cosabin == mensaje LOAD :D print cosabin#imprime el mensaje en binario print mensaje#imprime el mensaje original #procederiamos a ocultarlo :B resultado.save(imagen[:imagen.index('.')]+'copy'+imagen[imagen.index('.'):],'PNG') resultado.show() else: if comando == '-d': (w, h) = data.size #tamanio de imagen #aqui debe de hacer lo contrario convertir binario a string #y luego comparar y Done... :3 #print binToNumToStr(cosabin) #print "".join(binToNumToStr(cosabin)) #for x in xrange(w): #for y in xrange(h): #r, g, b = pixel[x, y] #nuevo[x, y] = r, r, 0 #b=1#aqui aun no se que pedo print 'ya' else: print 'comando no valido, empecemos de nuevo.' main() if __name__ == '__main__': main() ''' Al llamar a al programa la sintaxis para que funcione a partir de argumentos de programa es la siguiente: esteganografia.py imagen.extencion -comando donde: extencion = .png /.tiff /.bmp y comando = -o / -d '''
Referencias
jueves, 4 de julio de 2013
Firmas Digitales implementando RSA para la autenticacion [Programa 3 [P3]]
Tarea Realizada para la Materia de Seguridad de la información y criptografía implementar un repositorio de claves publicas (public Key's) para el intercambio de claves que utiliza firmas digitales basado en RSA, [Programa 3 [P3]].
miércoles, 3 de julio de 2013
Implementación del RSA en Python,mediante sistema cliente-servidor con sockets
Tarea Realizada para la Materia de Seguridad de la información y criptografía Implementar RSA para validar la autenticacion en Python mediante cliente-servidor con sockets,[Programa 2 [P2]]
Programa en Python que realiza el protocolo de la comunicación entre Alice y Bob utilizando el algoritmo RSA para cumplir con la autenticacion:
para este caso (cifrado)
m = c^e mod n.
CÓDIGO
Algoritmo RSA, comunicación de Bob y Alice:
Generar n = p × q, que ambos p y q sean primos.
se usa como el módulo para ambas claves, pública y privada
Bob realiza el cifrado(e, n): e es la clave publica (public key from Alice); c = m^e mod n.
e (entero positivo menor que n) debe de ser relativamente primo (coprimo) con ɸ(n) y menor que esta.
Alice decifra(d, n): es la clave privada(private key from Alice only she knows); m = c^d mod n.
es dividido exactamente por ɸ (n)
Requisito: e × d ≡ 1 mod ɸ (n);
ɸ(n) = (p - 1) × (q - 1)
m^e × d ≡ m mod n debido al teorema de Euler.
Alice envía a Bob una caja con una cerradura abierta, de la que solo Alice tiene la llave. Bob recibe la caja, escribe el mensaje, lo pone en la caja y la cierra con su cerradura (ahora Bob no puede leer el mensaje). Bob envía la caja a Alice y ella la abre con su llave. En este ejemplo, la caja con la cerradura es la «clave pública» de Alice, y la llave de la cerradura es su «clave privada».
Descripcion:
Programa en Python que realiza el protocolo de la comunicación entre Alice y Bob utilizando el algoritmo RSA para cumplir con la autenticacion:
para este caso (cifrado)
F(x) = m^e mod n ,(decifrado) F(x)
m = c^d mod n
, (la funcion que ambas partes de la comunicación tendran sera la del ejemplo anterior ).
El host envía a Alice una entrada al azar.
m
Alice realiza algo basado en esta entrada, y
encripta el resultado con su clave privada.
m^d mod n
El servidor descifra con la clave pública de Alice,
calcula, y se compara.
m = c^e mod n.
Si coincide, Alice es de confianza para entrar en el host.
Alice también puede desafiar al anfitrión de manera similar para poder
confiar en él.
CÓDIGO
PANTALLAS
Mejoras Futuras
Terminar el programa para cumplir con la siguiente tarea.
Terminar el programa para cumplir con la siguiente tarea.
Referencias
martes, 2 de julio de 2013
Alice, Bob y Eve (Diffie–Hellman key exchange) [Reporte 1 [R1]]
Tarea Realizada para la Materia de Seguridad de la información y criptografía Protocolos [Reporte 1 [R1]]
Protocolo:
1- Alice y Bob deciden públicamente un primo p y un generador g ∈ Zp. (que pertenezca al grupo Zp)
2- Alice genera x envía f(X) a Bob, f(X) = g^x mod p.
3- Bob genera y envía f(Y) a Alice, f(Y) = g^y mod p.
4- Alice calcula s = f(Y)^x mod p
5- Bob calcula s = f(X)^y mod p
6- Alice y Bob ahora comparten un secreto s. (Esto se debe a que x*y es lo mismo que y*x. Así que alguien que conocía a estos dos números enteros privados también podrían haber calculado s de la siguiente manera:
s = (g ^x*y mod p) mod p
Tando Alice y Bob han llegado al mismo valor, porque
(g^x)^y & (g^y)x son iguales mod p
Utilizando el metodo que vimos en clase
def potmod(x,pot,mod):#x numero, pot potencia, mod si es binario es 2 :l bi=pot res=1 temp=x while bi >0: if bi %2 ==1: res=(res*temp)%mod temp=(temp*temp)%mod bi= bi >> 1 return res
y para comprobar:
La intervención de Eve:
Eve tiene que realizar operaciones prueba con los datos que ella conoce los cuales son:
Eve tiene que realizar operaciones prueba con los datos que ella conoce los cuales son:
p=11 g=3 f(X)=5 f(Y)=3
con los cuales realizara operaciones prueba para encontrar los supuestos valores de x y y lo que se tiene que hacer para descubrir la clave secreta que hay entre Alice y Bob
K= f(Y)^x mod p = f(X)^y mod p
es lo siguiente:
tomar el generador 3 elevándolo a números prueba iniciando en 1 realizando modulo del 11:
R= 3^ n mod 11
hasta que R sea 5 o 3:
3^1 mod 11= 3
3^2 mod 11= 9
3^3 mod 11= 5
3^4 mod 11= 4
y tomando los exponentes que dieron al resultado se realiza el calculo de K
K= 3^3 mod 11 = 5^1 mod 11
K=5
cuando Eve tiene la clave con la que ellos logran obtener el mensaje del otro ella puede escuchar todo lo que Alice y Bob se envian.
"Toda la seguridad es inherente en el conocimiento de la clave y ninguna es inherente en el conocimiento de la algoritmo ".
Suscribirse a:
Entradas (Atom)