Cada página debería tener una declaración de privacidad – aunque sólo sea para declarar que el usuario realmente no tienee privacidad. Esta declaración a continuación puedes usar como ejemplo para una página tuya albergada en algún proveedor de tipo aspiradora de datos. Seguramente no prometes demasiado (poco) aquí.

Sus datos privados son importantes. Por eso intento obtener un máximo de ellos en esta página. Como no tengo ni conocimientos técnicos ni derechos de acceso suficientes a la base de datos de esta aplicación web para poder espiar su uso de navegador, subcontraté el tratamiento de sus datos al proveedor de estas páginas.

El proveedor, sus representaciones nacionales y sus partners, llamados simplemente “proveedor” a continuación, usan la declaración de privacidad que puede encontrar en cualquiera de sus páginas. En corto dice que el proveedor puede – o no – tratar sus datos para saber más sobre usted y poder ofrecerle la mejor publicidad y “servicios”. Como el proveedor no tiene capacidad de hacer todo esto solo, puede pasar o no – sus datos a empresas subcontratadas en su país u otro lado que, a su vez, pueden pasar o no – sus datos a empresas subsubcontratadas que posiblemente no están localizadas en su país, su continente o su planeta. Por supuesto, para los partners de su proveedor valen las misma reglas estrictas como para el proveedor.

Además, el proveedor está obligado a dar acceso a sus datos a las “autoridades” si alguna ley en algún país le obliga. Sobre esto no hay más explicaciones en la declaración de privacidad de su proveedor, porque, en EEUU y otros países, está prohibido por ley de admitir la colaboración con las “autoridades”. Las “autoridades” de EEUU y de otros países tienen un derecho general de copiar todos sus datos y pasarlos a base de alguna ley real o deseada a “autoridades” o “instituciones” en otros países amigos o no tan amigos. Estos países se han obligados a proteger sus datos con la misma diligencia. En otros países más allá no es necesario advertir de las posibilidades de las posibilidades de espionaje, porque el servicio secreto está omnipresente y sus poblaciones acostumbrada a que toda la comunicación por Internet o teléfono será supervisada por “su seguridad” por los señores en el poder.

Para que el proveedor pueda mostrarle la publicidad que más eficazmente le hace comprar, usted debería usar este y los demás servicios del proveedor al máximo – en particular la búsqueda por Internet para que el proveedor sepa que le mueve y la aplicación de red social para saber lo que le ha movido. Por conveniencia no necesita introducir todos los datos en todas las aplicaciones de nuevo. Gracias a una cookie con su identificación de usuario, que cordialmente se ha ofrecido a su ordenador, el proveedor puede conectar todos sus datos introducidos en cualquier aplicación. Usted sabe que hizo todo bien, cuando encuentra en diversas páginas web publicidad para los medicamentos contra la enfermedad sexual que recientemente ha buscado en la máquina de búsqueda del proveedor.

Está invitado a hacer click en todos los botones de “compartir” que suelen aparecer al final de la página para distribuir sus datos igualmente a todas las empresas y prevenir así un monopolio de datos potencialmente malo para la economía. Por supuesto, sus amigos en las demás redes sociales también están curiosos que usted divulga en Internet. En el caso de sus amigos, usted podría incluso llegar a tener la sensación que es usted quien controla el acceso a sus datos.

Si usted no está conforme con distribuir sus intereses de esta forma, entonces usted debería volver a escribir cartas en papel o comprar los periódicos en un quiosco en lugar de perder su tiempo en Internet.

Lectura adicional

Existen no sé cuántas páginas en Internet que te explican por qué el control de versiones git es mejor que Subversion. No quiero decir que git es peor, pero poco de lo que provee realmente necesitas en muchas ocasiones. Así quiero dar razones por qué quedar con Subversion – sobre todo para los proyectos que ya lo están usando.

Trabajar en Corea del Norte

El cambio más importante de git respecto a Subversion es tener múltiples repositorios en lugar de uno. Mientras en Subversion te puedes confundir, sobre qué rama trabaja tu copia de trabajo, con git te puedes confundir sobre la rama y, además, sobre si has publicados tus cambios locales a qué otro repositorio.

Ninguna página sobre git pierde advertir, que estos repositorios locales te permiten trabajar off-line. Esto habría sido una maravilla con la velocidad del internet en el siglo pasado. Hoy no conozco ninguna empresa informática donde los empleados serían capaces trabajar sin red. ¿Qué te sirve hacer un check-in local si no puedes compilar porque el compilador descarga bibliotecas de un disco en red? Por supuesto, otra cosa es si te envían frecuentemente a Corea del Norte u otro lugar, donde el WIFI de alta velocidad no suele ser la regla.

Copiar repositorios enteros en lugar de ramas

Otra publicidad para git suele ser el cheap branching (ramificación barata), es decir, crear ramas nuevas cuesta poco. Crear ramas es rápido en git porque sólo se crean en tu repositorio local. En Subversion debes crear la rama en el repositorio. No obstante, no ralentiza mucho. La mayor parte de la creación pasas tecleando el nombre de la nueva rama – algo que git no te ahorra tampoco.

Ahora depende como quieres trabajar con tu nueva rama. Una es reciclar tu copia de trabajo y hacerla apuntar a la nueva rama. Esto se hace con switch en Subversion y con checkout en git. Como git no accede a la red, es más rápido. No obstante la pregunta es, si realmente quieres trabajar así, porque puedes confundir la rama en que piensas trabajar con la en que realmente trabajas. Los ficheros modificados en tu copia de trabajo se mantienen y serán ahora ficheros modificaciones sobre la nueva rama a que cambiaste. Si la rama anterior era de una versión de hace un año, con un poco de suerte no sólo harás un check-in de las tres líneas que has modificado sino, además, del estado que tuve el fichero hace un año.

Por no provocar tu suerte decides a editar cada rama en un directorio aparte. Así el flujo de trabajo es así: en Subversion, creas la rama en el repositorio y haces un check-out de lo que necesitas. En git haces una copia (clone) del repositorio entero y creas la rama. Es decir, primero copias el repositorio entero y no sólo lo que necesitas. Pero luego crear la rama, esto, sí, es rápido.

Como no querrás esperar a tanto cheap branching para cada rama que creas, git invita a crear muchos repositorios de que cada uno contiene lo mínimo posible. Puedes crear repositorios pequeños también con Subversion, pero no lo necesitas. Puedes tener un mega-proyecto en un repositorio y no hace falta comprarte un nuevo disco duro para tu copia de trabajo, ya que sólo necesitas descargarte le parte que quieres modificar.

Guardarlo todo

Otra auto-publicidad de git es guardar ficheros enteros en lugar de diferencias. La ventaja: es más rápido al hacer un check-out, ya que git sólo necesita buscar el fichero dentro de un commit y copiarlo. Subversion, en cambio, debe reconstruir el fichero a base del primer check-in más todos los cambios de la historia.

La ventaja de Subversion es que descargas un fichero por la red. En git descargas el repositorio entero con todas las versiones enteras de todos los ficheros – y así lo tendrás también guardado en tu disco duro.

El directorio .git

Git usa una carpeta escondida den nombre “.git” en el directorio raiz para guardar sus datos. En muchas páginas puedes leer que Subversion no es así, porque guarda una carpeta escondida “.svn” en cada carpeta. Esto era cierto. No obstante, esto ha cambiado desde la versión 1.7 de Subversion. Ahora sólo hay una carpeta “.svn” en el directorio raiz – igual como en git.

Seguridad para la generación selfie

Git hace publicidad con la seguridad de los datos. Una revisión no tiene un número, sino un hash, es decir un número hexadecimal lo suficientemente largo, para que, con seguridad, no podrás memorizarlo. Esto es para que no se altere la integridad del commit. El hash se calcula a base de los datos que componen un commit. Cambiar un byte cambia el hash. Al mismo tiempo, git te permite unir varios commits en uno, mover el origin de una rama a otro commit y hacer desaparecer commits por completo. Lo importante es que los commits no aparezcan como si hubieras probado algo, sino que la historia del repositorio muestra que hiciste todos los cambios completos y correctos a la primera. Sólo falta el botón “me gusta”.

En Subversion, en cambio, se queda la historia sin alterar. Lo que está dentro, se queda – a menos si lo quieres hackear. Si haces un merge de una rama, entonces no se copia la historia entera de la rama añadida sino se crear un nuevo commit, donde puedes poner todos los comentarios sensatos que el release manager necesita para decidir si tu cambio entra o no. Los comentarios y check-ins caóticos de tu rama de desarrollo no entran, porque se quedan únicamente en la rama de desarrollo.

Es cierto que tu repositorio de Subversion acumula ramas de desarrollo difuntas que ocupan espacio aunque ya no se necesitan. En git, el repositorio central sólo necesita guardar lo que realmente está terminado y funcionando. Pero esto surge porque estás dispuesto a jugar con dos repositorios a la vez. Lo puedes hacer también en Subversion. Exportas la rama de release, copias los ficheros a la copia de trabajo del repositorio bonito y haces un check-in.

Un repositorio para el back-up

Finalmente queda por hacer una copia de seguridad de tu repositorio, porque no quieres perder tus cambios si se rompe tu disco duro. Normalmente sólo se hace una copia de seguridad del repositorio central. En Subversion, todos los commits entran en la próxima copia de seguridad. En git, te debes pensar si haces un push al repositorio central o creas algún repositorio intermedio (probablemente en red), sobre qué el administrador de sistema hace una copia de seguridad. Así puedes elegir entre olvidar el push al repositorio central o intermedio o olvidar la copia de seguridad de tu repositorios locales.

Se puede argumentar que cualquier directorio de git es un back-up del repositorio central. Esto puede ser válido pero también puede que no. Es posible que sólo empujas commits buenos al repositorio central y el repositorio local contiene muchos más commits “de trabajo”. Es posible que estos no quieres tener en el repositorio central. Además hay configuraciones que son locales a un repositorio determinado – por ejemplo los scripts (hooks) que se llaman en caso de un commit. En fin, es probable que todavía prefieres hacer un back-up del repositorio central como se hace con el repositorio de Subversion, porque la existencias de múltiples clones no te tranquiliza lo suficiente.

El pull request

Una ventaja en el ámbito de git es el pull request. Es un flujo de trabajo en que un desarrollador dice que ha terminado algo y pide al jefe de integrarlo en la rama de release. Antes unas cuantas personas más pueden dar su acuerdo o incluso añadir nuevos commits con cambios. Esta funcionalidad no es de git mismo, sino un software adicional que ofrecen servidores para proyectos en git como GitHub.

