9 de diciembre de 2018

Lo opuesto a la iluminación

Uno imagina que con el correr del tiempo uno va a aprender más, y saber mucho más mas adelante, pero la sensación que tengo es de cada vez saber menos. Hay varios factores que me causan eso.

Expandiendo horizontes

En la medida que uno aprende (si no lo hace de forma totalmente focalizada y cerrada, al menos) van apareciendo nuevas cosas en nuestro horizonte. Algunas cosas que aprendemos, por supuesto, pero por sobre todo, cosas que notamos que no sabemos. Aprendemos que existe la química, y se abre todo un mundo de cosas que no conocemos. Leemos un libro de un autor, y notamos la cantidad de libros de su autoría que no leímos. Exploramos comunidades al azar y nos encontramos con un montón de gente discutiendo de temas que no conocemos, o que no teníamos idea de su profundidad. 

Es como si con cada paso que damos hacia el horizonte, este se aleja 10 kilómetros mas lejos, y se vuelve muchísimo mas amplio. Podemos retraernos, refugiarnos en las cosas de las que conocemos y donde nos sentimos seguros, pero tarde o temprano nos vamos a chocar con muchas de las cosas que estaríamos evitando ahora, y no tener ni idea de ellas en su momento puede tener un efecto bastante negativo.

Por otro lado, explorar siempre cosas nuevas nos pone en una situación donde la mayoría es nuevo y desconocido para nosotros, donde lo que va a primar es nuestra ignorancia. Y siempre habrá campos importantes donde eso va a pasar. 

Percibiendo lo desconocido

Ese ritmo de descubrir cosas nuevas, muchas de las cuales no teníamos idea de su existencia antes, termina convenciéndonos que no es algo que pase ocasionalmente o hasta cierto punto sí y después  ya no. Podemos dar un paso adelante y tomar como letra del problema que hay cosas que ni sabemos que no sabemos, la mayoría de las cuales que nunca vamos a saber ni tener idea de su posibilidad, y que muchas de ellas van a influir o afectar nuestras vidas o nuestro entorno inmediato. Podemos tratar de descubrir algunas de ellas, aprendiendo mas, o encontrando patrones donde no debería haberlos, cosas que no podemos explicar y que tienen que tener una razón detrás, por como se comportan los demás y otras medidas indirectas si hay cosas que aún no podemos percibir o conocer.

Pero como los horizontes que se amplían de la sección anterior, pero esto es algo muchísimo mas amplio que lo que podemos alguna vez saber que no conocemos, y también nos afecta. La imagen que me hago es la de caminar en la niebla, donde no veo por donde estoy caminando aunque creo que estoy sobre un camino seguro, y yendo el linea recta. Pero puedo estar equivocado, haber obstáculos, pozos, o no estar desde hace ya tiempo sobre terreno sólido. Puedo simplemente seguir con mi seguridad, y avanzar como si no hubiera ningún peligro, o puedo tantear el camino, lo que puede mejorar un poco mis posibilidades en caso de si haber algo, pero que me enlentecería mucho de no haber nada o al menos nada por donde vaya.

Lo que se y como pienso no es fiable

Nos preciamos de estar muy seguros de como pensamos, lo que sabemos y recordamos, pero la realidad es otra. Tenemos una serie de atajos y simplificaciones que nos han sido muy útiles en el pasado para tomar decisiones (especialmente en los casos donde no tenemos mucho tiempo o información para decidir), políticas por defecto, preferencias y historias que nos creamos para darle un sentido a la realidad. Esos factores y otros son la base de nuestros sesgos cognitivos

Muchas de ellas ponen en entredicho las decisiones que creemos que son reflexionadas y seguras. En algunas (por ejemplo el efecto Benjamin Franklin), llegamos a reescribir nuestra memoria, eso que consideramos inviolable y fiel, para que ajuste a nuestras acciones. Y para peor, siendo consciente de estos sesgos no garantiza no caer en ellos.

