Búsqueda

lunes, enero 23, 2006

Reventando claves

Carátula de la primera temporada de AliasEste fin de semana, al disfrutar de la serie Alias, vi una escena que por desgracia se ha convertido en un tópico, y que no se corresponde con la realidad. Resulta que unos tipos, con Quentin Tarantino a la cabeza, asaltan el SD-6 e intentan abrir la cámara acorazada. La cámara en cuestión tiene la típica cerradura electrónica protegida por un código de varios dígitos. Los asaltantes utilizan un aparato para descubrir la clave, que se conecta de alguna manera a la cerradura electrónica, y entre otras cosas tiene una pantallita donde vemos pasar números a toda velocidad. De pronto, uno de los dígitos se detiene ante la exclamación "¡ya tengo el primero!". Tras un rato, otro dígito se congela, y así, poco a poco, en cada posición va apareciendo un dígito concreto, mientras en las restantes seguimos viendo pasar los números a toda velocidad. Finalmente, al detenerse el último numerito, los asaltantes ya tienen la clave para teclear en el teclado numérico, y abrir la cámara.

Carátula de Juegos de GuerraComo digo, este tipo de secuencias se ha convertido en un tópico a la hora de mostrarnos cómo obtener la clave de acceso a algo. Creo que el origen de este topicazo está en la película Juegos de Guerra, en la que el super ordenador WOPR, Joshua para los amigos, utiliza el mismo sistema para descubrir los códigos de lanzamiento de misiles nucleares. Al menos, es la primera vez que lo vi en una película.

Pero las cosas no son así en la realidad. Esta secuencia nos muestra lo que en criptografía se conoce como un ataque de fuerza bruta. Consiste en ir probando sucesivamente todas las combinaciones posibles, hasta dar con la correcta. Poniendo un ejemplo sencillo (que nunca funcionaría en el mundo real, por otros motivos que luego comentaré), si quisieramos descubrir el PIN de una tarjeta bancaria, la introduciríamos en un cajero automático y probaríamos todas las combinaciones posibles entre 0000 y 9999 (que son 10.000). Tarde o temprano, daríamos con la clave.

Pero cualquier tipo de clave o contraseña, o es correcta o es incorecta en su totalidad. Es decir, a base de probar combinaciones, yo no puedo saber nunca si unos dígitos son correctos y otros no. O descubro la clave completa, o no sé nada. El realizar numerosos intentos no me da ningún tipo de información que me permita discernir si en determinada posición va determinado dígito. Sólo cuando consiga acertar con la clave, sabré cuál es. Pero hasta entonces, no tendré ni una sola pista, salvo el hecho de que las claves que ya he probado no son correctas, lógicamente.

Además, la mayoría de las veces, este tipo de escenas incurre en otro error. Cuando sólo queda un dígito por descubrir, vemos en la pantalla todos los dígitos quietos menos uno, que sigue mostrando números distintos a toda velocidad durante un buen rato. Con un poco de sentido común nos daremos cuenta de que si sólo falta un dígito, sólo hay que realizar 10 intentos más. Y eso se hace en un santiamén.

Antes he dicho que el ejemplo de la tarjeta y el cajero no funcionaría en el mundo real. Eso es porque siempre que se pueda, conviene tener un sistema adicional de seguridad que impide los ataques por fuerza bruta. Es algo tan simple como limitar el número de intentos. En el caso de un cajero automático, al tercer intento fallido, el cajero cancela la operación y no te devuelve la tarjeta. El mismo sistema tienen los teléfonos móviles, que al tercer error introduciendo el PIN, bloquea la tarjeta SIM, y sólo se puede desbloquear introduciendo el PUK, un número bastante más largo, que por norma general, casi nadie recuerda. Pero además, al décimo intento fallido de introducir el PUK, la tarjeta se bloquea definitivamente, y no hay más remedio que hablar con el proveedor.

La verdad, parece algo raro que una organización como el SD-6 no tenga un sistema similar, aunque eso ya no es malaciencia, sino simplemente falta de previsión. Yo, en vez de tener varios explosivos para volar el edificio si se abre la cámara (algo bastante excesivo), simplemente bloquearía el sistema durante un tiempo (unas horas). O tal vez cerraría la puerta de acceso a la estancia donde está el teclado numérico, atrapando a los que intentaran violar el sistema, y la dejaría así durante unas horas. Está claro que los villanos de series y películas necesitan sin falta estudiarse el Manual del Perfecto Tirano.

