miércoles, 23 de diciembre de 2009

Cambiando contraseñas

Vale! Ya me había despedido, pero malditasea, quiero comentar esto que me acaba de pasar.
Como es costumbre, uno va cambiando sus passwords, y hoy ha tocado cambiar las passwords de las diferentes cuentas de correo. La que me ha llamdo especialmente la atención ha sido la del servicio hotmail.com.

Hago las modificaciones de las passwords en Ubuntu, reinicio el PC y que pasa? Pues lo previsto, que ya no me acuerdo del password. Si, es lo que hay: memória de pez. Bueno, pruebo los passwords hasta que me sale la captcha y le doy a "¿Has olvidado tu contraseña?". Pongo otra captcha nueva y me dice "Hemos mandado un correo a tu_direccion@hotmail.com para restablecer tu cuenta".... lo divertido es que el password del que no me acuerdo es de: mi_direccion@hotmail.com OWNED. Por lo visto tengo configuradas mal mis preferencias, y en el campo de "correo alternativo" me tanía a mi mismo. Me extraña que esto no dé error al configurarlo, pero bueno.

Una idea que me ha nacido durante el proceso, es que el usuario debería poder elegir un tiempo "de gracia" para aprenderse su nuevo password. Quiero decir, que durant un tiempo especificado, los dos password ( viejo y nuevo ) sean válidos. Esto podría suponer un problema de seguridad si se alargara durante mucho tiempo, pero en tiempos relativamente cortos sería beneficioso para el usuario. Recordar passwords mas o menos aleatorios y largos, no es fácil, y uno se equivoca. Apuntarlo debajo del teclado o en un post-it tampoco es una solución. Entonces este proceso, llamemosle de adaptación, podría servir para ayudar al usuario a aprender el nuevo password. Evidentemente esto debería ser algo opcional, ya que si nos roban la contraseña, nos interesaría cambiarla por otra inmediatamente, como es lógico. Creo que no es mala idea y que el usuario estaría más interesado en ir cambiando sus password sin miedo a no recordarlo, como me pasa a mi.

Saludos.

martes, 22 de diciembre de 2009

Hasta el año que viene!

Bueno, día 22. Yo ya tengo vacaciones a partir de YA. Mañana me voy de viaje y voy a estar desconectado durante un par de semanas. El blog que quedará parado hasta principios de enero. Y qué más decir? Pues que tengas unas felices fiestas, feliz navidad y próspero año nuevo!!!!

Saludos! Y a pasarlo bien!

Google Wave

Google Wave. La verdad que no me ha gustado demasiado. Después de ver aquellos videos de una hora de duración, y ver todas las cosas chulas que puede hacer el wave.... me ha decepcionado un poco, la verdad. La invitacion de Wave tardó mucho en llegar, cuando llegó casi nadie más tenía una cuenta, y ahora que ya hay más gente que tiene sus cuentas, casi nadie lo usa ( en mi entorno, digo ).

Tampoco han subido nuevos complementos, aparte de poner fotos, mapas y encuestas... y bueno, esperaba más, la verdad. Si alguien todavía no ha probado Wave y quiere una invitación, yo tengo más de 20 para repartir, así que dejen comentarios los interesados ;)

Espero que vaya mejorando el servicio, porque así como está ahora la verdad que no es nada del otro mundo. Para opiniones, los colores.

domingo, 20 de diciembre de 2009

Problema de las N Reinas

Bueno, hecho el post anterior, quiero subir un poquito de código sobre GA. El algorítmo es para solucionar el problema de las N Reinas. El enunciado es el siguiente:
Dado un tablero de ajedrez de NxX colocar N reinas sin que se maten entre ellas.

En principio N és igual a 8, ya que así representamos un tablero de ajedrez normal. Éste problema puede ser resuelto mediante backtracking, y es tremendamente más eficaz que con los GA, pero como la intención es practicar con los algoritmos genéticos, en problema de las N Reinas es suficientemente fácil para empezar. Hay 92 posibles soluciones posibles al problema dado, pero tansolo 12 soluciones únicas ( lo que significa que las otras són combinaciones de éstas mismas )

Implementación en Python del problema de las N Reinas

Disclaimer: Esto lo hago en mi tiempo libre, no tengo a nadie que me instruya ni nadie que me corrija mis fallos. Por esto mismo, seguro que hay mejores implementaciones del código. Pero invito ( o reto ) a que alguien corrija el código, lo modifique a su gusto y lo mejore, y haber si entre todos aprendemos algo =)

Si conces algún sitio donde se pueda encontrar buena documentación o datos relacionados sobre los GA, deja tu comentario please.

Algorítmos Genéticos