Los servidores de Subversion no suelen ofrecer esto aunque teóricamente podrían. Pero es cuestionable si hace falta. En muchos proyectos, los desarrolladores pueden comunicarse de otras formas, se puede convenir que nadie hace un check-in en la rama de release menos el autorizado y siempre es posible crear una rama de la rama para proponer modificaciones adicionales. No aparece todo tan bonito en una página web, pero posible, sí, que es.

Y claro, siempre es posible que alguién implemente algo parecido al pull request para Subversion.

Quédate con lo que tienes

Si ya trabajas en git, entonces déjalo. Git no es peor que Subversion. Pero antes de migrar mil proyectos a git, piénsatelo bien. La mayoría de los argumentos a favor de git se mueven en el nivel de alguien que quiere vender su coche normalito para comprarse un SUV. Como no hay razones de verdad a favor de un SUV, busca razones que, al menos para él, aparentan serlo. El SUV gasta más, cuesta más, ocupa más espacio y es tan estrecho por dentro que la rueda de repuesto no cabe. Pero es mejor porque tiene capabilidad de todo-terreno. Aunque esta nunca aprovecharé porque no quiero que me salpique la tierra a mi bonito coche.

Antes de invertir en git, aprende a diferenciar los usuarios de los creyentes en git. Haz un análisis sobre qué esperas de un control de versiones y piensa si el cambio vale la inversión. Si ni siquiera te convence su propia publicidad, entonces es mejor seguir con lo que tienes.

Los repositorios descentralizados son una ventaja cuando los desarrolladores están distribuidos sobre el planeta como suele ser en muchos proyectos de código abierto. No obstante, en las empresas, los desarrolladores suelen trabajar en la misma oficina. Y existe un buen compromiso: el programa git svn permite trabajar con Subversion como si fuera git y, al mismo tiempo, permite trabajar con Subversion como si fuera Subversion. Es decir, es como un coche normal pero con tracción de cuatro ruedas.

Referencias

  • Página principal de Subversion
  • Página principal de git. git svn es parte del paquete git.
  • Página principal de GitHub

Lectura adicional

Punteros a funciones son variables que guardan una dirección de memoria: la dirección de una función. Punteros son una especie de referencia. En muchos lenguajes de programación existe el concepto de referencias a funciones que se pueden guardar en una variable. En este artículo hablamos de punteros de funciones como se usan en los lenguajes C y C++. Sin embargo, los conceptos se dejan aplicar a cualquier tipo de referencias a funciones – también a aquella otra que usa C++: los functores.

El caso clásico de usar punteros a funciones es una cola de eventos. Si programas una cola de eventos, entonces no sabes cómo se llamarán las funciones (manejadores de eventos) que se registrarán. Por eso no puedes llamarles por nombre. De hecho, colas de eventos se implementan frecuentemente en una biblioteca cuyo desarrollo es independiente de la programación de las funciones a registrar. Pues, no sabrás los nombres de las funciones y tampoco necesitas saberlos.

Tu cola de eventos suministras una función de registro. Esta función tiene un parámetro cuyo tipo es una función. Es decir, aunque no sabes los nombres de las funciones, sí, obligas a que tengan un tipo conocido: el que defines tú.

Tu cola de eventos tiene una lista con punteros a funciones que tienen este tipo. Por este punto de vista, una cola de evento no es muy diferente a una base de datos, donde el usuario puede guardar (es decir, registrar) datos. La differencia es que a los datos de una cola de eventos se puede llamar como función.

La ventaja de todo esto: Puedes llamar a un número arbitrario de funciones sin necesitar la declaración de estas funciones de antemano.

No obstante, esto lleva también una pequeña desventaja. Herramientas de análisis de código pueden extraer del código, qué función llama a qué otra función. Esto es una inforamción útil cuando quieres saber a qué “clientes” afectas al cambiar una función. No obstante, este análisis no funciona con punteros a funciones, ya que el valor de ellos sólo se sabrá a tiempo de ejecución. Sin embargo, esto no suele ser una restricción importante. Las funciones que se llaman mediante puntero suelen ser pocas y bien claras. Por ejemplo, una función de nombre OnMouseClick es fácil de reconocer como manenjador de eventos. Además, no es buen estilo de llamar a manejadores de eventos por nombre desde otras funciones. Así no lo harías, ¿verdad?

Muchas colas de eventos suelen guardar más datos que el puntero a la función. La razón es que no quieres escribir 20 manejadores para eventos que sólo se diferencian por un parámetro. La función de registro te permite añadir un dato de tipo identificador, que pasa como parámetro al manejador de evento. El manejador de evento es, por lo tanto, un tipo de función que lleva este parámetro. Dentro del manejador puedes leer este dato y saber así, a base de qué registro fue llamado. Así puedes registrar la misma función para varios eventos.

La pregunta es: ¿qué es el tipo más adecuado para este dato identificador? Pues, muchas implementaciones usan un tipo “cualquier cosa”. En Java, esto sería un Object, en C y C++ gusta un puntero de tipo void* con un parámetro adicional con el tamaño del buffer a que el puntero apunta. De esta forma puedes registrar cualquier dato en la cola de eventos, sin que la cola necesita conocer su estructura. El tipo real sabrá el manejador de eventos, que convierte el tipo “cualquier cosa” en el tipo que realmente espera.

// Al registrar el manejador usas un identificador de tipo struct Id
struct Id
{
    int index;
    char subindex;
};
Id mi_id = { 5, 1 };
cola_de_eventos.registra(mi_callback, mi_id);

// Tu manejador de eventos haría esto
void mi_callback(const void*const datos)
{
    // Tu manejador sabe que está por detrás de estos "datos"
    const Id*const id = static_cast<const Id*const>(datos);
    
    // Aquí haría algo con estos datos como
    // switch (id.index) ...
}

Ten en cuenta que los datos mencionados arriba se guardan junto con la dirección a la función de antemano. Pues, identifican el registro. No es lo mismo que parámetros que se producen junto con el evento. Por ejemplo, un manejador de OnMouseClick esperaría las coordenadas del ratón, donde tuvo lugar el click. Cómo diferentes eventos pueden producir diferentes datos subyacentes, se encuentra a menudo la idea de usar un tipo “cualquier cosa” también para estos parámetros generados en el evento.

Cuando creas un registro de funciones como una cola de eventos, te deberías preguntar, qué tipo de datos quieres permitir. Un tipo “cualquier cosa” da mucha flexibilidad – también para su abuso. Y no es necessario si sólo quieres permitir un identificador.

Si prefieres usar clases en lugar de punteros, define quién debe hacer la limpieza en la memoria. Pasar un objeto por referencia obliga a guardarlo hasta que ya no se usa. Pasar un objeto por copia deja claro al autor del manejador que se debe hacer una copia antes de terminar el manejador si no quiere perder los datos.

Piensa también que C++ permite functores. Functores son clases que sobrecargan el operador (). Así se puede tratar una instancia de esta clase como función: mi_instancia() llama realmente a mi_instancia.operator(). Functores son instancias de clases y estas se protegen mejor contra un fraude como lo permitirían los punteros. ¡Imagínate que el autor de la cola de eventos es malo y no llama al puntero de función que registraste sino a esta dirección más cuatro bytes!

Como ves, punteros a funciones son muy útiles para determinadas tareas como cola de eventos. Puede tener sentido guardar datos de identificación junto con el puntero y puede ser útil manejar un tipo “cualquier cosa” para pasar datos de tipo arbitrario. No obstante es importante de pensar bien, si es mejor restringir la flexibilidad.

Lectura adicional


Estamos acostumbrados a que nuestros ordenadores están cada vez mas conectados. Esto facilita el trabajo – también para quienes nos espian. Desgraciadamente no es suficiente añadir medidas tecnicas. También debemos cambiar nuestra actitud.

No será como antes

Como analogía nos pensamos en una pequeña aldea remota, donde los pocos visitantes se tratan con hospitalidad. El gobierno decide construir una carretera entre dos ciudades que pasa por esta aldea. Con esta carretera, la aldea esta ahora conectado al gran mundo. Y con ella vienen los criminales. Tras un par de robos, los aldeaños deciden a establecer contramedidas.

Al principio los aldeaños sólo optan por medidas técnicas y administrativas: se emplea policía, se instalan camaras de supervisión y se controlan los carnés de identidad. Es decir, en juerga informática, se instalan un antivirus y un firewall.

No obstante, los aldeaños se dan cuenta que esto no es suficiente. Mientras antes se daba la bienvenida a todos, ahora reina la desconfianza. Aunque el trabajo de las fuerzas de seguridad está bien, no se puede vigilar todo a todas horas. Los aldeaños deben cambiar su comportamiento: deben cerrar las puertas a llave cuando antes entraban en la casa de cualquier vecino sin problema, deben poner vallas donde antes hubo un paisaje abierto y deben estar atentos a personas sospechosas. Cuando antes los aldeaños eran un poco tímidos, ahora deben tomar iniciativa y preguntar a los visitantes sobre sus intenciones.

Como uno puede imaginar, todos estos cambios no son fáciles para los aldeaños. Antes tenían una vida simple y ahora deben pensar en llaves, seguir las vallas y acercar a otra gente. Seguramente se quejarán mucho de esto, pero es la única manera de protegerse contra los malos de fuera. Cuando antes lo acceptan, antes se ajustan a las nuevas necesidades.

El Internet tampoco es como antes

Algo parecido a los aldeaños ha pasado en Internet. En los años noventa del siglo viente eramos felices, cuando una página web se descargó en un tiempo razonable. Hoy la tenemos en pocos segundos e incluso hay tiempo para bajar JavaScripts adicionales que envían nuestros datos a unos cuantos servidores más. Podemos hacer vídeochats sobre servidores que son lo suficientemente potentes para hacer una copia de nuestro vídeo y pasarla a varios servicios secretos en tiempo real.

Ten en cuenta que el peligro por el robo de datos normalmente ni es espectacular ni obvio ni inmediato: un puesto de trabajo que ya está ocupado, un control policial así de repente, un seguro de salud de que un día te enteras que es mucho más caro que el de tu amigo. No sabes, quién tiene cuántos de tus datos y cómo lo usa. Y, sí, ¡tienes algo que esconder! Pero eso no andas desnudo por la calle, ¿verdad?

