"Mi estilo es el arte de luchar, sin luchar"
"A mathematical formula should never be "owned" by anybody! Mathematics belong to God" Donald Knuth

Hoy no me podía acostar sin programar algo.

2009-09-14 01:25:18-05                  Esta entrada ha sido vista 24 veces.

Criptografia

No pude dormir anoche, hoy es mi cumpleaños que pase trabajando, pero hoy también es día del programador -el dia 256 de cada año, siempre cae en mi cumpleaños salvo los años bisiestos- asi que tengo que programar.

Asi que tengo hasta las 11:59pm para escribir un programa pequeño que no sea basura (puede serlo, pero tiene que ser basura interesante) así que inicio (hora  11:23pm).

Ok. 11:56pm y este es el resultado:

/* Sencillo y Pequenio generador de claves de calidad usando Numeros
 * PseudoAleatorios para GNU/Linux.
 *
 * Se usan "SystemCalls" por puro gusto.
 *
 * Rapidamente:
 * Los enteros en una arquitectura basada en X86 suelen ser de 4 bytes (con
 * un compilador decente ejem. gcc, icc).
 * Un char tiene un tamaño de 1 byte.
 *
 * 0 stdin
 * 1 stdout
 * 2 stderr
 *
 * Alberto Rodriguez Sanchez (aka Vendaval)
 * 13/09/2009
 */
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define RNDFILE "/dev/random"
#define ENTROPYA "/proc/sys/kernel/random/entropy_avail"
#define BUFFSIZE 4096
#define RETSIZE 64

int main(int argc,char **argv){

unsigned char buff[BUFFSIZE],select;
int frandom, fentropy, count=RETSIZE-1;
unsigned jump;

if((fentropy=open(ENTROPYA,O_RDONLY))==-1){
    perror(">>");
    exit(-1);
    }

if((read(fentropy,buff,BUFFSIZE))==-1){
    perror(">>");
    exit(-2);
    }

printf("La Entropia del sistema varia alrededor de %d",atoi(buff));
printf("\nEl valor sugerido es ~2000 o mas\n");

close(fentropy); //cerrando archivo entropy_avail

if((frandom=open(RNDFILE,O_RDONLY))==-1){
    perror(">>");
    exit(-3);
    }

if((read(frandom,buff,BUFFSIZE))==-1){
    perror(">>");
    exit(-4);
    }

close(frandom);

srand((uint) time(NULL)); //Semilla de rand() segun hora UNIX(R)

while(count--){
    jump=rand()%(BUFFSIZE-1);

          select=rand()%256;
    printf("%02X",(buff[jump] | select));
}

write(1,"'\n'",1);

return 0;
}

Noten que el programa tarda en ejecutarse una segunda vez, ademas de que la entropia baja dramaticamente, la razon es que /dev/random es bloqueado cuando se vacia la fuente de entropia, entonces no es accesible mietras se recoge mas ruido de uestro sistema. /dev/urandom no tiene esta cualidad por lo que se puede hacer uso intensivo del dispositivo a costa de perder algo de seguridad.

El asunto de la entropia es delicado cuando juegas con criptografia, a nivel militar se usa hardware generador o números verdaderamente aleatorios como los provenientes del ruido atmosferico. Mas cercano a los simples mortales es usar herramientas que ayuden a generar mayor entropia en el sistema como por ejemplo: rng-tools.

  1. apt-get install rng-tools
  2. Edita /etc/default/rng-tools
  3. Agrega/cambia HRNGDEVICE=/dev/urandom
  4. corre /etc/init.d/rng-tools start

Debe dar algo entre 1500 y 4000 en "/proc/sys/kernel/random/entropy_avail" que es un rango de valores mas apriado cuando tus aplicaciones usan TSL(SSL).

El programa no es lo mejor que se pueda hacer, por ejemplo podria -facilmente- recibir argumentos desde la linea de comandos para ajustar la longitud de la clave, pero otro dia sera, solo queria irme a la cama con la conciencia tranquila.

Permalink: http://www.mononeurona.org/entries/view/vendaval/1902


Comments Commentblogs:
New Commentblog
CAPTCHA Image




Join us!
Forgot your password?
This blog has been visited
31,146 times
vendaval
Alberto Rodriguez Sanchez Estudiante de Ingenieria en Computación en la UAM-A, programo en C, C++, C#, Python, Scheme, PHP,y Haskell. Uso Archlinux, Debian GNU/Linux, Mac OS X, OpenSolaris, NetBSD, FreeBSD, Plan9 y Win2. Pienso especializarme en computo científico y criptografía, que son mis grandes pasiones.

También pienso que la programación computacional es un Arte y que muchos programas son elegantes, muchos exquisitos, muchos son brillantes. Mi pensar es que se pueden escribir grandes programas, programas nobles y programas verdaderamente magníficos,por ello prefiero la Sintaxis Avanzada en los programas por que muestra un dominio del lenguaje y un buen grado de abstracción.

FreeBSD, C, Enlightenment y VI(M); son mis SO, Lenguaje de programación, manejador de ventanas y editor favoritos.

Practico Kali Filipino, Limalama y JKD (soy seguidor de la filosofía de Bruce Lee). Ademas soy el guardian la Sexta Casa del Zodiaco y también escribo con cierta regularidad en este blog.

"Se como el agua, piensa como el fuego"
Powered by
Despabilando la MonoNeurona.org
Livechat
<-Nombre

reiken wrote:
http://tinyurl.com/782vp5u
4 days, 3 hours ago

vendaval wrote:
Daniel Dahink wrote: Es poesía tu artículo de "Anatomía de un Hola Mundo" gracias por compartir, amigo
on 27/6/11

wrote:

on 26/6/11

wrote:
eres un PENDEJO
on 8/4/11

ethel wrote:
hola muchas garcías por toda la ayuda espero tengas un lindo fin
on 12/3/11

vendaval wrote:
sudo wireshark en la terminal
on 6/3/11

tony wrote:
una pregunta? despues de installar wireshark con con su -c"yum install wireshark" y k se complete la instalacion k ago para abrirl
on 5/3/11

vendaval wrote:
su -c "apt-get install amsn"
on 3/3/11

ethel wrote:
hola podrías decirme como instalar el amsn en debian ya lo intente y no lo logro de hecho ningún otro programa gracias
on 3/3/11

ethel wrote:
hola esta padre tu blog, me gusta mucho tu forma de explicar y lomas agradable es que seas pasiente, sigue asi :)
on 3/3/11


Llevo todo el día nostálgico, sera que el cielo gris me pone el corazón sentimental.
6 days, 4 hours ago
Haciendo imágenes .eps para un "paper"
1 week, 6 days ago
chingon, pero ya duermete aarkerio, todo lo andas testeando.
on 20/12/11
tengo que volver a arreglar mi i3.conf es lo malo de estar al día con las actualizaciones, dios nos libre de que sea administrador
on 16/12/11
que hacen los mononeurones tan tarde por aca???
on 30/11/11
Recupérate pronto @aarkerio
on 23/11/11
@chilicuil: thx.
on 3/11/11
Tristeando y sin sueño
on 2/11/11
@rnstux: muchos estamos así, pero date tiempo.
on 25/10/11
o de beber
on 17/10/11
Mis Albums
FirefoxjEdit.orgGimpOpenOffice.orgHacker
Top
Colectivo MonoNeurona.org © 2002-2011.