4) CRIPTOGRAFÍA NIKON

Dentro de un grupo de personas que comparten una afición, a veces se da una especie de polarización en torno a dos marcas o equipos, ambos muy buenos y con prestaciones similares. Los astrónomos aficionados llevan décadas divididos entre las marcas de telescopios Celestron y Meade. Los conductores dudan entre BMW y Mercedes, o bien entre Ferrari y Porsche. La ciencia ficción está polarizada entre los universos de Star Wars y Star Trek. En el campo de la informática, las opciones predominantes son PC y Mac (con permiso de los amigos de Linux). Y los entendidos en fotografía se debaten entre Canon y Nikon.

Lo cierto es que ambas marcas producen excelentes modelos de cámaras fotográficas, tanto para aficionados como para profesionales. Por supuesto, todo experto sabe que el elemento más relevante para hacer una buena fotografía es el propio fotógrafo, pero los aficionados que se dan de expertos, en lugar de hablar sobre exposiciones, encuadre y enfoque, se pasan interminables horas enzarzados en discusiones bizantinas sobre qué cámara tiene mejor calidad de imagen.

Un elemento fundamental en esta discusión es el formato en que se toman las fotos. Seguro que usted tiene una cámara fotográfica (la del móvil también vale), y habrá comprobado que habitualmente los archivos de imagen tienen formatos como TIFF, JPG o PNG. Tales formatos permiten una gran compresión de la información, y son por ello muy populares en Internet. Pero la compresión tiene un precio: se pierde información. Por dicho motivo, los profesionales utilizan los llamados formatos “crudos” (raw), de mucho mayor tamaño pero que conservan toda la información original de la fotografía.

Para desgracia tanto de aficionados como de profesionales, no existe un formato universalmente aceptado para las fotografías en formato crudo. Cada fabricante de cámaras tiene el suyo, y suele ser un formato “propietario,” protegido por patentes. Los fabricantes se ven aquí atrapados en un dilema. Por una parte, les conviene que ningún fabricante de software para procesar imágenes pueda usar su formato, ya que así pueden vender el programa propio; pero si el formato es demasiado cerrado, los usuarios podrían verse tentados a escoger otro tipo de cámara.

El formato usado por las cámaras Nikon se denomina NEF (Nikon Electronic Format). Como otros parecidos, incluye tanto la información de la propia fotografía (básicamente, la intensidad de los píxeles) como los llamados metadatos, que proporcionan información asociada a la fotografía. Los metadatos pueden incluir las condiciones de iluminación, la velocidad ISO, el uso de flash, la distancia focal, la apertura, incluso la situación geográfica si la cámara dispone de dispositivo GPS.

En 2003, Nikon introdujo la cámara profesional D2H, y a finales de 2004 su sustituta, la D2X. En el segmento de cámaras de consumo, la estrella era la D50, presentada a finales de 2005. Todas ellas llevaban incorporada una nueva versión del formato NEF, distinto de los anteriores en un punto crucial: parte de la información estaba cifrada. Un programa cualquiera podría leer y procesar ese formato, pero para modificar el balance de blancos hacía falta un sistema de descifrado que solamente se encontraba en el programa de tratamiento de imágenes de Nikon (Nikon Capture, valorado entonces en $100).

La noticia se conoció en abril de 2005, cuando Thomas Knoll, co-creador del famoso programa de retoque fotográfico PhotoShop, acusó a Nikon de cifrar la información relativa al balance de blancos en sus nuevas cámaras[10]. El problema era muy grave, ya que entraba de lleno en un punto muy delicado: ¿a quién corresponde el control último de una fotografía, al fotógrafo o al creador del software que la modifica? Muchos temieron que Nikon comenzara a ejercer sus prerrogativas como propietario del formato para acabar diciendo a los usuarios cómo debían usarlo y con qué software se les permitiría modificar sus fotos.

Nikon tuvo que emitir una nota de prensa en la que intentó explicar sus motivos. La empresa proporcionaría un equipo de desarrollo de software o SDK (Software Development Kit) para trabajar con el formato NEF, incluido el balance de blancos. Pero dejaba bien claro que el SDK solamente se ponía a disposición de los desarrolladores de software autorizados, y la autorización es un proceso que controla Nikon. En lo que respecta al usuario final, ni una palabra[11].

