El esquema de firma probabilística de Rabin es un método de firma digital propuesto originalmente por Michael O. Rabin en 1979 [1] . El esquema de firma de Rabin fue uno de los primeros esquemas de firma digital propuestos y es el único que relaciona directamente la complejidad de la falsificación de firma con el problema de factorización de enteros . El algoritmo característico de Rabin no es adecuado en un modelo de cálculo aleatorio de Oracle que supone que el problema de factorización de enteros es indecidible. El esquema de la firma Rabin también está estrechamente relacionado con el criptosistema Rabin .
El algoritmo original no utiliza funciones hash y se considera poco fiable. [2]
El algoritmo seguro y protegido [3] se basa en una función hash resistente a colisiones .
En la mayoría de las vistas, el algoritmo se simplifica eligiendo . Se supone que la función hash con el número de bits de salida es un oráculo aleatorio y el algoritmo funciona de la siguiente manera:
Generación de clavesEn algunas implementaciones del algoritmo, el valor no se usa. En cambio, es posible terminar multiplicando el valor hash por dos números a o b con propiedades y , donde denota el símbolo de Legendre . Entonces, para cualquier módulo, solo uno de los cuatro números será un módulo cuadrado , y es este número el que se elige para firmar digitalmente el mensaje.
Para simplificar aún más el algoritmo, debe cambiar el mensaje hasta que la firma pase la verificación.
\\ Función de cambio de mensaje para verificación de firma def root ( m : str , p , q ): while True : x = h ( m ) sig = pow ( p , q - 2 , q ) * p * pow ( x , ( q + 1 ) / 4 , q ) sig = ( pow ( q , p - 2 , p ) * q * pow ( x , ( p + 1 ) / 4 , p ) + sig ) % ( nrabin ) si ( sig * sig ) % nrabin == x : print ( "Escribir mensaje extendido en el archivo m.txt" ) f = open ( 'm.txt' , 'w' ) f . escribir ( m ) f . cerrar () romper m = m + ' ' volver sigSi la función hash es un oráculo aleatorio, es decir, su salida es realmente aleatoria en , entonces falsificar una firma para cualquier mensaje es tan difícil como calcular la raíz cuadrada de un elemento aleatorio a partir de .
Para probar [4] que obtener una raíz cuadrada aleatoria es tan difícil como la factorización, debe notarse que en la mayoría de los casos hay cuatro raíces cuadradas diferentes, ya que tiene dos módulos de raíces cuadradas y dos módulos de raíces cuadradas , y cada par da un módulo de raíz cuadrada por el teorema chino del resto . Algunas de las raíces pueden tener el mismo valor, pero la probabilidad de que esto ocurra es extremadamente pequeña.
Si es posible encontrar dos raíces cuadradas diferentes tales que pero , esto conduce inmediatamente a una factorización de , ya que los factores primos son divisibles por , pero no divisibles. Entonces el cálculo dará como resultado una factorización no trivial .
Ahora se supone que existe un algoritmo eficiente para encontrar al menos una raíz cuadrada. Luego se elige un módulo aleatorio y se eleva al cuadrado , después de utilizar el algoritmo se saca la raíz cuadrada del módulo y se obtiene una nueva raíz , que tiene una probabilidad del 50% .
Smart N. Criptografía. - M.: Technosfera, 2005. S. 525.