¿Por qué el intercambio de llaves de libélulas necesita cazar y picotear?
El esquema de intercambio de claves de libélula (utilizado por WPA3) recibió críticas porque la forma en que elige un generador del grupo de curva elíptica ('caza y picoteo') es un algoritmo de tiempo no constante que lo hace vulnerable a los ataques de canal lateral.
Mi pregunta es: ¿Por qué se usa la caza y el picoteo?
Suponga que hay un generador conocido $G$ para un grupo de tamaño principal, entonces $G^P$ también sería un generador del mismo grupo (si $P$no es un múltiplo del tamaño del grupo). Con$P$ al ser un número derivado de la contraseña (como con el esquema de la libélula), de esta manera se obtendría un generador tan aleatorio e impredecible como con la caza y el picoteo, ¿no?
¿Dónde está el error en ese razonamiento?
Respuestas
¿Dónde está el error en ese razonamiento?
El problema es que permitiría a un atacante probar varias contraseñas con el mismo intercambio, perdiendo así las propiedades PAKE que estábamos intentando conseguir.
Con la libélula, el lado honesto selecciona valores secretos. $p, m$, y genera los valores $s = p+m$ y $P = -m \cdot SKE$, dónde $SKE$ es el 'elemento de clave secreta', es decir, el que sugiere que se derive $SKE = [password]G$ (Lo escribo en notación aditiva porque la caza y picoteo entra en juego en Dragonfly solo si estás usando curvas elípticas).
Entonces, la parte honesta recibe valores $s'$ y $P'$ desde el otro lado (el adversario), y luego calcula la clave secreta:
$$H( p( P' + s' \cdot SKE ))$$
y luego envía un mensaje cifrado basado en esa clave (es decir, si el adversario de alguna manera obtiene una suposición de la misma clave, puede descifrar el mensaje y así validar la clave).
Con su propuesta, el atacante conocerá el log discreto de cualquier SKE, es decir, el valor $x$ S t $xG = SKE$. Entonces, ¿qué puede hacer el atacante (después de recibir los$s, P$ valores) es seleccionar arbitrario $s', P'$ valores (para los que conoce el registro discreto de $P' = p'G$) y enviarlos, y luego recibir la contraseña cifrada según el valor que calculó la parte honesta.
Luego, para cada contraseña en su diccionario, calcula la correspondiente $SKE$ y $xG = SKE$ y luego calcula:
$$H( (p'+s'x)(sG + x^{-1}P))$$
Si la suposición de SKE fue correcta, esta es la misma clave secreta que calculó la parte honesta y que puede validarse.
Se puede ver que esto es lo mismo porque, si el SKE es el valor que utilizó la parte honesta, entonces $pG = sG + x^{-1}P$ y $p' + s'x$ es el registro discreto de $P' + s' \cdot SKE$
El atacante puede realizar todo este cálculo para cada contraseña en su diccionario, por lo tanto, puede probar cada contraseña como resultado de un único intercambio.
Ahora, DragonFly no tiene que usar cazar y picotear; Hay otras transformaciones conocidas de hash a curva que convierten una contraseña en un punto EC de una manera que no se puede calcular el registro discreto. Sin embargo, DragonFly necesita usar algún método de este tipo ...