Conceptos de Certificado Digital y Firma Digital

Lunes, 22 jun, 2009 @ 20:48 | Por Gustavo Cantero (The Wolf) | Certificados Digitales, Seguridad
Páginas: 1 2

Funciones de Hash

Las funciones de hash son métodos utilizados para generar valores que representen de manera unívoca a un conjunto de datos. Hash también se lo llama al resultado de dicha función o algoritmo.
Estas funciones se las utiliza para diversas aplicaciones, por ejemplo:

  • Verificar la integridad de archivos
  • Firmas digitales
  • Tablas de Hash

Para ver más sobre “tablas de hash” los invito a ver el artículo Tablas de dispersión.

Estos métodos deben poseer algunas propiedades para poder utilizarse, las cuales detallo a continuación:

  • Unidireccionales: a partir de un hash no debe poderse obtener el mensaje original.
  • Compresión: a partir de cualquier mensaje, el hash obtenido siempre debe tener el mismo tamaño, por lo general, menor al mensaje.
  • Difusión: el algoritmo debe utilizar todos los bits del mensaje, para que al cambiar un sólo bit se modifique el hash obtenido.

Existe una lista extensa de funciones públicas de hash que se pueden utilizar, y cada función tiene sus características. A continuación muestro una lista con las funciones de hash más conocidas, principalmente las dos primeras que además son las más utilizadas:

MD5 (Message-Digest Algorithm 5)

Algoritmo de 128 bits creado en 1991 por el profesor Roland Rivest del MIT como reemplazo del algoritmo MD4. Es uno de los algoritmos más utilizados aunque en 1996 se comprobó que se podía generar una colisión de hash, o sea, que a partir de un valor de hash de un documento se puede crear otro que, aunque no sea igual al original, genere el mismo valor de hash.

SHA-1 (Secure Hash Algorithm)

Creado en 1995 por la NSA, es similar al MD5, pero con un resultado de 160 bits. Existen otras variantes que modifican el diseño y longitud del resultado, conocidas como SHA-224, SHA-256, SHA-384 y SHA-512, llamándose SHA-2 a todos ellas.

HAS-160

Basado en SHA-1 y creado para utilizarse en el Korean Certificate-based Digital Signature Algorithm.

Gost

Definido originalmente en las Normas Unitarias del Gobierno Soviético GOST R 34.11-94. Genera un resultado de 256 bits.

Haval

Diseñado por Yuliang Zheng, Josef Pieprzyk, y Jennifer Seberry en 1992, permite generar hash en 14 longitudes distintas.

Panama

Creado en 1998 por Joan Daemen y Craig Clapp, genera resultados de 256 bits y puede utilizarse también como cifrado de flujo.

N-Hash

Creado por Nippon Telephone and Telegraph en 1990, genera un hash de 128 bits.
RIPEMD (RACE Integrity Primitives Evaluation Message Digest)
Creado en 1996, generando un resultado de 160 bits. Existen variantes de 128, 256 y 320 bits.

Snefru

Creado por Ralph Merkle en 1990, genera un hash de 128 o 256 bits. Se demostró que es inseguro.

Tiger

Creado por Ross Anderson y Eli Biham en 1995 para eficiencia en plataformas de 64 bits, genera un resultado de hasta 192 bits.

Certificados Digitales

Un Certificado Digital es un documento digital mediante el cual un tercero confiable (llamado autoridad de certificación o CA) garantiza la vinculación entre la identidad de un sujeto o entidad y su clave pública. Este documento contiene, entre otros datos, el nombre del usuario y su clave pública.

Los certificados digitales tienen distintos usos dependiendo de la finalidad para la cual se lo está utilizando, por ejemplo:

  • Un certificado digital establece la identidad de un usuario en una red
  • Los servidores pueden configurarse para permitir el acceso a usuarios con ciertos certificados o asignarle la identidad de un usuario del dominio según su certificado
  • Los clientes pueden ser configurados para confiar en servidores que presentan ciertos certificados, por ejemplo, los que vienen preconfigurados en los navegadores para utilizarse en sesiones SSL.
  • Los certificados pueden utilizarse para firma documentos electrónicos.

Una de las certificaciones más usadas y un estándar en la actualidad en infraestructuras de clave pública PKIs (Public-Key Infrastructure) es X.509 en su versión 3.

Certificado digital X.509

X.509 es un estándar publicado oficialmente en 1988 que especifica, entre otras cosas, formatos estándares para certificados de claves públicas y un algoritmo de validación de la ruta de certificación.