Los Algorítmos Genéticos ( o GA, siglas en inglés ) son un tipo de programación para encontrar posibles soluciones en un tiempo reducido y aplicando la ley de la Evolución de Darwin.

Definamos *posibles soluciones*: Los GA no nos tienen por que devolver el resultado óptimo sobre el problema propuesto. O sea, cuando tenemos un resultado de un algoritmo genético no tenemos modo de saber si éste se trata de un resultado óptimo o tan solo un máximo relativo. Podríamos comprobarlo si el resultado es el óptimo utilizando un método de cálculo tradicional, pero en algunos problemas esto exigiría un nivel muy alto de matemáticas ( del que desgraciadamente no dispongo ).
Como funciona por dentro, un GA? Pues bien. Básicamente sigue este sencillo algorítmo ( que su implementación, me temo, que no es tan simple... ):

Generamos una población inicial
Evaluamos la población inicial recién generada
MIENTRAS que la población no haya convergido hacemos:
Seleccionamos a los mejores indivíduos ( función evaluación )
Cruzamos los indivíduos ( función reproducción )
Mutamos algunos indivíduos según una probabilidad dada ( función mutación )
Calculamos la función evaluación de los nuevos indivíduos
END MIENTRAS
Imprimimos el resultado, ya que la población ya ha convergido


Para qué sirven los algorítmos genéticos? Bueno, pues para sacar soluciones a determinados problemas muy complejos, con un tiempo reducido y que no estemos buscando LA Enlacesolución, sinó una posible solución lo suficientemente buena. Se utilizan mucho para programar Inteligéncia Artificial, para toma de decisiones, rutas óptimas entre dos puntos, etc... ( más aplicaciones en el link de su wiki ). Mas documentación aqui y aqui.

jueves, 17 de diciembre de 2009

Tecnología CUDA

Me topé con este artículo de Neoteo y la verdad que me quedé muy impresionado. Hacía tiempo ya que conocía que se utilizaba las GPU's ( targetas gráficas, vamos... ) para hacer cálculos complejos en un tiempo récord. Empezé a ver el potencial cuando leí que unos chicos de Elcomsoft estaban usando el poder de las GPU's para romper el cifrado WPA de puntos de acceso con una eficacia inigualable, comparado con un procesador. Tal era la poténcia que se afirma que se podría reducir el ataque en 50 ordenes de magnitud ( no contrastado, la verdad... ) usando el poder de varias targetas gráficas en paralelo. Totaaal, que esto del uso de la GPU para hacer determinados cáculos, mola...
Pues he estado mirando un poco lo que ofrece nVidia con su tecnología CUDA y realmente es una pasada. Podemos descargar en su página web todo el SDK para desarrollar programar utilizando la tecnología CUDA. Todo de manera gratuíta y para Linux, MAC y Windows. Se programa en C, y en la misma página te dan la documentación necesaria para empezar.
Lo que mas me ha sorprendido ( y que la verdad no sabía ) son las prestaciones de la targeta gráfica que tengo, una nVidia 9600GT. 64 núcleos de procesamiento. Reloj de cada núcleo, 1625MHz. Lo que nos dá unos 99,125 GHz de capacidad de procesamiento en paralelo!!! Ideal para seguir jugando con lo poco que se de algortimos genéticos y para empezar a programar en C.

domingo, 13 de diciembre de 2009

Microsoft vs Linux

Igual pueda parecer un post un poco contradictorio con la tónica general del blog, pero quiero analizar un poquito la situación de Microsoft Windows Vs Ubuntu ( o GNU/Linux en general ).

Por una parte tenemos que el OS de Microsoft es utilizado en un 97% de los ordenadores personales. Y todos sabemos porque: compras un portátil y ya te viene con Windows instalado. A parte, a la gente no le gusta el cambio ( porque es así, no podemos negarlo ) y prefieren lo malo conocido que lo bueno por conocer.

Linux ( juntando todas las distribuciones ) ocupan una cuota de mercado de un 1%. Esto es realmente poco, pero yo no lo veo como un inconveniente, sino más bien una ventaja. Ubuntu tiene 5 años, y todavía está creciendo. Yo, personalmente, considero que todavía está verde, le falta seguir avanzando. El usuario común no lo sabe usar si no es con alguien que le guíe, hay muchos conceptos nuevos y mucha cosa que el usuario medio no quiere saber.

Pero como puede ser que teniendo una cuota de mercado tan baja, esto beneficie a Linux? Pues porque Linux tiene una comunidad muy fuerte, actualmente. Gente que tiene ganas de sacar las cosas adelante. Crear aplicaciones de lo más variopintas, libres y OpenSource. Esta comunidad no existe en Windows. Otra ventaja de tener una cuota de mercado tan baja, es que la mayoría de virus y ataques son pensados para tener una máxima difusión. Con linux esto es complicado, ya que las distribuciones funcionan diferente, no tienen los mismos procesos, etc... en cambio Windows es un entorno conocido, y altamente explotable. Ventaja para Linux, ya que así de momento nos dejan en paz y no estamos en el punto de mira.

