====== Block Ciphers ====== Es un cifrado determinístico, utilizando un algoritmo de encriptado y otro de desencriptado. El algoritmo recibe una entrada que es una instancia de cierto número de bits y la salida tiene exactamente el mismo tamaño, pero cifrado, en resumidas cuentas: el input y el output del algoritmo deben ser del mismo tamaño. ===== Computacionalmente indistinguible ===== ### El cifrado de bloques no tiene memoria. Un cifrado de bloque se puede tomar como una caja negra que toma un valor y lo encripta o lo desencripta. Este sistema es seguro si la función de encriptado es computacionalmente indistinguible de cualquier otra operación computacional. ### ### El adversario tiene que determinar si el challenger está utilizando un algoritmo matemático o si está usando una funcionalidad cualquiera para encriptar un texto. El adversario tiene que intuir si la salida está encriptada o si es solo ruido. Si el adversario no es capaz de adivinar si una salida está encriptada o no, entonces, nuestro sistema es seguro. ### ===== Implicaciones ===== * Un block cipher es impredecible * El ser impredecible implica seguridad contra la recuperación de claves. Tratar de recuperar la clave es computacionalmente muy difícil. * si E ε seguro contra una recuperación de clave, entonces el espacio de la clave debe ser muy grande. ===== Permutaciones aleatorias ===== Cuando el challenger elige una permutación aleatoria, la toma de un espacio enorme. En la práctica las permitaciones aleatorias pueden ser implementadas fácilmente en Lazy Mode. ===== Block ciphers para encriptado directo ===== ### Supongamos que tenemos un block cipher seguro. Queremos encriptar una cadena de bits muy larga, dividimos dicha cadena en bloques del mismo tamaño que el block cipher, de forma que vamos cifrando la cadena en secuencias de bloques (n0, n1,....nn). Cada bloque es encriptado con la misma clave secreta. Usar block cipher de esta manera es un proceso sin memoria ya que a pesar de que se usa la misma clave, cada bloque cifrado es diferente. Esto es conocido como Electronic CodeBook mode (ECB). En resumidas cuentas consiste en dividir una cadena en bloques e irlos encriptando uno a uno. A pesar de su seguridad, no es semánticamente seguro ya que un atacante puede distinguir unos mensajes de otros. ### ===== Data Encryption Standard (DES) & Advanced Encryption Standard (AES) ===== ### DES es un block cipher que usa claves y bloques con un input de 64 bits y una salida de 64 bits y una clave de cifrado de 56 bits. Lo malo es que en la actualidad ya no es lo suficientemente seguro, siendo retirado en 2021. Existe una variante de DES llamada 3DES que utiliza una clave de 168 Bits. AES utiliza claves de 128 o 256 bits, mucho más grandes que las de DES. Si bien no hay pruebas científicas de que las encriptaciones anidadas sean más seguras, pero en el sector informático parecer ser que si es más seguro, aunque no hay pruebas contundentes de esto. ### ### AES tiene un bloque de input y 10 rondas diferentes que realizan cada una una clave y transforma cada una la entrada que reciben. Este es un cifrado iterado y destaca por su velocidad en hardware. Generalmente el AES se aplica en hardware y no en software. El input se organiza como un array en una matriz. ### ==== Rondas ==== En cada ronda se realizan las siguientes operaciones: - La primera operación en cada ronda es la de mover filas varias posiciones. - El segundo paso en cada ronda es la de mezclar las columnas mediente el uso de multiplicaciones matriciales con una operación aritmética específica - La tercera operación divide la clave en múltiples piezas y aplica la clave para cifrarlas. ==== Seguridad de DES y AES ==== * DES es vulnerable a ataques de búsqueda de clave. Se pudo romper en menos de 13 días en 2007. En cambio, en AES esto llevaría 10^20 años si el ataque fuera de fuerza bruta. * 3DES probablemente será decomisionado próximamente * Con los medios actuales la seguridad mínima recomendable es de 128 bits, aunque se recomienda que la clave sea de 256 bits. ===== Ataques a block ciphers ===== * Los ataques algorítmicos confían en el análisis matemático de las operaciones internas de un block cipher. No suelen ser muy exitosos a menos que el algoritmo del block cipher contenga algún error o defecto. * Side Channel attack: Se aprovecha de que el proceso se realiza por hardware ya que en función a los valores con los que se trabaje, el consumo energético y la temperatura varían, lo que permite estimar cuando se está cifrando o no. * Fault-Injection: Se introducen valores en el dispositivo de encriptado para provocar operaciones erróneas. * Quantum computation attacks: Se usa un ordenador cuántico para realizar el ataque, aunque en la actualidad los ordenadores cuánticos aún presentan muchos problemas. ===== Funciones pseudo-aleatorias (PRFs) ===== Similar a un block cipher, también funciona de forma determinística, pero también permite que la salida sea de un tamaño diferente que el de la entrada. cuando se hace una función como esta se está definiendo una función matemática: $F: K x X -> Y$ Todos los block cipher son funciones pseudoaleatorias, pero las funciones pseudoaleatorias son block ciphers. Los block cipher son seguros cuando no pueden ser distinguidas de una función cualquiera. ==== Block Ciphers y PRFs ==== * Un block cifer es seguro solo si el bloque de salida es lo suficientemente largo, debe ser superpolinomial. * Un atacante puede usar un Birthday Attack contra los block cipher. * La diferencia computacional entre un block cipher y una buena función pseudoaleatoria no se puede diferenciar. * Si tenemos un block cipher seguro, lo podemos usar como una función pseudoaleatoria segura (PRF Switching Lemma)