Me estoy confundiendo un poco con los PRGs empleados en criptografía.
Básicamente, un PRG se usa para expandir una secuencia aleatoria (principalmente una clave) de longitud s a una longitud n > s , aún con un aspecto aleatorio. Ahora bien, aunque obviamente esto no es posible en un sentido matemático, la idea es que obtengamos una aleatoriedad razonable, lo que significa que un diferenciador eficiente no puede distinguir la secuencia más grande aparte de la aleatoria (por lo que alcanzamos la aleatoriedad en un sentido computacional). Mi pregunta es ¿realmente?
Considera este ejemplo:
Entrada: k: {0,1} ^ 2
PRG G: {0,1} ^ 2 - > {0,1} ^ 4
Salida: k '= G (k): {0,1} ^ 4
Esto significa que nuestra clave inicial puede tomar 4 valores posibles. Si bien nuestra clave derivada cubre un rango de 16 valores, solo puede tomar 4 de estos 16 valores, ya que el PRG es determinista. Entonces, ¿qué me impide asignar posibles claves iniciales a claves de salida como un ataque? De este modo, podría reducir el espacio de búsqueda de 16 a 4 valores. ¿Entonces básicamente invertir la expansión?
Ahora argumentaría que no logramos ninguna expansión de aleatoriedad, siempre y cuando tengamos memoria para almacenar estas asignaciones. Dado que hay algunos PRG que se usan comúnmente, esto brindaría un incentivo para que los proyectos de colaboración asignen todas o al menos parte de las claves para romper la seguridad de muchas aplicaciones.
Estoy seguro de que me he equivocado de algo anteriormente, pero no puedo averiguar dónde está mi error. ¿Podrías ayudarme?
Muchas gracias