Nociones
sobre Criptografía - Criptografía
y firma digital:
¿Qué
es la criptografía?
A efectos de la tecnología
de la información, la criptografía
es una técnica que permite
la transformación de textos
legibles en secuencias de caracteres
no legibles. Esta técnica
utiliza algoritmos y funciones matemáticas
que permiten transformar la información
en un conjunto de símbolos
ilegibles y también permiten
el proceso contrario.
El origen es muy
antiguo y siempre se ha desarrollado
de forma paralela a la tecnología
militar y en las relaciones internacionales.
Cuando se desea
transmitir información entre
ordenadores, especialmente a través
de redes públicas, se plantea
la necesidad de que la transmisión
sea segura. La seguridad de la información
transmitida tiene dos aspectos:
que sea el destinatario del mensaje
el único que pueda leerlo:
encriptación
que nadie pueda suplantar la identidad
de emisor del mensaje o modificar
el contenido de los mensajes que
envía.
La criptografía
moderna se basa en dos procesos
complementarios: la encriptación
y la desencriptación, a los
que puede denominarse codificación
y decodificación o también,
cifrado y descifrado.
La encriptación es un proceso
por el que un mensaje de texto legible,
es transformado en un mensaje ilegible
o cifrado mediante una transformación
matemática y una clave secreta
denominada clave de encriptación.
La desencriptación o descifrado
es el proceso inverso a la encriptación;
a partir de un texto cifrado y una
clave secreta se reconstruye el
texto original. Con unos sistemas,
la clave de encriptado es la misma
que para desencriptar; con otros
sistemas, las claves son distintas.
Criptografía:
Algoritmos y funciones
Los sistemas más antiguos
de cifrado se basaban en transformación
de unas letras por otras. Posteriormente
se pasó a hacer trasposiciones
de filas y columnas del texto o
a cambiar sílabas en función
de tablas. En la actualidad la transformación
del texto utiliza unos algoritmos
o funciones matemáticas muy
complejas.
Los algoritmos de encriptación
actuales se agrupan en dos grandes
clases según que el proceso
de encriptación y descifrado
use la misma clave o use claves
distintas. Si usan la misma clave
se denominan algoritmos de claves
simétricas; por el contrario,
si utilizan claves distintas se
les denomina algoritmos de claves
asimétricas o algoritmos
asimétricos.
La seguridad de la criptografía
depende de los siguientes parámetros:
que la clave sea realmente secreta
(evidente...)
longitud de la clave
que el algoritmo no sea invertible;
es decir, que si se conoce cómo
funciona, no se pueda dar la vuelta
al proceso sin la llave
que el algoritmo no tenga "puertas
traseras"
que el algoritmo no permita descifrar
todo el texto si se conoce el contenido
de una parte
Debe tenerse en
cuenta que las técnicas de
cifrado que se resumen en esta nota,
son utilizadas mediante programas
que hacen muy sencillo e incluso
transparente su uso. En muchos casos
los programas de encriptado piden
una simple contraseña o autorización
del usuario para validar la autenticidad
e integridad de un mensaje.
Sistemas
de claves simétricas
La encriptación y descifrado
con claves simétricas (la
misma clave) es entre 10 y 100 veces
más rápido que un
algoritmo de claves asimétricas
(distintas).
El esquema habitual de trabajo con
claves simétricas es el siguiente:

