miércoles, 29 de agosto de 2012

Secure random number

Some theory

Well, the next step is to verify the keys of the One-Time-Pad randomly generated by Python's random method

There are many types of methods for checking if the numbers are random.

Characteristics:

  1. Uniformly distributed
  2. No numbers repeated on a specified length
  3. Numbers must be independent of each other
  4. The series should be reproducible
  5. The numbers must be generated quickly

Part of the previous program had to generate the random numbers

Code
def crearlibretas(): ## aqui creamos las libretas para la encriptacion
x = 0
y = 0
pepe = open("libreta1.txt","w") ##libreta el que envia
ana = open("libreria2.txt","w")
while y<=20:
while x<= 20:
numeror = random.randint(0,2) ##valor random entre: 0<= x <2
#float(numeror)
pepe.write(str(numeror)) ## escribimos el caracter
ana.write(str(numeror))
# maria.write(str(numeror)) ## escribimos el mismo caracter
x = x + 1
#print "y = ",y,""
pepe.write("\n") ##salto de linea en el archivo
ana.write("\n")
view raw Random hosted with ❤ by GitHub
In this code I generate random numbers between 0 and 1 to create different keys, now is necesary to verify that this numbers are really random


Test used "Run Test"

In this Test is verified if the hypothesis of a number is really random between two elements, in this case 0 and 1.


Parameters

amount of the first element in this case "0"
amount of the second element in this case "1"
amount of elements
amount of blocks

Regarding the blocks, a block is when the same element is repeated until meet the other element and it starts over with a new block:

For example:
In this case, we have 5 Blocks

Having this elements clearly defined, we can begin seeing how the test works

First, we get the arithmetic mean:

After we got the arithmetic mean, the variance:

Finally we got the probability of Z



Code:
import math
entrada = open("libreta1.txt")
nn = 0
nm = 0
y = 0
totalb = 0
bloquea = 0
#bloqueb = 0
x = 0
#def bloques():
u = 0
##leemos la libreta que contienelos numeros
for i in entrada.xreadlines():
tam = len(i)
######guardamos la cantidad de 1 y 0######
while x < tam:
if i[x] == "0":
nm = nm + 1
else:
nn = nn + 1
#x = x + 1
###chekamos cauntos bloques tiene###########
if y != 0:
if i[x] == bloquea:
print "si es del bloque"
else:
totalb = totalb + 1
bloquea = i[x]
print "otro numero diferente"
else:
totalb = totalb + 1
bloquea = i[x]
y = y + 1
x = x + 1
x = 0
#u = float((2(nn*nm)/(nn + nm)) + 1)
##proceso a realizar##########################
#####primero sacar la media aritmetica#######
u = (2*nn*nm)/(nn + nm) + 1
#desviacion estandar recordando que esta al cuadrado ##########
desviacion = ((u - 1)*(u - 2))/(nn + nm - 1)
#####sacamos la raiz#############################
des = math.sqrt(desviacion)
####sacamos la probabilidad o resultado para comprobarlo con la probabilidad de Z0.005 = 1.96##
z = (totalb - u)/des
print "total de bloques = ",totalb,""
print "total de 1 = ",nn,"total de 0= ",nm,""
print u
print desviacion
print z
####comparamos si s aleatorio o no 1.96 se saca en las tablas de distribucion
if z < 1.960:
print "Alta probabilidad que si sean random"
else:
print "No hay probabilidad"
entrada.close()
view raw Comprobación hosted with ❤ by GitHub
Screen Printing



In this case is randomly, but in mayor of the case arenot randomly
Is randomly = 20%
Not randomly = 80 %
Test was performed 10 times

Sorry, here is more information, the value 1.96 is found in the critical value, it depends of the level of reliability, in this case 95 percent.

Graphics and table:



Here is the table:
1 - a a/2 Za/2
0.90 0.05 1.645
0.95 0.025 1.96
0.99 0.005 2.575







