Firmas Digitales
El mecanismo de encriptado asimétrico ofrece otra facilidad en seguridad: hace posible un método para utilizar firmas digitales y certificados para proporcionar autenticidad a los mensajes transmitidos.
Mediante el cifrado de un mensaje, podemos asegurar la privacidad de los datos enviados. Pero, ¿sabe realmente el receptor de quién proviene tal mensaje? El origen de un mensaje es tan importante como su contenido.
Los sistemas de firma digital pueden utilizarse para verificar la fuente de un mensaje y la integridad de los datos del mismo. Estos son implementados mediante claves públicas y privadas: el emisor de un mensaje utiliza la clave privada para firmarlo y esa firma es única ya que solo él dispone de la clave privada; el receptor puede verificar dicha firma utilizando la clave pública correspondiente emitida por el emisor del mensaje. Ésta es una propiedad del sistema de clave pública llamada “de no repudio” ya que cada usuario tiene la responsabilidad de proteger su clave privada.
En principio, los sistemas de firmas digitales no proporcionan encriptado de datos, pero un sistema de cifrado asimétrico puede ser usado para ambos propósitos, como es el caso de RSA.
Para firmar digitalmente un mensaje utilizando RSA, básicamente, el emisor encripta el mensaje con su clave privada para firmarlo; el mensaje es verificado y recuperado por el receptor desencriptándolo con la clave pública correspondiente emitida por aquel.
Ahora, con este proceso se proporciona autenticación para el mensaje enviado, pero no seguridad mediante cifrado porque cualquiera puede disponer de la clave pública correspondiente para recuperar el mensaje original. Por lo que debe aplicarse adicionalmente el proceso normal de encriptado seguro, es decir, encriptar el mensaje con la clave pública del receptor deseado. Considerando la carga computacional de los algoritmos de clave pública (en su mayoría basados en cálculos aritméticos de grandes números) podemos ver que no es la mejor solución. Para resolver éste problema es posible utilizar sólo un fragmento del mensaje (véase Funciones de Resumen) a cifrar para aplicar la firma digital y luego cifrarlo con la clave pública del receptor; con esto se reduce bastante el costo computacional de todo el proceso.
Otro sistema, uno de los mas importantes, es el estándar de Firma Digital (Digital Signature Standard - DSS) [FIPS 186-2]. Éste solo provee autenticación y no encriptado, esto hace que aquellos productos que usen este estándar sea exportables.
DSS utiliza un algoritmo de clave pública para realizar la firma de los datos. Puede ser implementado con DSA (Digital Signature Algorithm), RSA (véase Criptografía Asimétrica) o ECDSA (Elliptic Curve Digital Signature Algorithm).
Utiliza una función hash para obtener una versión condensada de los datos, que será la entrada al algoritmo para generar la firma digital. La firma digital es enviada, junto con el mensaje al destinatario (utilizando algún sistema de encriptado). Este último verifica la firma usando la clave pública del emisor para desencriptar el resumen firmado y la misma función hash utilizada para generar el mensaje para comprobar que dicho resumen corresponde al mensaje recibido. La función hash utilizada por DSS es SHS (también conocido como Algoritmo de Hash estándar - SHA). De esta forma, la firma digital lograda con DSS permite autenticar tanto la integridad de los datos firmados como la identidad de la entidad que emitió el mensaje.
Un concepto relacionado con las firmas digitales es el de Código de Autenticación de Mensajes (Message Authentication Code - MAC) ya que es común que la firma digital se efectúe a éste código.
Éste, provee control contra errores o modificaciones no deseadas. Un MAC se forma utilizando un cifrador de bloques en cadena (generalmente alguna función de resumen o función hash) a los datos entrada y se guarda solo el último bloque. Luego es enviado junto con el mensaje encriptado. El receptor, luego de desencriptar el mensaje calculará nuevamente el MAC para compararlo con el que vino con el mensaje, si se produjo un cambio en los datos, el MAC calculado será diferente. Lógicamente, la clave usada para generar el MAC no debe ser igual a la utilizada para encriptar el mensaje; suele utilizarse una clave resultante de una trasformación simple a la clave para encriptado.
Funciones de Resumen
Un algoritmo que utiliza una función de resumen o una función hash genera una cadena de longitud fija, llamada resumen o fingerprint, a partir de un mensaje de tamaño variable. La función es de un solo sentido, imposible de invertir y realiza el resumen de forma que, mensajes casi idénticos producen resúmenes muy diferentes entre sí. Por esto es muy poco probable crear una entrada que produzca un resumen en particular. De esta forma, se obtiene una forma de control de integridad para detectar modificaciones al mensaje original que ha sido interceptado por algún tercero.
Además, las funciones de resumen son utilizadas en sistemas de firma digital: puede aplicarse una firma digital al resultado de una función hash aplicada al mensaje en lugar de al mensaje completo, ahorrando en tiempo y capacidad de procesamiento ya que el resumen siempre es menor que el mensaje del cual se generó.
Las funciones hash deben tener una salida relativamente larga, como mínimo 128 bits, de otra forma sería mas fácil encontrar un mensaje que produzca el mismo resumen que el mensaje original.
Entre las funciones hash mas importantes, tenemos MD2, MD4 y MD5. MD5 es resultado de la mejora de las versiones anteriores y por lo tanto, la más utilizada por ser considerada segura. MD5 trabaja en modo de bloques, la entrada es dividida en bloques de 512 bits y la salida es una cadena de 4 bloques de 32 bits.
Otra función hash es SHA (Secure Hash Algorithm) que ha sido adoptada por el gobierno americano como un estándar. Produce resúmenes de 160 bits a partir de bloques de 512 bits del mensaje original, y aunque es más lenta que MD5, también es más segura.
Certificados
¿Que sucede si alguien mal intencionado publica sus claves diciendo ser alguien más? Es necesario proveer algún mecanismo de autenticación para las claves publicas que son distribuidas. Esto se logra mediante el uso de certificados.
Un certificado es un documento digital que acredita que la clave pública que contiene es de quien dice ser. Para avalar tal afirmación, este documento es respaldado por una Autoridad de Certificación (Certification Authority - CA) mediante su firma digital. Las entidades de certificación son organismos seguros e independientes que emiten certificados de autenticidad de claves públicas (es decir nos ahorran el trabajo -casi imposible de otra forma- de comprobar con quién nos estamos comunicando). El objetivo de los certificados digitales es permitir que las credenciales sean denegadas y poder evitar problemas de seguridad.
Básicamente, un certificado consta de la clave publica que certifica, el nombre del propietario, un período de validez, el nombre de la Autoridad de Certificación que lo emite, un número de serie, entre otros datos adicionales. Este certificado viene firmado digitalmente por el emisor, con su clave privada (adjunto como dato adicional a los ya nombrados). Entonces si poseemos la correspondiente clave pública (también en forma de certificado) podremos comprobarlo. Los navegadores traen incorporadas las claves públicas, en forma de Certificados, de las entidades de certificación mas importantes (Thawte, VeriSign, otras) de manera que si establecemos una conexión con alguna entidad que ha certificado su clave pública con alguna de estas CA la comunicación se realizará de forma segura y transparente. En el caso de que la entidad que certifique la clave pública recibida no se encuentre entre estas entidades confiables, será decisión del usuario confiar o no en tal entidad para poder o no establecer la conexión.
Para establecer una conexión segura, el emisor contacta a la otra parte quien le envía su clave pública junto con el certificado digital que acredita que la clave es de quien dice ser.
Existen varias entidades de certificación que agregan a la clave pública diferentes niveles de autenticidad. Por ejemplo un proyecto universitario que involucre comunicaciones seguras en Internet puede estar avalado por un certificado emitido por la Universidad que la contiene, pero quizás alguien no confíe en esa entidad para establecer una comunicación, por lo que la clave pública de la Universidad (que se encuentra en el certificado que emitió al proyecto) podría estar avalada por otra entidad mas confiable, por ejemplo, VeriSign. Al certificado emitido por esta ultima se le llama certificado raíz; de esta forma se obtiene una cadena de certificados que avalan la autenticidad del otro de mas baja jerarquía.
También es posible certificar una clave pública con un certificado emitido por la misma entidad a la que pertenece dicha clave; este el caso de la CA (quién más certificaría tal clave) o de cualquiera que no desee pagar la certificación de una CA y solo posea el certificado emitido por él mismo (con el riesgo de no ser aceptado en una comunicación con terceros).
Los tres métodos de certificación de uso más común actualmente están basados en Certificados X.509/PKIX y Autoridades de Certificación, PGP y SKIP [Gerck]. Cada uno de estos presenta un paradigma de certificación diferente.