Es decir, Nikon controla quién tiene permiso para hacer programas de software que puedan alterar el balance de blancos. Cualquier desarrollador “no autorizado” que intentase romper el sistema de cifrado podría verse ante una demanda judicial. A tenor de lo visto, romper el cifrado en cuestión era técnicamente viable, y además fácil. En pocos días, la empresa Bibble Labs anunció que su programa de tratamiento de imágenes Bibble ya llevaba soporte para la Nikon D2X[12]. Simultáneamente, Dave Coffin modificó su programa Dccraw con el mismo fin, e último incluso publicó el código fuente de su programa[13].

El propio Thomas Knoll advirtió que, aunque el cifrado fuese fácil de romper, “Nikon podría considerar una ruptura del cifrado del balance de blancos como una violación de [la ley] DMCA [Digital Millenium Copyright Act], y demandar a Adobe [propietaria de PhotoShop]” No sabemos cómo fueron las negociaciones entre Adobe y Nikon, pero sí el resultado: hubo acuerdo. Adobe consiguió desarrollar un complemento (plug-in) que, entre otros, era compatible con los modelos D2H, D2X y D50 de Nikon[14]; y en septiembre de 2005 un comunicado conjunto de ambas empresas, cuidadosamente redactado, informó que ambas empresas trabajaban conjuntamente para “asegurar que nuestros clientes comunes tengan una experiencia excelente cuando usen cámaras Nikon con software Adobe[15].

No hay mucha información sobre el sistema de cifrado de blancos de NEF, pero los SDK contienen los datos necesarios, y a pesar de los acuerdos de no revelación que se firman en estos caso, inevitablemente se han acabado filtrando los detalles en diversos foros especializados. Según el fotógrafo Thom Hogan[16], las claves usadas para cifrar serían una combinación del número de serie de la cámara y el número de la fotografía. Análisis posteriores determinaron el modo de cifrado: sencillamente, se trata de una tabla de valores (look-up table) prefijada que, para cada valor de entrada, proporciona un valor de salida. En este caso, el cifrado es de lo más arcaico, y sabiendo dónde se encuentra esa tabla, el secreto está revelado.

Lo extraño de todo este asunto es que la información cifrada por Nikon es escasa y poco relevante. Un fotógrafo profesional puede trabajar sin la información exacta sobre el balance de blancos, y como hemos visto el descifrado es fácil de descubrir. Hubo en su momento una gran polémica sobre si ese sería el primer paso para tomar el control de las fotografías de los usuarios, disponiendo qué se puede hacer con ellas y qué software habría que usar. Sin embargo, un episodio más reciente puede arrojar algo de luz al respecto.

El lector quizá recordará haber visto una fotografía del presidente George Bush, leyendo un cuento infantil a un grupo de niños durante los atentados del 11-S. En algunas copias de dicha fotografía, el cuento aparecía boca abajo. En realidad, se trataba de una manipulación informática poco caritativa hacia el entonces inquilino de la Casa Blanca. Saber si una fotografía ha sido alterada es algo muy útil en campos como la fotografía profesional o la prensa, y resulta esencial a la hora de presentar imágenes como evidencias forenses.

En junio de 2006, Nikon anunció el lanzamiento de un programa para autenticación de imágenes (IAS, Image Authentication Software), diseñado para la cámara D2X[17]. El sistema firma digitalmente la fotografía, y el resultado se guarda en una sección del archivo de metadatos en la que habitualmente el fotógrafo puede incluir información sobre… el balance de colores. Es, por tanto, plausible que en 2005 Nikon pretendiese tan sólo experimentar con una versión rudimentaria de firmado digital. Quizá no quisiese hacerlo público en su momento para no dar pistas a sus competidores.

En cualquier caso, el sistema IAS de Nikon es interesante. Nos resultará muy útil como ejemplo, porque nos permitirá exponer dos elementos criptográficos muy útiles en el proceso de firma digital: las funciones hash y la criptografía de clave pública. Una firma digital consiste, en esencia, en cifrar un archivo. Tomamos el algoritmo de cifrado, utilizamos nuestra clave y ya tenemos la firma. El problema es que, si un tercero quiere verificar la firma, tendremos que darle la clave que hemos usado, y nada le impedirá usarla para firmar otros archivos.