Thanks, have a nice day :D

miércoles, 22 de agosto de 2012

One -Time -Pad

Hola a todos ahora en esta ocasión les tenemos un pequeño programa para encriptar y desencriptar por este método One-Time-Pad

Breve explicación:

1-. Primero se crea las llaves en una archivo de texto, todas las llaves son binarios aleatoriamente
2-. Escribimos nuestro mensaje
3-. Lo Encriptamos

Forma de Encriptación:

Por ejemplo si nuestro mensaje representado en código binario fuera: 0010101
y nuestra llave fuera: 0101010

Por método exor quedaría de la siguiente manera:

mensaje = 0010101
llave = 0101010
Mensaje encriptado = 0111111

Posteriormente se desencripta con la misma llave donde el otro usuario por medio de la libreta sabrá cual es y al finalizar esta llave sera eliminada.

Aquí el código:

import random
from numpy import *
#maria = open("libreta2.txt","r","w") ## libreta quien resive
salida = []
recuperador = []
mensaje = []
inicio = 0
final = 7
a = 0
b = 7
lineas = 0
def crearlibretas(): ## aqui creamos las libretas para la encriptacion
x = 0
y = 0
pepe = open("libreta1.txt","w") ##libreta el que envia
ana = open("libreria2.txt","w")
while y<=20:
while x<= 20:
numeror = random.randint(0,2) ##valor random entre: 0<= x <2
#float(numeror)
pepe.write(str(numeror)) ## escribimos el caracter
ana.write(str(numeror))
# maria.write(str(numeror)) ## escribimos el mismo caracter
x = x + 1
#print "y = ",y,""
pepe.write("\n") ##salto de linea en el archivo
ana.write("\n")
#maria.write("\n") ##salto de linea en el archivo
x = 0
y = y + 1
pepe.close()
ana.close()
def encriptar(envio):
global inicio ## llamamos la variable global inicio es para enviar en que lugar nos quedamos en la cadena de salida
global final ##llamamos la variable global final es para enviar en que lugar nos quedamos en la cadena de salida
n = 0
# sigue = 0
y = 0
maria = open("libreta1.txt","r") ##abrimos la libreta para encriptar
x = 0
print envio
msge = raw_input("Dime tu mensaje: ") ##pedimos el mensaje a encriptar
tam = len(msge) ##medimos la longuitud del mensaje
print "tamano: ",tam,""
contador = 0 ##indisealisamos el contador a 0 para la cadena de binarios de cada uno de los caracteres
for i in maria.xreadlines(): ##empesamos a leer linea por linea del archivo
dato = i
if n == 0: ##esto era de prueba para elegir la inea pero ya no se ocupa en si
print "si entro a codificar"
while y < tam: ##para leer la cdena que el usuario tecleo
#print contador
letra2 = ord(msge[y]) ##convertimos a ascii el mensaje
binario = bin(letra2) ##convertimos en binario el ascii
taml = len(binario) ##medimos la longuitud del binario
taml = taml - 2 ##es para no contar los primeros carcteres del binario que nos salia 0b
#print "tam1 = ",taml,""
print "binario de las letras",binario,"letra: ",msge[y],""
if msge[y] == " ": ##el espacio tiene un binario menos que las demas letras
salida.append(2)
contador = contador + 1
#if n == 0:
while x < taml: #inicia el ocultamiento
# print "binario de las letras",binario,"letra: """ ##haciendo encriptacion por metodo exor
if binario[x + 2] == dato[x]:
print "binario =",binario[x + 2],"dato = ",dato[x],"" ##si es igual la cadena 0 y 0 o 1 y 1 agregamos un cero en la cadena de salida
salida.append(0)
#x = x + 1
else:
print "binario =",binario[x + 2],"dato = ",dato[x],"" ##si es diferente las entradas de binario agregamos un 1 a la candena de salida
salida.append(1)
#salida[x] = 1
x = x + 1
contador = contador + 1
if contador == 7: ##si ya son 7 datos esto quiere desir que los caracteres an sido encriptados y nos pasamos a desencriptar
#desencriptar(contador)
#contador = 0
#desencriptar(inicio,final)
desencriptar()
final = final + 7 ##agregamos para los nuevos datos
inicio = inicio + 7 ##agregamos para los nuevos datos por la salida que se sigue acumulandose los 0 y 1
contador = 0
y = y + 1
#contador = contador + 1
x = 0
# sigue = sigue + 1
print "salida= ",salida,""
maria.close()
#sigue = sigue + 1
#salida = []
#mensaje = []
## a desencriptar yupi
def desencriptar():
global inicio ##llamamos valores globales
global final ##llamamos valores globales
partida = inicio
fina = final
print "desencriptando"
desencriptador = open("libreta1.txt","r") #abrimos libreta
tamsalida = len(salida)
y = 0
x = 0
n = 0
a = 0
valor = 0
cosa = list(recuperador) ##esto lo usaremos para desifrar el mensaje
contador = 0
#partida = inicio
#fina = final
for i in desencriptador.xreadlines(): ##empesamos a leer de nuevo nuestras llaves
dato = i ##guardamos la llave
if n == 0: ##este realmente no es necesario
#while partida < fin:
while partida < fina: ##iniciamos desde nos quedamos en la ultima iteracion
#while y < partida
numero = int(dato[x])
contador = contador + 1
if salida[partida] == "2": ##si encuentra un dos e sque existe un espacip
#print "hay un espacio"
contador = 0
else:
if salida[partida] == numero: ##si es igual pues se agrega un cero
# print "salida =",salida[partida],"dato = ",dato[y],""
# cosa[y + 2] = 0
cosa.append(0)
else:
# print "salida =",salida[partida],"dato = ",dato[y],""
#cosa[y + 2] = 1
cosa.append(1) ##si es diferente se agrega un uno
x = x + 1
partida = partida + 1 ##repetimos para los demas caacteres
clave = i ##solo para imprimir
n = n + 1 #para que no lo haga de nuevo ya que no hay nada que desifrar
contador = contador + 1 ##no necesario
##impresiones
print "clave yusada: ",clave,""
print"binario recuperado",cosa,""
hahabit=len(cosa) ##no es necesario
bits = [] ##no necesario
total = len(cosa) ##tampoco necesario
ahaha = 0 ##si necesario
print "total = ",inicio,"fin:",final,""
partida = partida - 7 ##es para saber desde donde iniciaremos para cambiar de binario a ascii
##cambiando de binario a caracteres
while ahaha < 7:
#print cosa[ahaha]
if cosa[ahaha] == 1:
valor=2*valor+1
hahabit -=1
else:
valor=2*valor
# apartida = partida + 1
#partida = partida + 1
ahaha = ahaha + 1
caracter = chr(valor)
cosa = []
#bits
##imprimimos el mensaje yupi desifrado
print "valor = ",valor,""
mensaje.append(caracter)
print str(mensaje).strip('[]')
#mensaje.join(mensaje.split())
def main():
global lineas ##para borrar las lineas
##algunas variables fundamentales para ciclos
i = 0
n = 0
inicio = 0
final = 7
crearlibretas() ##creamos las llaves para el ocultamiento
quine = 0 ## este nos dira quien le toca enviar el mensaje
##nuestras personas fictisias
enviar1 = 'ale'
enviar2 = 'ana'
y = 0
##se repitira el proceso 20 veces
while i < 20:
j = 0
if quine == 0:
encriptar(enviar1) ##encriptamos
quine = 1
cantidad = len(mensaje)
##esto es para borrar las llaves ya utilizadas
while j < cantidad:
mensaje.pop()
j = j + 1
contenido =''
borrador = open("libreta1.txt") ##libreta el que envia
for line in borrador:
linea = line.split(',')
print "linea: ",linea, "lineas: ",lineas,"y:",y,""
if lineas != y:
#contenido += line
contenido += line
else:
print "borrando linea...."
y = y + 1
#else:
y = 0
borrador.close()
nuevo = open("libreta1.txt","w")
nuevo.write(contenido)
nuevo.close()
else:
encriptar(enviar2) ##encriptacion para la otra persona
cantidad = len(mensaje)
##proceso para borrar lineas de archivos en este caso la llave
while j < cantidad:
mensaje.pop()
j = j +1
quine = 0
borrador = open("libreta1.txt") ##libreta el que envia
for line in borrador:
linea = line.split(',')
if lineas != y:
contenido += line
y = y + 1
y = 0
borrador.close()
nuevo = open("libreta1.txt","w")
nuevo.write(contenido)
nuevo.close()
lineas = lineas + 1
i = i + 1
j = 0
main()
##thats all :S
view raw Habia una vez hosted with ❤ by GitHub