37 comentarios:

  1. Creo que esto no es del todo correcto no? 0000 y 9999 (que son 100.000) ahy sobra un cero creo yo :/.
    ná má :D

    ResponderEliminar
  2. Impecable, y de facil comprensión. Creo que ya nunca volvere a ver igual una secuencia como la que describes y creo que seran unas cuantas, si siguen proliferando al mismo ritmo que hasta ahora.

    ResponderEliminar
  3. ..."y probaríamos todas las combinaciones posibles entre 0000 y 9999"

    Bueno, el malo maloso puede que necesite probarlas todas, ahora bien, alguien como Austin Powers necesitaría unas cuantas menos. :) Na, sé que soy muy quisquilloso, sólo quería apuntar que eso de tener que probar todas va a pasar muy pocas veces.

    Por cierto, me ha encantao.

    ResponderEliminar
  4. Totalmente irreal, pero me imagino que es por mantener la tensión en las escenas: falta un número y la bomba está a punto de estallar...

    Con un ataque por fuerza bruta "real" no hay manera de saber cuán cerca de la solución estamos (sabemos cuantas combinaciones posibles nos quedan, pero no cuántas hasta la solución), así que ni hay suspense ni nada de nada.

    Por cierto, no recuerdo ninguna peli en la que se vea un ataque por fuerza bruta realista. ¿Alguien conoce alguna?

    ResponderEliminar
  5. Excelente como siempre. Me he permitido el lujo de dirigir a los lectores de mi bitácora a tu artículo. Creo que vale la pena que lo lean.

    Un saludo

    ResponderEliminar
  6. Muy bueno el post.

    (Programación: en la tele pública Telemadrid están poniendo un documental sobre "El triángulo de las Bermudas"; ciencia a tope, jejeje)

    ResponderEliminar
  7. Creo que el ataque más gracioso fué el de la película Swordfish, cuando
    el super CUacker empieza a probar claves mientras una chica le practica sexo oral.
    Será esa la clave para revelar contraseñas.... ??

    ResponderEliminar
  8. que no son 10000 combinaciones??? en lugar de 100000

    ResponderEliminar
  9. Excelente observación! sobretodo la que corresponde al infinitamente-tardo-en-aparecer digito numero 10!
    Creo, y es una idea repentina, que igual ese tipo de dispositivo mas que ser fidedigno, lo que busca es, como se dijo crear tensión,(hay pocas cosas mas estresantes que una cuenta regresiva!)
    Por otro lado creo que eso de ir obteniendo la combinación correcta, de digito en digito, es una herencia conceptual de las antiguas cajas fuertes.
    Por que en los sistemas "mecánicos" de cerraduras por llave o por disco, es así como se abría la puerta, quitando de uno en uno los seguros combinados.
    Pero en fin es solo una conjetura.
    Felicidades por el sitio.

    ResponderEliminar
  10. El otro día vi esa escena de Alias y pensé exactamente lo mismo, pero acostumbrado a tantas patadas informáticas a esa ya no le doy ni importancia.

    Sólo un pequeño inciso; el LC5 (un programa para averiguar las contraseñas de windows 2000 y superiores) averigua las contraseñas por grupos de siete caracteres (por una característica de este sistema operativo). Por lo que cuando está en acción se parece un poco a esas secuencias; parte de la contraseña está visible mientras sigue probando la otra.

    ResponderEliminar
  11. Añadiría una cosa más: ese ataque por fuerza bruta tardaría un montón de tiempo. No se trataría solo de ir pasando numeritos por una pantalla, sino que además habría que "enviarlos" a la cerradura y esperar la respuesta a ver si funciona.

    Que alguien me corrija si me equivoco.

    ResponderEliminar
  12. Yo creo que si queremos adivinar el pin de la tarjeta de crédito que son 4 dígitos, entre 0000 y 9999, basta con hacer 1000 combinaciones, es decir, contar 0000, 0001, 0002, ... , 9997, 9998, 9999. Ni 100.000 ni 10.000 combinaciones, bastan con 1000, no??

    Son combinaciones de 10 elementos (los dígitos del 0 al 9) cogidos de 4 en 4, pero con repetición.

    Un saludo.

    --
    Diego Lago

    ResponderEliminar
  13. Nnca me habia fijado en lo que tardaba el ultimo digito en ese tipo de secuencias. Ya tengo una anecdota para el bar. Gracias.

    ResponderEliminar
  14. ¡Ay! ¡ay! Vaya despiste con las combinaciones. Tenéis razón, son 10.000 (10^4, o 9.999 + 1), no 100.000.

    Ya lo he corregido.

    ResponderEliminar
  15. En respuesta al "Usuario Anonimo", dos encima mio...

    No hace falta enviar a la cerradura nada, si tienes pinchada tb la salida del sistema, la que enviaria la señal a la cerradura, ya podrias ver si lo que envia es una orden de abrir...

    Luego dos cosas mas: alf tiene toda la razon, es absurdo la forma de hacerlo. De hecho, la prueba de 10000 numero es absurdamente rapida, en 1 minuto probablemente lo consiquieran, y más si es un sistema puramente Hard, como parece que asi era. Y por otro lado, yo creo que seria también emocionante si en vez de "Solo me falta un numero!!", dijeran algo como: "60 % de combinaciones probadas!" y no seria mala ciencia.

    El comentario sobre Swordfish, cuando el tio descubre el password mientras una chica le "distrae" y tiene una pistola en la cabeza, en un pequeño enfoque en la pantalla, se deja ver lo que seria un cacho de los famosos "diccionarios" de passwords posibles.

    Que el password del FBI o la CIA, no recuerdo cual era, sea algo tan simple que este en un diccionario me parece inaceptable. Ademas, el primer problema es: cual es el usuario? root? admin??

    ResponderEliminar
  16. ¡Buenísimo el manual del perfecto tirano!


    ¡Me encanta este blog! Hombre, no es tan serio y fiable como Iker Jimenez pero bueno...
    Seguid asín
    :)

    ResponderEliminar
  17. Esto de las claves siempre me ha recordado al Master-Mind en versión chapuza. Puedes saber si tienes un código y si está en su sitio, pero no sabes cual.

    ResponderEliminar
  18. Yo solo recuerdo una película en la que ( lo digo de memoria ) el sistema parece "realista". Es en la 2ª de terminator cuando John mete la tarjeta en el cajero y se ve como va reduciendo numeros de al memos 20 cifras hasta quedar en 4. Otra cuestión es que si la tarjeta la has hecho tú, sabras que número has puesto. Vamos digo yo.
    Pero "es la magia del cine" :)

    ResponderEliminar
  19. "O tal vez cerraría la puerta de acceso a la estancia donde está el teclado numérico, atrapando a los que intentaran violar el sistema, y la dejaría así durante unas horas"

    Y luego pasar unas cuantas barridas de laser por la estancia, como en resident evil. Mmmmmhahaubaubawwaahahahaaa

    ResponderEliminar
  20. En Terminator 2 me surgen dos preguntas:

    Si un PIN tiene 4 dígitos ¿por qué se empieza con números largos para acabar con uno de 4 dígitos? ¿No será mejor probar sólo con números de 4 dígitos? Tal vez la "pasada" de números largos sea para encontrar una cuenta bancaria válida.

    En USA ¿los cajeros no cancelan la operación al tercer intento fallido?

    ResponderEliminar
  21. A ver, intentando averiguar el origen de dicho proceso de adivinación de una contraseña creo que tiene cierto sentido hacerlo así. No hace muchos años (época de la peli Juegos de Guerra) los ordenadores no eran tan rápidos como ahora. Si un algoritmo tiene que detectar si una contraseña es válida, posiblemente lo haga comparando cifra a cifra, de forma que no tarde lo mismo si la primera ya es errónea o si todas las cifras están bien menos la última. Haciendo varios intentos con números aleatorios y midiendo el tiempo de respuesta, es posible ir averiguando uno a uno los dígitos que componen la contraseña. Eso es exactamente lo que se ve en las películas. Si bien el tiempo es prácticamente inapreciable hoy día, es verosímil pensar que hace unos años esa minúscula diferencia de tiempo permitiría obtener la contraseña.

    Para obtener mayor fiabilidad, habría que hacer varias pruebas con cada dígito en cada posición y conseguir así descartar retardos debidos a otras causas (como interrupciones del procesador). Eso justifica que el último dígito no aparezca en seguida aunque sólo hay 10 posibilidades.

    ResponderEliminar
  22. Mmmm... No me convence. Básicamente hay dos formas de guardar una contraseña:

    En claro. En algún sitio del disco o de la memoria, está el valor de la contraseña. Para ver si el valor introducido es correcto, se compara con el almacenado. Este sistema no es muy recomendable si se desea mucha seguridad, ya que alguien puede conseguir acceso a donde se almacena dicho valor. El comparar dos pequeñas cadenas, es una operación muy rápida (son unos pocos dígitos, no un libro). No creo que se pueda medir la diferencia de tiempo entre un fallo con el primer dígito, o uno con el último.

    Cifrado. En algún sitio del disco o de la memoria, se guarda el valor de la contraseña, previamente cifrado con un algoritmo irreversible. Es decir, que se puede cifrar pero no descifrar. El sistema lo que hace entonces es cifrar el valor introducido con el mismo algoritmo, y compararlo con el almacenado. Esta operación puede consumir más o menos tiempo, pero un buen algoritmo de cifrado debe "dispersar" la información. Me explico. No es algo tan simple como coger el primer número, cifrarlo, coger el segundo, y así sucesivamente. El algoritmo se aplica de golpe sobre toda la contraseña, y el cambiar únicamente un dígito, produciría un resultado totalmente diferente.

    Así que no creo que el tiempo de respuesta sea medible, dependiendo de si los primeros dígitos son correctos o no. En el segundo caso, es que sería el mismo, o bien la diferencia no indicaría nada (pues ocurre sobre valores cifrados).

    ResponderEliminar
  23. Sí y no. Pero ten en cuenta que es algo que el cine lleva arrastrando años. Los métodos modernos de encriptación no son aplicables aquí. Quiero decir, todo está basado en un método muy cutre de hace muchos años. Hoy día no sería aplicable en ningún caso, pero en el cine lo siguen manteniendo así (como lo de no cerrar los coches). Fíjate que si se comparasen todos los dígitos y luego se actuase si falla al menos uno, sería totalmente imposible averiguarlo. Pero el método de comprobar uno detrás de otro con unos procesadores de 4MHz (el Zilog del Spectrum por ejemplo) seguramente si permitiría detectarlo. Hoy es una burrada, sin duda. En aquella época no lo era tanto.

    ResponderEliminar
  24. En cada capitulo de Alias se puden ver unas cuantas de estas (a parte de 3 o 4 giros argumentales de la serie ;)

    En otro capitulo la protagonista debia infiltrase no se donde (probablemente con un atuendo sexy) y conseguir una contraseña/codigo para entrar en un ordenador de lo malos, pero este codigo era... ¡La direccion IP del ordenador! vamos, que aparentemente los datos estaban en un servidor web publico, menuda seguiridad, por lo menos no dijeron 127.0.0.0.1

    ResponderEliminar
  25. A veces sería deseable que los guionistas de series y películas buscaran inspiración en algún lugar más que en otras series y películas. A muchos no les vendría mal darse una vuelta por sitios como howstuffworks y aprender algunos trucos nuevos. En el caso de la cerradura electrónica, por ejemplo, rociando el teclado con ciertos químicos e iluminándolo luego con luz ultravioleta, se ven destellar las huellas digitales. Entonces ya se sabe cuáles son los números de la clave, sólo falta saber cuál es su orden. Y si son cuatro números distintos, las permutaciones posibles son apenas 24 (4!).

    ResponderEliminar
  26. Alf, creo que tengo una pagina que te encantara. No es una pelicula, ni una serie, pero no tiene desperdicio.

    Lo peor de todo es que dicen basarse en datos "cientificos".

    http://www.worldjumpday.org/

    Y se supone que 412 millones de personas se lo han tragado???

    ResponderEliminar
  27. veamos como andamos de ignorancia......
    Para llevaros la contraria a todos vosotros os dire que si que es posible utilizar un hardware para reventar este tipo de cerraduras, basandose en el tiempo de respuesta de la cerradura en unidades muy pequeñas de tiempo es posible discernir la clave, aunque a mi entender deberia ser lineal....primero el primer numero, luego el segundo etc....
    La diferencia de nanosegundos o picosegundos en que la cerradura responde acertadamente o erroneamente nos dira la secuencia total de numeros.

    Hay teneis
    ala

    ResponderEliminar
  28. Están comentando por ahí arriba que se pueden utilizar las diferencias de tiempo para adivinar los números de las claves y demás. En parte es cierto (y si no me equivoco es un tipo de ataque diferencial) y se utilizó para romper la protección de las JavaCard o algo por el estilo (hablo de cabeza, es decir, digo mentiras).

    A mi otra escena que siempre me ha gustado de las películas y los ordenadores es cuando transfieren dinero, que les ponen una barra de progreso como si los billetes fuesen por el cable uno detrás de otro hasta las Caimán. A mi en el banco tardan mucho menos en quitarme el dinero de la cuenta.

    ResponderEliminar
  29. Yo estoy con Alf. ¿Cuáles son esos modernos métodos de encriptación que no se usaban entonces? La película "Juegos de Guerra" es de 1983, y métodos que se usan ahora frecuentemente como Triple DES o RSA son, respectivamente, de 1978 y 1977. La criptografía es una ciencia muy antigua, y desde siempre cualquier información delicada ha estado cifrada. Las escasas excepciones por descuido o ignorancia que se hayan dado no creo que justifiquen que se use ese método en decenas de películas.

    ResponderEliminar
  30. A ver, dejando de lado el método de almacenamiento de clave, lo que hay que tener en cuenta es que la clave es un número de 4 cifras, no 4 numeros de una cifra, y por tanto, es totalmente estupido hacer un ataque cifra a cifra...

    ResponderEliminar
  31. No he podido dar señales de vida por culpa de problemas con el acceso a Internet, así que Serlio se me ha adelantado con respecto a la "edad" de los algoritmos de encriptación :-)

    Respecto al ataque diferencial, consiste en probar con distintos textos (cuya diferencia está prevista de antemano) y comprobar las diferencias entre los distintos textos cifrados que obtenemos. Es decir, necesitamos tener acceso al texto cifrado de salida, ya que se utiliza para reventar algoritmos.

    No es aplicable a un sistema que sólo responde "correcto" o "incorrecto" al introducir un código, y no tiene nada que ver con los distintos tiempos de respuesta (que sigo pensando que apenas son detectables).

    ResponderEliminar
  32. La próxima vez busco las cosas antes de escribir. Existe un Timing Attack que utiliza el tiempo que tarda un algoritmo para obtener datos de la clave utilizada. Es parte de los Side-channel attacks entre los que también se encuentra el Differential Power Analysis que es el utilizado para romper SmartCards (que no JavaCards). El nombre me confundió, lo siento.

    ResponderEliminar
  33. No hace falta disculparse, hombre :-)

    Me he leído lo que pone la Wikipedia, y según parece se utiliza para reventar algoritmos de cifrado, pero no para buscar una contraseña. El caso más parecido que comentan es el de utilizarlo para atacar determinados sistemas UNIX, sabiendo que el algoritmo de cifrado para comprobar la contraseña es más lento, de forma que por la diferencia de tiempo pueden saber si el login es correcto o no, en un acceso denegado. Pero no dice nada sobre diferencias entre distintos valores de contraseñas.

    ResponderEliminar
  34. Pues ya veras en esta serie donde la gente se pone exactamente el mismo aspecto gracias a una terapia... Genetica.... Si te quejabas de Cara a cara con esto fliparas

    ResponderEliminar
  35. Fabián Sierra C.02 febrero, 2006 23:59

    Disculpa por hacer el comentario tan a destiempo, pero me parece que te aportaré información interesante.
    En el libro de texto de sistemas operativos de Tannenbaum, se describe un método de averiguar contraseñas que funcionaba precisamente como en las películas: dígito a dígito.

    Se describe en esta página (que está copiado párrafo a párrafo de la traducción al castellano de la primera edición del libro, "Sistemas Operativos: Diseño e Implementación")

    (Busca TENEX en el texto)

    http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/MonogSO/SEGSO200_archivos/fallas%20famosas.htm

    Al menos, imposible no es. Eso sí, que algún diseñador de sistemas vuelva a cometer la misma secuencia de errores es bastante improbable.

    ResponderEliminar
  36. Es posible, sin duda, lo que pasa en la película. Este es un caso de mala "malaciencia". Porque pienso que existe la posibilidad científica, pero por pura casualidad y no por la pulcritud científica de los guionistas.
    Ya se han mencionado ejemplos (el más significativo es el de la "caja fuerte"). Para poner una analogía que todo el mundo va a entender, piénsese en una cerradura que intentamos abrir probando llaves. La llave es un sistema que empuja, al avanzar, unos émbolos que bloquean el sistema mecánico de la cerradura. Cuando todos los émbolos han sido convenientemente empujados por el relieve de la llave, el mecanismo se desbloquea y abrimos.
    Pues bien, estoy seguro de que todos hemos probado alguna vez a abrir una cerradura con llaves que no son. Algunas ni entran, pero otras "casi" parecen abrir. El motivo está muy claro. Las que "casi" abren han empujado adecuadamente algunos émbolos (no todos) y por tanto la resistencia que encontramos a la hora de abrir es menor, aunque no podamos completar el giro. Las que prácticamente ni entran, puede que no hayan conseguido desbloquear ni uno sólo de los émbolos.
    Si damos con la llave correcta y la comparamos con alguna de las que "casi" abrían, os aseguro que habrá partes del relieve que se van a parecer bastante. En esas partes que coinciden, los "dígitos" son el mismo en ambas llaves.
    Entonces parece que sí hay formas de aproximarnos por partes a ciertas claves y métodos (resistencia al giro, tiempos de respuesta, "clics" en la caja fuerte) para devolvernos información de hasta qué punto nos hemos aproximado a la solución final.
    En términos teóricos sólo hay dos tipos generales de claves: las simétricas y las asimétricas.
    Las primeras son las contraseñas puras y duras (una única clave) de toda la vida y responden al modelo que dice Alf. O la sabes entera o no sabes nada. De hecho si tuviéramos un generador auténticamente (matemáticamente aleatorio) de claves de este tipo, la probabilidad de reventarlas, incluso por fuerza bruta, sería 0 (desconocida su longitud). Por suerte (o por desgracia) no existen estos generadores aleatorios perfectos.
    El segundo tipo de claves (asimétricas) son claves que se dividen en dos partes: una pública y otra privada. Estas claves, más débiles matemáticamente que las simétricas, presentan otras ventajas y se usan mucho en Internet y en otras partes (habréis oido hablar de los "certificados"). La particularidad es que como estas claves tienen una parte pública, pues tienen un sistema perfecto para ver cómo nos aproximamos a la parte privada (son como la cerradura: pública y expuesta ahí para que todo el mundo hurgue y la llave que sólo tenemos nosotros). Por supuesto que un buen informático intentará entorpecer las cosas y se emplearán generadores "pseudoaleatorios" para dispersar la información y todas esas cosas, pero como estas "cosas" no son perfectas, podemos aprovechar las diferencias con la "perfección" para ir aproximándonos poco a poco, dígito a dígito a la clave correcta.

    Circu

    ResponderEliminar
  37. Alf, antes que nada, déjame decir que me encanta tu blog. He empezado a leerlo desde el principio y voy por aquí, espero llegar al 2006 dentro de poco :-)

    Sólo quería comentarte que, por increíble que parezca, en las antiguas contraseñas de carpetas compartidas de los Windows 95/98 sí que se podía hacer un ataque byte a byte hasta descubrir la clave completa en un santiamén. Había un programita que lo hacía automáticamente llamado PQwak (http://www.governmentsecurity.org/archive/t2896.html para leer algo sobre él), y yo lo usé más de una vez. :-)

    Si tenéis algún sistema con W98 a mano (o instalado en un VMWare), podéis probarlo. :-)

    Reycat

    ResponderEliminar