Para evitar este problema, nada mejor que la criptografía de clave pública (PKC) o criptografía asimétrica. Este sistema, descubierto en los años setenta, utiliza dos claves complementarias. Una de ellas se mantiene en secreto (clave privada), en tanto que la otra puede diseminarse libremente (clave pública). La clave pública sirve para que cualquiera pueda cifrar un mensaje, pero solamente quien controle la clave privada podrá descifrarlo. También puede utilizarse en forma inversa para la firma digital: la clave privada puede utilizarse para firmar un archivo, y cualquiera puede utilizar la clave pública para verificar dicha firma.

La PKC tiene un problema: los archivos cifrados son de un tamaño enorme, miles de veces mayores que el original. Por eso, y por su lentitud, es mejor tomar el mensaje, condensarlo en un pequeño archivo, cifrar dicho condensado con la clave pública, y el resultado es la firma digital. Eso requiere la invención de una función de condensación o destilado, lo que se denomina “función hash”.

Supongamos que M es nuestro mensaje, H es la función hash y h=H(M) es el hash del mensaje. Para que la función hash H sea criptográficamente útil, ha de cumplir las siguientes condiciones:

1) Comodidad. Calcular H(M) ha de ser un proceso fácil y rápido, y no requerir mucha memoria o capacidad de cálculo.

2) Confidencialidad (o resistencia de preimagen). La función hash no ha de revelar nada de información sobre el mensaje. Por ello, dado un hash h dado, ha de ser imposible encontrar un mensaje M que cumpla que h=H(M).

3) Resistencia (débil) a las colisiones (o resistencia de segunda preimagen). Dado un mensaje M determinado, ha de resultar inviable encontrar otro mensaje M’ que tenga el mismo valor hash. Esto es, no se debe cumplir que H(M)=H(M’)

4) Resistencia a las colisiones (“resistencia de cumpleaños”). Ha de ser muy difícil encontrar dos mensajes que den el mismo valor de hash. Esta propiedad se parece a la anterior, pero en este caso M no es un mensaje determinado, sino un mensaje cualquiera.

Encontrar una función hash que cumpla esas condiciones es difícil. Idealmente, un cambio de un solo bit en el mensaje debería conllevar la alteración de al menos la mitad de los bits del hash. Las funciones hash, en cierto modo, representan al mensaje, lo que las hace útiles en diversas situaciones como firmas digitales, justo lo que estamos examinando aquí.

El resultado de salida de una función hash ha de ser una cadena con un número de bits lo bastante largo. Una función cuyo hash tuviese solamente dos bits no sería útil, ya que al haber solamente cuatro posibles valores (00, 01, 10, 11) es poco resistente a las colisiones. Un ejemplo es nuestro Documento Nacional de Identidad, que consta de ocho números y una letra. La letra no es independiente, sino que depende del número. Para obtener la letra, basta dividir el número del DNI por 23; el resto se hace corresponder con una letra de acuerdo con la secuencia siguiente:

0 1 2 3 4 5 6 7 8 9 10 11 12

T R W A G M Y F P D -X -B -N

13 14 15 16 17 18 19 20 21 22

-J -Z -S -Q -V -H -L -C -K -E

Lo que en un principio se conoció como “la letra del NIF” fue introducido para poder detectar rápidamente si alguien estaba inventándose un DNI sobre la marcha. La letra del DNI no es una función hash válida, ya que solamente tiene 23 posibles valores, lo que le hace altamente vulnerable a colisiones. En realidad, nunca se diseñó como función hash sino como una especie de código de detección de errores.

Una función hash de n bits tiene un total de 2^n (dos elevado a n) posibles valores. Eso hace que para altos valores de n, una buena función hash tenga resistencia débil a las colisiones (propiedad 3), ya que la probabilidad de encontrar un segundo mensaje con el mismo valor hash sería de uno entre 2^n. Eso hace que, en principio, valgan valores de n del orden de 128 para proporcionar seguridad contra las colisiones débiles. Sin embargo, la resistencia a las colisiones (propiedad 4) es más difícil de conseguir, ya que no estamos hablando de un mensaje determinado, sino de un texto cualquiera.

