Rabinin todennäköisyyspohjainen allekirjoitusmenetelmä on Michael O. Rabinin vuonna 1979 alun perin ehdottama digitaalinen allekirjoitusmenetelmä [1] . Rabinin allekirjoitusmalli oli yksi ensimmäisistä ehdotetuista digitaalisista allekirjoitusmenetelmistä, ja se on ainoa, joka yhdistää suoraan allekirjoituksen väärentämisen monimutkaisuuden kokonaislukujen tekijöiden jakamisongelmaan . Rabinin allekirjoitusalgoritmi ei sovellu satunnaiseen oraakkelilaskentamalliin , jossa oletetaan, että kokonaislukujen tekijöiden muodostusongelma on ratkaisematon. Rabinin allekirjoitusjärjestelmä liittyy myös läheisesti Rabinin salausjärjestelmään .
Alkuperäinen algoritmi ei käytä hash-funktioita ja sitä pidetään epäluotettavana. [2]
Turvallinen algoritmi [3] perustuu törmäyksenkestävään hash-funktioon .
Useimmissa näkymissä algoritmi on yksinkertaistettu valitsemalla . Oletetaan, että hajautusfunktio tulosbittien lukumäärällä on satunnainen oraakkeli ja algoritmi toimii seuraavasti:
Avaimen sukupolviJoissakin algoritmin toteutuksissa arvoa ei käytetä. Sen sijaan on mahdollista kertoa hash-arvo kahdella numerolla a tai b ominaisuuksilla ja , jossa tarkoittaa Legendre-symbolia . Tällöin mille tahansa modulolle vain yksi neljästä numerosta on neliön muotoinen modulo , ja juuri tämä numero valitaan viestin digitaaliseen allekirjoitukseen.
Algoritmin yksinkertaistamiseksi entisestään sinun on muutettava viestiä, kunnes allekirjoitus läpäisee vahvistuksen.
\\ Viestinmuutostoiminto allekirjoituksen vahvistukselle 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 ) if ( sig * sig ) ) % nrabin == x : print ( "Kirjoita laajennettu viesti tiedostoon m.txt" ) f = open ( 'm.txt' , 'w' ) f . kirjoita ( m ) f . sulje () tauko m = m + ' ' paluu sigJos hash-funktio on satunnainen oraakkeli, eli sen tulos on todella satunnainen paikassa , niin allekirjoituksen väärentäminen mille tahansa viestille on yhtä vaikeaa kuin satunnaiselementin neliöjuuren laskeminen kohteesta .
Sen todistamiseksi [4] , että satunnaisen neliöjuuren saaminen on yhtä vaikeaa kuin tekijöiden laskeminen, on huomattava, että useimmissa tapauksissa neliöjuuria on neljä, koska sillä on kaksi neliöjuurta modulo ja kaksi neliöjuurta modulo , ja jokainen pari antaa neliöjuuren modulo kiinalaisen jäännöslauseen mukaan . Joillakin juurilla voi olla sama arvo, mutta tämän todennäköisyys on erittäin pieni.
Jos on mahdollista löytää kaksi erilaista neliöjuurta niin, että mutta , niin tämä johtaa välittömästi tekijöihin , koska alkutekijät ovat jaollisia : llä , mutta eivät jaollisia. Joten laskelma johtaa ei-triviaaliin tekijöihin .
Nyt oletetaan, että on olemassa tehokas algoritmi ainakin yhden neliöjuuren löytämiseksi. Sitten valitaan satunnainen modulo ja neliötetään , algoritmin käytön jälkeen otetaan modulon neliöjuuri ja saadaan uusi juuri , joka todennäköisyydellä 50 % .
Smart N. Kryptografia. - M .: Technosfera, 2005. S. 525.