Si el algoritmo de firma es bueno (y se usa correctamente con claves suficientemente grandes que se generaron de manera correcta y adecuadamente aleatoria), entonces, en la práctica , la respuesta es no: tener acceso a muchas firmas existentes no le permiten al atacante falsificar nuevas, y mucho menos volver a calcular la clave privada.
Desde un punto de vista teórico: la mayoría de los esquemas de firmas (en realidad todos) comienzan con el hashing del mensaje que se va a firmar, y la firma se calcula en realidad sobre el valor de hash. Por lo tanto, si el atacante tiene una firma existente S para el mensaje M , que se ciñe a h (M) y encuentra un mensaje M ' de modo que h (M) = h (M') , entonces S es también una firma válida para M ' ("firma válida" significa "una firma que será aceptada por los verificadores"). Por lo tanto, una posible forma de ataque es probar muchas variantes de un mensaje falso M ' hasta que se encuentre una que contiene el mismo h (M) que una firma existente, en la que punto en el que el atacante ha falsificado una nueva firma (más precisamente, ha reciclado con éxito una firma existente para un nuevo mensaje).
Este es un segundo ataque de preimagen en la función hash. Tener muchas firmas existentes proporciona más objetivos para el atacante, lo que facilita ese ataque. Pero más fácil no es fácil . Un algoritmo de firma "normal" usará funciones hash que son lo suficientemente fuertes y con una salida lo suficientemente amplia como para que los ataques de segunda preimagen no sean factibles, para cualquier número práctico de objetivos. Para poner algunas cifras debajo: con una función de hash de 160 bits (por ejemplo, SHA-1), el costo de un ataque de segunda imagen con un objetivo es de aproximadamente 2160 ; si el atacante puede reunir un millón de firmas existentes, el costo se reduce a aproximadamente 2140 : eso es un millón de veces más fácil, pero aún es demasiado difícil (por ejemplo, vea there ).
Sin embargo, tenga en cuenta la letra pequeña: insisto en que el algoritmo se use correctamente. Por ejemplo, considere DSA (o su variante de curva elíptica ECDSA). Al calcular una firma, debe generar un valor aleatorio k elegido uniformemente en el rango [1..q-1] para un número entero primo dado q (se necesita un nuevo k al azar para cada firma). Si la elección está sesgada de alguna manera, esto podría explotarse para un ataque de recuperación clave. Un caso extremo es la debacle de Sony-PS3, donde utilizaron un valor fijo de k , siempre el mismo, independientemente del mensaje que se firmará. Esto es muy incorrecto: dos firmas conocidas son suficientes para reconstruir la clave privada. Más generalmente, Bleichenbacher ha demostrado (hace una docena de años) que si k se elige tomando una cadena aleatoria de bits del mismo tamaño que q , reduciendo el módulo q , entonces el ligero sesgo es suficiente para reconstruir la clave privada desde aproximadamente 263 firmas conocidas (para un q ).
Por supuesto, en esa situación, el problema no es permitir que el atacante vea muchas firmas, sino usar el algoritmo de manera incorrecta. La implementación de algoritmos criptográficos es difícil (niños, ¡no lo hagan en casa!).