Para entenderlo, digamos que estoy en una sala con una sola persona. ¿Cuál es la probabilidad de que esa persona cumpla años el mismo día que yo? Si obviamos las soluciones extrañas (nada de gemelos, y queda prohibido cumplir años el 29 de febrero), esa probabilidad es de una entre 365, lo que podemos poner como 1/365 o bien como (1-364/365). Si hay n personas, puede demostrarse que la probabilidad viene dada como 1-(364/365)^n. Para que esa probabilidad supere el 50%, ha de haber un número de personas n superior a 253.

Sin embargo, supongamos que nos interesa la probabilidad de que dos personas cumplan años el mismo día. Parece lo mismo, pero no lo es, porque ahora el día en cuestión no es necesariamente el de mi cumpleaños, sino el de cualquiera. Ahora, la probabilidad se calcula de modo distinto: P=1–365!/[(365-n)!*365^n]. Para una probabilidad del 50%, el número n es solamente 23. Este número parece demasiado pequeño, pero es correcto. A este resultado se le llama paradoja de cumpleaños.

En realidad, ambos casos esconden una igualdad: para alcanzar una probabilidad del 50%, hemos de comprobar un total de 253 parejas. La diferencia es que, en el primer caso, las parejas eran del tipo “una persona cualquiera y yo mismo,” en tanto que en el segundo caso tenemos parejas tipo “una persona cualquiera con otra persona cualquiera”.

La propiedad 3 de una función hash (resistencia débil) es similar al primer ejemplo de cumpleaños: tenemos un mensaje determinado, y buscamos un segundo mensaje; la probabilidad de encontrarlo es de una entre 2^n. La propiedad 4 (resistencia), sin embargo, es similar al segundo ejemplo, porque ahora tenemos dos mensajes cualesquiera. En tal caso, la probabilidad de encontrar dos mensajes con igual valor de hash es de una entre 2^(n/2).

Eso significa que las funciones hash de 128 son seguras contra las colisiones débiles, pero no contra las normales, porque estas últimas suceden una vez cada 2^64, y ese número, aunque grande en términos absolutos, está al alcance de los recursos informáticos de un atacante, o de grupos de computación distribuida. Por dicho motivo, las funciones hash con 128 bits de salida se consideran obsoletas, y han sido sustituidas por otras como SHA-1, de 160 bits. Esto nos daría una probabilidad de resistencia a las colisiones de 1 entre 2^80. Eso ya es un número muy alto, aunque no absolutamente fuera de límites. Por ese y por otros motivos, una variante llamada SHA-2 tiene una salida de entre 224 y 512 bits.

Lo anterior es un límite a la fortaleza, y por tanto a la utilidad, de las funciones hash. Eso presupone que dichas funciones son criptográficamente sólidas, de modo que nadie puede “hacer trampa” y obtener colisiones con menos esfuerzo. En esto, las funciones hash comparten con los algoritmos de cifrado rasgos comunes: son difíciles de obtener. Por ejemplo, la función MD4 fue diseñada en 1990 por Ronald Rivest, toda una autoridad en la materia, a pesar de lo cual se descubrió una serie de ataques a partir de 1995. El autor creó un segundo algoritmo hash, llamado MD5, que aguantó algo más, pero finalmente sucumbió ante diversos ataques. En la actualidad, las mejores técnicas permiten obtener colisiones en MD5 con una dificultad de 2^21. Es decir, la resistencia frente a las “colisiones de cumpleaños” es análoga a la de un algoritmo hash perfecto de 42 bits; teniendo en cuenta que MD5 tiene salida de 128 bits, está claro que algo va mal.

