Artículos

El cifrado es muy complicado, pero sus principios son sencillos de entender

por Ricardo Galli

Con el tema del espionaje de la NSA, el algoritmo desconocido de Intel para generar números aleatorios y el presunto backdoor de la NSA, y ahora que la agencia de estándares de cifrados norteamericana (NIST) volvió a abrir el debate sobre unos algoritmos de generación de números aleatorios influidos por la NSA, el debate está en la calle. Pero la información que se publica suele ser muy mala, confunden mucho los conceptos, y no saben distinguir entre generación de clave con el cifrado de un mensaje.

1/n: La criptografía es muy compleja y pocos las dominan, pero sus principios de funcionamiento son fáciles de entender, para cualquiera.

2/n: Todo se basa en pasar de un texto claro a uno cifrado usando una clave: la “keygen”. Ésta puede ser una contraseña humana, o algo mejor.

3/n: En caso de cif. simétrico (AES…) la clave tiene que ser conocida por el receptor. En caso asimétrico (RSA), se generan dos diferentes.

4/n: La fortaleza de un cifrado depende de que no se pueda predecir las bits/bytes generados en el cifrado.

5/n: La predictibilidad del texto cifrado depende del algoritmo, y en gran medida de la clave (keygen) que se usa.

6/n: Las claves/contraseñas generadas por humanos son en general malas, son más predecibles que una clave obtenida aleatoriamente.

7/n: Por eso muchos algoritmo usan números aleatorios “fuertes” para generar esa keygen. El problema es cómo obtener esos números aleatorios.

8/n: Los números pseudoaleatorios generados por software no son suficientes para cifrado, se necesitan números menos predecibles.

9/n: Para ello se usan técnicas o dispositivos de hardware que introducen más impredictibilidad, la “entropía”.

10/n: Los dispositivos de hardware pueden medir el decay radiactivo o radiación cósmica, son más caros que los que usan ruido térmico, p.e.

11/n: En los sistemas operativos se usan las interrupciones del sistema como una forma de obtener entropía (como en /dev/random).

12/n: Muchos PCs vienen con dispositivos dedicados, como el de Intel, que generan esa entropía a partir de ruido “electrónico” o térmico.

13/n: Además de esa entropía, se necesitan buenos algoritmos para generar los números pseudoaleatorios, hay estándares NIST para ello.

14/n: Dicen que la NSA influyó en la determinación de esos estándares de generación de números aleatorios, por eso se está revisando.

15/n: En los tuits anteriores quedó claro la importancia de números aleatorios impredecibles para obtener un buen cifrado, pero…

16/n: la generación de números aleatorios no es el algoritmo de cifrado, son diferentes, y el primero se aplica a todos.

17/n: Si alguien puede predecir mejor los números aleatorios que se generan, puede predecir mejor la clave que se usará, y…

18/n: podrá descifrar un mensaje con mucha más facilidad, es como saber más o menos que contraseña pone el usuario, pero eso no significa…

19/n: que el “algoritmo de cifrado” esté roto o sea malo. Por eso hay que distinguir las diferencias entre generar claves y cifrar con ellas.

20/n: También hay que distinguir que el generador de entropía no es igual al algoritmo de generación pseudoaleatoria.

21/n: Aunque el generador de entropía esté manipulado por la NSA, si se combina con otras fuentes, poco pueden hacer.

22/n: Los generadores de entropía y números aleatorios por hardware son la forma más segura y eficiente, por eso son tan importantes.

23/n: Pero no todos podemos tener los caros, por lo que usamos los que ya trae nuestro PC más los mecanismos de software del SO.

24/n: Pero el SO tiene que ser conservador y hacer medición de la entropía de los datos que genera, por eso suelen ser lentos.

25/n: Así que aunque algoritmos de cifrado simétrico (como AES) son muy eficientes, el cuello de botella es la obtención de los aleatorios.

26/n: Obtener esos buenos pseudoaleatorios es lento, pero clave para que lo demás funcione, de allí que se le da tanta importancia.

27/n: la cosa es más o menos: entropía -> números aleatorios -> generar clave (keygen) -> cifrado. Todos importantes, pero no son lo mismo.

28/28: Y eso fue todo, una intro rápida a las “partes” de un sistema de cifrado, para que no os confundais con tanta información mala 😉