En esta imagen, un texto "plain
text" es transformado según
una clave (Ksecret), trasferido,
y desencriptado con la misma palabra
clave. Esta clave debe haberse sumnistrado
por un medio seguro al receptor,
de manera que no haya sido "capturada".
El problema que se plantea es ¿por
qué medio trasmite A la clave
a B?
Algoritmos
simétricos más comunes
Los algoritmos simétricos
se clasifican en algoritmos para
bloques de texto o flujo de datos.
Los primeros trabajan sobre un grupo
o bloque de bytes, en tamaños
definidos; los segundos encriptan
byte a byte toda la información.
DES: Adoptado como estándar
ANSI en 1977. En una técnica
de cifrado sobre bloques de texto
que usa claves de 56 bits.
DESX: variación del DES;
introduce un proceso de encriptado
en dos fases que hace prácticamente
imposible encontrar la clave.
Triple-DES: Algoritmo DES pero utilizando
tres claves distintas. Este algoritmo
es el más utilizado en transacciones
en instituciones financieras.
RC2: Sistema de cifrado en bloques
adoptado inicialmente por la agencia
RSA; admite claves con longitudes
entre 1 y 2048 bits. La versión
de exportación limita su
uso a claves de 40 bits. Desarrollado
por Ronald Rivest.
RC4: Sistema de cifrado de flujo,
también adoptado por por
la agencia RSA; admite claves con
longitudes entre 1 y 2048 bits.
La versión de exportación
limita su uso a claves de 40 bits.
Desarrollado por Ronald Rivest en
1994.
RC5: Sistema de cifrado en bloques
adoptado inicialmente por la agencia
RSA; admite claves con longitudes
entre 1 y 2048 bits. Permite que
el usuario varíe el tamaño
del bloque que se encripta en cada
paso. Desarrollado por Ronald Rivest.
¿Es
descifrable un mensaje encriptado
con clave simétrica?
Para un algoritmo probado, como
es el RC4, el problema de la seguridad
depende de la longitud de la clave.
Para claves de 40 bits de longitud,
hay 2^40 claves posibles (1,1x10^12).
Un ordenador podría tardar
unas horas en conseguir la clave;
si se emplea una clave de 128 bits,
las claves posibles son 2^128 (3,4x10^38),
y el tiempo necesario para averiguar
la clave sería del orden
de la edad del universo (1,8x10^10
años)...
Estos datos suponen que se trata
de un ataque del tipo ensayo-error.
Con métodos más refinados,
por ejemplo, si se conoce parte
del texto encriptado, el proceso
de búsqueda puede refinarse
y acortarse.
Sistemas
de claves asimétricas
Los algoritmos asimétricos
basados en claves distintas (normalmente
dos llaves) son lentos pero tienen
la ventaja de que una de las claves
puede ser conocida por cualquiera;
el mensaje encriptado por esa clave
"pública" sólo
puede ser descifrado por la otra
clave, privada, conocida sólo
por el destinatario: de ahí
el término asimétrico.
La llave pública es conocida
por cualquiera; la privada sólo
es conocida por el receptor.

Si A desea enviar un mensaje a B,
A encripta el mensaje con la clave
pública (KB,public) de B;
al recibir el mensaje, B lo descifra
con su clave privada (KB,private).
Por el contrario, si B desea enviar
un mensaje a A, B encripta el mensaje
con la clave pública (KA,public)
de A; al recibir el mensaje, A lo
descifra con su clave privada (KA,private).
Algoritmos
asimétricos más comunes
La característica básica
de estos sistemas es que hay dos
claves: la pública y la privada.
La clave pública se genera
a partir de la clave privada. Los
principios de esta técnica
han fueron desarrollados por Diffie
y Hellman (Stanford University,
1975). Como estos algoritmos siempre
presuponen la existencia de una
clave pública, se les denomina
también sistemas de llaves
públicas.
Los algoritmos asimétricos
se clasifican en algoritmos para
bloques de texto o flujo de datos.
Los primeros trabajan sobre un número
de bytes, en tamaños definidos;
los segundos encriptan byte a byte
toda la información.
Los algoritmos más utilizados
son los siguientes:
Diffie-Hellman key exchange: propiamente
es un sistema para generar e intercambiar
una llave compartida por un canal
no seguro.
RSA: Sistema de claves públicas
desarrollodo por Rivest, Shamir
y Adleman (MIT). Es utilizado tanto
para encriptar información
como para firma digital. Los sistemas
de firma digital se utilizan para
garantizar que el autor de la información
es el firmante (es decir, que la
información no ha sido modificada
por un tercero). La clave puede
tener una longitud variable y puede
ser tan grande como se desee.
DSS: El sistema de firma digital
(digital signature system) fue desarrollado
por la Agencia de Seguridad Nacional
de los EE. UU. (NSA) y puede utilizar
claves entre 512 y 1024 bits de
longitud..
La seguridad de
estos sistemas depende de la longitud
de la clave.
Sistemas
de transmisión seguros basados
en la utilización conjunta
de claves asimétricas y simétricas
Los sistemas de transmisión
de claves (Difie-Hellman) utilizan
combinados ambos algoritmos de encriptado:
la criptografía asimétrica
(step 1) para transferir la clave
simétrica (Ks), y la criptografía
simétrica -mucho más
rápida- para transferir la
información. La clave simétrica
(Ks) se transfiere encriptada en
la primera fase, pues es necesaria
para encriptar/desencriptar el flujo
de datos posterior.
Paso 1 (step 1): A genera la clave
simétrica (Ks) que deben
utilizar A y B en sus transmisiones
en esa sesión. Las razones
para utilizar una clave simétrica
son la velocidad y que, para mayor
seguridad, se genera para el caso.
Para enviar esta clave de manera
segura a B, A utiliza la clave asimétrica
pública de B (Kb, public);
cuando B recibe la clave Ks encriptada
con su clave pública, la
descifra con la clave asimétrica
privada (Kb, private) que sólo
posee B.
Paso 2 (step 2): Una vez que A y
B poseen la misma clave simétrica
(Ks) la trasmisión se realiza
encriptando toda la información
con esa clave en ambos sentidos...
Digest
Un digest es una función
matemática que produce una
secuencia de caracteres, normalmente
entre 128 y 256 bits de longitud,
a partir de un archivo de información
inicial de cualquier longitud.
Los digest tienen las siguientes
propiedades:
Cada bit de salida del digest es
influenciado por cada bit de entrada
Para cualquier bit que se cambie
a la entrada, cada bit de salida
tiene al menos un 50% de probabilidades
de cambiar
Dado un fichero (texto) de entrada,
debe ser informáticamente
inviable encontrar otro texto de
entrada que de el mismo producto
en el digest.