En X.509 se define una capa de abstracción para suministrar servicios de autenticación a los usuarios de un directorio X.500.

En la actualidad es ampliamente utilizado el formato de certificado digital X.509 v3, por ejemplo, para realizar conexiones seguras a servidores web a través de SSL (Secure Sockets Layer).

Este tipo de certificados posee un formato donde guarda distintos datos, por ejemplo, un número de serie, la clave pública del usuario, las fechas de validez del certificado, el nombre del usuario (en formato X.500), etc.

Formato X.509 v3

A continuación muestro un ejemplo de un certificado digital:

Número de Serie: 21479
Versión X.509: v3
Titular: CN=Gustavo Cantero, E=g.cantero@scientia.com.ar, OU=Persona no verificada – No amparado bajo el Decreto 427/98 de la IFDAPN, O=Política de Certificación de Correo Electrónico
Emisor: CN=AC de la Subsecretaría de la Gestión Pública para Certificados de Correo Electrónico, OU=Política de Certificación en http://ca.sgp.gov.ar, OU=No amparado por el Decreto 427/98 – IFD APN, OU=Subsecretaría de la Gestión Pública, O=Jefatura de Gabinete de Ministros, L=Ciudad de Buenos Aires, C=AR
Validez (no antes de): mié 03 jun 2009 – 19:14:35, ART
(no después de): jue 03 jun 2010 – 19:14:35, ART
Algoritmo de firma: sha1WithRSAEncryption
Clave Pública: E0EE 9902 0301 3081 8902 8181 00E5 AEA6 F074 5EDA 39A2 CF72 70C2 CC9C E7D6 014F 51BF 7A83 8851 4B07 B4BC 2D93 C422 AEC0 2026 9774 3C14 D54B 51E4 5F5C 434A 03F6 6F5C 4045 CC95 E27E 6C9C F5F6 2D99 6B6D 7CEC C786 ED61 D89B 47ED B46D 3B19 190D 86E8 C2FD 893E 01F2 850A B7AE 5806 9A60 9211 6AA2 374C B04E EE29 0340 C0CC 84F4 CE64 32F3 F035 D7E7 7B79 0001
Huella digital (MD5): C68C 8538 6454 3D7C 222F 9176 B8D7 479C
Huella digital (SHA1): 4AFC 0115 CC50 0CFD B0D8 B564 68F5 F24E E47B BCFA


Firma Digital

La firma digital hace referencia a un método criptográfico que asocia la identidad de una entidad (una persona o un equipo informático) a un mensaje o documento, pudiendo además, asegurar la integridad del documento o mensaje.

Para realizar esto se calcula el hash del documento, se encripta el resultado con la clave privada del certificado del usuario, y se adjunta al documento junto con el certificado (pero sin la clave privada, sólo con la pública).

Firma Digital

Luego, para verificar la firma del documento, se lo abre, se valida el certificado adjunto (se verifica la fecha de validez, si la entidad emisora es de confianza, etc.), se obtiene la firma (el hash encriptado), se lo desencripta con la clave pública, se calcula el hash del documento (sin la firma) y se verifica que ambos hash, el desencriptado y el calculado, sean iguales.

Verificar Firma Digital



En el próximo artículo escribiré como hacer paso a paso para generar certificados de prueba y configurar el Internet Information Server para utilizar SSL y certificados de cliente, y leer estos últimos desde ASP.NET.

Artículos relacionados

VN:F [1.7.3_972]
Rating: 9.7/10 (7 votos cast)
Páginas: 1 2

Reciente

  • Cómo firmar un documento PDF desde C# con iTextSharp
  • Obtener lista de contactos de Gmail
  • Pósters de tecnologías y productos de Microsoft
  • Parámetros opcionales en C# 4.0
  • Enlace via código de grillas en ASP.NET
  • Poster con las clases de .NET Framework 4.0
  • Especificación de los lenguajes C# 4.0 y Visual Basic 10.0
  • Tamaño de los parámetros en string.Format
  • 101 ejemplos de Visual C# 2010 y Visual Basic 2010
  • Enlace de elementos en controles de lista en ASP.NET
  •  

    Una Respuesta a “Conceptos de Certificado Digital y Firma Digital”

      Mar Mar dijo:

      Hola, gracias por la información y en espera del siguiente articulo, ojalá que pudieras poner algunos ejemplos de cifrado asimetrico con java. Excelente post, Felicidades

      VA:F [1.7.3_972]
      Rating: 0.0/5 (0 votos cast)

    Responder

    XHTML: Puede utilizar estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>