Los hackers del Senado

Esta entrada fue publicada originalmente en Naukas el día 13/10/2012.

Edificio del Senado de España en obras
El edificio del Senado de España, en obras. Foto de tripu.

El Senado estrena web y salta la noticia: la nueva web del Senado ha sido hackeada… ¿O no? La nueva web del Senado no ha sido hackeada… ¿O sí? Se trata de una vulnerabilidad de tipo XSS no persistente de los dolores… ¿Qué ha pasado en realidad? ¿Por qué es tan difícil entender a los informáticos? ¿Quién nos quita esa sensación de “se lo llevan crudo mientras me dicen que sonría”? Salvo por la última pregunta, que tendréis que contestar vosotros solos, hoy me pongo el gorro de comando de emergencia informática para explicar:

  • qué ha pasado,
  • por qué ha pasado y
  • por qué debe importarnos lo que ha pasado (aunque no sea tan grave, en realidad).

Continue reading “Los hackers del Senado”

Unas notas para la actualización de Google Reader

“Actualización” es un eufemismo muy informático. Lo que ha ocurrido con Google Reader, uno de los lectores de noticias (feeds) más populares, a principios de esta semana es más bien una transformación. A peor. No entraré en consideraciones estéticas aunque el nuevo diseño, gastando espacio vertical como un Cadillac de los sesenta engullía combustible, daña la usabilidad en plataformas pequeñas —los netbooks, hoy, siguen teniendo pantallas de 600 puntos de altura. Me limitaré a comentar cómo la eliminación de las características de red social han impactado mi vida cotidiana en una plataforma completamente distinta, Twitter. ¡Con lo que me quejé de ellas algo después de que las incorporaran en la prehistoria… hace dos años! Continue reading “Unas notas para la actualización de Google Reader”

P=NP: y ahora viene cuando la matan

Tan contento que estaba yo: uno de mis autores favoritos, , liberó hace un tiempo su primera colección de historias cortas con una . Hela aquí en toda su gloria: Toast. Aún no he terminado de leerla, y ya estoy, con perdón de la mesa, cagándome por las patas abajo. Maldita realidad.

La primera historia corta de la colección, Anticuerpos, toma como escenario un tema recurrente de la literatura de Stross: una singularidad tecnológica de despegue rápido (hard takeoff singularity). En cristiano: un desarrollo técnico que facilita otros, en una cascada de aceleración imparable. El ejemplo principal (y el de esta historia corta) es una inteligencia artificial. Si entre los objetivos de esta IA está mejorar sus capacidades, puede hacerlo diseñando e implementando algoritmos más capaces y procesadores más rápidos. Sus “hijas” tardarán menos aún en superarse a sí mismas, alcanzando eventualmente algún límite máximo de capacidad de computación por metro cúbico de planeta. Y nosotros, sin haberlo visto venir. Para la segunda iteración, las IAs nos sacan la misma ventana que nosotros a los chimpancés. Para la tercera, estamos al nivel de las hormigas.

¿Y cuál es el evento que dispara los acontecimientos en Anticuerpos? Algo aparentemente sin importancia para un lego: el descubrimiento de que el tiene solución en , y por tanto que . En breve: P y NP son clases de complejidad de problemas. Un problema de tipo P puede resolverse en tiempo polinómico, lo que es aproximadamente equivalente a decir que con la suficiente potencia de cálculo podremos hallar soluciones en plazos de tiempo razonables, donde razonable es menor que antes de que se congele el infierno. Sin embargo, los problemas de sólo pueden verificarse fácilmente: algunos de ellos (los ) no tienen algoritmos que permitan su solución en tiempo polinómico. (Matemáticamente, se dice que NP contiene a P, aunque no se sabe si es una relación de contenido estricto; ambos conjuntos podrían ser iguales.)