Las funciones digest más
utilizadas son las siguientes:
HMAC: Hassed Message Authentication
Code, usa -además- una clave
secreta.
MD2: Message Digest #2, desarrollado
por Ronald Rivest, produce un digest
de 128 bits, aunque requiere bastante
tiempo para calcularse.
MD4: Desarrollado por Ronald Rives
como alternativa al MD2. Ha resultado
ser un tanto inseguro.
MD5: Más seguro que el MD4.
También genera un digest
de 128 bits.
SHA: Desarrollado por la NSA, produce
un digest de 160 bits.
Además,
siempre es posible utilizar un digest
dentro de un mensaje y encriptar
el digest con una clave; de esta
forma se puede firmar digitalmente
el mensaje. También se utilizan
para generar claves a partir de
frases; de este modo el usuario
no tiene que recordar una clave
compleja, ilegible y larga (condiciones
para que sea segura), si no una
frase tan larga (y familiar) como
quiera, que es transformada por
un digest en su clave para descifrar.
Infraestructura
para llaves públicas
Los sistemas de llaves públicas
requieren que cada usuario genere
dos claves, una pública y
una privada. Estas claves tienen
las siguientes propiedades :
la clave privada, se usa para desencriptar
los mensajes recibidos y para firmar
digitalmente
la clave pública, se utiliza
para enviar mensajes encriptados
al usuario propietario de la llave
y para verificar la firma digital
del usuario propietario
Las claves son bloques de caracteres
ilegibles. A continuación
se puede ver un ejemplo de una clave
pública:
Type Bits/KeyID
Date User ID
pub 1024/4C1FD235 1997/07/24 Pepe
Díaz <pepe@unav.es>
-----BEGIN
PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzPXHYIAAAEEANRSmmsSkdLQMfRmjsVYdV63NTQvKNEtcIT9JwEQebuyXFds
24JSj8pLbqOfxZYFZYe9c5uY6PjmiYMRz5yGdNYrEwXi30TwQVi9s/ZHi+sezkqN
PdYJZ7Yt6CplEDEV5BrZXKWHd5KSk/CV0Q+SIu/eImFS9jRic4svJ1NMH9I1AAUR
tDBMdWNpYSBkZSBsYSBJZ2xlc2lhIDxsaWdsZXNpYUBtYWlsMi5jdGkudW5hdi5l
cz6JAJUDBRAz1x2Diy8nU0wf0jUBAYg1A/98Oy4fHbw3MriQjt5KrqMmsOYAxXyA
iEz2MYYZI2aSrzyzibkFbCKeMXL73Zp067lfa7LLC/F5QWkzRCBhJNlXCwHkfkD2
ti0AZsO/qttN1RGQjNNUkEJMQ31HunyEvQfc9bxsj2nPy661lhrTmntBVoFbp/j6
g9/5nOM4VnjlDA==
=6IT8
-----END PGP PUBLIC KEY BLOCK-----
La clave pública
es la que el usuario distribuye
a todo aquel que quiera enviarle
un mensaje cifrado. No hay ningún
peligro en dejar a la vista la clave
pública, ya que con ella
sólo es posible encriptar
mensajes. Lo importante es mantener
bien guardada la clave privada porque
con ella -y sólo con ella-
es posible descifrar los mensajes
enviados.
Un mensaje cifrado
con una llave pública, sólo
puede ser descifrado con la llave
privada que generó la llave
pública. Por lo tanto una
llave pública sirve para
codificar un mensaje y la privada
para descodificarlo. Para mayor
seguridad, el mensaje se codifica
en relación al mensaje que
se escribe, de manera que no es
posible a partir de la clave pública
y un texto encriptado reconstruir
la clave privada en un tiempo asequible
para un ordenador.
Firma
digital
Al comienzo de este documento se
habló de la firma digital.
A continuación se describe
esta técnica, que es un tipo
especial de encriptación.
Más arriba se ha visto cómo
se codifica un texto. Supóngase
por un momento que se quiere garantizar
la autenticidad, aunque no importe
que alguien pueda leer el contenido
del mensaje enviado, pero se quiere
asegurar que el texto no es modificado
después del envío.
Para este fin se utiliza una combinación
de un digest y la encriptación
con clave pública.
La firma digital consiste en añadir
al mensaje, un digest encriptado
del mensaje original; basta que
alguien añada o cambie una
sola letra, para que el digest del
texto, no coincida con el digest
encriptado del mensaje original.
Ejemplo de un mensaje ("hola.")
firmado:
-----BEGIN
PGP SIGNED MESSAGE-----
hola.
-----BEGIN PGP SIGNATURE-----
Version: 2.6.3ia
Charset: cp850
iQBVAwUBM9dUlgnSjkRiXNfNAQE1XAIAjj+lWg1yxeHX6dsYzCojV9FjRTyXPiOA
v/OtJRsaYeijFo7lZmiMhDG/KreWrAgNDSSIWR5+tPc9uUnf5Q67+w==
=ZQED
-----END PGP SIGNATURE-----
La firma de la misma persona en
otro mensaje ("adios"),
tiene un aspecto bastante diferente,
pues la firma digital depende del
contenido:
-----BEGIN
PGP SIGNED MESSAGE-----
adios
-----BEGIN PGP SIGNATURE-----
Version: 2.6.3ia
Charset: cp850
iQBVAwUBM9dU5gnSjkRiXNfNAQE+OwIAo5urpTRPbrq4sFf2Mbd9MlK/g9UppMqr
Dv9QwM843LU2yguDlmB/FIC8xsr/bd+aSiPBnCrNxN5HvP5eeQT3YA==
=549m
-----END PGP SIGNATURE-----
Si alguien copiara
la firma y la pegara en otro mensaje,
al verificar el destinatario la
firma del mensaje recibido, le indicaría
que no es la firma correspondiente
a ese usuario en ese mensaje. Como
resultado del chequeo, obtendríamos
el siguiente aviso si fuera correcta:
File has
signature. Public key is required
to check signature..
Good signature
from user "Pepe Díaz
<pepe@unav.es> ".
Signature made 1997/07/24 13:13
GMT using 512-bit key, key ID 625CD7CD
En cambio, si la firma fuera incorrecta,
el mensaje sería el siguiente:
File has
signature. Public key is required
to check signature...
WARNING:
Bad signature, doesn't match file
contents!
Bad signature from user "Pepe
Díaz <pepe@unav.es>
".
Signature made 1997/07/24 13:13
GMT using 512-bit key, key ID 625CD7CD
Es posible utilizar simultáneamente
la encriptación y la firma
digital de los mensajes, asegurando
así que nadie lee el mensaje,
y que está integro, sin modificación
alguna.
Antes se ha explicado
que la clave pública sólo
sirve para encriptar mensajes que
sólo podrán ser desencriptados
con la clave privada; con el tema
de las firmas digitales ocurre exactamente
al contrario. Sólo quien
tenga la clave privada (es decir,
su propietario), puede firmar los
mensajes, encriptando entonces su
nombre con su clave privada, y sin
embargo debe ser quien los recibe
el que debe saber quien se lo manda
para lo que utiliza la clave pública
de quien le envió el mensaje
descifra la firma digital.
Existen varios
sistemas, pero el más conocido
es el PGP (Pretty Good Privacy),
que no es sino un conjunto de algoritmos
que se dedican a transformar el
texto de entrada en el jeroglífico
que hemos presentado en ejemplos
anteriores. Esta aplicación
comenzó a funcionar en 1.991
y su éxito se debe a que
es totalmente gratuito, existe para
varias plataformas, es fiable.
Certificados
digitales
Todas las técnicas descritas
están encaminadas a garantizar
que un mensaje ha sido mandado por
un usuario o que no son leídos
más que por ese usuario.
Sin embargo, queda un problema por
resolver: ¿ese usuario es
quien dice que es?
Si alguien es suplantado por "X"
desde el inicio de las transmisiones,
esto es, "X" nos dice
que es "A", nos da su
clave pública, etc., todo
las técnicas anteriores son
inútiles, porque "A"
y "B" no se están
comunicando. Este es el motivo por
el que se aconsejaba difundir al
máximo las claves públicas,
porque cuanta más gente la
tenga, más improbable es
que esa persona sea suplantada..
Para evitar esto hay entidades que
mantienen una base de datos con
claves públicas de usuarios
que previamente justifican su identidad
por medio de documentos. Estas empresas,
denominadas autoridades certificadoras
("CA"), expiden un documento
denominado certificado que puede
ser:
Certificados para empresas certificadoras:
corresponden a entidades que certifican
(pueden ser privadas o públicas,
por ejemplo, una universidad).
Certificado para servidores: certifica
que un servidor es de la empresa
que dice y que el identificador
del servidor es correcto
Certificados personales: el de los
usuarios de la red, que garantiza
que una dirección de correo
y clave pública corresponden
a una persona real y cierta.
Certificados para fabricantes de
programas: se utilizan para "firmar"
el software y garantizar así
que no ha sido alterado (p. ej.
con virus virus)
Las CA pueden revocar
un certificado, cuestión
necesaria cuando se olvida la contraseña
o la seguridad de la clave privada
está comprometida, o se ha
estropeado el par clave pública/privada,
o la seguridad de la clave privada
del CA está comprometida.
El protocolo estándar más
utilizado en Internet para certificar
es el X.509v3. El aspecto típico
que presenta un certificado de esta
clase es el siguiente:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=ES, ST=Navarra, L=Pamplona,
O=Universidad de Navarra,
OU=CTI, CN=CA/Email=pepe@unav.es
Validity
Not Before: Aug 4 12:32:00 1997
GMT
Not After : Aug 4 12:32:00 1998
GMT
Subject: C=ES, ST=Navarra, O=Universidad
de Navarra, OU=CTI,
CN=frodo.cti.unav.es/Email=pepe@unav.es
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:cb:2b:e0:6f:9d:e1:9b:4f:e4:9f:c7:03:9c:95:
26:b2:75:9c:02:33:1a:88:7c:aa:60:4a:8c:58:59:
02:01:75:88:54:2f:2c:3d:7c:e6:29:24:1c:ae:2b:
c5:8d:9c:97:01:f3:27:1b:87:61:08:03:9c:53:51:
67:14:8c:58:24:1a:53:83:42:bd:47:9f:ea:0e:33:
68:35:b8:19:6e:03:ab:1b:31:4d:1a:46:06:d7:4c:
02:3e:3a:35:18:6a:04:2b:5c:cf:93:58:b8:d9:da:
b6:90:db:94:b6:52:68:55:18:c2:3d:5c:58:34:4d:
15:1d:5f:51:ba:2d:63:5c:af
Exponent: 65537 (0x10001)
X509v3 extensions:
Netscape CA Revocation Url:
.#http://www.cryptsoft.com/ca-crl.pem
Netscape Comment:
..This is a comment
Netscape Cert Type:
...@
Signature Algorithm: md5WithRSAEncryption
2d:79:34:57:61:b1:33:e5:06:17:92:86:b7:54:a8:85:cc:50:
e4:40:28:c0:48:15:07:fe:bc:bd:51:2a:46:c6:d7:04:61:56:
32:ea:87:bb:b0:28:e9:6c:f6:1b:71:29:2a:49:c1:29:b3:19:
83:f1:48:4b:a5:6a:f4:5e:42:a9:0b:87:8a:74:75:b7:53:1e:
0a:34:9d:44:ea:15:ca:cf:eb:5c:97:de:6d:84:aa:c6:5a:12:
ab:39:c9:e1:23:01:3b:e3:b2:b9:7f:24:b8:87:c0:71:fc:01:
2b:db:72:e5:6e:4d:66:54:60:66:7e:e7:f2:7d:04:8f:d1:bd:
4d:4b
Un certificado X.509v3 tiene los
siguientes elementos:
número de versión
número de serie
información sobre la identidad
del usuario (e-mail, etc.)
algoritmos y parámetros de
encriptado que son utilizados por
el certificador
firma de la autoridad certificadora
periodo de validez
información sobre la clave
pública: algoritmo, parámetros,
y la llave pública propiamente
dicha.
clave pública del CA
La función
del certificado es garantizar que
la clave pública corresponde
a un usuario/empresa/sistema determinado
y perfectamente identificado. La
autoridad cerificadora pide el material
necesario para garantizarlo.
El usuario que pide un ceritificado,
envia sus datos, dirección
de correo, postal, y clave pública.
La empresa CA firma digitalmente,
con su clave privada, los datos
que componen el certificado; la
firma digital del CA consiste en
un digest del certificado, encriptado
con su clave privada. La clave publica
del CA permite comprobar que el
digest encriptado (fingerprint),
corresponde al texto que compone
ese certificado y está encriptado
por esa empresa, es decir, que es
auténtico.
Conviene recordar que el uso de
estos certificados es muy sencillo.
De hecho, los browsers (navegadores)
de Internet más comunes (Netscape,
Explorer, etc.), gestionan automáticamente
su utilización; para utilizar
un certificado el browser pide una
clave para acceder a él.
Seguridad
en los servicios de conexión:
SSL
Hasta ahora se ha hablado de seguridad
a la transmisión de información
entre usuarios finales: de transmitir
información y asegurar la
autenticidad entre dos puntos. La
pregunta que se plantea ahora es:
¿pueden aplicarse las técnicas
de seguridad anteriores a servicios
estándar de Internet como
el mail, el web, etc.? -Sí.
Se ha desarrollado
un protocolo denominado Secure Sockets
Layer (SSL), que gestiona la seguridad
en el nivel inmediatamente superior
al Network Layer (cfr. niveles OSI
en los servicios de red), es decir,
entre la conexión a Internet
(protocolo TCP/IP) y las aplicaciones
(servicios) que utiliza el usuario.
De esta forma es posible garantizar
una conexión segura para
distintos servicios de red.
Básicamente, el SSL facilita
un canal de comunicación
seguro, con encriptación
y certificación de los datos
que se transmiten.
Las carterísticas del SSL
son las siguientes:
seguridad justo por encima del Network
Layer
puede ser utilizado por los servicios
principales: SMTP (mail), HTTP (web),
NNTP (news y grupos de discusión),
FTP (transferencia de ficheros),...
autentificación (comprobación
de la firma digital) bidireccional
mediante certificados RSA, X.509,
etc.
facilita un canal encriptado para
el envío de datos "sensibles"
es posible usar SSL combinado con
otros sistemas de seguridad, por
ejemplo, sockets
Los programas modernos
con los que se accede a los distintos
servicios, también pueden
utilizar los protocolos X509.v3
y SSL de forma transparente para
el usuario final. Obviamente, antes
de cada conexión es necesario
facilitar la contraseña correspondiente
para poder utilizar el certificado
personal, firma digital, encriptación,
etc.
Referencias
y lugares de interés
RedIris
Netscape
Verisign
Tawthe
Nociones
de Seguridad 
|