Debemos aceptar, que todo lo que enviamos por Internet, está a disposición de todos por todos los tiempos aunque nosotros lo hemos subido como “privado”. Podemos enfadarnos que tantas organizaciones roban nuestros datos, pero ellas no se cambiarán.Será más fácil cambiar nuestra actitud. (Recuerda el tiempo que la gente ya intenta cambiar la iglesia católica.)

Cambio de cultura

Debemos acostumbrarnos, que no todo lo que es posible es recomendable. Debemos aceptar a utilizar una manera más difícil para nosotros si esta pone la vida mucho más difícil a posibles atacantes. Incluso debemos estar dispuestos a no utilizar ciertos servicios si no son seguros. Esto puede llegar a costarnos oportunidades y amistades. Y seguramente nos cuesta potencia neuronal y tiempo.

La nueva cultura en un ejemplo

Quiero dar un ejemplo, qué este cambio de cultura puede significar concretamente.

El coste real: datos o dinero

Queremos mantener una copia de seguridad de nuestros datos. La manera fácil es subir todo a la nube. Ahí hay alguien quien se encarga a proveer los discos necesarios para guardar todo y hacer las copias suficientes para que se pierda ningún dato si uno de estos discos falla. Probablemente este alguien no lo hará realmente gratis. Simplemente no le pagas en dinero sino en datos. Y con estos datos sacarán aún más dinero contigo más tarde.

Ahora lo haces diferente. Te compras un disco duro para tu copia de seguridad y otro disco para tener una segunda copia. El disco pagas tú, pero nadie más tiene el disco que tú. Es decir, un cambio de cultura es estar dispuesto a pagar por lo que usas. Bueno, quizá no es un cambio sino simplemente aplicar la cultura que ya tienes en otros dominios.

No todo por la red

Lo más comfortable es montar tu nuevo disco duro en red. Así está disponible para hacer copias de seguridad en cualquier momento. El disco conectas al mismo router que usas para navegar por Internet. Pues, probablemente tu router no está infiltrado.

Más seguro aún es si no conectas tu disco duro por la red. Lo conectas con tu ordenador cuando hace falta. Si no lo usas, lo desconectas. Así disminuyes el tiempo que un atacante tiene para hacerse con su contenido. Aunque este tenga acceso completo a tu máquina, no tendrá tiempo suficiente para enviarse todos los ficheros. Para ti, conectar y disconectar el disco es un cambio pequeño; para el atacante requiere encontrar el momento en que puede empezar y renanudar su misión.

Más seguro aún es utilizar un ordenador (viejo) sin conexión de red alguna. Aunque tú apagas la antena, un virus bien programado lo puede dejar encendido sin que te des cuenta. Por eso se venden ordenadores que simplemente no tienen antena: los portátiles air gap. No obstante, antes de gastar dinero considera utilizar una máquina vieja.

Utiliza encriptación

Cómo no querrás renunciar a la red por completo, al menos encripta todo lo que puedas. La forma más potente es que tú encriptas tus datos en tu máquina antes de subirlos. Entonces los señores en medio pueden copiar lo que quieran – sólo ven datos encriptados.

No olvides que una conexión https sólo encripta el canal entre tú y la página web que usas. El proveedor de la página puede leer todo. Si no quieres esto, debes encriptar tus datos antes de enviarlos.

En general evita enviar más de lo necesario: aunque la encriptación hace imposible descifrar tus datos ahora, el avance tecnológico puede hacerlo posible cuando te quieres presentar a las elecciones presideciales.

Una lista de consejos

Quiero enumerar algunos cambios de comportamiento simples que deberías considerar aparte de las medidas técnicas. Estas medidas no harán un robo de datos imposible. Pero, sí, suben bastante el coste para robarlos.

  • No generes más datos que necesario. No hagas fotos o bórralas si no quieres guardarlas. No escribas cosas en los foros públicos que no quieras que salgan en un periódico. Borra datos que ya no tienen uso. Si no quieres destruir el disco, bórralos seguro (sobrescribiéndolos varias veces).
  • Evita subir más datos que necesario. No reenvíes todo que te envían, no te registres en todo, evita poner tu nombre en claro si te obligan registrar. Ten en cuenta también los meta-datos: cuado te has conectado a qué y con quién.
  • Separa datos. No pongas toda tu vida en Internet y no todo al mismo sitio. Saber que fuiste 3 veces al doctor no es muy interesante. Saber que compraste un libro sobre testamentos tampoco. Pero saber las dos cosas juntas, ¡sí!. El peligro no viene por un solo dato sino por la conexión entre muchos.
  • Guarda los datos lo más local posible. No subas datos a la nube que no tienen que estar ahí. Para protegerte contra un incendio, guarda copias de seguridad en varios discos distribuidos por la vivienda o en casa de un familiar.
  • Encripta datos. Crea archivos con 7-zip or volúmenes encriptados con VeraCrypt. Encripta también tus copias locales. Si roban tu disco, no podrán leerlo.
  • Acostúmbrate a contraseñas no triviales. Tienes una para entrar en tu sitema, otro para abrir el volumen de ficheros encriptado, otro para entrar en la red y otro más para cualquier sitio de Internet. (En este punto te podría interesar el artículo Cómo memorizar muchas contraseñas diferentes.) Si estás acostumbrado a muchas contraseñas te cuesta dos minutes más a arrancar tu máquina. Al atacante, en cambio, frena mucho más porque tiene muchas puertas cerradas a llave delante.
  • Aprende teclear las contraseñas con un poco de camuflaje – cubriendo con una mano la otra y utilzando diferentes dedos. También es difícil ver lo que tecleas si tecleas rápido con diez dedos sin mover las manos.
  • Verifica checksums y signaturas. Muchos proveedores ofrecen hashs para autentificar su software. Debes aplicar el mismo algoritmo que ellos para obtener el mismo hash – sino hay posibilidad de fraude. Esta verificación es un tema avanzado y no deberías preocuparte si no lo entiendes – y todavía ni sigues los otros consejos.
  • Usa máquinas virtuales para cada tipo de navegación: Una para el banco, otro para tu email, y uno más para navegar por donde sea. Para un virus es mucho más difícil contaminar todas las máquinas virtuales que sólo una real. Si un virus distruye tu máquina virtual, la borras y creas una nueva.
  • Trabaja offline. Una máquina virtual puede ser sin conexión de red. O mantienes un viejo ordenador sin conectarle a la red. Debes copiar ficheros a mano ahí, pero el atacante también. Y este no vive al lado probablemente.
  • Apaga la conexión de red si no la necesitas. En los ordenadores portátiles puedes apagar la conexión de red con una combinación de teclas como Fn + F2. Esto no te protege contra un virus en el firmware, pero acorta el tiempo que tiene un virus de software a enviar los contenidos de tu pantalla como película en tiempo real.
  • Restringe el acceso físico al hardware. Es posible añadir algo más que envía datos sin que te enteras. Esto vale sobre todo para routers en empresas.
  • No te conectes a todo en todos los sitios. No te conectes a una página que requiere contraseña, si sólo hay un Wifi no encriptado. Mejor lee el periódico en papel.
  • Piensa en papel. Es más trabajo interceptar una carta que un email. Papel mantiene la información más tiempo que cualquier memoria electrónica y se puede destruir perfectamente en un fuego.

A pesar de todo cambio de cultura, no olvides que también se requieren medidas técnicas.

Referencias

  • El programa de código abierto 7-zip permite tratar muchos formatos de archivos e crear archivos encriptados. Se puede instalar una extensión al Explorador de ficheros en Microsoft Windows. En Linux se debe instalar el paquete “p7zip-full”. El paquete “p7zip” solo no basta.

    Al contarario del viejo format zip, el formato 7z permite encriptar también los nombres de ficheros que el archivo contiene. No obstante, es mucho mejor un viejo archivo zip encriptado que ninguna encriptación. Si no tienes una caja fuerte como los grandes bancos, entonces es todavía mejor dejar tu dinero tras una puerta de madera cerrada a llave que abierto en la mesa. Pues, encriptación con zip es usar la puerta de madera, el formato 7z es la caja fuerte del banco.

  • VeraCrypt es un succesor digno del difunto TrueCrypt. Sirve para crear contenedores de ficheros encriptados y montarlos como unidades de disco.

Lectura adicional

Tras cada escándalo, los gran colectores de datos como Google o Facebook adviertan que archivan los datos de forma “anonimizada”. Es media mentira – pero aunque fuera verdad, tienen una base de datos con potencial de bomba nuclear. La comparación puede parecer exagerado – si comparas la opinión sobre los datos en 2050 con la opinión sobre bombas nucleares en 1950.

Datos pseudo-anonimizados

Lo que los servidores web pueden escribir en un log puede contener todo lo que pueden detectar. Como mínimo suele ser el tiempo y la dirección IP del cliente. También pueden guardar los contenidos enviados. Es decir, práctamente todo.

Estos logs suelen ser meramente de uso interno de la compañía que mantiene el sitio web. “Uso interno” suene bien, a menos que comienzas a pensar lo que significa realmente “interno”. En su política de privacidad, la empresa se permite poder (o no) pasar tus datos a terceras empresas, pero asegura que estas tienen que tener la misma protección de datos restrictiva – será que pueden o no pasar tus datos a cuartas empresas.

La compañía advierte también que guardar tus datos en el país que sea. Puede estar obligado a colaborar con las autoridades dentro de la ley. Esto quiere decir en EEUU, que pueden dejar todos tus datos a los servicios secretos sin poder admitirlo, porque esta es la ley en EEUU. Tienen leyes similares en Arabia Saudí, China y Coréa del Norte. Lo que no tienen ahí son los nodos centrales del Internet mundial.

La compañía puede también utilizar tus datos “anonimizados” para clientes que quieren poner publicidad a públicos específicos, por ejemplo chicos de entre 17 y 18 años en poblaciones de menos de 25 habitantes. Casi no se sabe quién podría ser.

Cuando ya no queda nadie con un interés de verdad en tus datos – digamos tras un año – se anonimizan. Por ejemplo, se corta el último byte de tu dirección IP. Así ya podría haber 255 direcciones más, que podrían haber generado el tráfico – y que probablemente están todas asignadas a tu barrio. Seguramente toda esta gente buscaba a la misma hora los mismos términos en Google que tú.

Gracias a la política de privacidad, tus datos están protegidos – con varias copias de seguridad.

El poder de datos realmente anonimizados

Ahora suponemos que los datos son realmente anónimos. Se guarda que alguien ha comprado pantalones verdes y un cuadro de arte abstracta, pero no se guarda la dirección IP. Nadie puede saber que has sido tú.