Esta asimetría fundamental tiene multitud de usos en computación; el más relevante es la criptografía de clave pública. Multiplicar dos números primos muy grandes es algo que se hace en un momento, pero factorizar el resultado para obtener los dos números de partida puede tomar un tiempo inasumible, sin importar la potencia de proceso que se le dedique al asunto. Si resultara que P = NP, todas las comunicaciones encriptadas del mundo se irían al garete, todas las transacciones seguras dejarían de serlo y sería imposible asegurar la integridad de nada. Si por azar resultara que la inteligencia de un sistema lógico dependiera de la solución de un problema NP-completo, el haber resuelto cualquier otro en tiempo polinómico permitiría, por equivalencias matemáticas más o menos triviales, resolver éste y traer al mundo una IA con ganas de marcha. Es posible que, sin salvaguardas de un tipo muy especial (o incluso con ellas), cualquier problema difícil que se le proponga resolver a una IA derive en un ciclo imparable de apropiación de recursos y automejora. Esos recursos sean primero nuestros ordenadores, y después todos los átomos de la Tierra que puedan ponerse en disposición de computar, incluidos nuestros pobres cuerpos.

Aunque parezca increíble, todavía no os he destripado la historia. Tal vez no me dé tiempo si esto que acabo de leer resulta ser cierto: Polynomial Time Code For 3-SAT Released, P==NP (Slashdot), o su fuente original. El problema de la (y su caso particular ) es NP-completo. Si resulta tener solución en P —el autor ha publicado incluso código fuente— entonces P = NP, todos los problemas NP tienen solución fácil y nuestra economía digital se desploma sobre nuestras cabezas antes de que podamos decir…


Nota: no soy matemático y soy incapaz de determinar por mí mismo si la supuesta prueba de P = NP de la que doy noticia aquí es o no correcta. No saquéis todo vuestro dinero del banco todavía. Esperad a que yo lo haga, por favor.

Nota 2: Este artículo forma parte de la décima edición del Carnaval de Matemáticas, esta vez en casa de Francis (th)E mule Science’s News.

Adenda (28/02/2011): Parece que finalmente el autor de la supuesta pruebe de P=NP ha encontrado un error en su razonamiento. Falsa alarma.

Celestia: guía de compilación en Ubuntu 10.04

En mis últimos ordenadores siempre ha estado un programa esencial para todo amante de la astronomía, la astronáutica y el espacio en general: Celestia. Un “simulador de Universo”, como suena, capaz de llevarte a velocidad absurda a cualquier lugar cartografiado en un radio de muchos miles de años luz a la redonda. Además, es ampliable y su entusiasta comunidad (dirigida por Chris Laurel, actualmente en la ) aporta mejoras y ampliaciones con regularidad.

Los únicos requisitos para ejecutar son disponer de un PC moderno con una tarjeta gráfica con soporte más o menos potente: si puedes jugar a algo en 3D con relativa fluidez, podrás disfrutar de Celestia. Para que conste, la mía es una GT 220 funcionando con el driver propietario. Lamentablemente, mientras que para Windows se ofrece un instalador simple, los linuxeros tenemos que vérnoslas con un archivo .tar.gz de fuentes, en plan some assembly required antes de jugar. Algunas distribuciones disponen de paquetes precompilados, pero normalmente no están muy bien mantenidos: son de versiones antiguas de la distribución o del propio Celestia, no soportan arquitecturas de 64 bits, o las tres cosas a la vez.

Compilar Celestia se ha convertido para mí en una especie de ritual, que se repite cada vez que adquiero un nuevo equipo o instalo desde cero un sistema operativo. Ahora le ha llegado el turno a mi workstation con (64 bits) y , y esta vez he documentado los pasos que seguí para poder contarlos aquí y que puedan servir a alguien más. Así que, sin más preámbulo… un disclaimer:

Atención: no soy responsable de nada que puedas hacerle a tu ordenador siguiendo estas instrucciones. De nada. Mi distribución no estaba “limpia” antes de comenzar este proceso: por tanto, es posible que aún instalando todo lo que aquí se dice, te falten algunas dependencias. Haz como yo: lee con cuidado los mensajes de error y mira los foros o el wikilibro. No soy ningún experto en esto, pero a mí me ha funcionado. Para evitar errores tontos, marcaré cada fin de línea con este dibujillo: “↵”. Sería recomendable tener un nivel intermedio de manejo de Linux para poder seguir esta guía: si no lo tienes, échale el lazo a tu geek local. Yo no tengo todo el tiempo que querría.

Venga, ahora sí que sí. Lo primero: suele ser más fácil compilar las fuentes conforme salen del repositorio de control de versiones de SourceForge. Más fácil que el paquete con la última versión (a día de hoy, la 1.6.0). No preguntéis por qué, e instalad el soporte de si no lo tenéis ya para poder bajarlas. Abrid una consola y teclead:

