Seguridad y Alta disponibilidad
Capitulo 5 Criptografía.
Principios de criptografía
La criptografía (del griego 'escritura oculta') es la ciencia de cifrar y descifrar información con técnicas
especiales, usado frecuentemente en mensajes que solo puedan ser leídos por las personas a las que van
dirigidos.
Al hablar de este área se debería hablar de criptologia que a su vez engloba las técnicas de cifrado
(criptografía) y sus técnicas complementarias donde se incluye el *criptoanalisis (técnica que estudia los
métodos para romper textos cifrados con objeto de recuperar la información original en ausencia de claves).
Aspectos de la terminología de criptografía:
La información original a proteger se denomina texto en claro o texto plano.
El cifrado es el proceso de convertir texto plano en texto ilegible, se le llama texto cifrado o
criptograma.
Los algoritmos de cifrado se clasifican en dos grupos:
✔ Cifrado en bloque. Se divide el texto original en bloques de bits de tamaño fijo y estos se cifran
de manera independiente.
✔ Cifrado de flujo. El cifrado es bit a bit, byte a byte o carácter a carácter.
*Las dos técnicas mas sencillas de cifrado son:
✔ La sustitución: consiste en cambiar el significado de los elementos básicos del mensaje, los
dígitos, símbolos o caracteres. HOLA => H014
✔ La transposición: consiste en re-ordenar los elementos del mensaje pero sin modificarlos.
HOLA => OHAL
El descifrado es el proceso inverso que recupera el texto plano a partir del criptograma y la clave.
*Tipos de algoritmo de cifrado
➢ Simétricos o de clave simétrica o privada: son los algoritmos que usan una clave única tanto para
cifrar como para descifrar.
➢ Asimétricos o de clave asimétrica o publica: son los algoritmos que utilizan una clave para cifrar y
otra clave distinta para descifrar.
El principio de Kerchohoff dice que la fortaleza de un sistema o algoritmo de cifrado debe recaer en la clave
y no en el algoritmo que si es conocido, si no hay clave no se podrá descifrar el mensaje.
Scripts de cifrado
Como ejemplo de sustitución se puede utilizar el comando tr que realiza una sustitución carácter a carácter.
*Criptografía simétrica
La criptografía simétrica usa la misma clave para cifrar y descifrar mensajes. Dado que toda la seguridad
recae en la clave, esta debe ser muy difícil de adivinar, para ello se usa la longitud y el conjunto de
caracteres que use, algunos ejemplos de *algoritmos de cifrado simétrico son:
• Algoritmo de cifrado DES que usa una clave de 56 bits (son 256 claves posibles), pero que es
fácilmente descifrable por un ordenador moderno en cuestión de días.
• Algoritmo de cifrado 3DES, Blowfish, Twofish e IDEA que usan claves de 128 bits o lo que es lo
mismo 2128 claves posibles (aunque admiten entre 32 a 448bits dependiendo del algoritmo).
• Otros algoritmos usados son RC5 y AES (Advanced Encryption Standard) también conocido como
Rijndael.
Los *principales problemas de los algoritmos de cifrado no están relacionados con su seguridad, sino con:
✔ El intercambio de claves. Una vez que remitente y destinatario han intercambiado las claves ya se
pueden comunicar con seguridad, pero ¿que canal de comunicación seguro se ha usado?, esto hace
que sea mas fácil para el atacante interceptar una clave que proba las posibles combinaciones para
descubrirla.
✔ El numero de claves que se necesitan: si hay un numero 'n' de personas que se tienen que comunicar
entre si, se necesitan n/2 claves diferentes para cada par de personas que se quieran comunicar en
privado, con un grupo reducido de personas es posible, pero con un grupo grande es imposible
llevarlo a cabo, son muchas claves a custodiar (sin embargo con la asimétrica solo hay que custodiar
la clave privada propia).
✔ La solución a esto es la criptografía asimétrica y la criptografía híbrida.
Algunos programas o herramientas de cifrado simétrico son:
PGP (Pretty Good Privacy) es el programa mas popular de encriptacion y creación de llaves publicas
y privadas, su pega es que es un algoritmo propietario.
*GPG (GNU Privacy Guard) es una herramienta para el cifrado similar al PGP pero de software libre
bajo licencia GPL, utiliza algoritmos no patentados como ElGamal, CAST5, Triple DES (3DES),
AES y Blowfish, viene pre-instalada en distribuciones Linux, *algunas opciones del comando:
✔ gpg --version muestra la versión y algoritmos soportados.
✔ gpg -c [Link] -c encripta el archivo con cifrado simétrico, da [Link]
✔ gpg -c -a [Link] -c -a encripta en formato legible (ASCII), da [Link]
✔ gpg -d [Link] -d desencripta el archivo.
✔ gpg -c -a --cipher-algo AES192 archivo --cipher-algo determino que algoritmo usar.
*TrueCrypt para el cifrado de datos y particiones, en entorno gráfico.
*Criptografía de clave Asimétrica
Cada usuario del sistema criptográfico ha de poseer una pareja de claves:
✔ Clave privada: sera custodiada por su propietario y no se dará a conocer a ningún otro.
✔ Clave publica: sera conocida por todos los usuarios.
Esta pareja de claves es complementaria: lo que cifra una solo lo puede descifrar la otra y viceversa, los
sistemas de cifrado de clave publica se basan en funciones resumen o funciones hash de un solo sentido, que
aprovechan propiedades particulares de los números primos.
• 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).
*En cifrado simétrico es suficiente con 128bits, pero para criptografía asimétrica se recomiendan claves
publicas de 1024 bits.
La ventaja de la criptografía asimétrica es que se puede cifrar con una clave y descifrar con la otra, pero
este sistema tiene bastantes desventajas:
✔ Para una misma longitud de clave y mensaje se necesita mayor tiempo de proceso.
✔ Las claves deben ser de mayor tamaño que las simétricas.
✔ El mensaje cifrado ocupa mas espacio que el original.
En cada sentido del envió y recepción de información, se cifra el mensaje con la clave publica de la persona a
la que se envía y esta lo descifra con su clave privada que solo el conoce, cada interlocutor tiene que tener la
clave publica del otro.
*algunas opciones del comando GPG en criptografía asimétrica:
✔ gpg --gen-key genera un par de claves (privada y publica).
✔ gpg --list-keys lista las claves publicas que tenemos, propia y ajenas.
✔ gpg --import [Link] importo la clave publica de un interlocutor.
✔ gpg --armor --output miclave_publica.asc --export ClaveID exporto mi clave publica a un
fichero (armor es para que se vea en caracteres ASCII).
✔ gpg --armor --output claveprivada --export-secret-key ClaveID exporto mi clave privada a un
fichero como backup.
✔ gpg --armor --recipient ClaveID_destinatario --encrypt fichero encripto un fichero con la clave
publica del destinatario (para desencriptar se usa gpg -d [Link] > [Link]).
Aplicaciones como PGP, comunicaciones TCP, protocolos SSH o la capa de seguridad TLS/SSL utilizan un
cifrado Híbrido, que esta formado por criptografía asimétrica para el intercambio de claves de criptografía
simétrica y criptografía simétrica para transmitir la información.
*Algoritmos de tecnicas de clave asimétrica:
✔ Diffie-Hellman, RSA, DSA, ElGamal, criptografía de curva elíptica.
Protocolos y software que usan los algoritmos citados:
✔ DSS (Digital Signature Standard) con el algoritmo DSA (Digital Signature Algorithm).
✔ PGP y CPG, una implementación de OpenPGP.
✔ SSH, SSL y TLS (por debajo de HTTPS esta SSL y TLS).
*Criptografía Híbrida
Usar claves asimétricas ralentiza el proceso de cifrado, para solucionar este inconveniente se utiliza un
algoritmo de clave publica para cifrar el envió de una pequeña cantidad de información como puede ser una
clave simétrica y posteriormente se usa un algoritmo de clave simétrica para el cifrado del mensaje, de esta
forma se reduce el coste computacional. El proceso seria el siguiente:
✔ Ana escribe un mensaje con destino Bernardo, primeramente lo cifra con clave simétrica, esta clave
se genera aleatoriamente y se llama clave de sesión, para enviar esta clave de sesión de forma segura
se cifra de forma asimétrica con la clave publica de Bernardo.
✔ Bernardo recibe el mensaje cifrado con la clave de sesión y la clave de sesión cifrada con su clave
publica, entonces utiliza su clave privada para descifrar la clave de sesión y una vez descifrada la
utiliza para descifrar el propio mensaje.
Con el sistema de criptografía híbrida se consigue:
✔ Confidencialidad: Solo podrá leer el mensaje el destinatario del mismo.
✔ Integridad: El mensaje no podrá ser modificado (si se modifica no se podrá descifrar)
✗ Aunque quedan unos problemas sin resolver, Autenticación y No repudio.
*Firma digital
Una de las ventajas de la criptografía de clave publica es que ofrece un método de firmas digitales, esto
permite al receptor de un mensaje verificar la autenticidad del origen del mismo y que ademas no ha sido
modificado. Por lo tanto con este sistema conseguimos:
✔ Autenticación: La firma digital es equivalente a la firma física de un documento.
✔ Integridad: El mensaje no podrá ser modificado.
✔ No repudio en origen: El emisor no puede negar haber enviado el mensaje.
La firma digital cifra con clave privada el resumen de los datos a firmar haciendo uso de funciones de
resumen o hash.
Vídeos relacionados con la criptografía:
[Link]
*Certificados digitales
Los certificados digitales asocian una clave publica con la identidad de su propietario.
El formato estándar de certificados digitales es X.509 y su distribución es posible realizarla:
✔ Con clave privada (suele tener extensión *.pfx o *.p12) mas seguro y destinado a un uso privado de
exportación e importación posterior como método de copia de seguridad.
✔ Solo con clave publica (suele ser de extensión *.cer o *.crt), destinado a la distribución no segura,
para que otras entidades o usuarios ta solo puedan verificar la identidad, en los archivos o mensajes
firmados.
Se cifra el HASH
Certificado con la clave
Nombre: Luis => HASH => XT64YZ78... => privada de la
Clave Publica: XF34.... Autoridad de
Certificación
*Terceras partes de Confianza
Dos usuarios pueden confiar directamente entre si, si ambos tienen relación con una tercera parte y esta da
fe de la fiabilidad de los dos.
La forma en que esa tercera parte avalara que el certificado es de fiar es mediante su firma digital
sobre el certificado.
Las infraestructuras de Clave Publica (ICP o PKI, Public Key Onfraestructures) esta formado por:
Autoridad de certificación (CA): emite y elimina los certificados digitales.
Autoridad de registro (RA): controla la generación de los certificados, procesa las peticiones y
comprueba la identidad de los usuarios, mediante el requerimiento de documentación de
identificación personal.
Autoridades de repositorio: almacenan los certificados emitidos y eliminados.
Software para el empleo de certificados.
Política de seguridad en las comunicaciones relacionadas con gestiones de certificados.
Documento nacional de identidad electrónico (DNIe)
Emitido por la Dirección General de la Policía acredita la identidad, los datos personales que en el aparecen y
la nacionalidad y con respecto al mundo digital:
✔ Acreditar electronicamente y sin posibilidad de duda, la identidad de la persona.
✔ Firmar digitalmente documentos electrónicos, otorgándoles una validez jurídica equivalente a las que
le proporciona la firma manuscrita.
Incorpora un pequeño chip (circuito integrado) capaz de guardar de forma segura información en formato
digital como:
✔ Un certificado electrónico para autenticar la personalidad del ciudadano.
✔ Un certificado electrónico para firmar electronicamente, con la misma validez que la firma
manuscrita.
✔ Certificado de la autoridad de Certificación emisora.
✔ Claves para su utilización.
✔ La plantilla biometrica de la impresión dactilar.
Para la utilización del DNI electrónico se necesita:
✔ Hardware especifico: como un lector de tarjetas inteligente que cumpla el estandard ISO-7816.
✔ Software especifico: Controladores o módulos criptográficos para el acceso al chip y su contenido.