Pensemos que esta empresa guarda más datos anónimos. ¡Muchos más datos! Y en estos datos hace lo que se llama “data mining”, es decir, buscar correlaciones. De esta búsqueda resulta que personas que buscan en Internet por los términos “SIDA”, “tratamiento” y “ayuda”, buscan con más probabilidad por expresiones como “pantalones verdes” o “arte moderna”. Quizá piensas que un gusto no tiene nada que ver con una enfermedad. Pero el data mining no busca razones. Busca correlaciones.

Vas a una entrevista de trabajo o solicitas un seguro médico. A la cita vas con tus pantalones verdes. Durante la charla habléis de arte. El entrevistador pregunta si te gusta el arte clásico y tu dices “no, el arte moderno”. Y como él sabe de la correlación y tú llevas pantalones verdes, le dices además – sin querer – “y con más probabilidad tengo el SIDA”. Ahora adivinas si vas a tener el puesto de trabajo o el seguro médico.

No importa si has sido tú

No es que buscar información sobre una enfermedad es lo mismo que tenerla. Pero tenerla suele ser una buena motivación de buscar. (Esto es otra correlación.) A un seguro muchas veces no interesa si tienes un problema o no. Basta con que tengas más riesgo. Una empresa no quiere hacerte feliz sino ganar dinero contigo.

Observa que esta situación te puede suceder también, si nunca has utilizado el Internet, y si ni siquiera compraste los pantalones verdes porque te fueron regalados. La información sale de los datos acumulados anónimos de mucha otra gente, que lo ha suministrado – a menudo sin saber que lo estaba haciendo. No se puede sacar de los datos anonimizados, quién los ha generado. Y tampoco importa sacarlo. Valen para todos.

Puede ser que tres características independientes como el color de los pantalones, el estilo de arte y una enfermedad realmente no están correlados. Pero en estas bases de datos gigantescos no sólo se pueden buscar correlaciones entre tres parámetros. Se pueden buscar entre veinte, cien o cuántas haya. ¿Estás seguro que no hay absolutamente ninguna correlación que te podría amenazar?

Bombas por la paz

Una gran cantidad de datos es como una tonelada de plutonio. No supone un gran peligro mientras está sola. Pero sólo por existir atrae a personas a que gusta hacer la vida imposible a mucha otra gente. La diferencia es: con los datos puedes hacer su vida imposible sin matarla.

La radioactividad emitida por una explosión nuclear, en cambio, suele estar en niveles aceptables unas décadas después. El peligro de los datos no. Se guardan igual. Tras unas décadas sólo será posible descifrar algoritmos de encriptación que hoy se consideran seguros.

Lectura adicional

¿Qué son functores?

El lenguaje C ofrece punteros a funciones. Estos permiten llamar a diferentes funciones según el valor del puntero. Un puntero así no apunta a un dato sino a un comportamiento – el comportamiento que implementa la función.

Punteros ofrecen, además, apuntar a direcciones de memorias erróneas. Así es posible ejecutar cualquier dato como función. Esto encanta a los autores de código malicioso. Para los demás interesa evitarlo, es decir, como se puede limitar las direcciones a que un puntero de función puede apuntar.

La solución viene con C++. Functores en el lenguaje C++ son clases que tienen sobrecargado el operador(). Esto permite utilizar una instancia de una clase como una función – y sólo una función y no cualquiera.

¿Cómo se usan functores?

El functor más simple es una clase como en este ejemplo:

class MiFunctor
{
public:
    int operator() ()  { return 1; }
};

Este functor es una clase con el método operator() sin parámetros. Nótese que la primera pareja de paréntesis es el nombre del operador y la segunda para los parámetros si los hubiera.

La clase de functor de arriba se puede usar como en el ejemplo siguiente.

MiFunctor miInstancia;
std::cout << miInstancia();

La primera línea crea un objeto del functor y la segunda llama primero al método MiFunctor::operator() y luego imprime el valor de retorno – que es un uno.

Dónde se usan los functores

El método operator() puede tener también parámetros. Como ejemplo definimos un functor que devuelve el menor de dos vectores.

// El tipo de vector que usamos
struct Vector
{
    float x, y;
};

// El functor que compara dos vectores
class VectorMenor
{
public:
    bool operator() (const Vector& a, const Vector& b) const
    {
        // La forma de comparación no importa aquí.
        // Pero para ser completo lo especificamos:
        // devuele a, si la primera coordenada de a es
        // menor o si la primera es igual y la segunda
        // es menor.
        if (a.x < b.x || (a.x == b.x && a.y < b.y))
        {
            return a;
        }
        else
        {
            return b;
        }
    }
};

// Y así usamos el functor
Vector u, v;
bool u_es_menor = VectorMenor(u, v);

Pues bien, matemáticamente no hay una operación menor entre dos vectores. Así ¿para qué sería útil este functor VectorMenor?

Echemos un vistazo a la definición (simplificada) del contendor std::map de la biblioteca estándar de C++.

template <class Key,
          class Value,
          class Compare = std::less<Key> >
class std::map {};

¿Una vez te has preguntado qué signífica este std::less?

Pues, la clase std::map guarda sus elementos ordenados por el atributo – es decir la clase Key. Así no necesita buscar por todos los elementos cuando busca uno en concreto. Comprueba si el atributo del elemento buscado es mayor or menor que el atributo del elemento en medio de todos los elementos. Según el resultado continúa la búsqueda con la mitad inferior o superior. De esta manera se divide entre dos el rango de elementos a buscar tras cada comparación. Esto es mucho más rápido que buscar por todos los elementos.

Para ordenar los elementos por los atributos, la clase std::map require que se pueda aplicar el operador < al tipo del atributo. Este operador existe para los tipos básicos pero no para una clase cualquiera. Por eso, la clase std::map ofrece especificar un functor que determina la “menor” de dos instancias de Key. El método operator() de este functor toma dos argumentos de tipo Key como nuestro ejemplo VectorMenor. El functor de comparación por defecto es std::less – que simplemente usa el operator< global.

Un mapa que guarda cadena de textos ordenados por vectores, se puede definir así:

std::map<Vector, std::string, VectorMenor> mi_mapa;

Nótese que el functor no es una variable que apunta a una función sino un tipo de una variable. Es decir, una clase.

Herencia de functores

Los functores son clases de C++ y, por lo tanto, se pueden definir todos los métodos en ellos como en cualquier otra clase. Y también se pueden heredar.

Un functor derivado puede sobrescribir el método operator() con su propia implementatción. Más interesante es aún declarar un operator() virtual. Así podemos crear una interfaz de functor que se puede implementar de varias formas.

Como ejemplo definimos una interfaz para comparar cadenas de textos en diferentes idiomas. Esto puede ser interesante porque el orden alfabético varia – en español incluso en el mismo idioma: antiguamente se consideró la combinación “ll” como una letra que se ordenó tras la “l” simple. Por eso, la palabra “llamar” vino después de “luna” en los diccionarios antiguos.

// Definimos una interfaz para comparar cadenas de textos.
class InterfazCadenaDeTextoMenor
{
public:
    virtual bool operator() (const std::string& a,
                             const std::string& b) const = 0;
};

La interfaz obliga que el método operator() tenga dos parámetros del tipo std::string y devuelve un bool. El método operator() está declarado const ya que no modifica variables internos de las clase InterfazCadenaDeTextoMenor. No obstante, esto no es obligatorio. Puede haber functores con memoria que, sí, modifican datos internos.

Es importante tener la misma signatura cuando trabajamos con métodos virtuales. Por eso los tipos de retorno y de parámetros deben estar definidos fuera de la clase. Si usaramos InterfazCadenaDeTextoMenor en la clase base como tipo parámetro y ClaseDerivada en la clase derivada, entonces el método virtual no sería sobrescrito, ya que tendría otra signatura.

Boost Bind and std::function

Los punteros de funciones y los functores pueden aparecer igual en el uso.

// Declaración de tipo de un functor
class Functor
{
public:
    void operator() ();
};

// Declaración de tipo de un puntero de función
typedef void (*Puntero)();

// Instancia de un functor y un puntero
Functor functor;
Puntero puntero;

// Uso de un functor y un puntero
functor();
puntero();

Como vemos, tanto el functor como el puntero aparecen con nada más que paréntesis. Para C++ son dos tipos muy distintos, pero para el usuario hacen lo mismo. Por eso vino la idea de crear un super-tipo que une los punteros y los functores en un comportamiento igual. Este existe en la biblioteca Boost con en elemento boost::bind.

Con boost::bind podemos crear un tipo que se inicializa o bien con un puntero de función o bien con un functor. Algo similar es el objeto std::function de la biblioteca de C++ a partir del estándar 2011.

Conclusión

Los functores tienen el mismo uso como punteros de funciones. No obstante ofrecen la seguridad de no ejecutar código cualquiera como puede pasar con punteros mal inicializados. Además, los functores ofrecen todas las capabilidades de clases de C++. En código mixto de punteros y functores se ofrece boost::bind y std::function como tipo común.

Referencias

Lectura adicional

Hay algunas herramientas que ayudan a proteger la privacidad en Internet. Son herramientas que también personas no expertas pueden aprender a utilitzar.

Situación

Sabemos gracias a Eduard Snowden que los servicios secretos GCHQ y NSA espían en el Internet a gran estilo. Si esto fuera un escándalo, se lo dejaría ahora. Pero el gobierno americano ha dejado claro que este espionaje no le parece mal y el británico opina lo mismo. Incluso los gobiernos europeos que fueron víctimas del espionaje dan más importancia a sus relaciones con el gobierno americano que con los votantes en su país.

Pero no se pierden elecciones por espionar al propio pueblo. Porque supervisar el Internet es bueno contra los malos y la gente buena no tiene nada que esconder. La gente buena reconoces porque deja la puerta de la casa abierta y la llave del coche puesta.

Puede ser que tú, sí, tienes algo que esconder. Por eso te pones ropa cuando vas en la calle y no cuentas cuanto dinero llevas. Tras confirmar que tu gobierno no enfuerza las leyes de protección de datos contra quién haría falta, te preguntas cómo nadie más que tú podría elegir, quién vea lo que envías por Internet. Por suerte, te queda todavía un amigo para conseguirlo: ¡tú mismo!

Meta

No se puede hacer el espionaje imposible, pero, sí, es posible hacerlo más difícil. Es decir: subir el precio para el atacante. Cuando más y mejores puertas pones, más probable será que un intruso no sepa abrir una de ellas y se queda fuera. Y esta es nuestra meta: usar muchas pequeñas medidas fáciles que en su suma agobian lo suficiente a criminales para que prefieran hacerse con los datos de otras víctimas en lugar de los nuestros.