sudo apt-get install subversion↵

Siempre que os pida la contraseña de root, la ponéis. Es el momento de bajar las fuentes en sí. Desde vuestro directorio de usuario:

svn co https://celestia.svn.sourceforge.net/svnroot/celestia/trunk celestia↵

Cuando termine, tendréis un directorio celestia con todo el pastel. Ahora, a instalar dependencias, que son paquetes necesarios para que lo que acabamos de bajar compile y funcione. Nota: igual que a alguien le puede faltar alguna dependiendo de cómo haya instalado su Ubuntu, también es posible que algún paquete de los que doy aquí sea redundante. En fin.

sudo apt-get install build-essential automake gettext libgconf2-dev libtool zlib1g zlib1g-dev libgtkglext1 libgtkglext1-dev libgnomeui-dev lua5.1 liblua5.1 liblua5.1-dev↵

Hasta aquí no creo que haya problemas. Ahora empezamos a compilar:

cd celestia↵
autoreconf -iv↵

Eso crea el script de configuración de la compilación. Ahora, configuraremos la compilación, incluyendo soporte para GNOME y . El primero se pueda cambiar por KDE, pero entonces alguna de las dependencias anteriores estará mal. Incluir soporte de Lua (un lenguaje de scripting que Celestia puede llevar embebido) es interesante: muchas mejoras (add-ons) lo requieren:

./configure --with-gnome --with-lua↵

¡Llega el momento de compilar! Tecleamos

make↵

Estamos a un paso de poder disfrutar de las mejores vistas que se pueden tener en un monitor sin estar de verdad en el espacio (o sin un fondo de pantalla de Megan Fox en plan interesante). Instalamos el resultado de la compilación:

sudo make install↵

Por defecto, Celestia queda instalado en /usr/local/bin, y sus archivos de apoyo en /usr/local/share/celestia. Si el primer directorio está en nuestro $PATH de ejecución (y si no has hecho nada raro, debería estar), basta teclear

celestia↵

para empezar a navegar a lo grande. Aquí teneis una pequeña guía en español para dar los primeros pasos: Proyecto Celestia: Guía de Usuario (útil a partir del capítulo 5).

Desgraciadamente, todo esto no fue lo último que tuve que hacer para que Celestia funcionara correctamente en mi equipo. Me encontré con una ventana en la que no se mostraba nada en absoluto, aunque la navegación parecía funcionar. Quizá esto no te ocurra, o quizá sí… La solución: seleccionar la opción del menú Options/View options… y marcar para visualizar las cajas de selección de Planets y Stars como poco, poner el filtro de estrellas por distancia (Filter Stars) a su valor máximo, seleccionar el máximo detalle en textureas (Texture Detail) y pulsar Aceptar. Quizá se trate de un error menor en el programa, y quizá ya esté corregido (recordemos que estamos compilando a partir de la última versión disponible del código, así que incluso sería posible que existieran errores que no permitieran la compilación en absoluto —algo raro, pero…) Curiosamente, si ejecutaba Celestia como root (haciendo sudo celestia en una consola) todo funcionaba a la primera.

Una última advertencia: Celestia engancha. Hay quien ha cambiado de tarjeta gráfica, quien ha gastado auténticos caudales en sus equipos para poder ver las míticas texturas “32k” de la Tierra o Marte con todos los efectos de iluminación, quien ha perdido el apetito o abandonado a su mascota a su suerte para estar días seguidos pegado a la pantalla. Ni que decir tiene que tampoco me hago responsable. Disfruta.

VNC y Compiz en Gnome

¿Quién no ha usado ? (Vale, no me abruméis con tanto silencio, que ahora los geeks estamos “casi” bien vistos.) Es una forma muy sencilla de acceder al escritorio de otro equipo remotamente; aunque no es un protocolo muy eficaz, su sencillez de manejo y la posibilidad de conectar entre sí sistemas extremadamente distintos lo hacen atractivo frente a otras opciones de escritorio remoto. Por ejemplo: mi teléfono me permite ver el escritorio del equipo principal de mi oficina () con Remote VNC Pro.