Linux todavía és complicado para el usuario medio ya que (aunque cada vez menos) se tenga que utilizar la consola para arreglar determinados problemas o instalar algunas aplicaciones. Aparte, claro del hecho que es un OS muy diferente de lo que los usuarios conocen hasta ahora. Ésto vuelve a ser una ventaja, ya que ahora mismo dentro del mundillo de Linux sólo hay gente con ganas de aprender y de ver cosas nuevas. Gente que está realmente interesada en aprender lo que Linux puede ofrecerle. Yo lo encuentro muy positivo.

Linux me recuerda un poco a la salida del Firefox. Justo cuando salió, era una pasada. Iba mucho más rápido de IE, no tenía vulnerabilidades, podías añadir Add-On's. Pero se hizo popular. Cada vez pesaba más, iba más lento y salian más vulnerabilidades. Ahora sigue siendo un buen navegador, pero no destaca tanto como antes. Yo lo atribuyo a su alta popularidad: como más famoso, más interesados en joderlo o en encontrar vulnerabilidades. Creo que si Linux, de golpe, es usado por mucha gente, le podría pasar algo similar.

Dónde quiero llegar con todo esto? Bien, imaginemos por un momento que el 97% de la cuota de mercado fuese de Ubuntu, y Windows un 1%. Estoy seguro que empezarían a aparecer virus para Linux a diario. Synaptic se empezaría a llenar de aplicaciones inútiles o infectadas. Para encontrar documentación de calidad sobre temas "avanzados" sería una odisea, ya que la mayoría de posts o manuales estarían enfocados al usuario medio... y la verdad, no quiero que Ubuntu ( o linux en general ) se convierta en algo así.

Pues entonces, qué? Bueno, seguir avanzando. Seguir mejorando las distribuciones Linux, seguir aportando a la comunidad linuxera lo que se pueda. Ayudar a los que se inicien en linux y que realmente quieren aprender. Todo esto favorece a los usuarios de GNU/Linux.

Y yo tengo plena confianza que algún día se dará el cambio. Algún dia, Ubuntu, o cualquier distribución por el estilo estará preparada para ser usada por el usuario medio y habrá alcanzado un grado de madurez suficiente para que la mayoría de gente que utiliza Windows, se tire a Linux. La gente, cansada de los problemas de siempre, buscará soluciones y encontrará un Linux fácil de manejar y mucho más humano. Esperemos que, cuando llegue este dia, Linux esté preparado. Si queremos ver las cosas de manera positiva, podemos dar las gracias a Microsoft de estar "reteniendo" a los usuarios malos, desinteresados o sin ganas de aprender nada, y dejando que los realmente buenos se pasen al software libre. Algún día esto cambiará y todo el mundo podrá disfrutar de un OS libre y OpenSource, recordando de lejos los pantallazos azules a los que nos tienen tan acostumbrados.

Saludos!

sábado, 12 de diciembre de 2009

Alcance Libre, software libre y excelente documentación

Pequeña nota. Buscan un sitio dónde encontrar buena documentación sobre el mundo de Linux? Visiten Alcance Libre. Dispone de una documentación ejemplar y también es un buen blog para mantenerse al día. Muy recomendable!

Borrado seguro de ficheros TrueCrypt con Python

[Estoy jugando con un script en Python para borrar volúmenes TrueCrypt de manera segura, si te interesa, sigue leyendo]
Crees que estás siendo seguido por el FBI o tienes pruebas sobre la muerte de JFK que implican a Obama, el Dalail Lama i al Monstruo de las galletas o un colección estupenda de películas de dudosa reputación que no quieres que nadie vea?? Pues TrueCrypt es tu programa. Gratis, Open-Source y aplicando un nivel de criptografía prohibido en algunos paises ( EEUU, por ejemplo ) es una de tus mejores opciones para ocultar información en contenedores. How-To de TrueCrypt hay muchos, aquí listo un par:
Voy a explicar un poquito cómo funcionan los volúmenes virtuales para entender luego como podemos hacer un borrado seguro quedando los datos irrecuperables. Vamos al lío.
Cuando creamos un contenedor TrueCrypt ( veeenga, revisar los links anteriooores ), se genera un fichero en nuestro sistema, que contiene todo un sistema de ficheros. Cuando está desmontado, los datos están cifrados pero si montamos el volumen -poniendo el password, claro- , todos estos datos se descifran a medida que se van necesitando, en tiempo real. El caso es que los primeros 65.536 bytes de cada contenedor, son cabezeras de información, que indican a TrueCrypt cómo montar el volumen. Sin esta información TrueCrypt no tiene ni idea de cómo montar el sistema de ficheros. Vale, y? ¬¬