Este artículo sólo trata de soluciones técnicas. No obstante, no serán suficientes. También requiere un cambio de cultura en el uso de Internet. Pero esto es un tema tan grande, que lo trataré en otro artículo.

Contraseñas

La primera razón porque alguien roba una casa es porque su propietario ha olvidado cerrar la puerta. El mismo punto débil es una contraseña fácil de adivinar. Entrar en un sistema de acceso restringido es tan imposible como atreversar un gran muro – a menos que alguién dejó un log-in abierto.

Recordarse de muchas contraseñas es un lío. Pero puedes guardarlo en una base de datos de contraseñas como KeePass. O aprendes una regla para memorizar muchas contraseñas diferentes.

HTTPS

¿Has probado una vez de abrir alguna página web con https en lugar de http? ¡Hay sorprendentemente muchas! No te preocupes si te sale un error de certificado. El propietario de la página no ha querido pagar a los vendedores de tu navegador para estar registrado como fuente de confianza. (No obstante, los bancos suelen hacerlo y en su página un error de certificado, sí, debería preocuparte.)

El certificado es parte de la encriptación con SSL. La encriptación funciona también si el certificado no es válido. Por lo tanto, usar https es más seguro que utilitzar http (sin s). Para el navegador Firefox existe la extensión HTTPS-Everywhere que intenta conectarse a todas las páginas con https si es posible. Así te ahorras teclear “https” en la barra de dirección de tu navegador.

Recuerda que el protocolo https encripta el contenido. No encripta con quién estás comunicando. Para esto sirve el navegador Tor

Navegador Tor

Si usas el navegador Tor (que viene en el Tor-Browser-Bundle), entonces no te conectas directamente con tu página web de destino sino a través de varios otros ordenadores distribuidos en el mundo. Es decir, alguien que supervisa tu conexión de red no ve, con quién te estás realmente comunicando y la página web, a que te has conectado, no ve tu dirección IP real sino la del último nodo en la cadena.

Tor “encripta” de alguna forma con quién estás comunicando pero no qué. Puedes descargarte los mismos virus y la comunicación entre el último nodo de Tor y la página destino no está encriptada si usas el protocolo HTTP en lugar de HTTPS.

Utilizando la red de Tor, tu dirección IP suele ser una de otro país y esto no siempre conviene. Hay páginas que se dan cuenta, que alguna dirección IP de otro país intenta acceder a tu cuenta y piden más pruebas de tu identidad. Puede llamar la atención que siempre se accede a tu cuenta por otra dirección IP. Es posible que un sitio incluso te prohibe conectar.

Otra desventaja de Tor es la lentitud. Como no te conectas directamente sino através de varios otros nodos, la comunicación es más lenta. Al cambio acabas más lentamente en la cárcel si vives en un país donde a las autoridades no gusta que te conectes a ciertas páginas.

Desactivar JavaScript

Hubo una vez una versión del botón “Me Gusta” de Facebook que envío datos como la dirección IP de quien abrió la página a un servidor de Facebook. Y esto sin pinchar en el botón sino sólo por abrir la página que lo contiene. Scripts así hay muchos. Sólo por abrir una página ya has informado a unos cuántos servidores – a menos que desactives JavaScript por defecto.

Desgraciadamente, muchas páginas no funcionan sin JavaScript. Pero al menos para el navegador Firefox existe la extensión NoScript, que te deja seleccionar los dominios a que permites ejecutar JavaScript. Tiene el efecto secundario que aparece menos publicidad – sobre todo aquella que ofrece “ayuda” para el problema personal que acabas de buscar en Google.

NoScript viene por defecto en el navegador Tor. No obstante, debes desactivar todos los scripts por defecto y permitir hablitar dominions o direcciones en la configuración.

Búsqueda anónima

Lo habitual es que tu buscador favorito guarda todas tus búsquedas. Tiene la ventaja que los resultados suelen ser mejores para lo que buscas – a exception de aquellos resultados que algunas personas poderosas no quieran que veas. La desventaja es que alguien en este mundo sabe todo lo que estás buscando – y con eso los problemas que tienes.

Hay páginas que te permiten una búsqueda anónima. Las páginas de Ixquick y su gemelo Startpage prometen incluso no guardar tu dirección IP. (Al contrario de IxQuick, Startpage reenvía tu consulta a Google. En Googe no aparece tu dirección IP, pero sigues contribuyendo a su gran base de datos sobre las búsquedas de la humanidad.) Tienen, además, la ventaja que la sede de la empresa proveedora no está en EEUU sino en los Paises Bajos. EEUU tiene una ley que permite a las autoridades el acceso a cualquier dato y que prohibe a la empresa que lo suministra admitir que lo haya suministrado. Es decir, las autoridades pueden acceder a lo que quieran como en un país totalitario. Los Países Bajos no tienen una ley así.

La idea de no guardar datos personales provee también Swisscows. Sus servidores están localizados en Suiza que promete aún mejor protección de datos. No obstante, no tiene (todavía) un acceso a las páginas propuestas por proxy.

Borrar cookies

Los cookies contienen datos que los sitios web guardan en tu navegador. En general contienen un identificador. Este identificador usan los sitios web (y sus sitios amigos) para sacar de su base de datos todos los datos que hayas producido desde la existencia del universo.

No tienen por qué saber qué persona real está detrás de este identificador. Lo que saben es que alguien con este identificador tiene una dirección IP de la calle en que vives, usa tu nombre de usuario, accede a ciertos servicios a ciertas horas. Ahora puedes imaginarte cuántas personas más coinciden contigo en estas características.

Una forma de ponerlo un poco más complicado al enemigo es borrar los cookies. Así Google pierde tus preferencias de búsqueda, YouTube te pregunta tu idioma preferido y unas páginas más no saben quién eres.

Aunque no te fies demasiado: tu dirección IP no puedes cambiar borrando cookies y tras el log-in con tu usuario saben quién eres y quién has sido. Por eso, borrando cookies será más eficaz en páginas a qué accedes sin contraseñas – por ejemplo a una página de noticias. No obstante considera que el botón “Me Gusta” en esta página de noticias puede informar a Facebook lo que estás viendo y sabrá quién eres tú cuando entras en Facebook.

Emails

Encriptar emails suene bien, pero suele ser poco práctico. Requiere que el destinatario te haya enviado su llave pública anteriormente – que seguramente no ha hecho. La encriptación PGP de emails sólo encripta texto plano y se olvida de los anexos. Es decir, la encriptación de emails es útil cuando quieres enviar un SMS por email pero para poco más.

Mejor forma es poner el contenido secreto en un fichero aparte, encriptar este y añadirlo como anexo. Esto permite utilizar cualquier forma de fichero y no necesitas instalar algo complicado en tu cliente de correo. Es incluso posible no necesitar llaves públicas del destinatario, si usas una herramienta como 7-zip.

7-zip comprime y encripta cualquier fichero – incluso los nombres de ficheros. Más secreto no se puede. El problema es que debes decir la contraseña de encriptación al destinatario – y este debe instalar la misma herramienta 7-zip, por supuesto.

No es buena idea poner la contraseña en el mismo email, pero decirlo por teléfono ya lo haría complicado incluso para la NSA: Deberían captar tus emails y tus llamadas teléfono y saber correlarlas. No es imposible pero probablemente un coste demasiado alto para alguien tan importante como tú.

La forma más segura es decir la contraseña en persona. Otra forma segura es aprovechar conocmientos internos entre tú y el destinatario. Una frase como “la contraseña es el nombre del profesor raro ese que tuvimos en el primer año en la escuela más la nota que te dio en deportes” puede ser fácil para el destinatario y difícil de entender para un no destinatario. ¡Y así debe ser!

Email y Cloud Provider

Yahoo, Google, Facebook y todas las demás empresas de EEUU tienen que colaborar con el serivico secreto de ahí – si les gusta o no. En Irán y Arabía Saudí no será mejor pero hay países como Suiza dónde sí. Si la privacidad importa, entonces considera guardar tus emails y demás datos en la nube de un país con valores éticos suficientes.

Por el lado opuesto querrás colaborar en la búsqueda de chicos malos por el mundo y, por eso, quieres dar voluntariamente a la NSA todos tus datos. ¡Para que vean que al menos tú no eres malo! Pues, solicita a la NSA que ofrezca un servicio de NSA-Mail y NSA-Drive, donde tú puedes guardar tus datos gratis. Para tí no cambia mucho y para ellos facilita el trabajo. (Curioso que ellos no han implementado esta idea todavía. ¿Acaso tienen miedo a ataques por hackers?)

Máquinas virtuales

Máquinas virtuales son ordenadores “virtuales” que corren dentro de otros ordenadores. Dependiendo de la configuración ni siquiera se dan cuenta de esto. Por eso son útiles para navegar en Internet. Si descargas un virus y este destruye tu máquina virtual, simplemente creas una nueva. Pero el sistema que realmente controla tu ordenador no está afectado. Idealmente utilizas varias máquinas virtuales dependiendo del uso: Uno para conectarte a tu banco online, otra para descargar información en Internet y una tercera para acceder a estas páginas con alto riesgo de contaminación. Puedes tener una cuarta para edición offline. A esta máquina virtual puedes desactivar el acceso a red.

Las máquinas virtuales separan bien tu ordenador de los virus, pero requieren mucha memoria y van más lento que el sistema operativo nativo. Además, las debes instalar.

Una combinación gratis es Virtual Box con Linux Mint. VirtualBox administra y ejecuta las máquinas virtuales. Linux Mint corre dentro de la máquina virtual – sin más configuración. (Esto no ofrecen todas las distribuciones de Linux.) Además, para las víctimas de Microsoft Windows 8, Linux Mint te trae un menú de inicio.

Guardar los datos en el sitio adecuado

Puedes guardar tus datos en la nube, en el disco duro de tu ordenador o un disco externo. Cuando más desconectado es el disco en que guardas tus datos, más difícil lo pones a estos señores del mundo virtual y más fácilmente los perderás en un incendio, robo u otra visita del mundo real. Desgraciadamente no tienes ninguna manera de comprobar si tu proveedor de nube sigue sus propias políticias de privacidad (o publicidad). Así considera que tus datos en la nube estan a disposición del proveedor, posibles empleados criminales y los servicios secretos con que colabora de forma intencionada o no intencionada. No es mala idea tener tus datos en un disco duro externo encriptado que guardas en la casa de tu abuela.