Ubuntu ofrece por defecto la compartición del escritorio por VNC a través de un servidor que se activa en Sistema/Preferencias/Escritorio remoto. Algunas cajas de selección —francamente simples— marcadas y voilà! Escritorio compartido en tu segmento de red. Para una pequeña oficina como la mía, que utiliza la misma red WiFi que mi casa, es una buena solución para comprobar qué está ocurriendo en el ordenador grande desde el sofá, con el portátil (o incluso con el teléfono).

El problema

. No sólo es “azúcar para los ojos” (eye-candy es la encantadora expresión anglosajona): estoy convencido que las animaciones que muestran los cambios de estado de las ventanas son esenciales para mejorar la usabilidad del sistema. En consecuencia, gasté una cantidad de dinero extra para asegurarme de que Compiz funcionaría correctamente, poniéndole una buena tarjeta aceleradora 3D. Pero resulta que con Compiz activado en un servidor Vino (el servidor VNC que viene de serie con , el escritorio por defecto de Ubuntu), ¡los clientes sólo reciben una pantalla negra! En cuando se desactiva Compiz, VNC vuelve a funcionar de forma normal. Esta sería una opción aceptable en un ordenador en el que no trabajara habitualmente, pero cuando uno se acostumbra a “lo bueno”, dar un paso atrás se pone muy cuesta arriba. ¿Hay solución?

La solución

Sí. Desde un terminal, basta invocar gconf-editor. Aparecerá una especie de editor de configuraciones de Gnome similar al editor de registro de nuestros amigos de Windows (el backend de datos que se están modificando son ficheros de texto en formato XML, así que no me vengáis con que “tanto quejarse del registro de Windows y mirad ahora”). Navegad por la estructura de carpetas siguiendo la ruta /desktop/gnome/remote_access y marcad el ajuste disable_xdamage. En la documentación de esta clave se dice que la extensión XDamage de X.org no funciona bien en algunos drivers de vídeo si se usan efectos 3D, lo que evidentemente es el caso de Vino. También dice que VNC renderizará un poco más lentamente. Como si fuera preferible ver una pantalla negra —a toda velocidad, eso sí— a que las cosas funcionen como deben.

¿Problemas con el lector de tarjetas SD?

Recientemente estoy atravesando por una de esas fases de sequía bloguera. No es que no haya temas de los que escribir, al contrario. El problema es que la mitad de ellos me hinchan la vena del cuello como si fuera una cámara de bicicleta, y la otra mitad ya son muy competentemente comentados por blogueros-alfa a los que sigo. Hay días en los que Google Reader es como un pequeño ángel de la guarda cabrón que te susurra al oído “¿para qué? Si ellos ya lo han dicho mejor que tú…” De modo que acudiré al viejo truco: contar alguna frikada técnica que me haya ocurrido recientemente, de la que haya aprendido algo y con la que —espero— alguien pueda ahorrarse quebraderos de cabeza. Hala, al lío.

El problema

"Expulsar unidad de forma segura" en Ubuntu 9.10
“Expulsar unidad de forma segura” en Ubuntu 9.10

Uso Ubuntu 9.10 Karmic Koala (¿no son encantadores los nombres?), aunque tal vez desde la versión anterior he notado la inclusión de un elemento adicional en el menú contextual de los medios extraíbles, Expulsar unidad de forma segura, que acompaña a los más tradicionales Desmontar y Expulsar. Desmontar es un viejo concepto unixero asociado a la gestión de volúmenes de datos; los linuxeros de hoy montamos poco desde que existe automount, pero para los medios extraíbles es recomendable indicarle de algún modo al sistema operativo que tenemos intención de tirar de la manta, o de la tarjeta en este caso. De otro modo podríamos interrumpir alguna operación de escritura en curso (en todos los S.O. multitarea son asíncronas, lo que significa que ocurren cuando al planificador del núcleo le parece) y corromper —como poco— algún fichero. Expulsar implica desmontar, y tiene sentido en una unidad de CD o DVD, donde hay una bandeja motorizada que extrae físicamente el medio.

