Apuntes (1) PDF - Criptografía y Java

Summary

Estos apuntes contienen información sobre criptografía y programación en Java. Se explican tipos de cifrado, como el simétrico y asimétrico, firma digital, y gestión de claves. Se incluyen ejemplos y conceptos relacionados con la seguridad informática.

Full Transcript

Criptografia y java: ○ 1.1 sistemas de cifrado simetrico: generacion de claves simetricas claves siemtricas basadas en contrasenya cifrado AES en modo ECB : cifrado “” CBC ○ 1.2 Sistemas de cifrado...

Criptografia y java: ○ 1.1 sistemas de cifrado simetrico: generacion de claves simetricas claves siemtricas basadas en contrasenya cifrado AES en modo ECB : cifrado “” CBC ○ 1.2 Sistemas de cifrado asimetrico ○ 1.3 Firma digital ○ 1.4 Gestion de claves ODN : Tarda n iteraciones. 1.1 Cifrado Simetrico privacidad de los datos criptografía : a traves de algoritmo de cifrado JCE : java cryptograph extension: libreria de java que se dedica a la criptografía Caracteristicas: ○ la clave privada se mezcla con los datos enviados para cifrar el contenido Cifrado del cesar: ○ sistema de cifrado simétrico mas facil: a partir de una clave entera entre 1 y 26 se suma a cada letra del mensaje la posición del abecedario según el numero entero (“hola”,1) = “ipmb” Encriptado con clave simetrica: (En java secret key) : traduce bloque a bloque ○ AES (advanced encryption standard)con ECB (electronic code book): ECB : problemas: encripta por bloques de 16 bites y el orden de los datos , 8 letras por bloque, el problema de inseguridad es que se puede eliminar algun bloque enigma: repeticion de bloques en partes del mensaje, importante Java.crypto.Cipher: clase de java que utilizaremos para cifrar CBC (ciclic block chain): procesa el cifrado en 2 partes, primero siemetrica ECB y luego cifra cada bloque con el contenido del anterior cifrado, son 2 cifrados encriptadoi = cesar(claro,encriptadoi-1) Para el primer bloque se utiliza el vector de inicializacion, te lo inventas tu, antes del mensaje, de 16 bytes que son 8 caracteres en UTF Es un sistema que su cifrado y descifrado resulta mas costoso Necesitas todo el mensaje para descifrarlo CRC : código de redundancia, se puede calcular a partir de los otros datos que acompaña 0x00 : numero hexadecimal En codigo java se usa cipher (encriptador): se crea de forma estatica El vector de inicialización es una constante Encriptado de cifrado asimétrico: ○ Dispones de una clave privada, y una pública, para recibir mensajes cifrados los terceros deben tener la clave publica y tu debes descifrarla con tu clave privada, ejemplo de 2 números primos ○ Una clave asimétrica es una pareja de claves: publica y privada. ○ RSA (Rivest,Shamiit,Adleman) sistema de números primos el mas usado ○ una clave simétrica no es mas que una sequencia aleatoria de bits de un tamaño determinado ○ Una clave simetrica tiene ciertas propiedades matematicas: 2 numeros primeros, habitualmente ocupan 256 bytes osea 2048 bits ○ Binario: 1 bit: 2 1 byte:8 cifras 10*x letras 2 bytes ○ Paquete para generar clave asimetricas: java.security.KeyParGenerator getPrivate(), getPublic() ○ Cifrado RSA Directo: Usamos la misma clave que para simetricas, cypher Para cifrar usamos la publica, para descifrar la privada StringBuilder: ajusta su memoria en base al contenido introducido SESION 3: Datos ○ String = Desde el lenguaje C un string es una secuencia de bytes acabados en 0x00, genera fallos por ser un tipo de tamaño variable, memory leak (Fuga de memoria) ○ int = 4 bytes ○ float = 4 bytes ○ double = 8 bytes Pila : determina el orden de de los procesos, la pila guarda la direcciones de retorno, las llamadas y las variables en bloques ordenados StringBuilder: modifica su propio espacio de memoria al añadir contenido Concatenar String = Al concatenar con “+” reserva un nuevo espacio de memoria diferente para adaptarse al contenido introducido, luego libera el espacio anterior, requiriendo mas tiempo. Anotación infixa = cuando en una operación colocar el operador en medio de los operantes Expresion boolea De que depende el proceso de encriptación: Depende de Datos sucios y clave publica 1.2.3 Cifrado RSA con clave “embolicada” ○ RSA suele encriptar con bloques uque son casi como la mida de la clave ○ RSA siempre añade padding, como CRC, 11 bytes ○ Mas concretamente el algoritmo RSA solo puede ser usado para cifrar datos del contenido longitud de datos = (mida_clau RSA)/8-11 245 bytes maximo encriptacion + 11 bytes padding = 256 bytes Es inviable para datos grandes, además es un algoritmo muy lento La solucion: ciframos con clave simetrica y despues ciframos con clave asimetrica la clave simetrica usado, que son pocos datos En un sistema de clave “embolicada” los datos se cifran usando una cable simetrica de un solo uso generada al azar y luego, esta clave tambien se cifra con la clave publica. SecretKey = simetrica PublicKEy = asimetrica 1.3 Firma digital ○ Mas alla de la privacidad, ahora requerimoss nuevos servicios en la seguridad ○ Integridad: comprueba si un mensaje ha sido manipulado, no sirve para recuperar contenido ○ Autenticacion: poder garantizar quien es la identidad del autor del documento, evitando suplantaciones ○ No-repudi: evitar que un autor pueda negar que el ha generado el documento ○ Permiten realizar un intercambio de datos de manera diable ○ La firma digital es el lmecanismo digital que traslada todas las propiedades de una firma personal a un entorno digital ○ Los sistemas de firma digitales se basasn en un esquema de claved asimetricas pero funcionan al reves, Antes la clave privada se usaba para desencriptar, ahora para encriptar. Ademas antes la clave encriptada y el mensaje encriptado reemplazaban el contenido original, ahora se añade ○ Generacion de firma digital RSA; las claves para cifrar o firmar pueden ser las mismas La clase responsable es java.security.Signature ○ Validacion de firma digital: la diferencia entre la firma digital y la encriptación, es que la firma digital añade unos bloques de datos para certificar que el contenido tiene autoria ○ Las claves para cifrar o firmar pueden ser las mismas ○ Ahora al texto plano se añade la firma ○ JCE = RSA 1.3.1 Generacion de firma digital ○ las claves oara cifrar o firmar pueden ser las mismas ○ java.security.Signtare: clase responsable de gestionar una firma digital ○ static = solo esta una vez en la memoria ○ constante = valor que no varía; 13.2 Validacion de firma RSA ○ las claves de cifrar o firmar pueden ser las mismas ○ java.security.Signature: clase que validar la firma 1.3.3 Certificados digitales ○ Un certificado digital e sun documento electronico que establece la identidad del propietario de una clave publica ○ Un certificado digital sirve para demostrar que una clave publica pertenece a una empresa ○ clave publica + info persona legible por humanos = certificado digital ○ standard.x.509 ○ el subject y el issuer se distinguen con un DN: (distinguixed name) CN: common name organitzacio OU departament (unitat de lorganitzacio) l: localidad st: estado co: codigo pais 1.3.4 Emision de certificados ○ se pueden emitir por diversos emisores autosignados : subject=issuer. El certificado esta firmado con la clave privada de la propia clave publica contenida. Solo es util cuando hay plena confianza entre las partes Una autoridad de certificacion. CA: es una tercera entidad capaz de emitir certificados digitales. Entre los tramites para obtener una firma digital existe la presencialidad, con el dni delante de la CA 1.4 Gestion de clave ○ Generacion; para generar un par de claves s eusan comandas Sesion 4 En la gestion de las claves secesitamos plena seguridad en varios mamoentos: ○ distribucion ○ almacenamiento Idealmente, solo las personas autorizadas podran acceder a claves secretas, ja sean simetricas o privadas. en la vida real es necesario garantiaz 1.4.1 Herramiento KEyTool ○ keytool es un ejecutable incluido en el jdk, juntamente con el compilador y el interprete ○ Permite gestionar almacenes de claves jks y jceks 1.4.2 Acceso al almacen de claves desde java ○ java.crypto.KeyStore Sesion5 2.1 Aplicaciones Java deguras en internet ○ 2.1.1 Seguridad de la plataforma de java ○ 2.1.2 Asignación de permisos ○ 2.1.3 Codigo seguro 2.2 Conexiones seguras ○ 2.2.1 la negociacion SSL encriptacion en nivel de socket () ○ 2.2.2 Conexiones SSL con java (SecureSocketLayer) 2.1 Seguridad a la plataforma bytecode: ○ El lenguaje bytecode es el resultante de una compilacion de java, que debe ser interpretado por el interprete JVM ○ Codigo binario generado por el compilador de java ○ interprete: interpreta bytecode ○ “En un programa de usuario es imposible que se note dificultad computacional si hay participación de un usuario” ‘Carles Franquesa’ ○ Cosas de byteCode: el interprete ayuda con la seguridad Controlando el acceso a clases concretas analizando el bytecode, y modificando si es necesario Sandbox: área de control de accesos donde se realizan pruebas pertenece a java 2.1.1 El gestor de seguridad ○ Un gestor de de seguridad o security manager, es una clase a traves de la cual se puede establecer una politica de seguridad sobre una aplicacion cuando se ejecuta. Es decir, indicar cual es el conjunto de acciones que tiene permiso o no hacer. ○ Gestor de seguridad, ->propiedades->run->vm options-> -Djava.security.manager 2.1.2 Assignacion de permisos ○ Un fichero de politicas o policy file, sirve para poder permitir acciones a las aplicaciones.java.policy es el fichero por defecto, en el home del usuario ○ Policytool: editor GUI de ficheros de policy. Ideal ya que el dominio(conjunto total de todos los valores posibles de una variable) de cada parametro depende del valor del parametro anterior ○ Tipos de permisos: Cada tipo de permiso corresponde con la clase concreta que implementa sus acciones ○ Socket es la unidad de comunicación entre aplicaciones mas potente de todos, esta muy bajo nivel, posiblemente nivel 4. La manera mas simple de conectar 2 aplicaciones ○ Valores del nombre del target(recurso controlado): a donde apunta el permiso target = objetivo. Los valores del target (recurso controlado) varian mucho entre tipos de permisos las acciones asociadas en cada objetivo depende fuertemente del objetivo en question para obtener informacion sobre cada caso particular es necesaripo consultar el manual tipos mas habituales: java.io.FilePermissiion Controla el acceso al sistema de ficheros El objetivo es la ruta de la raiz donde se quieren definir, sea relativa o absoluta la constante quiere decir que damos permisos a todos los archivos del sistema ○ Aprender sockets !!! ○ Tipos mas habituales de permisos: java.net.SocketPermission Este tipi de permiso controla las conexiones que hace una aplicacion en internet usando sockets El objetivo es un nombre de dominio (o la ip directamente) mas el rango de puertos La constante * quiere decir que damos permisos a todos los equipos dentro de un dominio LAs acciones posinles corresponden cpm ños metodos de las clases java.net.socket i java.net.serversocket acciones posibles: ○ accept, read, update, create, etc ○ Tipos de permisos 3: FILE SOCKET PROPERTIES ○ Un certificado es una clave publica con la informacion del propietario de la clave dn: cm, SESION 7 2.2 Conexiones seguras con SSL ○ Secure socket Layer nivel 4 TCP/IP (socket mecanismo de mas bajo nivel en la comunicacion de maquinas). Protocolo: conjunto de mensajes posibles ISO/OSI Aplicacion: navegador Presentacion: la comunicacion tiene en cuenta los perifericos Sesion: Transporte: primera capa de todas donde pueden viajar datos (la mas importante) ○ UDP (User Datagrand Protocol): transporta los datos anonimamente, son mas veloces ○ TCP (Transport Control Proces): control, hace referencia al ip de las mamquinas que se comunican, proporciona seguridad RED: calculo de rutas y transmision de mensajes (mapa) Enlace: dos o mas dispositivos interconectados Físico: determina protocolos, se definen estructura de harware Algoritmo de intercambio de claves es un protocolo criptografico con el cual es posible que dos entidades intercambien una clave secreta de manera segura. entre los mas conocidos esta el llamado diffe-hellman-merkle que es el que usa ssl 2.2.1 La negociacions SSL ○ HandShaking: proceo inicial en una comunicacios ssl donde se producen intercambio de claves paso 1 hola: el cliente indica que quiere iniciar una conexion segura ssl. para hacerlo indica hasta que version ssl, conjunto de alorismo criptograficos y tamaños de claves soportadas paso 2: hello el servidor acepta la peticion y escoge la ultima version disponible dentre las soportadas por elcliente de cara a usar el protocolo seguro, entonces, escoge el algoritmo adecuado para el usuario paso 3: opción para hacer autenticacion simple del servicio. el servicio envia el certificado digital que contiene su clave publica y su identidad paso 3 opcion para hacer autenticacion mutua con el cliente: peticion de certidicado. El servicio pide el certificado digital del cliente paso 3:opcion para usar algoritmo criptograficos mas sofisticados: intercambio de …. paso 5.1: el cliente envia el certificado digital que contiene su clave publica y su identidad paso 5.2 intercambio de clave. El cliente envia informacion adicional paso 5.3 validacion certificada del cliente. En el caso que se requiera infromacion adicional el organismo puede pedirte la clave privada paso 6 Cambio a modo de cifrado. El cliente avisa al servicio que pasa a modo cifrado de comunicacions. hasta ahora todas las comunicaciones eran en claro paso 7. Señal del fin. el cliente esta listo para iniciar las comunicaciones ne modo seguro.fin del hanshaking paso 8. cambio a modo cifrado. el servicio avisa que elt ambien pasa a modo cifrado de comunicaciones paso 9: señal de fin. El servicio esta listo para inciar las comunicaciones en modo seguro. fin del hanshaking un parametro dinamico: el valor puede variar en cualquier momento Desplegamiento del servidor (con autenticacion simple ) Al generar un certificado para un servicio normalmente se recomien¡da que el campo de cmmon name de su nombre distinguido sea el nombre DNS de la maquina en la cual se ejecuta, al probarlo en local puedes usar localhost cuando tenemos el almacen desde el programa ○ 1 system,.set.property…. aunque tambien ese puede hacer desde una linea de comandas: -Djavax.net Los servidores SSL de la clase SSL serbersocket se crean en una factoria SSLserverSocketFactory, que se obtiene con el metodo estatico getDefault() En java se pueden crear instancias de dos maneras: ○ con un new Objetos: new pide memoria al sistema operativo, alocata ○ Con factorias: de manera estatica , para los objetos que pesan mucho implementacion de un cliente con autenticacion simple Desplegamiento de autenticacion mutua

Use Quizgecko on...
Browser
Browser