jueves, 28 de enero de 2016

Soylent Green: Poema de la soja

Es una pena, entre tantos millones
(siete mil ya) de personas
que haya quien come trufa cada día
y quien no come.
Mas, si lo piensas,
peor decían que iban a estar las cosas.
Como en aquella película
en que comían Soylent Green
hecho de gente.
¡Comer gente! ¡Qué disparate!
¿No es más fácil comprar las tierras
de esos salvajes despilfarradores
que aún no han sabido cultivarlas
y sembrarlas de soja?
Soja para engordar bien las vacas,
para hinchar los vientres de los congeladores,
para traer filetes que acaben con el hambre
de la vieja Europa.
¡Y tanta hambre, los pobres!
¿Es que no saben comer su soja?
Y en algún lugar del periódico
ves, pequeñita,
una nota diciendo que esa soja
crece entre sangre.
Cuando al fin comprendes tu hipocresía
después de rasgar tus vestiduras
lamentando el mal que seguirás causando,
aprovechas las rebajas,
renuevas tu vestuario
y empiezas a criticar a tus víctimas:
al fin, coherencia.

martes, 26 de enero de 2016

El encriptador PC-Secure de PCTools (1989-1990)

Cuando tuve mi primer pc, allá por 1991, tardé bastante en conseguir un programa de compresión de archivos, algo que en aquella época era mucho más necesario que actualmente. Tengamos en cuenta que mi primer disco duro tenía 20 megas de capacidad, que todavía se vendían los diskettes de 5¼ pulgadas y 540 Kb y que, si bien los disquettes de 3½ pulgadas de alta densidad podían contener 1,44 megas, a menudo había que conformarse con hacer un agujero en el lateral de los diskettes de «doble cara, doble densidad» de 720 Kb, más baratos, y rezar porque MS-DOS no encontrase muchos problemas a la hora de formatearlos con el doble de densidad de la garantizada por el fabricante.

Conseguí mis primeros compresores como parte de los programas que regalaban las revistas de informática. LhArc, el compresor japonés que producía archivos Lzh, se usaba (con otro nombre, claro está) en el disco de instalación de una demo de ContaPlus que regalaba una revista de software «serio», probablemente PC-Magazine. PkUnZip vino en un HobbyPC, como parte de la instalación de la demo de un juego, quizá "La bella y la bestia"; el problema es que sólo servía para descomprimir. La utilidad Arj, que se convirtió en mi favorita, me llegó también en un disco de instalación; no recuerdo en cuál. En cuanto a Tar, Gzip y demás utilidades tipo unix no las conocería hasta que hice mis pinitos con un compilador para PC llamado djgpp, que conocí poco antes de intentar usar linux... pero esto ya bien entrados los noventa, cuando ya tenía acceso a colecciones de shareware en cd-rom. Más o menos al mismo tiempo llegó Rar, también en un CD de shareware.

Por ello, durante un breve tiempo utilicé el backup de MS-DOS para hacer copias de seguridad (no ahorraba mucho espacio, sólo lo que la arquitectura del sistema de archivos FAT de Microsoft derrochaba habitualmente), el PCBackup de PC-Tools (tampoco comprimía los archivos, pero añadía un sector adicional, que suponía de un 5 a un 10% de espacio, a cada disquete) y, muy brevemente, el encriptador PC-Secure (no confundir con el antivirus homónimo) de la misma suite, que además de encriptar los archivos los comprimía con un ahorro del... ¡10%! Imagináos qué desesperado debía de estar para emplear ese programa.

* * *

Así que años después me he encontrado, tratando de organizar mis viejos programas basic, con tres archivos con extensión ".SEC", de dos de los cuales disponía también de la versión en texto plano. Las letras "PCT5" con que se iniciaban los ficheros me indicaron que las había creado algún programa de la suite PC-Tools. Entonces recordé lo que os he contado sobre ficheros comprimidos, encriptación, etcétera. Fui al trastero y busqué un de PC-Tools. A lo largo de mi vida he usado PC Tools 4, 5 y 6; sin embargo, ante la duda, saqué el primero que encontré. Probé con la clave que todavía creía recordar y encontré que el archivo no se descomprimía.

Después de leer un poco en la red, vi que el archivo usaba una codificación DES de un solo paso, y que, aunque era una codificación compleja, usaba solo una pequeña parte de la clave, así que era posible descrifrarlo por fuerza bruta. Mi primer intento se centró en averiguar cómo se usaba la línea de comandos de PC-Secure para poder hacer un ataque de fuerza bruta sin tener que enviar pulsaciones de teclado. Descubrí que, aparentemente, la sintaxis era:

  • PCSECURE /kclave /f fichero para encriptar (¿añadir /c para comprimir?)
  • PCSECURE /kclave /d fichero para desencriptar (¿añadir /c para comprimir?)
Después de un rato, me quedé insatisfecho con la idea de usar la fuerza bruta llamando una y otra vez al programa, lo que generaba cientos de ventanitas abriéndose y cerrándose sobre la pantalla de Windows. Así que usé la opción "encriptar" para crear unos cuantos archivos con las claves "1", "11", "12", "111", "123", "1111" y "1234", para averiguar si el programa guardaba la clave en algún lugar del archivo. Esto es lo que descubrí:
  • El archivo comenzaba con la firma "PCT6"
  • Los siguientes 4 bytes contenían la firma (hash) de la clave como DWord (entero de 64 bits) en el orden lsb...MSB estándar de Intel (es decir, el valor hex 12345678h se guarda como 78h 56h 34h 12h).
  • La firma estaba generada con el siguiente algoritmo:
    • Para cada byte en clave:
    • desplaza el hash a la izquierda 4 bits (es decir, hash=hash*16 o hash=hash<<4)
    • haz un o-exclusivo (XOR) entre hash y el byte de la clave.
  • Aparentemente, la firma o hash se usaba como clave XOR a lo largo del resto del archivo, con pequeñas modificaciones (rotaciones de bytes) cada cierto tiempo.

Decidí inicialmente pasar las claves de "fuerza bruta" a través del hash para comprobar si eran válidas antes de enviarlas al propio programa PC-Shell. Y como necesitaba un lenguaje de programación que poseyera un operador shift (hacer un shift en basic, que es lo que tenía instalado, es un dolor de cabeza en cuanto el último bit se activa y el número se convierte en negativo) empleé Processing para Android en modo Java. Era una buena idea, además, porque el procesador de mi móvil es mucho más rápido que el de mi ordenador. Sin embargo el programa volvía a empezar cada vez que perdía el foco. Ahí me empecé a dar cuenta, además, de que algo no cuadraba en el archivo que yo tenía.

Con todo esto, y tras deducir que el número de combinaciones para generar la clave eran finitas (de hecho, se podía deducir una clave "usable" tomando 8 bytes, uno por cada media palabra), probé otro ataque de fuerza bruta mucho más rápido porque se limitaba a probar combinaciones de 4 caracteres en lugar de todas las posibles entre 1 y 16 letras.

// Python

//Sustituir esto por los bytes 6-8 del
//archivo grabado por pcsecure.exe:
miclave=0x5d7ee440

//Archivo de salida
handle=open ("C:\salida.txt","a+")


bita=0
while (bita<=255):
    bitb=0
    while (bitb<=255):
        bitc=0
        while (bitc<=255):
            bitd=0
            print hex(bita)+" " + hex(bitb)+" "+hex(bitc)+" "+hex(bitd)
            while (bitd<=255):
                clave=bita
                clave=(clave<<4) ^bitb
                clave=(clave<<4) ^bitc
                clave=(clave<<4) ^bitd

  // Lo siguiente podría depender del archivo
  // PCSECURE.CFG con que se hayan encriptado
  // los archivos originalmente:

                clave=(clave ^0x8090000)
  // (Mi archivo pcsecure.cfg comienza 08 09 00 00 )

                if (clave==miclave):
                    print "solucion:"+ hex(bita)+" " + hex(bitb)+" "+hex(bitc)+" "+hex(bitd)
                    handle.write ("solucion:" + hex(bita)+" " + hex(bitb)+" "+hex(bitc)+" "+hex(bitd))
                    handle.flush()
                    handle.close ()
                    quit()
                if ((clave & 0xffff) == (miclave & 0xffff)):
                    print "parcial:"+ hex(bita)+" " + hex(bitb)+" "+hex(bitc)+" "+hex(bitd)
                    handle.write ("parcial:" + hex(bita)+" " + hex(bitb)+" "+hex(bitc)+" "+hex(bitd))
                bitd=bitd+1
            bitc=bitc+1
        bitb=bitb+1
    bita=bita+1

Mientras el programa de fuerza bruta iba funcionando, probé también el acercamiento de emplear una clave de 16 bits (si el hash era algo así como «5d7ee440», podría funcionar elegir el modo hex e introducir la clave «05 0d 07 0e 0e 04 04 00», y de hecho la clave hex máxima tenía precisamente 8 bytes, es decir, 16 cifras). Para mi desesperación, comprobé que PC-Secure graba la clave en un lugar totalmente diferente cuando se seleccionaba la opción "hex".