En 2004 se puso en marcha el proyecto MD5CRK para encontrar colisiones débiles en MD5, cosa que se logró en pocos meses después[18]. Lo que en teoría debió requerir 2^128 cálculos de hash se consiguió en apenas 2^64, casi como una colisión de cumpleaños. Poco después, un grupo de investigadores consiguió obtener una pareja de certificados X.509 (usados en muchas aplicaciones de criptografía de clave pública) que utilizaban dos claves distintas pero tenían el mismo valor hash MD5[19], lo que demostraba que el uso de esa función en certificados digitales era insegura.

Los ataques contra MD5 fueron mejorando en potencia y rapidez. Y, lo que es peor, en seriedad. En la actualidad, los diseñadores de productos criptográficos tienden a huir de MD5. Sin embargo, hasta hace bien poco algunas aplicaciones importantes permitían el uso de esa función hash, con consecuencias potenciales catastróficas.

Veamos dos de ellas. La primera concierne al protocolo SSL, utilizado en la navegación web segura. Este sistema de seguridad actúa en las páginas de bancos y tiendas online, y utiliza un sistema de certificados digitales. Por supuesto, tener un certificado digital no significa nada en sí mismo, del igual modo que una firma manuscrita no es más que un garabato en un papel. Para que sean aceptados, los certificados digitales suelen ir firmados por lo que se denominan Autoridades de Certificación (AC), que actúan como una especie de notarios digitales.

En 2008, un grupo de investigadores de Suiza, Holanda y Estados Unidos consiguió falsificar el certificado digital de una Autoridad de Certificación, algo así como duplicar el sello del notario[20]. Para conseguirlo, montaron un superordenador casero consistente en una bancada de 200 consolas Playstation 3. En palabras de uno de los autores, “podríamos hacernos pasar por Amazon.com y usted no se daría cuenta[21]. En efecto, el atacante podría montar una web falsa y asegurarla con un certificado firmado por una AC falsa. Todo parecería normal: la cabecera https, el candado cerrado en una esquina del navegador.

El ataque suizo pudo llevarse a cabo porque una autoridad de certificación llamada AC RapidSSL todavía utilizaba MD5 en sus certificados, a pesar de que se conocían los fallos de esa función hash. Casi de inmediato, el propietario de RapidSSL, el gigante Verisign, anunció la retirada de los certificados MD5 y anunció que dejaría de usarlos en el futuro. A pesar de ello, en agosto de 2012 —cuatro años después del ataque— todavía quedaban 1300 páginas web que seguían utilizando certificados digitales basados en MD5, una lista en la que hay bancos, servicios de correo webmail, universidades e incluso un vendedor de certificados SSL[22].

El segundo ejemplo tuvo repercusiones políticas internacionales. Entre 2010 y 2012, los expertos en seguridad informática descubrieron un conjunto de programas maliciosos (malware) de una sofisticación sin precedentes. Al contrario que los virus y troyanos habituales, que atacan indiscriminadamente, estos nuevos elementos de software estaban diseñados para espiar o dañar sistemas de control industrial, con especial atención a los países de Oriente Próximo. La prensa norteamericana apuntó como responsables de este cibersabotaje a los servicios de inteligencia de Israel y Estados Unidos, con el fin aparente de frenar el programa nuclear iraní[23].

Uno de estos códigos maliciosos, llamado Flame, se caracteriza por el modo en que se transmitió de un sistema a otro sin ser detectado por ningún sistema antivirus. Al parecer, sus diseñadores se aprovecharon de una vulnerabilidad de MD5 llamada “colisión de prefijo escogido,” descubierta en 2009 por Marc Stevens, Arjen Lenstra y Benne de Weger[24]. Con ello consiguieron falsificar un certificado de Microsoft, con el que firmaban el código de Flame para posteriormente enviarlo de forma que pareciese una actualización de Windows. Por supuesto, el sistema operativo comprobaba la firma digital, pero la falsificación daba el pego y Flame entraba sin ser detectado.

La sofisticación del ataque quedó patente (si es que había dudas a esas alturas) cuando los descubridores del ataque por colisión de prefijo escogido anunciaron que Flame utilizaba una colisión similar pero en una variante distinta, desconocida hasta entonces para la comunidad criptográfica. Marc Stevens afirmó que el diseño de esta nueva variante precisó de “criptoanálisis de talla mundial”[25]. No se trata de un par de hackers aburridos, o de un grupo de investigación universitario. Estamos hablando de actores nacionales.