No olvides que los sistemas modernos llegan a hacer una copia de “seguridad” de tus datos en la nube sin preguntarte de una forma comprensible. Tómate el tiempo de leer las opciones ofrecidas y considera no utilizar todos los servicios que aparentan hacer el uso más fácil. ¡No subas datos no encriptados a la nube!

Camuflar datos

Camuflar datos no sustituye la encriptación sino la complementa. Cuando un atacante ya sabe que tienes algo que esconder, buscará en tu ordenador robado hasta que lo haya encontrado (y te pide la contraseña a punta de pistola si es necesario). Así la primera línea de defensa es no tener nada, que parece ser interesante.

Por ejemplo, elige nombres de ficheros no sospechosos. Llamar un fichero contraseñas.txt llama la atención. Llamar este fichero cosas.txt menos. Puedes aprovechar la estructura de directorios para esconder el significado de ficheros también. Un fichero “foto_0114.jpg” en una carpeta “vacaciones 2003” no llama mucho la atención aunque contenga contraseñas.

También puedes esconder datos en otros ficheros. Hay programas que esconden datos en imágenes o música y parece que siguen siendo las mismas imágenes o música. Esto se llama esteganografía. Los ficheros de Microsoft y Open Office son archivos zip a que puedes añadir algo sin que parezca otro documento. (No obstante, el documento aparece “corrupto” cuando lo abres.) El programa VeraCrypt permite crear discos encriptados con volúmenes escondidos. Es decir, aparece un disco lógico encriptado con nada interesante y sólo tú sabes que hay otro disco con más datos dentro.

Todos los camuflajes sólo funcionan cuando el atacante no sabe que lo usas. Así no cuentes a nadie qué pasos concretos has tomado para esconder tus datos más interesantes. Además, puedes crear ficheros que aparentemente contienen el contenido buscado. El atacante sabe que guardas tus contraseñas en el disco duro del ordenador robado, así se quedará satisfecho cuando encuentre un fichero “contraseñas.txt” en que aparecen contraseñas aunque no sean los tuyos. Mantener varios ficheros con casi el mismo contenido puede confundir al enemigo, porque ya no sabe cuál es el bueno. No obstante, esto sólo confunde cuando importan los detalles y cuando las fechas de modificación no disten mucho.

Y finalmente, no camfules tus datos tan perfectamente que no los encuentras ni siquiera tú. La idea es poner la vida difícil al atacante y no a tí.

Apaga la conexión de red

Apaga la conexión (inalhámbrica) de red si no trabajas con Internet. (Los ordenadores portátiles suelen ofrecer una combinación de teclas para entrar en modo de “aeronave” como fn + F2.) Con menos tiempo en la red minimizas el tiempo que un programa malicioso tiene para copiar datos. El software que desarrollan los servicios secretos puede servir para guardarte con la cámera de tu portátil y transferir la imagen que ves en la pantalla a la vez. Sin conexión se acumulan datos sin enviar – y con suerte se echan.

Por cierto, copiar datos sin utilitzar la red es una forma potente de evitar ataques por Internet. ¡Y no olvides el correo convencional! Con tantas ganas de supervisar toda la red, los gran hermanos ya no prestan tanta atención a las cartas escritos en papel.

Resumen

Como hemos visto, hay muchos pequeños trucos para hacerte menos visible a quienes gusta controlar a todos. No te hará invisible. Pero te hace una víctima menos fácil.

Referencias

Todo el software aquí referenciado es de código abierto o, en caso de las páginas web, de uso libre.

  • KeePass es una base de datos de contraseñas que permite incluir ficheros de cualquier tipo como anexo.
  • HTTPS-Everywhere es una extensión para Firefox, Chrome y Opera para abrir páginas con HTTPS en lugar de HTTP cuando el sitio web lo ofrece
  • El navegador Tor permite camuflar con qué sitio web te conectas. Se basa en el navegador Firefox.
  • NoScript es una extensión para Firefox para deshabilitar JavaScript de ciertas o todas las fuentes en las páginas web. Ideal para suprimir publicidad o el traceado de Facebook o Twitter mientras usas el JavaScript con la funcionalidad que realmente necesitas. El navegador Tor tiene NoScript ya instalado.
  • Ixquick es una máquina de búsqueda en Internet con la intención de no guardar datos personales. Interesante es su función de abrir páginas por un proxy. Así la página que abres no se entera y el URL que abres no aperece en la historia de tu navegador (y en el log de tu proveedor de Internet). Además, los enlaces sobre el proxy se invalidan tras apróximadamente una hora.
  • Startpage es lo mismo que Ixquick, pero muestra los resultados de una búsqueda reenviada a Google. Sigues siendo anónimo pero contribuyes a la colección de búsquedas guardadas de Google. En cambio, los resultados de la búsqueda suelen ser mejores. (Google ya sabes qué quieres.)
  • Swisscows, una máquina de búsqueda de una empresa en Suiza. No ofrece un proxy como Ixquick y Startpage, pero Suiza tiene más credibilidad a proteger datos que los países del anti-terrorismo. Ixquick, por cierto, es una empresa de los Paises Bajos.
  • 7-zip, también conocido como P7ZIP, sirve para comprimir archivos igual como el zip estándar. La compresión es mejor y es posible encriptar también los nombres de ficheros. Además, la encriptación usa el algoritmo seguro AES-256 y no ZipCrypto como el zip tradicional.
  • Virtual Box es un programa para correr máquinas virtuales.
  • Linux Mint es una distribución que se ha permitido usar también componentes gratis de código cerrado para hacer la vida más fácil al usuario no experto. Es la única distribución que conozco donde la pantalla se ajusta automáticamente al tamaño de la ventana de la máquina virtual en Virtual Box. (Ubuntu y Debian se quedan con las resolución en formato 4:3.)
  • VeraCrypt sirve para montar contenedores encriptados de ficheros como si fueran discos lógicos. El montaje requiere derechos de administrador en el sistema en que se usa.

Lectura adicional

Hay muchos artículos que tratan de como formar una contraseña “buena”. El problema es cómo memorizar 50 diferentes. En este artículo presento una manera que se basa en memorizar una regla para formar contraseñas en lugar de las contraseñas mismas.

El problema

Como te preocupa la seguridad de tus datos, usas varias cuentas de email distintas. Los correos más importantes te dejas enviar al servidor de la NSA, porque sabes que ahí no se borra nunca nada. Como tienes pocos correos importantes, nunca te acuerdas de la contraseña para abrir la página de correo. Lo que, sí, te acuerdas es que cambias tu contraseña a menudo por seguridad. Con este método te aseguras que aún no sabes tus credenciales si te acuerdas de alguna contraseña porque ya no estás seguro si es la actual.

¡Así de frustrante es hacer contactos seguros por Internet!

Una forma de resolver este problema es mantener una base de datos de contraseñas como KeePass que a su vez está protegido por una contraseña maestra. Así sólo necesitas saber una contraseña para saberlas todas (y la NSA y demás interesados también). Pero conlleva el inconveniente que necesitas esta base de datos siempre a mano y esto a veces no es tan fácil. Instalar un programa así en tu smartphone y, además, confiar que no envie tu base de datos por ahí ya es un reto. El otro es abrir la base de datos, leer la contraseña correspondiente y editarlo en la página que quieres abrir. No es fácil si es la contraseña que da acceso a tu teléfono.

La vida sería mucho más fácil si tuvieras todas las contraseñas en la cabeza. La buena noticia es: se puede. En lugar de memorizar contraseñas memorizas una regla de como formar una contraseña. Los “datos de entrada” a que aplicar esta regla los obtienes directamente del sitio en que quieres entrar.

Los ingredientes

Queremos una contraseña diferente para cada sitio. Así el sitio debe ser un ingrediente en la contraseña de alguna forma. También quieres cambiar tu contraseña regularmente. Así el tiempo también debe ser una parte. Personalmente considero los siguientes ingredientes en cada contraseña.

  1. Una parte “fija”. Esta parte sirve para hacer la contraseña más larga, ensamblar los demás datos en una frase completa y subir la entropía (o calidad de encriptación). No obstante, la parte fija puede omitirse si uno quiere.
  2. El sitio. El sitio es adonde quiero entrar: “el teléfono”, “NSA”, “mi ordenador”, “facebook”.
  3. El tiempo. Conviene usar el año para la noción de tiempo, pero esto depende de qué a menudo cambias tu contraseña en general.
  4. La versión. La versión tiene un significado variado según tus necesidades. Si cambias tu contraseña cada més, podría ser el mes. Si cambias tu contraseña cuando en el periodico sale que fue robada, entonces la versión te permite crear una nueva contraseña y todavía usar el mismo año para “el tiempo”. No obstante, ninguna versión también es una versión válida. Se puede omitir.

Con todos esto campos se podría crear una contraseña como “Mi primera contraseña para la NSA en 2015”. Tiene una parte fija (“Mi … contraseña para … en”), un sitio “la NSA”, el tiempo (“2015”) y una versión (“primera”).

De hecho, esto ya es toda la mágica. Con esta regla puedes crear una contraseña distinta y con fecha de caducidad para cualquier sitio en que entres. En la contraseña actual entra el año actual. Si no funciona, debe funcionar la contraseña del año pasado. (Y si ésta tampoco considera cerrar la cuenta.)

Encriptar tu contraseña

Esta contraseña ejemplo arriba es fácil de crear y fácil de adivinar. Mejor es una contraseña que sólo es fácil para ti. Además, si uno ha descubierto una de tus contraseñas, entonces no quieres que lo tenga fácil adivinar las demás. Así debes poner el sitio, el tiempo y la versión en una manera encriptada.

La versión

La versión es la más fácil. Lo que necesitas es alguna enumeración con un orden definido. Los números natureles 1, 2, 3 son un ejemplo. Más ejemplos pueden ser las ciudades en que has vivido, los nombres de los peces en tu aquario en el orden de entrada, tus profesores de matemática en la escuela o los años en que has ganado el campionato de bailar Merengue. Todos estos ejemplos tienen en común que sólo tienen un orden (cronológico) en tu vida y que no aparentan ser demasiado ordenados por alguien más. Normalmente no necesitas muchas versiones diferentes. Así te vale con cuatro cosas.

El tiempo

Saber que “2015” representa un año es bastante obvio. Así es mejor camuflarlo. No camufla mucho eligir otro calendario como años budistas o judios o representar el año por el animal de turno del calendario chino. Para ti puede ser exótico pero para un posible atacante puede ser lo más normal del mundo.

