Traductor

sábado, 30 de julio de 2016

CRIPTOGRAFÍA

La criptografía desempeña un importante papel en la seguridad. Muchas personas están familiarizadas
con los criptogramas de los periódicos, que son pequeños rompecabezas en donde cada letra
se ha sustituido de manera sistemática por una letra distinta. En realidad no tienen mucho que ver
con la criptografía moderna.

El propósito de la criptografía es tomar un mensaje o archivo, conocido como texto simple, y
convertirlo en texto cifrado de tal forma que sólo las personas autorizadas sepan cómo convertirlo
nuevamente en texto simple. Para todos los demás, el texto cifrado es sólo una sucesión incomprensible
de bits. Aunque pueda parecer extraño para los principiantes en esta área, los algoritmos de cifrado
y descifrado (funciones) siempre deben ser públicos. Casi nunca se pueden mantener secretos,
y esto da a las personas que tratan de mantener los secretos una falsa sensación de seguridad. En la
práctica, esta táctica se conoce como seguridad por oscuridad y la emplean sólo los amateurs en
la seguridad. Lo extraño es que la categoría de amateurs también incluye a muchas empresas multinacionales

que en realidad deberían estar mejor informadas.

En vez de ello, el secreto depende de los parámetros de los algoritmos, a los cuales se les denomina
claves. Si P es el archivo de texto simple, KE es la clave de cifrado, C es el texto cifrado y
E es el algoritmo de cifrado (es decir, la función), entonces C E ( P, KE ). Ésta es la definición
del cifrado, la cual indica que el texto cifrado se obtiene mediante el uso del algoritmo de cifrado
E, con el texto simple P y la clave de cifrado (secreta) KE como parámetros. La idea de que todos
los algoritmos deben ser públicos y el secreto debe residir exclusivamente en las claves se conoce
como Principio de Kerckhoffs, formulado por el criptógrafo holandés Auguste Kerckhoffs del siglo
XIX. En la actualidad, todos los criptógrafos serios han adoptado esta idea.
De manera similar tenemos que P D (C, KD), donde D es el algoritmo de descifrado y KD es
la clave de descifrado. Esto indica que para obtener de vuelta el texto simple P a partir del texto cifrado
C y la clave de descifrado KD, hay que ejecutar el algoritmo D con C y KD como parámetros.
En la figura 9-2 se muestra la relación entre las diversas piezas.



Criptografía de clave secreta

Para que esto sea más claro, considere un algoritmo en el que cada letra se sustituye por una letra
distinta; por ejemplo, todas las As se sustituyen por Qs, todas las Bs se sustituyen por Ws, todas las
Cs se sustituyen por Es, y así en lo sucesivo:
texto simple: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
texto cifrado: Q W E R T Y U I O P A S D F G H J K L Z X C V B N M
A este sistema general se le conoce como sustitución monoalfabética, en donde la clave es la cadena
de 26 letras correspondiente al alfabeto completo. La clave de cifrado en este ejemplo es
QWERTYUIOPASDFGHJKLZXCVBNM. Utilizando la clave anterior, el texto simple ATTACK se
transformaría en el texto cifrado QZZQEA. La clave de descifrado indica cómo obtener de vuelta
el texto simple a partir del texto cifrado. En este ejemplo, la clave de descifrado es KXVMCNOPHQRSZYIJADLEGWBUFT,
debido a que una A en el texto cifrado es una K en el texto simple,
una B en el texto cifrado es una X en el texto simple, y así sucesivamente.



Criptografía de clave pública

Los sistemas de clave secreta son eficientes debido a que el monto de cálculos requeridos para cifrar
o descifrar un mensaje es razonable, pero hay una gran desventaja: el emisor y el receptor deben
tener la clave secreta compartida. De hecho, tal vez hasta tengan que reunirse físicamente para
que uno le entregue la clave al otro. Para resolver este problema se utiliza la criptografía de clave
pública (Diffie y Hellman, 1976). Este sistema tiene la propiedad de que se utilizan distintas claves
para el cifrado y el descifrado, y si se elige bien la clave de cifrado es casi imposible descubrir
la clave de descifrado correspondiente. Bajo estas circunstancias, la clave de cifrado se puede hacer
pública y sólo hay que mantener secreta la clave de descifrado privada.
Para que el lector vea cómo funciona la criptografía de clave pública, considere las siguientes
dos preguntas:
Pregunta 1: ¿Cuánto es 314159265358979 314159265358979?
Pregunta 2: ¿Cuál es la raíz cuadrada de 3912571506419387090594828508241?

Funciones de una vía

Hay varias situaciones, que veremos más adelante, donde es deseable tener cierta función f con la
siguiente propiedad: dada f y su parámetro x, es fácil calcular y f(x), pero si sólo se tiene f(x) es
imposible calcular el valor de x. Comúnmente dicha función manipula los bits en formas complejas.
Podría empezar por inicializar y con x. Después podría ejecutar un ciclo que itere todas las veces
que haya bits 1 en x, y en cada iteración se permutarían los bits de y de una manera
independiente a la iteración, agregando una constante distinta en cada iteración, y mezclando en
general los bits minuciosamente. A dicha función se le conoce como función de hash criptográfica.