Microsoft, socio involuntario en este ataque sofisticado, dio la alerta en un aviso de seguridad que incluía pocos detalles[26]. Posteriormente proporcionó más información, incluyendo referencias a Flame[27], y procedió rápidamente a revocar los certificados digitales en cuestión[28], así como a reforzar el sistema de actualizaciones para evitar, o cuando menos dificultar, ataques similares en el futuro[29]. En un intento para tranquilizar a sus clientes, advertía que “es importante que mantenga usted su PC al día con las últimas actualizaciones para que funcione bien y con seguridad;” un aviso que, habida cuenta de cómo se propagó Flame, no deja de tener su punto de ironía.

Volvamos al sistema de autenticación de imágenes de Nikon. A juzgar por cómo le fue con el ensayo de 2005, no cabría esperar mucha diligencia por su parte. Por el contrario, la empresa de fotografía hizo bien los deberes. La PKI que escogió se basa en el algoritmo RSA, con clave de 1024 bits. Aunque la mayoría de los expertos consideran pequeño dicho tamaño, y se decantan por claves de 2048 bits[30], lo cierto es que nadie ha conseguido “romper” una clave RSA de 1024 bits; aun cuando sea factible, la potencia de cálculo necesaria sería asombrosamente alta.

En cuanto a la función hash, Nikon utilizó el llamado SHA-1 (Secure Hash Algorithm). Se trata de un algoritmo usado, y recomendado, por el gobierno federal de Estados Unidos, y que se utiliza para aplicaciones civiles en todo el mundo. El algoritmo ha mostrado recientemente cierta vulnerabilidad a la resistencia frente a colisiones (la propiedad 4 de antes). Aun así, se sigue considerando a SHA-1 como una de las mejores funciones hash existentes hoy día.

En conclusión, Nikon escogió buenas funciones para su firma digital. Cada imagen digital es procesada mediante el hash SHA-1, dando como resultado un valor de 160 bits de longitud, que al ser sometido al algoritmo RSA produce una firma digital de 128 bits. La misma operación se lleva a cabo una segunda vez, para firmar el conjunto de metadatos de la imagen. Ambas firmas se guardan en una zona de la sección de los propios metadatos.

Un proceso impecable, al menos sobre el papel, pero tiene un punto débil. Para que la cámara pueda firmar las fotografías, en sus entrañas electrónicas ha de guardarse una copia de la clave privada RSA, y un atacante hábil podría obtenerla examinando cuidadosamente el firmware interno de la cámara. Esto es lo que hizo la empresa Elcomsoft en abril de 2011. No dio muchos detalles técnicos, más allá de una vaga referencia a que “la clave criptográfica secreta se maneja de forma incorrecta, y puede ser extraída de la cámara” y una lista de las cámaras Nikon afectadas[31], pero sugirió que la vulnerabilidad era similar a una que habían hallado un año antes en cámaras Canon. En un toque de fino humor, Elcomsoft presentó fotografías firmadas “correctamente” según los estándares de Canon, y que incluían incongruencias tales como un astronauta levantando una bandera soviética en la Luna o una imagen de Stalin sosteniendo en alto un iPhone[32].

En ambos casos, el fallo no estaba en el sistema criptográfico en sí, sino en la forma en que se llevaba a cabo dentro de la cámara. Es algo así como mirar por encima del hombro a alguien que esté abriendo una caja fuerte: por muy fuerte que ésta sea, si podemos ver la combinación ya está todo hecho. En el caso de Canon (y puede que también de Nikon), la clave es la misma para todas las cámaras de un modelo dado, lo que aumenta el problema, ya que basta con obtener la clave de una sola cámara para que todas las demás del mismo modelo queden comprometidas.

En ninguno de ambos casos se han reconocido dichos ataques. Una nota de prensa de Nikon, fechada cinco meses después, se limita a afirmar que no ha hecho anuncio oficial alguno[33]; en cuanto a Canon, no hay respuesta oficial hasta la fecha. Ahora los fans de ambas marcas tienen un tema más de controversia: ¿cuál de las dos empresas será la primera en reconocer el fallo?