In cryptography, the Rabin signature algorithm is a method of digital signature originally published by Michael O. Rabin in 1979. [1] [2]
The Rabin signature algorithm was one of the first digital signature schemes proposed. By using a trapdoor function with a hash of the message rather than with the message itself, in contrast to earlier proposals of one-time hash-based signatures or trapdoor-based signatures without hashing, [3] [4] Rabin's was the first published design to meet what is now the modern standard of security for digital signatures for more than one message, existential unforgeability under chosen-message attack. [5]
Rabin signatures resemble RSA signatures with exponent , but this leads to qualitative differences that enable more efficient implementation [5] and a security guarantee relative to the difficulty of integer factorization, [1] [2] [6] which has not been proven for RSA. However, Rabin signatures have seen relatively little use or standardization outside IEEE P1363 [7] in comparison to RSA signature schemes such as RSASSA-PKCS1-v1_5 and RSASSA-PSS.
The Rabin signature scheme is parametrized by a randomized hash function of a message and -bit randomization string .
Security against any adversary defined generically in terms of a hash function (i.e., security in the random oracle model) follows from the difficulty of factoring : Any such adversary with high probability of success at forgery can, with nearly as high probability, find two distinct square roots and of a random integer modulo . If then is a nontrivial factor of , since so but . [2] Formalizing the security in modern terms requires filling in some additional details, such as the codomain of ; if we set a standard size for the prime factors, , then we might specify . [6]
Randomization of the hash function was introduced to allow the signer to find a quadratic residue, but randomized hashing for signatures later became relevant in its own right for tighter security theorems [2] and resilience to collision attacks on fixed hash functions. [8] [9] [10]
The quantity in the public key adds no security, since any algorithm to solve congruences for given and can be trivially used as a subroutine in an algorithm to compute square roots modulo and vice versa, so implementations can safely set for simplicity; was discarded altogether in treatments after the initial proposal. [11] [2] [7] [5] After removing , the equations for and in the signing algorithm become:
The Rabin signature scheme was later tweaked by Williams in 1980 [11] to choose and , and replace a square root by a tweaked square root , with and , so that a signature instead satisfies which allows the signer to create a signature in a single trial without sacrificing security. This variant is known as Rabin–Williams. [5] [7]
Further variants allow tradeoffs between signature size and verification speed, partial message recovery, signature compression (down to one-half size), and public key compression (down to one-third size), still without sacrificing security. [5]
Variants without the hash function have been published in textbooks, [12] [13] crediting Rabin for exponent 2 but not for the use of a hash function. These variants are trivially broken—for example, the signature can be forged by anyone as a valid signature on the message if the signature verification equation is instead of .
In the original paper, [1] the hash function was written with the notation , with C for compression, and using juxtaposition to denote concatenation of and as bit strings:
By convention, when wishing to sign a given message, , [the signer] adds as suffix a word of an agreed upon length . The choice of is randomized each time a message is to be signed. The signer now compresses by a hashing function to a word , so that as a binary number …
This notation has led to some confusion among some authors later who ignored the part and misunderstood to mean multiplication, giving the misapprehension of a trivially broken signature scheme. [14]