Además, había encontrado que mis archivos no acababan de cuadrar con el método de encriptación que había comprobado. Quizá fuera porque estaban comprimidos. Sin embargo, el resultado de la encriptación con compresión de pc-secure era un archivo más o menos del mismo tamaño que el original, con el final del archivo lleno de repeticiones de la clave (¡vaya seguridad!). Pero en los archivos que yo quería desencriptar, que sabía que estaban comprimidos, no tenían bytes repetidos al final.

Finalmente me decidí a rebuscar hasta encontrar el pc-Tools 5, y comprobé que su versión de PC-Secure usaba la misma línea de comandos que el incluido con PC-Tools 6, pero producía archivos completamente diferentes. Después de investigar (creando de nuevo los archivos con clave 1, 11, 12, 123...), decidí que, puesto que el sistema de encriptación era tan distinto (y de hecho, más seguro que PC-Tools 5, pues no incluía claves visibles al final de los archivos comprimidos), lo más sensato era probar mi vieja clave con *esa* versión de PC-Secure.

Funcionó a la primera

Ya sé que no se puede esperar mucho de un programa de hace 26 años, pero me maravillan dos hechos. Primero, ¿por qué PC-Secure 6 no avisa que no sabe descifrar un archivo creado con versiones anteriores? De hecho, los reconoce como archivos cifrados. Y, en segundo lugar, ¿por qué PCSecure 6 era menos seguro que PCSecure 5? ¿Se debe, quizá, a que, como se puede leer en el código de PCSecure 5, el primer programa fue desarrollado por terceros? No sería de extrañar: el mismo esquema el mismo esquema apareció con las utilidades de terceros incluidas en las últimas versiones de MS-DOS, luego discontinuadas. ¿O acaso los programadores de PC-Secure tuvieron miedo de haber vulnerado los tratados norteamericanos conta la exportación de tecnología de encriptación en la versión más antigua?

Se trata de un pequeño misterio que me habría gustado haber descubierto muchos años antes, cuando todavía hubiera existido la posibilidad de encontrar en la red a alguien que hubiera sido un usuario experto de aquellos programas. Aquí lo dejo como aviso a navegantes.

lunes, 11 de enero de 2016

John Brunner: Todos sobre Zanzíbar

BRUNNER, John: Todos sobre Zanzíbar. Barcelona, Acervo, 1979. 722 pág.
ISBN:
84-7002-276-8
Descriptores:
Ciencia Ficción. Distopías. Superpoblación. Supercomputación. Economía-Ficción. Drogas y psicodelia.

Escrita en 1968, Todos sobre Zanzíbar establece la población humana en los siete mil millones de personas (7×109), un límite parecido al calculado por Asimov en Bóvedas de acero, pero en este caso la acción se sitúa en 2010, justo un año antes de que esa cifra de población se alcanzase en la realidad. Como en el libro de Asimov, (y a diferencia de ¡Hagan sitio! ¡Hagan sitio! de Harrison, con el cual lo confundí al comprarlo) la mayor dificultad de la superpoblación no es alimentar a las personas sino encontrarles alojamiento, aunque aparecen de modo soslayado comentarios sobre el deber de reciclar todos los productos de la sociedad de consumo (a pesar de lo cual se sigue despilfarrando). La superpoblación origina una durísima legislación eugenésica que es el motor principal de la trama de esta novela.

En efecto: a excepción de algunos estados subdesarrollados, como la pequeña Beninia, o teocráticos, como España (parece que Brunner no concebía el final de Franco), los mínimos defectos genéticos de los padres (incluidas peculiaridades inocuas como el daltonismo) les incapacitan para tener hijos, siendo perseguida la madre y destruido el feto en caso de gestación. Y aun así, los progenitores autorizados deben tomar precauciones para evitar los celos de sus vecinos. A pesar de la existencia de alimento suficiente, la sociedad se ha vuelto violenta, hecho que se atribuye a la existencia de un límite psicológico de población que ya en tiempos de la antigua Roma provocaba casos de locura ("locriminalidad", de "Loki" + "crimen") en las grandes ciudades, y que se puede observar también en experimentos con animales de laboratorio. Junto con la locura de las ciudades, la locura internacional de una guerra interminable entre China y Estados Unidos por una pequeña isla de las Filipinas, y los constantes sabotajes, supuestamente pro-chinos, en la costa oeste de Estados Unidos.