Uno podría aducir que como atajos que se han formado en generaciones, deberían estar la mayoría de las veces bien y no afectarnos mucho, si bien pueden causar que cometamos errores no debería de ser algo que pase frecuentemente. Pero pueden ser usados en nuestra contra, apuntados como errores metódicos que podemos cometer y obligarnos a hacer cosas que nos perjudican. En el pasado tal vez no era demasiado común, aunque en la historia se pueden haber destacado personas con conocimiento intuitivo de varios de ellos que podían haber tomado ventaja. Pero en las ultimas décadas se ha transformado en una ciencia, en un conocimiento metódico, algo al alcance de gente en los ámbitos políticos, financieros, publicidad, empresas, agencias de inteligencia, etc. Y se lo usa activamente para hacer que hagamos cosas que afectan negativamente nuestro futuro, o que no usemos nuestro criterio o conocimiento.

Cuanto de lo que sabemos esta ahi por fuentes confiables y realmente verificadas? Cuanto aceptamos de forma tácita por alguno de estos sesgos, pasando a formar parte de nuestra cultura? Cuanto de lo que elaboramos nosotros mismos (conclusiones, deducciones, trabajo, etc) pisa sobre terreno realmente firme a la luz de todo esto?

Prediciendo el futuro

Para que sirve el conocimiento? Entre otras cosas, nos permite de alguna forma predecir el futuro, o las consecuencias de alguna acción, o cuando menos alguna nebulosa noción de que lo que hacemos "esta bien" por las alguna de las cosas que implicarían en algún futuro cercano o lejano. Dentro de nuestro oficio o especialidad, "sabemos" como van a terminar siendo las cosas que hacemos, que van a resistir, para que van a servir, con que se van a encontrar.

Pero la realidad es mas caótica e impredecible de lo que pensamos, y nuestras predicciones en general mas incorrectas por nuestras propias limitaciones.

Parte de nuestra base para hacer predicciones es nuestro conocimiento del pasado, y cosas que no son exactamente conocimiento, como historias, cuentos, analogías, e incluso la historia que nos vamos construyendo de nosotros mismos. Eso toma prioridad contra, por ejemplo, probabilidades ("esta posibilidad en un millón es seguro que pase porque se trata de mi, ahora, etc"), no somos intuitivamente buenos en estadísticas, y es acá donde entran fuertemente esos sesgos o atajos de mas arriba. Somos buenos haciendo analogías contra otros eventos o cuentos, pero no siempre nos fijamos en lo que realmente hizo funcionar los eventos pasados, ni si esos factores siguen jugando ahora. Y la selección de las cosas sobre las cuales hacemos analogías también tiene sesgos. Y por supuesto, nuestro conocimiento (a veces parcial) no nos asegura que vendrá en el futuro.

Tampoco conocemos lo que hace funcionar las predicciones, los factores que intervienen en la causalidad. Acá entran también los factores que no conocemos que no conocemos, tanto para los eventos pasados como los futuros que estamos previendo, y eso tanto en su existencia como en su influencia. Incluso cambios pequeños pueden tener una influencia en determinados sistemas.

Otro factor que influye en nuestra capacidad de predecir son los bucles de realimentación. No siempre se tiene una acción puntual con un resultado definitivo e instantáneo, el resultado de nuestras acciones puede formar parte de un proceso, y nuestras futuras acciones depender del resultado de las anteriores. Y por supuesto, puede haber más actores, tanto más personas como entorno, ambiente, física o o incluso factores que consideramos externos, formando parte de esos bucles. Estos bucles puede manifestar un comportamiento emergente, una tendencia u orden que no podríamos deducir de los factores aislados.

