Introducción a la Criptografia

6,531 views

Published on

Published in: Technology

Introducción a la Criptografia

  1. 1. Dani Gutiérrez Porset [email_address] <ul><ul><li>Introducción a la Criptografía </li></ul></ul>
  2. 2. Índice <ul><li>Introducción </li></ul><ul><li>Valores aleatorios </li></ul><ul><li>Funciones hash </li></ul><ul><li>Cifrados simétrico y asimétrico. Comparación. </li></ul><ul><li>Aplicaciones: encriptación, firma digital, protocolos, MAC/HMAC </li></ul><ul><li>Esquemas de autenticación </li></ul><ul><li>Estándares y Formatos </li></ul><ul><li>Software </li></ul><ul><li>Licencia de uso </li></ul>
  3. 3. Introducción <ul><li>Objetivos: </li></ul><ul><ul><li>Privacidad=Confidencialidad </li></ul></ul><ul><ul><li>Autenticación </li></ul></ul><ul><ul><li>Integridad </li></ul></ul><ul><ul><li>No repudio </li></ul></ul><ul><li>Fundamentos matemáticos: </li></ul><ul><ul><li>Generación de números aleatorios </li></ul></ul><ul><ul><li>Generación de números primos grandes </li></ul></ul><ul><ul><li>Sustituciones </li></ul></ul><ul><ul><li>Permutaciones=Trasposiciones </li></ul></ul>
  4. 4. Valores aleatorios <ul><li>“nonce”=”number used once”. Número o cadena de bits a ser empleado una sola vez, aleatorio y que no se repite. Ej. empleado en autenticación digest de http </li></ul><ul><li>Vector de inicialización (IV): bloque de bits necesario para los cifradores de flujo o de bloque. Es un caso de nonce. </li></ul><ul><li>“salt”: para protegerse contra los ataques de diccionario, las funciones de generación de claves crean claves a partir de una clave original y un conjunto de bits aleatorios denominado “salt”. A veces se emplea un IV como salt. </li></ul><ul><ul><li>Ej: En ldap, {smd5} es la versión salted de md5y {ssha} la variante salted de la sha-1 {sha} </li></ul></ul>
  5. 5. Funciones hash <ul><li>Sinónimos: resumen, digest, hash </li></ul><ul><li>Crean un resumen de N bits a partir de un contenido origen. </li></ul><ul><li>Propiedades: </li></ul><ul><ul><li>Funciona en una sola dirección: a partir del resumen no se puede deducir el origen </li></ul></ul><ul><ul><li>No hay 2 orígenes que den un mismo resumen (en teoría), o son difíciles de calcularlos (ver http://en.wikipedia.org/wiki/Hash_collision ) </li></ul></ul><ul><li>Usos: </li></ul><ul><ul><li>Resumen de un contenido (ej. fichero, correo electrónico), ej. para comparación </li></ul></ul><ul><ul><li>Codificación de passwords a longitud fija </li></ul></ul>
  6. 6. Funciones hash <ul><li>Ejs. de algoritmos: </li></ul><ul><ul><li>crypt: el resultado depende de cada sistema concreto ( http://en.wikipedia.org/wiki/Crypt_(Unix ) ) </li></ul></ul><ul><ul><li>md5. Tiene colisiones. Ejs: </li></ul></ul><ul><ul><ul><li>En /etc/shadow se emplea una versión salted de md5. El salt se almacena en el 2º campo de la forma $1salt$... Ej. comprobación: openssl passwd -1 -salt mi_salt mi_clave </li></ul></ul></ul><ul><ul><ul><li>Passwords joomla de mysql </li></ul></ul></ul><ul><ul><li>sha, sha-1, sha-2. sha-1 es el sucesor de md5. Se emplea en SSL/TLS, S/MIME, PGP, SSH, IPsec. </li></ul></ul><ul><li>Refs: </li></ul><ul><ul><li>http://en.wikipedia.org/wiki/Cryptographic_hash_function </li></ul></ul><ul><ul><li>http://en.wikipedia.org/wiki/SHA_hash_functions </li></ul></ul>
  7. 7. Cifrado simétrico <ul><li>Una misma clave para encriptar y desencriptar </li></ul><ul><li>Problema: distribución de claves (ha de estar muy guardada, o ser de vida corta) </li></ul><ul><li>Los métodos pueden ser de flujo o de bloque. </li></ul><ul><li>Ejs. de algoritmos: </li></ul><ul><ul><li>des, 3des, aes, desx </li></ul></ul><ul><ul><li>cast, cast5 </li></ul></ul><ul><ul><li>rc2, rc4, rc5 </li></ul></ul><ul><ul><li>idea (patentado) </li></ul></ul><ul><ul><li>blowfish </li></ul></ul><ul><li>Ref: http://en.wikipedia.org/wiki/Symmetric-key_algorithm </li></ul>
  8. 8. Cifrado asimétrico <ul><li>Dos claves, una pública y otra privada. Propiedades: </li></ul><ul><ul><li>A partir de una clave pública es imposible deducir la privada. </li></ul></ul><ul><ul><li>Lo que se encripta con una se puede desencriptar con la otra, y viceversa. Ej: </li></ul></ul><ul><ul><ul><li>Encriptación: </li></ul></ul></ul><ul><ul><ul><ul><li>Origen: encriptar mensaje con clave pública del receptor </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Destino: desencriptarlo con clave privada del receptor </li></ul></ul></ul></ul><ul><ul><ul><li>Firma: </li></ul></ul></ul><ul><ul><ul><ul><li>Origen: encriptar hash de un mensaje con clave privada del emisor </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Destino: desencriptarlo con la clave pública del emisor </li></ul></ul></ul></ul><ul><ul><li>Sólo se puede desencriptar con la otra clave; con ninguna otra. </li></ul></ul>
  9. 9. Cifrado asimétrico <ul><li>Ejs. de algoritmos: </li></ul><ul><ul><li>DH (Diffie-Hellman). Uso típico para claves de sesión: intercambiar claves simétricas sin la ayuda de una clave previa en un medio inseguro </li></ul></ul><ul><ul><li>RSA </li></ul></ul><ul><ul><li>DSA/DSS: Más moderno y más seguro que RSA </li></ul></ul><ul><ul><ul><li>Usado sólo para firmar (no para encriptar). </li></ul></ul></ul><ul><ul><ul><li>Necesita una función hash (ej. sha1). DSS=DSA+sha1 </li></ul></ul></ul><ul><ul><li>ElGamal </li></ul></ul><ul><ul><li>Curvas elípticas </li></ul></ul><ul><li>Ref: http://en.wikipedia.org/wiki/Public-key_cryptography </li></ul>
  10. 10. Cifrado asimétrico <ul><li>Usos de RSA y DSA: </li></ul><ul><ul><li>Generación de claves privada y pública: </li></ul></ul><ul><ul><ul><li>La clave privada se puede encriptar con una passphrase y algoritmos simétricos des, 3des o idea. Se pide al usarla ej. arranque de servidor web </li></ul></ul></ul><ul><ul><ul><li>La clave pública es deducible a partir de la clave privada. </li></ul></ul></ul><ul><ul><li>Operaciones: </li></ul></ul><ul><ul><ul><li>Firma: más rápido RSA. </li></ul></ul></ul><ul><ul><ul><li>Verificación: más rápido DSA. </li></ul></ul></ul><ul><ul><ul><li>Encriptación: sólo RSA. </li></ul></ul></ul><ul><li>Ejs: </li></ul><ul><ul><li>openssh: ssh-keygen -t dsa </li></ul></ul><ul><ul><li>openssl: openssl genrsa -out privkey.pem 1024 </li></ul></ul>
  11. 11. Comparación de cifrados <ul><li>En ambos: importante longitud de clave. </li></ul><ul><li>Asimétrico más lento que simétrico </li></ul><ul><li>Claves: </li></ul>
  12. 12. Aplicaciones: encriptación <ul><li>Proceso: </li></ul><ul><ul><li>Se crea una clave K. Puede ser: </li></ul></ul><ul><ul><ul><li>Aleatoria, en el lado del emisor. </li></ul></ul></ul><ul><ul><ul><li>De sesión, a partir de las claves privada y pública de emisor y receptor. Algoritmo Diffie-Hellman. </li></ul></ul></ul><ul><ul><li>El emisor envía: </li></ul></ul><ul><ul><ul><li>Mensaje encriptado con algoritmo simétrico y clave K. </li></ul></ul></ul><ul><ul><ul><li>Clave K encriptada con algoritmo asimétrico y clave pública del receptor. </li></ul></ul></ul><ul><li>Garantiza confidencialidad </li></ul>
  13. 13. Aplicaciones: firma digital <ul><li>Proceso: </li></ul><ul><ul><li>En el lado del emisor: </li></ul></ul><ul><ul><ul><li>Se encripta el resumen del mensaje con la firma privada del emisor. </li></ul></ul></ul><ul><ul><ul><li>Se envía el resultado </li></ul></ul></ul><ul><li>Garantiza: </li></ul><ul><ul><li>Autenticidad e integridad </li></ul></ul><ul><ul><li>No repudio, como consecuencia de los dos anteriores </li></ul></ul><ul><li>Ej. aplicaciones: </li></ul><ul><ul><li>Correo electrónico (thunderbird, kmail,...) </li></ul></ul><ul><ul><li>Documentos ofimáticos (openoffice, acrobat reader) </li></ul></ul>
  14. 14. Aplicaciones: protocolos <ul><li>Uso específico en: </li></ul><ul><ul><li>GPG/PGP </li></ul></ul><ul><ul><li>SSL/TLS (ej. https: autenticación de servidor y/o cliente) </li></ul></ul><ul><ul><li>SSH </li></ul></ul><ul><ul><li>IKE (IPsec) </li></ul></ul><ul><ul><li>... </li></ul></ul>
  15. 15. Aplicaciones: MAC/HMAC/... <ul><li>MAC (message authentication code): código pequeño de información construido a partir del mensaje y de una clave simétrica (no es una firma digital). </li></ul><ul><li>Garantiza autenticidad e integridad. </li></ul><ul><li>Algoritmos: </li></ul><ul><ul><li>Funciones resumen ej SHA1, MD5. HMAC (key-hashed MAC): MAC generado con funciones resumen </li></ul></ul><ul><ul><li>Cifrado de bloque ej. OMAC. </li></ul></ul><ul><li>MIC (message integrity code): sólo para integridad. Parte sólo del mensaje, no de una clave </li></ul>
  16. 16. Esquemas de autenticación <ul><li>Problema de partida: verificar la asociación de claves públicas e identidades. </li></ul><ul><li>Esquemas: </li></ul><ul><ul><li>Confianza en base a terceros: </li></ul></ul><ul><ul><ul><li>Vertical: jerarquía de CAs (ej. PKI X.509) </li></ul></ul></ul><ul><ul><ul><li>Horizontal: red de confianza (ej. PGP/GPG) </li></ul></ul></ul><ul><ul><li>Verificación directa (ej. ssh) </li></ul></ul><ul><ul><li>Otros: modelo de confianza local (ej. SPKI=Simple PKI) </li></ul></ul>
  17. 17. Estándares y Formatos <ul><li>PKCS: Public Key Cryptography Standards. Listado de los principales: </li></ul><ul><ul><li>1: claves RSA pública y privada </li></ul></ul><ul><ul><li>5: encriptación en base a claves </li></ul></ul><ul><ul><li>7: Firmar y encriptar mensajes,.... </li></ul></ul><ul><ul><li>8: formato de fichero no encriptado de claves públicas y privadas </li></ul></ul><ul><ul><li>10: Mensaje enviado a una CA para solicitar verificación de una clave pública </li></ul></ul><ul><ul><li>11: API para tokens de criptografía (seguridad hardware) </li></ul></ul><ul><ul><li>12: formato de fichero encriptado de claves públicas y privadas </li></ul></ul>
  18. 18. Estándares y Formatos <ul><li>ASN.1 </li></ul><ul><ul><li>Abstract Syntax Notation One. </li></ul></ul><ul><ul><li>Lenguaje para describir y codificar reglas para representar datos. </li></ul></ul><ul><ul><li>Estándar ITU X.208/X.680. </li></ul></ul><ul><ul><li>Reglas de codificación: </li></ul></ul><ul><ul><ul><li>BER: Basic Encoding Rules (X.690). Ej. para LDAP </li></ul></ul></ul><ul><ul><ul><li>CER: Canonical Encoding Rules </li></ul></ul></ul><ul><ul><ul><li>DER: Distinguished Encoding Rules </li></ul></ul></ul><ul><ul><ul><li>XER: XML Encoding Rules </li></ul></ul></ul><ul><ul><ul><li>... </li></ul></ul></ul>
  19. 19. Estándares y Formatos <ul><li>Formatos de parámetros, claves privada y pública,...: </li></ul><ul><ul><li>DER (es binario) </li></ul></ul><ul><ul><li>PEM (es ascii). Ej: -----BEGIN ...----- siendo ...: </li></ul></ul><ul><ul><ul><li>Claves: </li></ul></ul></ul><ul><ul><ul><ul><li>PKCS8 encriptado: ENCRYPTED PRIVATE KEY </li></ul></ul></ul></ul><ul><ul><ul><ul><li>PKCS8 no encriptado: PRIVATE KEY </li></ul></ul></ul></ul><ul><ul><ul><ul><li>RSA: RSA PRIVATE KEY </li></ul></ul></ul></ul><ul><ul><ul><ul><li>DSA: DSA PRIVATE KEY, DSA PARAMETERS </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Curvas elípticas: EC PRIVATE KEY </li></ul></ul></ul></ul><ul><ul><ul><li>Certificados: </li></ul></ul></ul><ul><ul><ul><ul><li>Certificado: CERTIFICATE, X509 CERTIFICATE </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Certificado firmado: TRUSTED CERTIFICATE </li></ul></ul></ul></ul><ul><ul><ul><ul><li>CSR: CERTIFICATE REQUEST </li></ul></ul></ul></ul><ul><ul><ul><ul><li>CRL: X509 CRL </li></ul></ul></ul></ul>
  20. 20. Software <ul><li>Paquetes ubuntu </li></ul><ul><ul><li>asn1c - ASN.1 compiler for C </li></ul></ul><ul><ul><li>dirmngr - server for managing certificate revocation lists </li></ul></ul><ul><ul><li>kleopatra - KDE Certificate Manager </li></ul></ul><ul><ul><li>openssl - Secure Socket Layer (SSL) binary and related cryptographic tools </li></ul></ul><ul><ul><li>libbotan1.6 - multiplatform crypto library </li></ul></ul><ul><ul><li>libio-socket-ssl-perl - Perl module implementing object oriented interface to SSL sockets </li></ul></ul><ul><ul><li>libksba8 - X.509 and CMS support library </li></ul></ul><ul><ul><li>libxyssl-dev - lightweight crypto and SSL/TLS library </li></ul></ul><ul><ul><li>python-ncrypt - python wrapper for OpenSSL </li></ul></ul>
  21. 21. Software <ul><li>Paquetes ubuntu </li></ul><ul><ul><li>beidgui - application to read out information from the Belgian electronic ID card </li></ul></ul><ul><ul><li>ca-certificates - Common CA Certificates PEM files </li></ul></ul><ul><ul><li>coolkey - Smart Card PKCS #11 cryptographic module </li></ul></ul><ul><ul><li>cryptonit - A client side PKI (X.509) cryptographic tool </li></ul></ul><ul><ul><li>ebox-ca - eBox - Certificate Authority Manager </li></ul></ul><ul><ul><li>newpki-client - PKI based on the OpenSSL low-level API (client package) </li></ul></ul><ul><ul><li>newpki-server - PKI based on the OpenSSL low-level API (server package) </li></ul></ul><ul><ul><li>pyca - Certification Authority written in python </li></ul></ul><ul><ul><li>seccure - tools for using algorithms based on elliptic curve cryptography (ECC) </li></ul></ul><ul><ul><li>ssl-cert - Simple debconf wrapper for openssl </li></ul></ul><ul><ul><li>tinyca - simple graphical program for certification authority management </li></ul></ul>
  22. 22. Licencia de uso <ul><ul><li>http://creativecommons.org/licenses/by-sa/3.0/ </li></ul></ul>

×