Intercambian la clave del OTP por la salida de un generador pseudoaleatorio:
- Gen:
- Enc:
- Dec:
La gran diferencia es que |S| <<< |M|, por ejemplo, si , entonces
Un algoritmo pseaudoaleatorio es un algoritmo deterministico que expande una entrada llamada seed, de forma que la salida parece aleatoria.
Formalmente, sea una familia de funciones, entonces con es un generador pseaudoaleatorio con respecto a D si:
Donde es una secuencia realmente aleatoria
Básicamente, que la probabilidad que las funciones puedan distinguir entre una entrada realmente aleatoria y una pseaudoaleatoria sea un valor despreciable.
Son definidos por el algoritmo que es utilizado para generar los valores pseudoaleatorios:
- RC4 (Usado en https y WEP)
- CSS (Usado en DVDs)
- A51 (GSM)
- E0 (Bluetooth)
- Salsa20:
- Rabbit:
Teorema
Si es un generador pseudoaleatorio entonces el criptosistema es indistinguible ante observadores.
No son seguros bajo múltiples cifrados:
- Si una función de cifrado es determinística, NO es segura bajo múltiples cifrados. Es por eso que necesitamos de cifrado probabilístico.
Evitar reutilizar la clave
Para realizar esto se agrega un valor a la función generadora, que no deberá repetirse para una misma clave (se lo llama nonce o IV).
Hay dos formas: modo sincronizado o no sincronizado. En el sincronizado, se genera con el IV, la clave y la función G un pad lo suficientemente grande como para encriptar varios mensajes a enviar, mientras que en el no sincronizado se genera un IV por cada mensaje. El modo no sincronizado es ineficiente si los mensajes a enviar son muchos muy chiquitos.
El IV es enviado como parte del mensaje, dado que siempre y cuando no se sepa la clave original seguirá siendo seguro.