A pesar de tener un nombre tan poco usual, es algo que nos encontramos en el día a día. Las ondas y su reflejo en un charco,  tendencias sociales, el como ajustamos nuestro comportamiento en base a quienes nos rodean y como lo hacen ellos, la lista es muy larga, solo hay que saber como verla. Y no se necesita demasiados componentes para llegar a algo complejo, el ejemplo más clásico que conozco, de física es  el  problema de los 3 cuerpos , algo casi caótico a partir de solo 3 elementos simples interactuando. Esas interacciones mutuas y realimentación es son cosas que usualmente descartamos o ignoramos, pero afectar y mucho, el como terminan pasando las cosas.

22 de abril de 2018

Manejadores de passwords

Algunas definiciones


Ataque de Fuerza bruta


El atacante intenta probar todas las combinaciones posibles de letras hasta llegar a la clave. Esto implica una cantidad grande de intentos, que aumenta mucho con el largo de la clave y cantidad de diferentes caracteres posibles., 27 por cada letra minúscula individual, 27x27=729 por cada par de letras, 27x27x27=19683 por ternas y así sucesivamente.  Con mayúsculas+minúsculas+dígitos mas símbolos normales=96 letras distintas, así que x1=96, x2=9216, x3=884736.

Diccionario


En vez de probar todas las combinaciones posibles de letras, el ataque por diccionario se basa en tener una o varias listas de palabras para probar (por ejemplo la lista de palabras de un idioma, por eso se la llamo diccionario), por lo que la cantidad de intentos empieza siendo la cantidad de palabras en esa lista, por lo cual la cantidad de intentos es usualmente menor a los que se hacen en ataques de fuerza bruta. Sobre esto hay refinamientos que se hacen, como hacer transformaciones en las palabras del diccionario probando pasar letras a mayúsculas, substituir letras por números que se le parecen y transformaciones por el estilo. También se suele agregar a las listas de palabras nombres, palabras relacionadas con las personas/organizaciones a las cuales se quieren determinar la clave y otros.

Como los atacantes obtienen nuestras claves?


La forma mas trivial es intentar identificarse como nosotros a los sitios donde tenemos usuarios y claves. Dependiendo de cual sea el sitio, podrían hacer miles o millones de intentos por dia intentando llegar a ella, siguiendo un ataque de fuerza bruta o de diccionario. Algunos servidores limitan la cantidad de intentos, o no son especialmente rápidos validando usuarios (con un intento por segundo solo haría 86000 intentos en un día), pueden bloquear al equipo remoto que hace esos intentos, o incluso alertar al usuario que eso esta pasando, pero no todos los servidores son asi.

Hay veces que hay intrusiones en algunos servidores donde nuestras claves estan almacenadas. ya sea por amenazas internas, software con alguna vulnerabilidad u otros factores.

Usualmente las claves no se guardan en texto plano, sino encriptadas de tal forma que no toma mucho tiempo verificar que una clave tiene una determinada encriptacion, pero es imposible a partir de una encriptacion determinar la clave que la origino (pensar en una suma larga de numeros, a partir de los numeros puedo saber el resultado, pero a partir del resultado no puedo obtener los numeros que me hicieron llegar a el, solo que en este caso la "cuenta" que se hace es mas compleja). Pero con las claves encriptadas se puede hacer (fuera de linea, de forma distribuida, sin nada que bloquee el proceso, y muy rapido) un ataque de fuerza bruta o diccionario tambien, solo que mucho mas rápido y por lo tanto con muchos mas intentos por dia/hora que las pruebas en linea. Pero aun siendo mas rapida la cantidad de intentos, hay limites practicos respecto a la cantidad de claves que se pueden probar, si la cantidad de claves posibles son en el orden de trillones, y cada intento lleva milesimas de segundo tomaria decadas probar todas desde una sola computadora.

En algunos sitios las claves si se han guardado en texto plano, y se han difundido las claves de sus usuarios, pudiendo ser usadas en ese servicio e intentadas en otros, de hecho, pasando a formar parte de las listas que se intentan en los ataques de diccionario. Eso ha ocurrido en el pasado con empresas y servicios grandes como Adobe, LinkedIn y Yahoo!.