Aquí unas impresiones de pantalla:

Aquí se genera las llaves y se nos pide el mensaje

Empezamos a encriptar:


Aquí va encriptando dato por dato hasta completar la frase


En esta imagen si vemos en la parte superior derecha ya nos desifro el mensaje y pasa a borrar la llave usada, aquí solo se muestra en la terminal las demás llave con fines educativos, lo correcto es no mostrarlas.

y posteriormente el otro usuario dará su mensaje y se repetirá el proseso:



Thanks


domingo, 12 de agosto de 2012

My message

Hint: Lyrics



yak kr _a ev vetdzsv_ trdfre brdr v_r.adrdev
yak kr ,re w,adve _a ev hv_
ua_uv ry cgvurua rcv, da.r_tv
kr _a vjzefv_ ,ae bav.re brdr ta_cgzefrdev
ryadr ev .r_ur_ ea,a .rz,e
kr _ruzv v_fdvxr tyata,rfve
bvda .v _zvxa r dv_ahrd.v ve .z .r_vdr
fv ,a ta_wzvea cgv cgzezvdrpp

r.rdfv r ,r r_fzxgr
v_fdvxrdfv .z hzur
,,v_rdfv u daere
tr_frdfv tr_tza_ve
bz_frdfv trdztzrepp

r.rdfv r ,r r_fzxgr
dasrdfv ea_dzere
fa.rdfv ,r .r_a
rsdzdfv ,r bgvdfr
vetdzszdfv bavezre
r.rd ta.a r_fvepp

