En este segmento, quiero dar unos cuantos ejemplos de secuencias de cifrado que se utilizan en la practica. Voy a empezar con dos ejemplos antiguos, supongo que no son usados en nuevos sistemas. Pero si embargo, todavia son ampliamente usados, y solo quiero mencionar los nombres de modo que se familiarice con estos conceptos. La primera secuencia de cifrado de la quiero hablar es llamado RC4, diseñado en 1987. Solo quiero dar una breve descripcion de el, y entonces hablaremos acerca de algunas debilidades de RC4 y dejarlo en eso. RC4 toma una semilla de tamaño variable, aquí yo sólo puso como ejemplo donde tomaría 128 bits como el tamaño de la semilla, que luego se utilizaría como la clave para el cifrado de flujo. Lo primero hace, es que expande la clave secreta de 128-bit a 2.048 bits, que se va a utilizar como del estado interno para el generador. Y luego, una vez que se hace Esta expansión, básicamente ejecuta un bucle muy simple, donde cada iteración del Este bucle de salidas de un byte de salida. Así que, esencialmente, puede ejecutar el generador para mientras que desee y genera un byte a la vez. Ahora RC4 es realmente, como he dicho, bastante popular. Se utiliza en el protocolo HTTPS comúnmente realmente. Estos días, por ejemplo, Google utiliza RC4 en su HTTPS. También se utiliza en WEP como nosotros discutido en el último segmento, pero por supuesto en WEP, se utiliza incorrectamente y es completamente inseguro la forma en que se utiliza dentro de WEP. Lo largo de los años, se han encontrado algunas deficiencias en RC4, y como resultado, se recomienda que nuevos proyectos en realidad no utilizar RC4 pero prefiere usar un generador pseudoaleatorio más moderno como veremos discutir hacia el final del segmento. Así que permítanme mencionar sólo dos de los puntos débiles. Por lo que es la primera de ellas, es tipo de extraño básicamente, si nos fijamos en el segundo byte de la salida de RC4. Resulta que el segundo byte está ligeramente sesgada. Si fue de RC4 completamente al azar, la probabilidad de que el segundo byte pasa a ser igual a cero exactamente uno sería más de 256. Hay 256 bytes posibles, la probabilidad de que es la cero debería ser uno más de 256. Resulta que para RC4 la probabilidad es realmente dos sobre 256, lo que significa que si usas la salida RC4 para cifrar una mensaje el segundo byte es probable que no sean encriptados. En otras palabras le ser XOR-ed con cero con dos veces la probabilidad de que se supone que. Dos sobre 256, en lugar de uno sobre 256. Y por cierto debo decir que hay nada especial en el segundo byte. Resulta que la primera y los terceros bytes también están sesgadas. Y de hecho se ahora recomienda si vas a usar RC4, lo que debe hacer es ignorar básicamente los primeros 256 bytes de la salida y sólo empezar a utilizar la salida del generador a partir de byte 257. La primera pareja de bytes resultados ser sesgada, así que usted sólo ignorarlos. El segundo ataque se descubrió que de hecho si observas una muy larga salida de RC4 resulta que es más probable conseguir la secuencia 00. En otras palabras, eres más probabilidades de tener dieciséis bits, dos bytes de cero, cero, lo que debería. Nuevamente, si RC4 fue completamente al azar la probabilidad de ver cero, cero sería exactamente 1/256 cuadrado. Resulta que es un poco tendencioso RC4 y el sesgo en cubos de 1/256. Se resulta de este sesgo comienza realmente después de varios gigabytes de datos son producidos por RC4. Pero sin embargo, esto es algo que puede utilizarse para predecir el generador y definitivamente puede utilizarse para distinguir la salida del generador desde una secuencia aleatoria. Básicamente el hecho de que cero, cero aparece más a menudo lo que debería es el distinguisher. Y, a continuación, en el último segmento hablamos sobre ataques de clave relacionada que se utilizaron para atacar WEP, que básicamente dicen Si uno usa las claves que están estrechamente relacionadas entre sí es posible para recuperar la clave raíz. Así que estos son los puntos débiles que se conocen de RC4 y, como un resultado, se recomienda que nuevos sistemas realmente no utilizan RC4 y en su lugar utilizan un moderno generador pseudoaleatorio. Vale, la segunda es el ejemplo que quiero darle un cifrado de flujo mal roto que se utiliza para cifrar las películas en DVD. Cuando compres un DVD en la tienda, la película real se cifra mediante un cifrado de flujo que se llama el sistema de codificación, CSS de contenido. CSS resulta para ser un cifrado de flujo mal roto, muy fácilmente podemos romperlo y quiero mostrarle cómo el algoritmo de ataque obras. Que estamos haciendo para que pueda ver un ejemplo de un algoritmo de ataque, pero en hecho, hay muchos sistemas que hay que utilizar básicamente este ataque para descifrar DVDs cifrados. Así que la CSS stream cipher es basado en algo que el hardware como diseñadores. Ha diseñado para ser un cifrado de flujo de hardware que se supone que ser fácil de implementar en hardware y se basa en un mecanismo llamado lineal Feedback shift register. Por lo tanto un registro de desplazamiento lineal de retroalimentación es básicamente un registro consiste en células donde cada celda contiene un bit. A continuación, básicamente lo que pasa es que hay Estos grifos en ciertas células, no todas las células, ciertos posiciones son llamados grifos. Y luego estos grifos de alimentación en un XOR y, a continuación, en cada ciclo de reloj, el cambio de registrar cambios hacia la izquierda. Cae el último bit y entonces el primer bit se convierte en el resultado de este XOR. Por lo que se puede ver que Este es un mecanismo muy simple de implementar y en hardware tiene muy pocos transistores. Sólo el cambio justo, cae el bit último y el primer bit sólo se convierte en el XOR de los bits anteriores. Por eso la semilla para este LFSR Básicamente, es el estado inicial de la LFSR. Y es la base de un número de cifrados en flujo. Aquí hay algunos ejemplos. Así, como Es decir, DVD cifrado utiliza dos LFSR. Te voy a mostrar cómo funciona sólo un en segundo lugar. Cifrado GSM, estos son algoritmos llamados A51 y A52. Y utiliza tres LFSR Bluetooth cifrado es un algoritmo llamado, cero E. Estos son todos los cifrados en flujo, y que utiliza cuatro LFSR. resulta que todos estos son mal roto, y realmente, realmente no debe confiar para cifrar el tráfico, pero son todos implementado en el hardware, por lo que ahora es un poco difícil para cambiar el hardware hace. Pero el más simple de estos, CSS, realmente tiene un lindo ataque sobre él, así que me muestran cómo funciona el ataque. Por lo tanto, vamos a describir cómo funciona CSS. Por lo tanto, la clave para CSS es cinco bytes, es decir, 40 bits, cinco veces ocho es de 40 bits. El razón tuvieron que limitarse a sólo 40 bits es que fue cifrado de DVD diseñado en un momento donde sólo permitieron regulaciones de exportación de Estados Unidos para la exportación de algoritmos de crpyto donde la clave fue sólo de 40 bits. Así fueron los diseñadores de CSS ya limitado a claves muy, muy cortas. Sólo las claves de 40 bits. Por lo tanto, su diseño funciona como sigue. Básicamente, CSS utiliza de dos LFSR. Uno es un LFSR de 17 bits. En otras palabras, el registro contiene 17 bits. Y el otro es un LFSR 25 bits, es un poco más, 25 bits LFSR. Y la forma en que se siembran estos LFSR es como sigue. Así que la clave para el cifrado, básicamente se ve como sigue. Comienzas con un uno, y se concatenar para los dos primeros bytes de la clave. Y es el estado inicial de la LFSR. Y luego la segunda LFSR básicamente es intitialized la misma manera. Uno concatenados los tres últimos bytes de la clave. Y esa es la cargado en el estado inicial de la LFSR. Puede ver que los dos primeros bytes son dieciséis bits, además de un líder, que diecisiete bits en general, mientras que el segundo LFSR es 24 bits más uno que es de 25 bits. Y observa que usamos todos los cinco bits de la clave. Entonces que estos LFSR es básicamente durará ocho ciclos, por lo que generan ocho bits de salida. Y luego se van a través de esta víbora que hace básicamente suma módulo 256. Sí, por lo que se trata de un cuadro de adición, módulo 256. Hay uno más técnica lo que sucede. De hecho vamos a realmente — también agregó es el acarreo de la bloque anterior. Pero eso no es tan importante. Eso es un detalle que no es así pertinentes. OK, así que cada bloque, notará que estamos haciendo suma módulo 256 y nosotros estamos ignorando el acarreo, pero el transporte básicamente se agrega como un cero o un uno a la adición del siguiente bloque. ¿Vale? Y, a continuación, básicamente esta salida un byte por ronda. Vale, y entonces este byte es entonces por supuesto utilizado, XOR-ed con la adecuada byte de la película que está siendo encriptada. Bueno, por lo que es una secuencia muy simple cifrado, tarda muy poco hardware a implementar. Se ejecutará rápido, incluso muy hardware barato y se cifrará películas. Por lo que resulta de esto es fácil de romper en tiempo aproximadamente dos a los diecisiete años. Ahora Permítanme mostrarles cómo. Así que supongamos que interceptar las películas, así que aquí tenemos un película cifrado que desea descifrar. Así que vamos a decir que esto es todo cifrado lo no tienes idea lo que está dentro de aquí. Sin embargo, resulta sólo porque Codificación de DVD está utilizando archivos MPEG, sucede si usted sabe de un prefijo de la texto plano, digamos tal vez esto es veinte bytes. Ahora bien, sabemos que si usted XOR estas dos cosas juntas, en otras palabras, que hacer el XOR aquí, lo que usted obtendrá es el segmento inicial de la PRG. Así, obtendrá el primeros veinte bytes de la salida de CSS, la salida de este PRG. Bueno, ahora aquí es lo que vamos a hacer. Así tenemos los veinte primeros bytes de la salida. Ahora hacemos lo siguiente. Tratamos todos los dos a los diecisiete valores posibles de la primera LFSR. ¿Vale? Dos a los diecisiete valores posibles. Para cada valor, para cada de estos dos, a los diecisiete valores iniciales de la LFSR, vamos a ejecutar la LFSR para veinte bytes, ¿vale? Por eso te generar 20 bytes de salidas de este primera LFSR, asumiendo — para cada uno de los dos a las diecisiete configuraciones posibles. Ahora, recuerde que tenemos la salida completa del sistema de la CSS. Así lo que podemos hacer es puede tomar esta salida que tenemos. Y Réstelo de las mordeduras de veinte que nosotros obtuvo de la primera LFSR y si de hecho nuestra estimación para el estado inicial de la primera LFSR es correcta, lo que lleguemos es la primera salida de veinte bytes de la segunda LFSR. ¿Verdad? Debido a es, por definición, lo que la salida de la CSS es el sistema. Ahora, resulta que mirando una secuencia de 20 bytes, es muy fácil para saber si esta secuencia de 20 bytes procede de un LFSR 25 bits o no. Si se no, entonces sabemos que nuestra estimación de la LFSR de 17 bits incorrecto y, a continuación, pasamos a la siguiente supongo que para el LFSR de 17 bits y la próxima adivinar y así sucesivamente y así sucesivamente. Hasta que finalmente nos alcanzaron el derecho inicial Estado para el LFSR de 17 bits y luego nos pondremos realmente, veremos que los 20 bytes que obtenemos como candidato es de salida para el LFSR 25 bits de hecho de una posible salida para un LFSR 25 bits. Y entonces, no sólo tendremos aprendió el correcto estado inicial para el LFSR de 17 bits, tendremos también aprendió el correcto estado inicial de la LFSR 25 bits. Y, a continuación, podemos predecir el restantes salidas de CSS y por supuesto, con que nos podemos descifrar el resto de la película. Realmente podemos recuperar el texto restante. Esta bien. Esto es cosas que hemos hablado antes. Por lo tanto, lo dicho un poco rápido, pero ojalá, estaba claro. También vamos a estar haciendo un ejercicio de la tarea en este tipo de secuencia tipo de cifrados y usted obtendrá el punto de cómo estos algoritmos de ataque trabajo. Y debo mencionar que existen muchos sistemas de código abierto ahora que realmente Utilice este método para descifrar los datos cifrados de CSS. Vale, ahora que hemos visto dos ejemplos débiles, pasemos a ejemplos mejores y en particular el mejor generadores pseudoaleatorios provienen de lo que ha llamado el eStream proyecto. Este es un proyecto que concluyó en 2008, y califican básicamente cinco diferentes stream cifrados, pero aquí quiero presentar sólo uno. Lo primero de todos los parámetros para son un poco diferentes de lo que estamos acostumbrados a estos cifrados en flujo. Por lo que estas secuencia de cifra normalmente tienen una semilla. Pero además también tienen, lo que de llamado un nonce y nos veremos qué se utiliza un nonce en sólo un minuto. Por lo tanto llevan dos entradas una semilla y un nonce. Vamos a ver qué se usa el nonce en sólo un segundo. Y el supuesto producen una salida muy grande, así que n es aquí mucho, mucho, mucho mayor que s. Ahora, cuando digo nonce, lo que quiero decir es un valor que Nunca se va a repetir como la clave es fijo. Y explicaré en más detalle en sólo un segundo. Pero por ahora, sólo piense en ello como un único no valor que nunca repite como la clave es la misma. Y tan naturalmente una vez que tenga este PRG, se podría cifrar, usted obtiene un cifrado de flujo igual que antes, excepto ahora como ves, la PRG toma como entrada el clave y el nonce. Y la propiedad de la nonce que el par, k coma r, para que la coma clave la nonce, nunca, nunca se repite. Tiene Nunca utilizar más de una vez. Así que la línea de fondo es que se puede reutilizar la clave, reutilización la clave, porque la nonce hace la pareja única, porque el k y r son sólo usar una vez. Yo diría que son únicos. Bien por lo que es este nonce truco tipo de un lindo nos ahorra la molestia de mover a una nueva clave cada vez. Está bien, así que el particular ejemplo de la eStream que quiero mostrarle se llama Salsa veinte. Es un cifrado de flujo que está diseñado para implementaciones de software y hardware implementaciones. Es interesante. Te das cuenta de que son algunos cifrados en flujo diseñada para el software, como RC4. Todo lo que hace está diseñada para hacer implementación de software correr rápido, mientras que otros cifrados en flujo están diseñados para hardware, como CSS, usando un LFSR que ha diseñado especialmente para hardware implementaciones muy baratas. Es también, lo bueno de eso es que es diseñado de manera que es tanto fácil de implementarlo en el hardware y su software aplicación también es muy rápido. Así que permítanme explicar cómo funciona la Salsa. Bueno, Salsa toma las llaves de 128 ó 256 bits. Sólo voy a explicar la versión de 128 bits de la Salsa. Esto es la semilla. Y, a continuación, también tiene un nonce, justo como antes, que pasa a ser de 64 bits. Y luego te genera una gran salida. Ahora, cómo se ¿realmente funciona? Así, la propia función se define como sigue. Básicamente, dado la clave y el nonce, generará una muy larga, bueno, una larga pseudoaleatorio secuencia, tanto tiempo como sea necesario. Y lo haremos utilizando esta función que voy denotar por H. esta función h toma tres entradas. Básicamente la clave. Bien, la semilla k, la Nuna r y luego un contador que aumenta desde el paso a paso. So it goes de cero a uno, dos, tres, cuatro como mucho como nosotros [inaudible] ser. ¿Vale? Así que, básicamente, por evaluar este h en esta r k, pero este incremento contador, podemos obtener un secuencia que es tan larga como queramos. Así lo único que tengo que hacer es describir cómo esta función H obras. Ahora, permítanme hacer eso aquí para usted. El funcionamiento es como sigue. Bueno, nos empezar por la expansión de los Estados en algo bastante grande que es de 64 bytes larga ya haga lo siguiente. Básicamente nos atenemos una constante desde el principio, así que Hay tao cero, estas son cuatro bytes, es una constante de cuatro bytes, por lo tanto las especificaciones para Salsa básicamente le da el valor para tao cero. Luego ponemos k en la que es 16 bytes. Luego ponemos otra constante. Nuevamente, esto es cuatro bytes. Y como dije, la especificación especifica básicamente lo que es esta constante fija. A continuación, ponemos el nonce, que es ocho bytes. A continuación ponemos el índice. Este es el contador a cero, uno, dos, tres, cuatro, que es otro ocho bytes. Luego ponemos otra constante Tau dos, que es otro cuatro bytes. A continuación, ponemos la clave de nuevo, este es otro 16 bytes. Y entonces finalmente ponemos el tercer tau constante, tres, que es otro cuatro bytes. Está bien tal como dije, si estas resumir, ves que te 64 bytes. Así que básicamente hemos ampliado la clave y el nonce y el contador en 64 bytes. Básicamente se repite la tecla dos veces supongo. Y entonces lo que hacemos es aplicar un función, que llamaré esta h. poco funcional bien, por lo que aplicar esta función, poco h. Y esta es una función que es uno a uno, por lo que asigna 64 bytes a 64 bytes. Es un ¿función completamente invertible, okay? Para esta función h es, como digo, es un función invertable. Así que dada la entrada puede obtener la salida y la Puedes volver a la entrada de la salida. Y está diseñado específicamente para que tiene un - fácil para implementar en hardware y b-en un x 86, es extremadamente fácil de implementar porque x 86 tiene este SSE2 conjunto de instrucciones que soporta todas las operaciones que debe hacer para esta función. Es muy, muy rápido. Como resultado, la Salsa tiene un flujo muy rápido cifrado. Y luego lo hace básicamente una y otra vez. Por lo que se aplica esta función h nuevamente y se obtiene otro de 64 bytes. Y así sucesivamente y así sucesivamente, básicamente hace esto diez veces. Esta bien todo esto aquí, decir repite diez veces, así que básicamente se aplican h diez veces. Y luego por sí mismo, esto es realmente no muy aleatorio. No va a mirar al azar porque como hemos dicho, H es completamente invertable. Tan dado Este resultado final, es muy fácil invertir sólo h y luego volver al original entradas y luego prueba que la entrada tiene la estructura correcta. Entonces hacer uno más cosa, que es básicamente XOR las entradas y las salidas finales. En realidad, lo siento. No es un XOR. Es realmente una adición. Entonces hacer una palabra además palabra. Así que si hay 64 bytes, no una adición de la palabra por palabra cuatro bytes en un tiempo y finalmente obtener la salida de 64 bytes, y eso es todo. Eso es todo generador pseudoaleatorio. Así que, es la función entera, poco h. Y como yo explicó, esta construcción es la función de gran H. Y luego evaluar Big h incrementando el contador desde cero, uno, dos, tres adelante. Y le dará una secuencia pseudoaleatoria, siempre y cuando usted lo necesita para ser. Y Básicamente, no hay ninguna signifigant ataques a este. Esto tiene la seguridad que muy cerca de dos a los 128. Vamos a ver lo que significa más precisamente más tarde por. Es un cifrado de flujo muy rápido, tanto en hardware como en software. Y, en cuanto podemos decir, que parece ser impredecible como necesaria para un cifrado de flujo. Así que me debería decir que el proyecto de eStream realmente tiene cinco cifrados en flujo como esto. Elegí sólo Salsa porque creo que es la más elegante. Pero le puedo dar aquí algunos números de rendimiento. Para que puedas ver, estos son números de rendimiento en un 2.2 gigahercios, sabes, tipo máquina x 86. Y se puede ver que en realidad es RC4 el más lento. Porque básicamente, bien no realmente toma ventaja de la hardware. No sólo las operaciones de byte. Así que hay un montón de desperdiciadas ciclos que no están siendo utilizados. Pero los candidatos E-Stream, tanto Salsa y otros candidato llamado Sosemanuk. Yo diría que estos son los finalistas eStream. Estos son realmente cifrados en flujo que estén aprobados por el proyecto eStream. Se puede ver que que han alcanzado una tasa significativa. Se trata de 643 megabytes por segundo en este arquitectura, más que suficiente para una película y estas son realmente impresionantes tasas. Y ahora que has visto ejemplos de dos viejos cifrados en flujo no deberían ser usa, incluidos ataques contra los cifrados en flujo. Has visto lo que la corriente moderna de cifra aspecto con este nonce. Y ver los números de rendimiento para estos stream moderno de cifra por lo que si usted necesita un cifrado de flujo puede utilizar uno de los finalistas eStream. En particular, se podría utilizar algo como Salsa.