Supongamos que queremos borrar todo un container TrueCrypt, pero que éste tiene un peso de 4.7GB. Si lo borramos de modo seguro con el algorítmo Gutmann, por ejemplo, se harán 35 pasadas. Osea, se sobreescribirá la información 35 vezes, o lo que es lo mismo... escribiremos en disco 164GB de información, para sobreescribir todos los datos. Esto puede tardar un poquito, y podemos hacerlo mucho más rápido tal que así.

Solución. Un pequeño algorítmo en Python que nos machaca la cabezera de un volumen TrueCrypt con el algoritmo Gutmann. Util? no creo. Seguro? Mucho.

#! /bin/python
import os
#constantes
FILE='container'
#Creación de valores aleatorios
rnd = lambda : str(os.urandom(3))
print 'Generando datos de sobreescritura con la secuencia Gutmann...'
data = [ rnd(), rnd(), rnd(), rnd(), '\x55', '\xAA', '\x92\x49\x24', '\x49\x24\x92', '\x24\x92\x49', '\x00', '\x11', '\x22', '\x33', '\x44', '\x55', '\x66', '\x77', '\x88', '\x99', '\xAA', '\xBB', '\xCC', '\xEE', '\xFF', '\x92\x49\x24', '\x49\x24\x92', '\x24\x92\x49', '\x6D\x86\xD8', '\xD6\xDB\x6D', '\xDB\x6D\xB6', rnd(), rnd(), rnd(), rnd(), ]
print 'Abriendo el fichero...'
f = open(FILE, mode='r+b')
print 'Escribiendo datos...'
for loop in data:
>>>>f.seek(0)
>>>>f.write(loop*65536) if len(loop) == 1 else f.write(loop*21845)
print 'Cerrando fichero...'
f.close()
print 'Done!'

Tanta explicación para este cachito de código? Pozí. Pero esto solo es el principio, espero mejorar el algorítmo un poquito. Lo siguiente será crear un fichero protegido que contenga una lista de ficheros que borrar, y quitar así la variable FILE, automatizando el proceso un poquitín más.

viernes, 11 de diciembre de 2009

Nuevas propuestas, thumbs.db

Iniciativa de Nicola Rizzi, autor de la web "rm -rf /" ( muy recomendada ), creando una página que puede convertirse en un referente en el mundo Linux.
Nicola, ha creado una página web llamada thumbs.db, dónde se quiere agrupar los diferentes blogs que existen sobre Linux.
Este servicio está muy bien pensado ya que el usuario final tiene las webs linuxeras agrupadas en un mismo sitio y puede descubrir pequeñas joyas, o blogs con poco tráfico. Por parte de los que escribimos un blog para el aire, prácticamente, también nos beneficia, ya que podemos ser encontrados más facilmente. La comunidad Linux sale ganando!

Tanto si teneis ya un blog sobre linux como si quereis encontrar buen material, pasaos por la página, que seguro que encontrais algo de interés.

Saludos!

domingo, 6 de diciembre de 2009

Configuración de POSTFIX con DOVECOT + TLS

Hace unos dias ya que me he estado pelenado con lo que era una de mis espinitas: el servidor de correo en linux. Pues bueno, no voy a hacer una explicación de cómo se instala todo un servidor de correo mediante postfix, dovecot y añadiendo seguridad con TLS... en Internet hay muchísimos manuales. Lo que sí que voy a hacer es un listado de las webs que he visitado para conseguir poner online todo el tinglado ( y funciona!! ):

Primero vamos con la instalación básica de Postfix, que mejor que la documentación de Ubuntu:
https://help.ubuntu.com/8.04/serverguide/C/postfix.html

Segundo, instalación básica de Dovecot:
https://help.ubuntu.com/8.04/serverguide/C/dovecot-server.html

Una vez que teneis esto funcionando, es hora de "securizar" el tema.... para ello podeis seguir con los apartados de SSL y "SMTP authentification" de la misma ayuda de Ubuntu o seguir esta guias para postfix:
http://www.marblestation.com/?p=549

También, para los más valientes, aquí hay recopilada las documentación de la web oficial de postfix:
TLS Support
SASL Support

Este post ha quedado un poquito frío, pero es lo que hay. Para quien esté siguiendo los pasos de algún manualillo y esté atascado, me ofrezco para ayudar en lo que pueda ;)
Saludos!