Lo que funciona mejor que hacer un cálculo mátematico que no sea una simple adición o subtracción ya que estos dejan la estructura del número todavía demasiado obvia para alguien que ha robado varias de tus contraseñas. Mejor es una multiplicación con un número pequeño que sólo sabes tú como los años que tiene tu perro o el número de cuadros en la pared. Ayuda si este número se cambia cada año, porque así no multiplicas siempre con el mismo número que también dejaría una estructura visible como los múltiple de 5 de todos los años.

Mejor aún para romper la estructura de número de años consecutivos es aplicar un algoritmo no líneal. Por ejemplo, los años pares multiplicas por el número de cuadros y los impares por los años de tu perro. Ideal es la combinación de varios cálculos. Pero tu procesador de cálculo cerebral probablemente prefiere que te limites a algo que todavía seas capaz de hacer bajo la influencia de drogas socializadas.

Como los dos primeros cifras del año no cambian mucho, es mejor hacer los cálculos sobre el último o los dos últimos dígitos del año.

El sitio

¿Es obvio que una contraseña que contenga “para la NSA” será para la NSA? Pues, ¡sí! Tienes dos formas de tratar este problema.

La versión número uno trata de camuflar el sitio de una forma similar que el tiempo. Aplicamos un cálculo sobre letras. Por ejemplo, escogemos para cada letra la próxima del alfabeto. La “NSA” sería entonces “OTB”. Puedes intentarlo con más fantasía: si es un vocal, entonces avances tantas letras como los años que tiene tu perro y si es un consonante retrocedes tantas letras como suman los dígitos de este año. (Por ejemplo, 2 + 0 + 1 + 5 = 8 posiciones) De esta manera cambias incluso la encriptación cada año.

El problema con la versión número uno es que no es práctico. Si has calculado que la “NSA” sea algo como “OTB”, entonces empiezas memorizar la “NSA” como “OTB”. El cálculo con letras no es tan fácil de manejar por el cerebro que el cálculo con números. A menos que seas una excepción, te pararás al teclear el sitio porque el cálculo de letras te cuesta tanto esfuerzo mental.

Así llegamos al número dos: ¡no hacer nada! Aparentemente. Alguien que ha descifrado tu contraseña siempre sabe para que sitio sirve, porque encontrar una llave sin saber la cerradura a que corresponde no es un peligro. Así no revelas demiasado que la contraseña para la “NSA” contenga las letras “NSA”.

Lógicamente no quieres que el atacante sólo necesita reemplazar “NSA” por “Casa Blanca” para obtener el pase a algún edificio emblemático. Pero esto puedes resolver de una forma más sútil. Y para esto conviene la parte “fija”.

La parte “fija”

He puesto “fija” entre comillas porque no necesita ser tan fija” La puedes usar para subir el número de combinaciones posibles.

Digamos tu parte fija es “campeón”. Si el sitio tiene tres letras, entonces reemplazas las primeras tres letras por puntos “…peón” o escribes la tercera letra en mayúscula “caMpeón”. Cómo no quieres que un atacante simplemente reemplaza “NSA” por otra institución de tres letras, entonces lo pones un poco más complicado. Reemplazas la tercera letra por la primera del sitio y añades la última. Así obtienes “caNpeónA”.

En general puedes seguir las recomendaciones para formar una contraseña para crear la parte “fija”. Puedes mezclarla con la información de las otras parte tiempo, sitio y versión. Así la parte “fija” se modifica y rompe la estructura aparente de la contraseña. Aunque un atacante sepa en qué parte pones el sitio y el tiempo, no lo tendrá tan fácil en saber como estas partes modifican la parte “fija”. De esta forma te permites no necesitar camuflar las otras partes mucho.

A probar

La primera cosa es inventarse una regla. Para comprobarla escribe varias contraseñas formadas por ella y mira cuanto se distinguen. Cuanto más mejor – especialmente aquellos que vienen de datos similares porque, por ejemplo, sólo cambiaste el año o el sitio.

La segunda cosa es aplicar la regla y esto ya cuesta bastante más coraje. Ahora te toca cambiar contraseñas y confiar que no las olvides. Para el principio te recomiendo que sólo cambias unas pocas que usas a menudo y, por seguridad, te las apuntas en algún fichero encriptado offline. Tras un par de semanas estás acostumbrado a la nueva forma.

Además, comienza con una regla que no te cuesta demasiado pensarlo. Tras medio año estás más entrenado y cambias a una más compleja. De hecho, cambiar la regla a veces puede mejorar la seguridad como lo hace cambiar la contraseña. Pero como tu regla ya contiene un campo de tiempo, no hace falta cambiarla tan a menudo.

Un problema te puede surgir por la ortografía. ¿Nombres propios comienzan mayúsculas o los escribo como los hace los propietarios? Es decir, “Facebook” o “facebook”? Mi recomendación es póntelo fácil: todos los nombres escribes igual. Todos minúsculas o primera mayúsculas o la última letra mayúscula. Así evitas el problema.

Un problema más difícil es la denomicación de los sitios. ¿Tu cuenta de correo lo tienes en “Google” o “Gmail”? ¿En qué piensas cuando tecleas la contraseña de acceso a tu ordenador? ¿El nombre que tiene en la red o simplemente “mi ordenador”? Verás que muchas veces no es tan fácil determinar un sólo nombre obvio. Para esto no hay una regla de oro. Intenta sentir en lo que piensas primero cuando ves tu ordenador, tu teléfono, tu blog o tu cuenta de correo y esto escoges como nombre de sitio. Esto tendrá éxito porque muchas veces pensamos primero en lo mismo cuando vemos la misma cosa. (Lógicamente esto no es recomendado para quien piensa siempre en lo mismo no importa lo que vea.)

También para la denominación ponlo fácil. “Quizá no es creativo llamar “ordenador” a tu ordenador pero lo obvio para uno no tiene por qué serlo para otro. (Si no lo crees sigue una conversación entre tu padre y tu madre.)

Tampoco lánzate demasiado. Empieza cambiar la contraseña en los sitios que ya tienes claro como denominarlo. Quizá sería perfecto cambiar todas las contraseña a tu nueva regla, pero si sólo cambias un 20 por cien, ya has ganado algo. Debes aprender una nueva forma de hacer las cosas y esto cuesta tiempo. También verás como querrás mejorar tu regla inicial tras cierto tiempo. Así empieza con poco. No es un error mantener una base de datos encriptada con contraseñas mientras tanto – sobre todo con las que usas poco.

Trampas

Aunque la regla sea perfecta, el mundo no lo es. El dogmático intenta cambiar el mundo, el pragmático ajusta el dominio en que la regla es válida. Como no falta opiniones sobre como hacer el primero, aquí tratamos la segunda manera.

Contraseñas de longitud limitada

¡Sí! Esto existe hasta hoy en día: que una contraseña no deba contener más que ocho caracteres o al menos no más que 16. Es un aviso que el sistema guarda la contraseña directamente en lugar de algún hash como MD5, ya que este hash siempre tiene la misma longitud.

Si tu contraseña no cabe, entonces busca alguna forma de abreviarla. La más obvia es abreviar cada palabra con la primera letra. O sólo las palabras y no las cifras. O sólo escribes la letra que escribes en mayúsculas. En fin, te hace falta encontrar una regla de cómo abreviar tu regla. O directamente inventas una regla con contraseñas cortas aunque esto tampoco es la mejor solución ya que baja la seguridad en todos los sitios.

Claves de cifras

Claves de cifras hay muchas: la cerradura de números de tu maleta, el código para la caja fuerte en el hotel y el PIN de tu teléfono. Algunos sistemas ni siquiera te permiten cambiar el código como muchas tarjetas de crédito. Ahí olvídate de cualquier regla de formar contraseñas. Mejor aprendas una para memorizar números.

Es lógico que tu reglar de arriba no va a funcionar con códigos numéricos o ¿cómo escribes el sitio “caja fuerte” con los cuatro cifras que te permite sistema?

La solución es inventarse otra regla que genera sólo dígitos. Hazte libre de cualquier regla que acabas de inventar para tu ordenador y piensa en algo puramente numérico. Fechas son malas, pero sólo si se relacionan públicamente contigo como tu cumpleaños. Algún otro día que no quieres olvidar, aunque no quieres decir a otros qué día era y qué hiciste entonces, es una mejor opción.

Una regla numérica es una secuencia matemática. Por ejemplo, 123456. Mejor ejemplo, 112358, que es la secuencia Fibonacci. Aún mejor ejemplo, 126258, que la secuencia de Fibonacci multiplicado por la posición del dígito.

Al contrario de contraseñas, no es necesariamente buena idea incluir el tiempo en una clave numérica, porque muchas claves no se cambian casi nunca. Piensa en la maleta con cerradura numérica y sólo usas cada dos o tres años. ¿En qué año pusiste el código por última vez? ¿No lo prestaste a alguien que seguramente lo cambió? Al final quizá ni es la peor idea de siempre poner la fecha de contraer matrimonio. Si alguien la adivina, pues, entonces al menos a uno puedes preguntársela.

Nota del autor


A la hora de escribir este artículo no conozco ningún otro que trata este tema. Así es posiblemente la primera publicación de esta idea. Si quieres citarlo en una obra científica puedes poner el enlace a esta página (a falta de algo mejor) o te pones en contacto conmigo (con el enlace “Envía un mensaje al autor” al lado).

Referencias

  • KeePass – “caja fuerte” para contraseñas

Lectura adicional

Hay muchos artículos que tratan de cómo formar una contraseña segura. En este artículo nos preguntamos, por qué una contraseña es segura.

El atacante entra con contraseña

Para entender el significado de seguridad de una contraseña, nos ponemos en la piel de un atacante. Un atacante ve un sistema informático similar como un caballero un castillo medivial. Los muros son demasiado gordos para hacer un agujero en ellas y demasiado lisos para escalar. Si quiere entrar tiene sólo una opción: ¡por la puerta!

Los defensores lo saben y, por eso, procuran vigilarla bien. Para entrar necesitas decir la contraseña y si la dices tres veces mal, se cierra. Así le pasa al atacante con un sistema informático. La puerta de entrada es el log-in y si quiere pasar, debe adivinar la contraseña.

Hallar una contraseña

El procedimiento para adivinar la contraseña es el siguiente:

  1. Reduce el conjunto de contraseñas posibles con el conocimiento que tienes sobre la víctima. Por ejemplo, si sabes que sus contraseñas son siempre fechas, entonces no habrá contraseñas con letras.
  2. Intenta entrar en el sistema con una de las posibles contraseñas restantes hasta que encuentres la correcta.

