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.