Paso 14: La importancia de un aleatorio k
Vamos a discutir ahora cómo y por qué la firma ECDSA que Sony usa en la Playstation 3 era defectuosa y cómo permitió a los hackers obtener acceso a la clave privada de la PS3 ECDSA.
Así que usted recuerde las ecuaciones necesarias para generar una firma... R = k * G y S = k ^ -1 (z + dA * R) mod p... bien fuerza de esta ecuación está en el hecho de que usted tiene una ecuación con dos incógnitas (k y dA) por lo que no es posible determinar uno de los.
Sin embargo, la seguridad del algoritmo se basa en su aplicación y es importante asegurarse de que 'k' se genera aleatoriamente y que no hay forma alguien puede adivinar, calcular o usar un ataque de tiempo o cualquier otro tipo de ataque para encontrar el valor aleatorio 'k'. Pero Sony hizo un gran error en su aplicación, utiliza el mismo valor de 'k' por todas partes, que significa que si usted tiene dos firmas, ambas con el mismo k, entonces ambos tendrán el mismo valor de R , y significa que se puede calcular k con dos firmas de S de los dos archivos con hashes z y z' y S y S' respectivamente :
S – S' = k ^ -1 (z + dA * R)-k ^ -1 (z' + da * R) = k ^ -1 (z + da * R – z'-dA * R) = k ^ -1 (z-z')
So : k = (z – z’) / (S – S’)
Una vez que sabes k, la ecuación para S se convierte en una ecuación con una incógnita y luego fácilmente se resuelve para :
dA = (S * k – z) / R
Una vez que sepa la clave privada dA, ahora puedes firmar tus archivos y la PS3 lo reconocerá como un auténtico archivo firmado por Sony. Por esta razón es importante asegurarse de que el número aleatorio que se utiliza para generar la firma es realmente "criptográficamente aleatorio". Esta es también la razón por qué es imposible tener un custom firmware por encima de 3.56, simplemente porque desde la versión 3.56, Sony fija su implementación del algoritmo ECDSA y utiliza las nuevas llaves que ahora es imposible encontrar la clave privada...
Otro ejemplo de este problema es cuando algunos clientes de bitcoin utilizan un cifrado no generador de números aleatorios (en algunos navegadores y en algunos clientes Android) que firman sus transacciones con el mismo valor de 'k', y personas que fueron capaces de encontrar la clave privada de su billetera bitcoin y robar sus fondos.
Esto demuestra la importancia de utilizar un número verdaderamente aleatorio cada vez que haga una firma, como se expondrá a la clave privada si el valor de R del par de firma (R, S) es la misma en dos firmas diferentes.
Un buen chiste sobre esto se muestra en el comic de xkcd 221 (ver imagen de arriba) que se convirtió en la imagen ir a ilustrar este tema. La imagen fue reutilizada a menudo cada vez que ocurrió un error de ejecución del algoritmo.
El algoritmo ECDSA está muy seguro de que es imposible encontrar la clave privada... mientras la aplicación se realiza correctamente por supuesto. Si hay una manera de encontrar la clave privada, entonces la seguridad de cada equipo, el sitio web, el sistema puede verse comprometida ya que muchos sistemas se basan en ECDSA para su seguridad, y es imposible de romper.