Aunque el atacante suele hacer el primer paso bien, el número de contraseñas por probar a ciego puede ser todavía demasiado para teclear todas a mano. Las pantallas de log-in suelen limitar el número de intentos fallidos a tres. Pero si sabe que usas la misma contraseña para varios sitios, puede intentarlo varias veces con tres contraseñas diferentes.

Peor aún si puede hacerse con una copia offline de algo encriptado – por ejemplo el tráfico de red o una copia de un fichero encriptado. Entonces puede intentarlo tantas veces que quiere. Si lo consigue tiene una idea más de como tú formas tus contraseñas. En otras palabras, para hallar esta contraseña ya le ayuda que te descuides de cualquier contraseña.

Qué significa contraseña “segura”

El punto clave de una contraseña “segura” es aumentar las combinaciones posibles cuál podría ser. Cuando más contraseñas el atacante debe probar, más tiempo le cuesta – idealmente más tiempo que existe el universo. Cuando todos los ordenadores juntos no bastarían para probar todas las contraseñas posibles en un tiempo razonable, entonces la contraseña se considera “segura”.

De hecho, una encriptación “segura” en la informática no hace el descrifrado matemáticamente imposible. Sólo sube el coste a algo infactible. O al menos infactible ahora. Igual te has enterado que los servicios secretos angloamericanos guardan datos encriptados aunque no los pueden desencriptar. Pero es posible que la tecnología en diez años permite descriptarlos. Y por eso puede ser interesante quedarse con estos datos.

Para dar unos números, imagínate que consideras tu contraseña segura, si el atacante tardaría cien años en probar todas las posibles contraseñas. Si su programa de descriptación puede probar cien contraseñas por segundo, entonces le deberías dar la sensación que has eligido tu contraseña entre tres mil millones posibles. Para dar una comparación: Un número de 32 bits puede representar más de cuatro mil millones de estados. El diccionario de la Real Academia Española contiene 93000 artículos.

Estas son las combinaciones que el atacante debe probar después de haber eliminado todas las contraseñas que sabe que no usas.

Eligir bien

Como hemos visto, eligir entre mil millones contraseñas posibles puede ser una tarea que un sistema automatizado puede resolver en un tiempo razonable. Por eso tienes que eligir entre diez o cien veces más.

Hoy en día, las claves generadas por ordenador son de 256 bits. Esto corresponde a 1077 – o un número con 77 dígitos. Así los ordenadores encriptan bien. El problema viene cuando un humano tiene que recordar la clave, porque a nosotros no es fácil memorizar (y teclear) 77 dígitos – y mucho menos 77 dígitos distintos para cada log-in que tenemos.

Nosotros podemos combinar letras, símbolos y cifras para aumentar la cantidad de información de cada “dígito” y así memorizar una contraseña menos larga con más combinaciones posibles. No obstante, esto aún no es suficiente. Necesitaríamos aún más de 40 símbolos para llegar a 256 bits. Para los humanos, sólo nos queda otra opción: cambiar la contraseña a menudo.

No obstante, es previsible que un día los ordenadores pueden probar cualquier contraseña inventada por un ser un humano en menos tiempo que el humano puede inventarlas. Así el futuro será una contraseña que ya no se teclea: la huella dactilar, el iris en el ojo o algún chip.

Lectura adicional

Muchas veces se habla de una “encriptación de x bits”. Pero esto, ¿qué significa? Sabemos que más bits de encriptación suele ser mejor, pero ¿es una encriptación de 128 bits el doble de seguro que una de 64 bits?

El significado de bits

Toda encriptación usa de alguna manera una contraseña. Una encriptación de x bits dice, que se elige la contraseña entre 2x posibles. Es decir, una contraseña de 128 bits no es el doble seguro que una de 64 bits. Es 264 veces más segura. (264 · 264 = 2128). En otras palabras, duplicamos el espacio de contraseñas por cada bit que añadimos – y con esto el tiempo que un posible atacante tarda en hallarlo. Es decir, un bit más o menos, sí, importa.

El número de bits en una contraseña ideal

Si formaramos nuestra contraseña por dígitos binarios, entonces nuestra constraseña tendría tantos bits como dígitos. Por ejemplo, una contraseña de longitud ocho tendría ocho bits.

No obstante, solemos eligir entre más símbolos. Si usamos cifras decimales, podemos eligir entre diez. Es decir, cada símbolo adicional añade un poco más de 3 bits (23 = 8). Si tenemos un PIN de cuatro dígitos, entonces tenemos 104 posibilidades. Si nuestro PIN tiene seis dígitos, tenemos un millón.

Otra forma de incrementar el número de bits es eligir entre más símbolos. Si usamos letras y cifras tenemos 36 posibilidades por posición, si permitimos, además, mayúsculas tenemos 62 símbolos y con símbolos como !”·$%&/()= llegamos a quizá 75 posibilidades. Usar más símbolos incrementa drásticamente el número de contraseñas posibles como vemos en la tabla abajo.

Nombre de símbolos Cifras Cifras y minúsculas Cifras, minúsculas y mayúsculas Cifras, letras e interpuctuación
Número de posibilidades 10 36 62 aprox. 75
Número de bits por símbolo (log2) 3.3 5.2 5.9 6.2
Número de bits en una contraseña de longitud 8 26 42 47 50
Posibilidades en una contraseña de longitud 8 0.000112 2.8 · 1012 218·1012 100112

El número de bits en una contraseña real

En el apartado anterior hemos hablado de una contraseña ideal ya que hemos tenido en cuenta todas las posibilidades que se pueden formar con un número de símbolos determinado. No obstante, las contraseñas reales no son así.

Solemos preferir contraseñas que podemos memorizar más fácilemente. Y estas son palabras del diccionario. Una lengua natural tiene quizá 30.000 palabras con ocho letras o menos. Esto dista mucho de las 218.340.105.584.896 permutaciones teóricas de ocho mayúsculas, minúsculas y cifras.

Esta límitación que la contraseña debe ser memorizable afecta más que la longitud de la contraseña a la seguridad. Un religioso podría eligir como contraseña o bien la Biblia entera o el Corán entero. Aunque tendría una contraseña muy larga, tendría nada más que un solo bit de seguridad, ya que sólo elige entre 21 = 2 posibilidades.

Esto nos lleva a otra amenaza para la contraseña: en el momento que un atacante sabe que eliges contraseñas según un cierto patrón, se limita drásticamente el número de contraseñas que debe probar a ciego. Sin embargo, nosotros necesitamos algún patrón para poder memorizar constraseñas, sobre todo si son varias. Por eso es tan importante no eligir un patrón obvio. Si el atacante sabe que eres religioso, entonces es más probable que eligas palabras de este dominio que si te interesas por locomotoras antiguas.

Subir el número de permutaciones reales

Pues, ya sabes un truco para aumentar la seguridad: si piensas en contraseñas, piensa en algo con que la gente no te correla. Para ingenieros se ofrecen maquillaje, decoración y aristócratas. Otra ventaja: si realmente sabes muy poco sobre estos dominios, entonces es probable que te salgan palabras que a un experto no ocurrieran. Estas son tan difícilmente a adivinar como las descripciones de problemas informáticos por no técnicos.

Otro truco consiste en no sólo usar palabras. Por ejemplo, puedes combinar abreviaturas que conoces o frases enteras. Como frases son largas, puede ser más práctico sólo usar la primera letra de cada palabra. O cada segunda. O la primera letra de la primera palabra y la segunda de la segunda.

Por ejemplo, eliges la primera letra de la frase “Me gusta trabajar aquí, sólo hace falta decírmelo todos los días.” Con esto obtienes “Mgta,shfdtld”. Esto ya es una contraseña que no puedes pronunciar como palabra. Es difícil a memorizar, si no sabes tu frase y así una contraseña debe ser: fácil a recordar por el propietario, difícil de adivinar por el atacante.

Subir el número de permutaciones aparentes

Aplicar un poco de matemática a tus contraseñas suele hacerlas más crípticas – para seres humanos. Por ejemplo, la frase arriba: en lugar de eligir la primera letra, usas la letra que sigue en el alfabeto. Una A será B, B sustituido por C etc. Con esto la contraseña “Mgta,shfdtld” se convierte en “Nhub,tigeume”. Esto ya no se parece en nada a tu frase inicial. Si un atacante quiere adivinar tu contraseña puede pensar en cualquier cosa menos lo que pensabas tú.

No obstante, aplicar matemática no cambia el número de contraseñas posibles. No son las mismas permutaciones de símbolos, pero el mismo número de permutaciones. Es decir, si un atacante sabe tu regla, le cuesta igual descubrir tu contraseña. Pero si no la sabe, cada regla de creación adicional te hace parecer eligir entra más contraseñas posibles.

Cálculos no lineales ayudan mejor contra el descifrado por ordenador. “No líneal” quiere decir introducir algún “if” en el cálculo. Para un ordenador es más fácil hallar que todas las letras se cambian por el próximo en el alfabeto que sólo unas cuantas. No obstante, ten cuidado que estos “if” no reducen el número de contraseñas posibles. Una regla como “si la letra es A o B, entonces pongo una C” reduce el espacio de contraseñas, ya que ya no se distingue entre A y B.

En fin, la idea es crear contraseñas largas y complejas pero que sean fácil de recordar por algo que sólo sabes tú. Unos trucos pueden ser

  • Formar la contraseña por varias palabras no correladas
  • Formar frases que utilizan varias idomas o lenguajes
  • Entrelazar varias palabras
  • Hacer un cálculo que sabes hacer en la cabeza. El cálculo puede ser perfecto para determinar cifras que incluyes en tu contraseña.
  • Modificar partes de las palabras según alguna regla simple
  • Usar sólo una letra de cada palabra de una frase.

Ahora, ¿qué hago?

Descubrir la mejor forma de contraseña es algo personal. No todos sabemos varios idiomas o calculamos igual de bien. No obstante, es muchas veces cuestión to practicar. Si un día decides probar contraseñas con truco, te habrás acostumbrado a ellas tras un mes. De hecho, esto es el truco: simplemente empezar usar contraseñas más fuertes. Al final te habrás acostumbrado.

Lectura adicional

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevos mensajes por correo.

Únete a otros 43 seguidores

Archivos

diciembre 2016
L M X J V S D
« Nov    
 1234
567891011
12131415161718
19202122232425
262728293031