Como la idea de hacer algo “con seguridad” me atrae, al menos en principio, comencé a utilizar esta opción antes de extraer mis tarjetas SD de su ranura. Sin embargo, un día, al insertar una tarjeta llena de fotos de las últimas vacaciones, observé que automount estaba pasando de mí. Pánico creciendo. Pronto me di cuenta de que el lector no funcionaba en absoluto. Ni siquiera aparecía al hacer un lsusb en una consola. Pánico disminuyendo, pero extrañeza creciendo. Como no apago el equipo todos los días, tardé en darme cuenta de que era precisamente tras expulsar “de forma segura” una tarjeta cuando ya no podía leer más ¡y el dispositivo lector dejaba de existir! El único remedio: reiniciar. Después del reinicio todo volvía a la normalidad. Hasta que mi mente, ansiosa de seguridad, volvía a pulsar en esa opción y, días más tarde, vuelta a empezar.

La solución

Resulta que Expulsar unidad de forma segura hace algo más que desmontar la tarjeta: también apaga el dispositivo lector. Eso es estupendo: añade un plus de seguridad con un lector de tarjetas portátil. Lo desenchufas del puerto USB y listo; la próxima vez que lo enchufes se encenderá. Pero… los lectores internos suelen estar conectados también por una interfaz USB a la placa —para ahorrar en interfaces PCI. El chipset que llevan reacciona a los mismos comandos que los lectores externos, y en particular pueden apagarse de la misma manera. Así, si apagamos un lector interno de tarjetas, tenemos dos opciones: abrir el ordenador en vivo, localizar su conexión a la placa, desenchufarla y volverla a enchufar; o —más cómodamente— apagar y encender. Vaya. No me pillaréis más expulsando de forma segura. Seguro.

Compatible, pero ¿a qué precio?

Como padre, me preocupa que el material que utilizan mis hijos en el colegio sea de la máxima calidad posible. Como defensor del software libre, me preocupan los intentos por perpetuar la estandarización de un sistema operativo determinado, aun contra los intereses colectivos de la sociedad —¿por qué pagar una tasa Microsoft, cuando existen alternativas, tanto de pago como gratuitas y de calidad más que satisfactoria? Por eso, comprobar que los soportes digitales asociados a dos de los libros de mi hijo este año declaran su compatibilidad explícita con Linux (los demás no sorprenden a estas alturas) me llena de gozo y satisfacción. También me llena la boca de patatas cocidas, para poder pronunciar esa frase con el tonillo real que se merece. Leo las instrucciones:

Windows
Introduzca el CD-ROM en el lector de su ordenador. Si tiene activada la opción de autoarranque, el programa se ejecutará automáticamente. Si esta opción no estuviese activada, ejecute el fichero ExeWin.exe situado en el directorio raíz de su unidad de CD-ROM.
Mac
Introduzca el CD-ROM en el lector y haga doble click en el fichero ExeMac situado en el directorio raíz de su unidad de CD-ROM.
Linux (las notas son mías)
Después de introducir el CD-ROM en el lector y montarlo correctamente1, ejecute el fichero ExeLinux.sh2 situado en el directorio raíz de su unidad de CD-ROM. Si el administrador del sistema no permite ejecutar programas desde el CD-ROM3, puede cambiar esta autorización editando como usuario ROOT4 el fichero /etc/fstab5, añadiendo la opción exec6 a la línea /dev/cdrom, de forma que quede de la siguiente manera:

/dev/cdrom /cdrom iso9660 defaults,ro,user,noauto,exec 0 07

(Nota: alguno de los valores puede ser diferente, dependiendo de su configuración personal8.)

Acabáis de oir el sonido de mi mandíbula cayendo al suelo. Disculpadme mientras la recojo. Ahora, las notas, o ¿qué puede ir mal en todo esto si no tienes unos años de experiencia con Linux?:

  1. ¿Montarlo correctamente? Si sólo tiene una pieza.
  2. La ejecución podría ser excesiva. Tal vez un correctivo sería suficiente.
  3. ¿Por qué puede puede no estar permitido que se ejecuten programas desde un CD? Y ¿quién es ese administrador que dicen?
  4. Sí, con vi, no me digas más.
  5. Naturalmente, todo el mundo sabe dónde está ese archivo y cómo llegar a él.
  6. ¿Ein?
  7. ¿Ein (al cuadrado)?
  8. No es por molestar, pero esto es añadir la humillación al insulto.

No, la verdad es que no es un buen día para tener fe en que Linux se convierta alguna vez en un sistema operativo popular en el escritorio.