ryadr ,ae r.adve ugdr_ ea,a g_ z_efr_fv
bvda ,a _gvefda ve r,dvhve
trur .z_gfa ve z.badfr_fv
bvda .v _zvxa r dv_ahrd.v ve .z .r_vdr
fv ,a ta_wzvea cgv cgzezvdrpp

r.rdfv r ,r r_fzxgr
v_fdvxrdfv .z hzur
,,v_rdfv uv daere
tr_frdfv tr_tza_ve
bz_frdfv trdztzrepp

r.rdfv r ,r r_fzxgr
dasrdfv ea_dzere
fa.rdfv ,r .r_a
rsdzdfv ,r bgvdfr
vetdzszdfv bavezre
r.rd ta.a r_fvepp

vdve !gefa ta.a fv eav
fg _a ersve tgr_fa fv vebvdv
k uveva brdr ezv.bdvpp

r.rdfv r ,r r_fzxgr
v_fdvxrdfv .z hzur
,,v_rdfv uv daere
tr_frdfv tr_tza_ve
bz_frdfv trdztzrepp

r.rdfv r ,r r_fzxgr
dasrd.v ea_dzere
fa.rdfv ,r .r_a
rsdzdfv ,r bgvdfr
vetdzszdfv bavezrepp

r.rd ta.a r_fve
r.rdfv r ,r r_fzxgr





GOOD LUCK