miércoles, 5 de diciembre de 2012

Firmas y certificados digitales

Una firma digital es un esquema matemático que se utiliza para demostrar la autenticidad de un mensaje o documento digital. Una firma digital válida le da al receptor la garantía que el mensaje ha sido creado por un emisor conocido, y que no ha sido alterado en el camino. Las firmas digitales se emplean por lo general en la distribución de software, en transacciones financieras, y en otros casos en los que sea importante detectar falsificaciones o manipulación indebida. (Resumen traducido de Digital Signature, Wikipedia).

Un certificado digital (también conocido como certificado de identidad) es un documento electrónico que utiliza una firma digital para vincular una clave pública con una identidad determinada - tal como el nombre de una persona o de una organización, sus direcciones, etc. Este certificado también puede usarse para verificar que una clave pública le pertenece a un individuo específico. (Resumen traducido de Public key certificate, Wikipedia)

Generando una firma digital mediante DSA (Digital Signature Algorithm):

Primera fase: Elección de los parámetros del algoritmo, los cuales pueden ser compartidos por varios usuarios del sistema.
(Nota: /dev/random es un archivo especial que se encuentra presente en sistemas operativos basados en Unix y se emplea como un generador de números aleatorios mediante el acceso a "ruido ambiental" recogido de drivers de dispositivos y otras fuentes).


Segunda fase: Cálculo de clave pública y privada para un usuario determinado.


Creo el archivo "archivo.sha1" con el hash sha1 de "archivo" (por eso filtro con awk la primer columna a fin de utilizar el hash propiamente dicho, ver las diferencias en las imágenes siguientes. Con print $0 muestro todo el contenido del archivo sin filtrar, pero a mí me interesa únicamente el hash, por ese motivo empleo print $1). Para esto se puede utilizar tanto el comando sha1sum como openssl dgst -sha -sha1.



Creo la firma digital del hash (archivo.sha1) correspondiente al archivo "archivo", con mi clave privada. Luego verifico con mi clave pública que la firma "firma" es la que corresponde al hash que contiene archivo.sha1:


De esta manera, si se pudo verificar la firma con la clave pública del emisor, significa que éste último es el único que puede haberla creado a partir de su clave pública.

Por último, en este link hay un excelente recurso para comprender los conceptos de clave pública y privada, y firmas / certificados digitales.

No hay comentarios:

Publicar un comentario