A priori uno no sabe cuan seguro es manejando claves un sitio, o cuan de confianza es su personal, o cuan forzados estén por resoluciones de su gobierno a dar datos privados de sus usuarios a organizaciones de su gobierno o personal de él.

En este contexto, que hace que una clave sea buena, respecto a estos tipos de ataque?

- Un compromiso entre largo y variedad de caracteres, para que las combinaciones posibles sean del orden de millones de millones. Algo que contenga letras mayúsculas y minúsculas, dígitos y algunos símbolos como espacios, comas y similares, con un largo de 12 caracteres o mas es lo considerado actualmente seguro ante un intento de determinar claves a partir de su versión encriptada usando un numero razonable de computadoras. Podría ser con un conjunto mas limitado de caracteres, pero mas largo, para llegar a las mismas probabilidades.
- No ser una (o dos) palabras de diccionario, obviamente, ni modificaciones triviales de ellas. Recordar que las listas de palabras usadas no tiene porque ser las de un diccionario formal, puede incluir palabras o frases usadas en nuestra cultura, nombres,  o palabras/números/fechas relacionadas con uno mismo. Y tampoco ser una clave que hayamos usado en otro lado, o una que se pueda derivar de ella, ya que podemos no saber si sus claves se han difundido de forma no publica. Y que sea improbable que una o varias personas hayan usado la misma clave en otros lados (ya que sería más probable que aparezcan en listas de claves filtradas usadas como diccionario).

Claves seguras y memorables


Ya sabemos que aspecto tiene que tener una clave segura. Como hacemos que sea recordable? No somos buenos recordando secuencia largas de letras y números sin sentido, pero que pasa si le damos un sentido? Somos buenos recordando cosas con sentido, historias, expresiones y similares. Hay muchas estrategias al respecto.

En vez de ampliar la cantidad de caracteres, podemos usar letras normales y usar frases, llegando a la cantidad de combinaciones mas por largo que por variedad de letras. Esas frases deberían apuntar a ser mas bien únicas, no usables por nadie más y no demasiado obvias respecto a nosotros para terceros.

na forma es tomar varias palabras al azar (digamos, 4, con la cantidad de palabras del idioma español aún sabiendo nuestra estrategia de generación son muchas combinaciones) y formar una asociación de ideas con ellas, una historia, una imagen, algo con un sentido, y con ese sentido en la cabeza podemos recordar esas palabras.  En xkcd: Password Strenght (en inglés) hay una explicación de esta práctica.

Se pueden recordar frases largas (estrofas de canciones, anécdotas de la vida, pasajes de libros, etc), pero es algo muy engorroso de escribir cada vez que se quiera usar esa clave. Pero se puede agregar a esto una transformación fácil de recordar y hacer, para que quede algo mas corto, y tal vez con un conjunto de caracteres más variado, para que quede con los criterios de "buena clave" expresados mas arriba. Digamos que tomo como frase recordable "En 1815 Napoleón perdió la batalla de Waterloo." Y digamos que me quedo con las 2 letras iniciales de cada palabras, números, símbolos de puntuación, y mantengo las mayúsculas donde van. Esa frase larga de escribir me quedaría como "En1815NapelabadeWa.", cosa que es difícil de atacar por fuerza bruta (19 caracteres de todos los tipos), es difícil que encontrar en listas (a menos que usen exactamente la misma frase y transformación en varias de sus cuentas) y si bien la clave en sí es difícil de recordar, la frase original no lo es, y la transformación tampoco, y eso es lo que tenemos en mente al escribirla.
Esa frase y transformación son sólo ejemplos, cada uno tiene potenciales frases que recuerda mejor, o que puede querer usar frecuentemente (por ejemplo, ya que es algo que pueda tener que escribirse frecuentemente, algo motivacional, objetivos o algo estimulante puede tener consecuencias en nuestra vida mas allá de el ingresar nuestra clave). Y las transformaciones también hay varias posibles que son fáciles de recordar, primera, segunda, o última letra de cada palabra, número o símbolo cuando la palabra signifique eso, p/ej si la palabra es "igual" poner "=", mismo con mas, coma, punto, etc, alternar mayúsculas, y otros)
Lo que importa con esta u otras estrategias de frases es que se cumpla con los requerimientos de seguridad (largo y variedad de caracteres), verificar, si se genera la clave, que no caiga justo a ser una palabra existente (por ejemplo, las iniciales de "Pero al saberse sólo Washington ordeno retirada de soldados" generaria "PassWords", que es vulnerable a un ataque de diccionario), y no usar la clave en todos lados.

Demasiadas claves. Usemos administradores de contraseñas.


Lo de arriba esta bien con pocas claves, pero no funciona con decenas o cientos de claves. Acá es donde entra una categoría de programas llamados administradores de contraseñas. En esencia, esos programas nos permiten almacenar y recuperar nuestras claves, usualmente requiriendo una clave maestra para accederlas. De esta forma la clave que tengo que recordar, la que tiene que ser memorable, tener algún sentido, tener una forma de generarla, etc, es la clave maestra del administrador de contraseñas, no todas y cada una de las claves que manejo.

Hay muchos administradores de contraseñas. Los navegadores usualmente incluyen uno propio, o pueden usar el provisto por el sistema operativo. Hay varios sitios web de renombre que dan ese servicio, como Dashlane o LastPass, pero en lo personal, como el manejo de claves es algo muy delicado, prefiero algo que corra en mi propia computadora, sea multiplataforma, y sea de código abierto.

Mi preferido al respecto es KeePassX (basado en KeePass, y con un derivado con algunas mejoras en KeePassXC, los 3 tienen el mismo esquema y pueden usar el mismo formato de archivos, asi que se podría elegir cualquiera de ellos). Hay muchos otros manejadores de claves, algunos código abierto, otros comerciales, y también hay maliciosos, pero estos están lo suficientemente probados como para ser una buena opción por defecto.

Con este administrador uno tiene un archivo que es donde se almacenan las claves (puedo tener varios almacenes de claves, lo que me permite manejar de distinta maneras a diferentes grupos de claves que me interesa que estén separadas), con una clave maestra para abrirlo. En el puedo tener de forma jerárquica mis claves, categorizarlas, agregarles información asociada (usuario, sitio, notas, etc), incluye generadores de claves seguras, buscar, cortar y pegar y otras funciones útiles a la hora de manejar claves. Al estar basado en archivos individuales, esos archivos puedo respaldarlos en pendrives, sincronizarlos via la nube, incluso usarlos desde el celular (hay aplicaciones para móviles que abren esos archivos, por ejemplo KeePassDroid) o compartirlos con otras personas de ser todas claves de cuentas compartidas con ellos.
 

Estrategias para el uso de un administrador de claves


Con un administrador de claves, ya no es tan difícil tener una clave distinta y segura por cada servicio. Uno puede tener una clave maestra que sea a la vez segura y memorable (como vimos más arriba), pero las claves de los servicios no tienen porque ser todas memorables. Puede ser arbitrariamente larga, compleja y al azar, que de todas formas se pegaría en el dialogo de ingreso del servicio sin siquiera verla.

Hay algunas claves que probablemente nos interese que sean recordables. La clave del administrador de contraseñas (para los que son tipo KeePassX, de cada uno de los archivos donde almacenemos claves) entra en esta categoría. La clave del correo donde uno puede recuperar contraseñas, o del sitio donde respaldé los archivos del administrador de contraseñas, o de sitios/situaciones donde uno no puede ir al administración de contraseñas o ver la clave, son otros posibles. Y también puede ser con los sitios a los que uno tenga que colocar la clave con suficiente frecuencia como para que sea un peso el entrar al manejador y luego al sitio. Con cuentas de banco es complicado, algunos bancos colocan restricciones al uso de administradores de contraseñas (por ejemplo, no dejando pegar una contraseña en el diálogo de entrada), amen de tener restricciones de como pueden ser las claves que pueden no ser fácilmente memorables, o desde donde se puede entrar. Pero siempre puede servir un administrador de contraseñas como ayudamemoria.

Una cosa que es importante respecto a donde se ejecuta o como se accede al administrador de contraseñas es que sea un equipo seguro. El archivo en si, si se le coloco una clave razonablemente compleja, es seguro, pero cuando colocamos la clave para abrirla, si hay algo que intercepta o puede ver lo que escribimos (aplicaciones maliciosas en el celular o computadora, especialmente si la computadora es de terceros, o sitios web que simulan ser el donde guardamos las claves, pero que no lo son) podria obtener la clave maestra y por lo tanto el acceso a las claves en el archivo. Y por supuesto, escribir las claves en papelitos, pizarrones u otros sitios que sean visibles por terceros (en persona, fotos que compartimos por celular, etc) pueden volver a todo el esquema inseguro.

29 de marzo de 2018

Explorando lo desconocido

Hay dos tipos de "desconocido": lo que sabemos que no sabemos, y lo que  no sabemos que no sabemos. El ejemplo de ellos que había leído hace varios años era que uno caminaba por un bosque, encontraba manzanas y las comía porque sabia que eran sanas, luego encontraba bayas, y si bien no las conocía a esas en particular sabía que algunas podían ser venenosas, así que las evitaba. Pero luego encontraba hongos, y como sabía que existían hongos venenosos, los comía con malos resultados.

Ambas categorías nos impactan día a día. Y si bien uno puede tomar precauciones o en consideración respecto a las cosas que sabe que no sabe, para lo que no es consciente de ello las cosas son mas complejas.

Una forma de minimizar lo que no sabemos que no sabemos es aprender mas, por supuesto. Eso no sólo va a aumentar lo que sabemos, sino que va a hacer que tomemos conciencia de varias cosas que no. Y es mas fácil y rápido aprender sobre que grupos grandes de temas uno no sabe que aprender esos temas. Es mejor ser consciente de nuestro desconocimiento que el caer en cosas como el síndrome de Dunning-Kruger.

Otra forma, dentro de nuestra área de experiencia o entorno personal, es medir y cotejar, dentro de lo que sabemos, cuanto podemos explicar nuestras mediciones y patrones que aparezcan en ellas. Esos patrones y mediciones que no podemos explicar pueden ser una huella dejada por cosas de las que no sabemos que no sabemos. Y si bien podemos no llegar a explicar o entender esas cosas, podemos con distintas medidas caracterizarlo, darle una forma.

Es algo delicado de hacer, principalmente porque somos un instrumento muy poco fiable de medición. Recordamos de forma muy parcial (los sesgos cognitivos son muy buenos reconociendo patrones donde realmente no los hay) por lo cual registrar todo es importante, aunque puede venir implícito en lo que registramos usando computadoras. Podemos estarnos enfrentando a algo cercano a caótico o con muchos factores que no conocemos afectando el resultado, tal vez de forma no consistente en el tiempo.

No sólo no somos fiables como herramientas de medición, sino que somos especialmente malos midiéndonos a nosotros mismos, especialmente teniendo en cuenta esos sesgos cognitivos que nombre arriba. Otra categoría de cosas que no sabemos que no sabemos tiene que ver con como pensamos, especialmente porque somos a la vez el observador y el objeto que cambia (incluyendo nuestra memoria). Pero podemos observarnos a nosotros mismos al observar, o a nuestro entorno, para notar como cambiamos. Una analogía al respecto es pensar que se esta flotando en el mar, quizás arrastrados por una corriente no muy fuerte. Sin puntos externos de referencia, podemos pensar que estamos siempre en el mismo lugar, es cuando vemos algo mas que consideramos sólido que notamos que nos movemos.