Hay varias salidas contra la locura. Mientras el omnisciente Shalmaneser, un supercomputador superconductor refrigerado con helio líquido, busca soluciones de corte económico, la población se refugia en paraísos artificiales procedentes del hachis, el alcohopazo ("¿alcohol + copazo?"), la droga de síntesis casera Rompecranium y drogas de diseño industrial como la Viajina. También el sexo, como en Un mundo feliz, es un paraíso artificial: las mujeres no trabajadoras (y en este libro son mayoría) se visten con ropas desechables "acmax" (de "acceso + máximo") que no dejan nada a la imaginación y viven de prestado en los apartamentos de sus amantes hasta que estos se cansan de ellas. El último gran paraíso artificial es la televisión tridimensional, donde unos "señor y señora dondequiera", personalizados en cada televisor que se vende, permiten que el hombre común se vea a sí mismo viajando por el ancho mundo o protagonizando las noticias.

Un rayo de esperanza surge cuando un prometedor embajador norteamericano que ha decido aceptar un puesto en Beninia (excolonia británica imaginaria situada junto al golfo de Benín, quizá inspirada en la "República de Benín" proclamada por Biafra en 1967, y no en el Benín actual, llamado "Dahomey" en la época) vuelve de ese país convencido de que hay algo allí que debe compartir con el mundo: es el único país donde no ha habido asesinatos durante sesenta años. El presidente se está muriendo y cree que la única manera de mantener la independencia será "vender" el país a una gran compañía norteamericana para evitar que el resto de países africanos lo invadan.

Como se puede ir deduciendo, se trata de una novela de múltiples tramas, y coral. Tiene una estructura de collage, donde se mezclan anuncios, indicaciones callejeras, guiones televisivos, trozos de diálogo y citas de la obra del sociólogo Chad C Mulligan, uno de los grandes aciertos del libro y fuente inagotable de sabiduría:

(INJUSTO: término aplicado a ventajas disfrutadas por otras personas a quienes se las hemos intentado arrebatar engañosamente sin conseguirlo. Ver también FALSEDAD, TURBIO, FURTIVO y NO ES MÁS QUE SUERTE. —Chad C Mulligan: Diccionario del felicrimen).

Atendiendo a esa estructura de collage, el libro se divide en diversas secciones, completamente separadas en el índice, aunque luego se intercalen unas con otras en la novela. Por ejemplo, "Contexto" suele dar un mosaico de informaciones sobre el mundo en que se ambienta la trama; "Las cosas que pasan" recoge tramas secundarias y "Continuidad" una de las tramas principales. Al principio de la novela se nos informa sobre todos los personajes mediante frases breves incrustadas entre fragmentos que hablan sobre el mundo de la novela; al final de la misma, un "Obituario" nos recuerda quiénes han muerto a lo largo de la trama. Esta estructura es una de las grandes "puertas cerradas" que encontrará el lector en su camino, aunque es posible que quienes han leído más ciencia ficción de la época (estoy pensando en Samuel R. Delany y su Dhalgreen) estén acostumbrados.

En cuanto a la capacidad del autor para predecir el futuro, acierta en su predicción numérica de población pero no en que la mayor parte de esa población no está en el primer mundo; acierta en su predicción de que los avances tecnológicos no llegan cuando la técnica los permite, sino cuando el consumidor está "maduro" para pagar por ellos; pero no sospecha que la inseminación artificial será un artículo de consumo masivo. Concibe la television tridimensional y el videoteléfono, pero cree que los ordenadores domésticos serán meras terminales (aunque, al paso que vamos...); imagina una proliferación de pisos compartidos incluso entre ejecutivos, lo que no ha llegado aún, y nuevas formas de familia, lo que no está tan lejos. En la figura de la "vieja TG" reivindica a la mujer trabajadora; sin embargo, cree que será la excepción. Anticipa la llegada de los vuelos suborbitales supersónicos, que, aunque cada vez más cercanos, siguen siendo una quimera, y los taxis con línea directa con la policía, que llevan aquí un tiempo. Su mayor temor es la eugenesia, pero no llega a imaginar que serán los propios padres quienes la acepten con felicidad.

En conclusión, es un libro que une el esfuerzo de anticipación científica y la experimentalidad con la voluntad de llenar la novela de acción. Es difícil de leer, pero creo que merece la pena el esfuerzo, pues una vez superadas las primeras secciones "Contexto" nos sumerge en un mundo sorprendente y en una trama trepidante y a la vez delirante.