Los hash o funciones de resumen son algoritmos que consiguen crear a partir de una entrada (ya sea un texto, una contraseña o un archivo, por ejemplo) una salida alfanumérica de longitud normalmente fija que representa un resumen de toda la información que se le ha dado (es decir, a partir de los datos de la entrada crea una cadena que solo puede volverse a crear con esos mismos datos).
Estas funciones no tienen el mismo propósito que la criptografía simétrica y asimétrica, tiene varios cometidos, entre ellos está asegurar que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña o firmar digitalmente un documento.

Código de detección de modificaciones


El objetivo de estas funciones es poder detectar si un mensaje ha sido modificado o no. Por tanto permiten la verificación de la integridad del mensaje. Su funcionamiento consiste en calcular el valor hash del mensaje y que este sirva como prueba para una posible verificación de si el mensaje ha sido modificado. A las funciones hash diseñadas con este objetivo se las llama Códigos de detección de modificaciones o MDC ( siglas del inglés Modification Detection Codes)
Para cumplir su objetivo la función hash tiene que cumplir propiedades que la haga resistente frente ataques de adversarios maliciosos cuyo objetivo es que la función no cumpla su cometido. Según la propiedad que se estime necesaria que cumpla se puede decir que hay dos tipos de Códigos de detección de modificaciones:
  • Las que requieren que la función hash sea CRHF. Por tanto es difícil encontrar dos mensajes con el mismo valor hash.

Código de autenticación de mensajes


El objetivo de estas funciones es permitir comprobar, sin usar ningún mecanismo adicional, la autenticidad del origen de un mensaje asegurando además la integridad de dicho mensaje. Debido a esta funcionalidad se las llama Códigos de Autenticación de Mensajes o MAC (siglas del inglés Message Authentication Codes).
Las MAC son funciones hash con clave, la cual mantienen en secreto tanto el que se quiere autenticar como el que verifica la autenticación. Para que sea resistente frente ataques es necesario que la función comprima y que sea resistente a la computación de nuevos valores hash.

FIrmas digitales 

Con frecuencia es necesario firmar un documento en forma digital. Por ejemplo, suponga que un
cliente pide a su banco que compre ciertas acciones, para lo cual le envía un mensaje de correo electrónico.
Una hora después de haber enviado y ejecutado la orden, las acciones se desploman. Ahora
el cliente niega incluso haber enviado el correo electrónico. Desde luego que el banco puede
presentar el correo electrónico, pero el cliente puede afirmar que el banco lo falsificó para poder obtener
una comisión. ¿Cómo puede saber un juez quién está diciendo la verdad?
Las firmas digitales hacen que sea posible firmar correos electrónicos y otros documentos digitales,
de tal forma que el emisor no los pueda repudiar después. Una manera común es pasar primero
el documento a través de un algoritmo de hashing criptográfico de una vía, que sea muy difícil
de invertir. Por lo general, la función de hashing produce un resultado de longitud fija, independiente
del tamaño del documento original. Las funciones de hashing más populares son: MD5 (Algoritmo
de firma de mensajes 5), el cual produce un resultado de 16 bytes (Rivest, 1992) y SHA-1
(Algoritmo de hash seguro), que produce un resultado de 20 bytes (NIST, 1995). Las versiones
más recientes de SHA-1 son SHA-256 y SHA-512, que producen resultados de 32 y 64 bytes, respectivamente,
pero se utilizan con menos frecuencia en la actualidad.


El siguiente paso asume que se está utilizando la criptografía de clave pública como vimos antes.
Entonces, el propietario del documento aplica su clave privada al hash para obtener D(hash).
Este valor, conocido como bloque de firma, se adjunta al documento y se envía al receptor, como
se muestra en la figura 9-3. Al proceso de aplicar D al hash se le conoce algunas veces como descifrar
el hash, pero en realidad no es un descifrado debido a que el hash no se ha cifrado. Es sólo
una transformación matemática aplicada al hash.



Cuando llegan el documento y el hash, el receptor calcula primero el hash del documento mediante
el uso de MD5 o SHA, según lo que hayan acordado de antemano. Después, el receptor aplica
la clave pública del emisor al bloque de firma para obtener E(D(hash)). En efecto, “cifra” el hash
descifrado, lo cancela y obtiene el hash de vuelta. Si el hash calculado no coincide con el hash del
bloque de firma, significa que se alteró el documento, el bloque de firma o ambos (o que se modificaron
por accidente). El valor de este esquema es que aplica la criptografía de clave pública (lenta)
sólo a una pieza de datos relativamente pequeña: el hash. Tenga muy en cuenta que este método
sólo funciona si para todas las x

E(D(x)) x

No se garantiza a priori que todas las funciones de cifrado vayan a tener esta propiedad, pues lo que
habíamos pedido en un principio era que

D(E(x)) x

es decir, E es la función de cifrado y D es la función de descifrado. Para obtener la propiedad de la
firma en la suma, el orden de aplicación no debe importar; es decir, D y E deben ser funciones conmutativas.
Por fortuna, el algoritmo RSA tiene esta propiedad.





4 comentarios: