Entradas

Mostrando entradas de 2012

Problema de las N reinas

Imagen
El problema de las ocho reinas es un juego que consiste en colocar ocho reinas en un ajedrez sin que se amenacen entre sí. La solución a este problema se encuentra con un algoritmo de backtracking , que consiste en asignar una fila a cada reina, y progresivamente colocar cada reina en una posición diferente. Si una reina es amenazada en cualquier casilla de su fila, la retiramos y colocamos la reina anterior en otra posición. El programa termina cuando se ha conseguido colocar a todas las reinas en posiciones seguras. Aquí dejo una propuesta dinámica para N reinas, en lenguaje C: >>  Descargar reinas.c  << Mejorando el algoritmo Tiempo después de publicar originalmente este post, estudié que éste es realmente un problema de satisfacción de restricciones . Resolver un problema NP completo puede costarnos mucho tiempo, ya que el espacio de búsqueda crece enormemente respecto al tamaño del problema. La aproximación por backtracking  "a pelo&quo

Automontar carpetas compartidas de VirtualBox en Linux

Imagen
VirtualBox tiene una opción para automontar carpetas compartidas en un huésped Linux, pero no siempre funciona bien. Hace tiempo propusimos un script para hacerlo manualmente . En esta ocasión vamos a hacer que se monten automáticamente . Supongamos que tenemos una carpeta compartida llamada Datos. La forma más sencilla de montarla en nuestro huésped es escribir en el terminal: sudo mkdir /media/Datos sudo mount -t vboxsf Datos /media/Datos El problema es que al hacerlo como superusuario, el dueño de la carpeta es root , y no se monta con el conjunto de permisos más adecuado. Para cambiar esto, vemos la ayuda del programa /sbin/mount.vboxsf y aplicamos las opciones pertinentes. Tutorial: Permisos en Linux Bien es sabido que la seguridad de Linux descansa en su sistema de archivos. Si escribimos ls -l en cualquier carpeta, podemos ver los conjuntos de permisos RWX que tiene cada elemento. R= Read , W= Write , X= Execute . La primera tríada es para el usuario prop

Utilizando claves seguras

Imagen
¡Una clase de Criptografía! ¿Cómo funciona la seguridad de los sitios webs? ¿Qué hace a una clave segura? ¿Se puede conseguir la contraseña de un amigo (o enemigo) para entrar en su Facebook? Lo primero que debemos saber es que nunca se guarda una contraseña , lo que se almacena es una huella de nuestra clave. Para hacernos una idea, el ejemplo más fácil de huella es la letra del DNI, que se obtiene realizando cálculos sobre el número. Pues bien, el mismo método (aunque de una forma más sofisticada) se emplea para obtener una huella de la palabra que escribimos cuando creamos una clave nueva. Cuando entramos a un sitio y escribimos nuestra clave, sencillamente  se calcula su hash y se compara con la huella guardada . Pero al igual que de una letra de DNI no se puede sacar el número (hay muchísimos números que dan la misma letra), tampoco se puede extraer por las buenas una clave a partir de su huella . Si se pudiera, las firmas digitales no tendrían razón de ser, y una gra

Cifrado de Vernam

Imagen
El cifrado de Vernam es un algoritmo de encriptación en flujo , es decir, consiste en combinar cada uno de los bits del mensaje con otro bit que actúa como clave de cifrado. Numerosos protocolos criptográficos, como el sistema WEP que utilizan nuestros routers o el A5/1 que se usa en las redes de teléfonos móviles, están basados en el cifrado de Vernam. Este procedimiento requiere, a diferencia de los sistemas de encriptación por bloques, una clave que sea tan larga como el mensaje . Entonces necesitamos alguna forma de obtener una clave pseudoaleatoria que pueda tener una longitud muy larga, y variable. Una forma de conseguir una clave fiable con facilidad, es utilizar un LFSR (Linear Feedback Shift Register), o Registro de Desplazamiento con Retroalimentación lineal. No nos asustemos por ese nombre, es lo más fácil del mundo: Fuente: Wikipedia . Un registro de desplazamiento es un conjunto de bits que tienen la capacidad de moverse a través de las celdas en las que

Optimizaciones en paralelo (I)

Imagen
Hace unos días leí acerca del procesador de la consola PS3 y su capacidad para realizar varias operaciones aritméticas en una sola instrucción . Es decir, dado que tiene un bus de 128 bits, podría sumar 4 valores de 32 bits en una operación. Me sirvió para darle vueltas a la cabeza e intentar hacer lo mismo en mi ordenador. La anchura del bus de un procesador es equivalente al número de cifras que puede tener la pantalla de una calculadora simple, sólo que en lugar de tratarse de dígitos decimales (del 0 al 9) son dígitos binarios (0 ó 1). El planteamiento es sencillo: supongamos que tenemos una calculadora de 12 dígitos y necesitamos sumar cuatro parejas de números de tres cifras -suponiendo que estamos seguros de que nunca nos vamos a pasar de 999-. Por ejemplo: 293 + 266 496 + 357 459 + 330 458 + 471 En lugar de realizar cuatro operaciones y dejar nueve ceros a la izquierda, podemos agrupar los números y "pegarlos" en dos sumandos: 293.496.459.458

Encima de piratas, egoístas

Imagen
El cierre de Megaupload por parte del FBI ha sido un golpe bajo para muchos internautas. Y para muchos de nosotros, con la mano en el pecho, el poder descargar gratis un montón de software (programas, películas, música, etc.) es una de las principales razones por la que tenemos Internet. Por un momento parece que se acaba el mundo, las leyes SOPA, PIPA y Sinde, todo se vuelve en nuestro contra y no nos damos cuenta de que esto era una burbuja que tarde o temprano iba a explotar. No me gusta la política, y hoy no me voy a meter en ella. Sólo quiero puntuar la forma en que nos hemos vuelto tan ansiosos y, encima de piratas, egoístas . ¿Ya nadie se acuerda de las redes P2P? Estas redes, llamadas  Peer-To-Peer (cliente-a-cliente), permiten que un usuario cualquiera comparta archivos con otras personas directamente, sin subirlas a un servidor como Megaupload, Rapidshare y una larga lista. Cuando alguien descarga cualquier cosa, al mismo tiempo está subiendo y compartiendo la