Mental poker är ett system med kryptografiska problem relaterade till rättvisa spel på distans (via telefon eller Internet) [1] [2] . Termen kommer från namnet på kortspelet poker . Ett liknande problem är relaterat till problemet med att kasta ett mynt på avstånd [3] .
Sedan mitten av 1900-talet började många transaktioner, monetära transaktioner utföras på distans, det fanns ett behov av att skapa ett kryptografiskt protokoll som kunde lösa sådana problem. Ett sådant protokoll var tänkt att ge inte bara användarvänlighet, utan också tillförlitlighet. En sådan uppgift kan formuleras i en spelform utan att några tekniska detaljer utelämnas - så att termen "mental poker" dök upp [1] .
För första gången försökte Niels Bohr , hans son och vänner spela poker utan kort 1933, men försöket misslyckades [4] . Problemet togs senare upp av Robert Floyd . Hans forskning fick skaparna av RSA-krypteringsprotokollet , Adi Shamir , Ron Rivest och Len Adleman , att publicera en vetenskaplig rapport där protokoll föreslogs för att lösa problemet med mental poker [5] .
Shamir, Rivest och Adleman formulerade problemet på följande sätt: "Kan två spelare som är oärliga mot varandra spela rättvis poker utan att använda kort, men till exempel via telefon?" [6] [7]
I poker låter det så här: "Hur kan vi se till att ingen spelare kikar på andra spelares kort medan vi blandar leken?". I ett riktigt kortspel är denna fråga lätt att besvara, eftersom spelarna sitter mitt emot varandra och tittar på varandra (vi överväger fallet när möjligheten till vanligt fusk är uteslutet). Men om spelarna inte sitter bredvid varandra, utan i separata rum, och kan överföra hela kortleken till varandra (till exempel med hjälp av post ), blir uppgiften mycket svår. För elektroniska kortspel, som online poker , där processen att spela är dold för användaren, är det helt omöjligt att lösa problemet om metoden som används tillåter en spelare att lura en annan. För att förhindra sådana problem finns det så kallade tankenivåer i poker [8] , tack vare vilka det är möjligt att spela med motståndare på samma nivå.
Spelet måste uppfylla vissa krav [3] :
En möjlig algoritm för att blanda kort är att använda ett kommutativt krypteringsschema. Det kommutativa schemat innebär att om vissa data krypteras mer än en gång, spelar ordningen i vilken den dekrypteras ingen roll.
Exempel : Alice krypterar klartexten och skapar en förvrängd chiffertext som hon skickar till Bob . Bob krypterar chiffertexten igen med samma schema som Alice, men med en annan nyckel . Om krypteringsschemat är kommutativt spelar det ingen roll vem som dekrypterar först när ett meddelande dekrypteras.
Krypteringsfunktionen, som i RSA , måste vara enkelriktad x , du kan enkelt beräkna f(x) , men i motsatt riktning måste du känna till "hemligheten" för att beräkna. Protokollets kryptografiska styrka är baserad på komplexiteten i att vända sådana funktioner. Detta utesluter dock inte möjligheten till partiell beräkning av x från f(x) [9] .
Algoritmen för att blanda kort med kommutativ kryptering är som följer [3] :
Däcket är nu blandat.
Under spelet kommer Alice och Bob att ta kort från kortleken för vilken ordningen i den blandade kortleken är känd. När en av spelarna vill se sina kort kommer han att begära motsvarande nycklar från en annan spelare. Den spelaren (efter att ha verifierat att spelaren faktiskt har rätt att titta på korten) skickar de individuella nycklarna för dessa kort till en annan spelare. Det är också nödvändigt att kontrollera att spelaren inte har försökt begära en nyckel till kort som inte tillhör honom.
Alice och Bob delar ut tre kort . Följande algoritm används:
1) De väljer ett primtal , Alice väljer ett primtal med , och beräknar talet enligt den generaliserade euklidiska algoritmen , det vill säga: , därav .
2) På liknande sätt definierar Bob sitt nummerpar: och .
3) Därefter väljer Alice tre olika nummer i intervallet , till exempel , och sätter dem i linje med sina kort. Hon ger dem till Bob i det klara.
4) Sedan räknar Alice ut siffrorna: , blandar dem och skickar dem till Bob.
5) Låt Bob välja vilket nummer som helst, till exempel skicka det till Alice, och detta nummer är hennes kort (i det här fallet ).
6) Nu beräknar Bob: .
7) Han skickar siffrorna till Alice, hon väljer till exempel och räknar ut .
8) Alice skickar numret till Bob, han beräknar , så han får sitt kort , det vill säga kortet . Kortet förblir i dragningen, medan Alice och Bob inte vet om det [1] .
Denna algoritm har nackdelar. När data är krypterad kan vissa egenskaper hos dessa data bevaras från klartext till chiffertext. Detta kan användas för att markera vissa kort. Således måste parterna komma överens om användning av en kortlek där det inte finns kort med egenskaper som bevaras under kryptering.
Dessutom måste krypteringsschemat som används vara säkert mot klartextattacker : Bob kan inte fastställa Alices ursprungliga nyckel [10] .
En beskrivning av komplexa protokoll för att utföra och verifiera ett stort antal operationer på kort och kortlekar ges i en artikel av Christian Schindelhauer. Detta arbete behandlar "allmänna ändamål" operationer (blanda, sätta in ett kort i en kortlek) som skapar protokoll som är tillämpliga på alla kortspel [11] .
Biblioteket libtmcg (C++) tillhandahåller en implementering av . Schindelhauer. Det användes för att implementera det tyska kortspelet Skat . Detta spel har 3 spelare och en kortlek med 32 kort, så det finns betydligt färre beräkningar än poker, som har fem till åtta spelare och använder en hel kortlek med 52 kort [12] .
Hittills kan den mentala pokeralgoritmen baserad på standard Alice-Bob-protokollet inte ge hög prestanda i onlinespel. Kravet på att varje spelare krypterar varje kort individuellt medför betydande begränsningar. Golles artikel beskriver ett mentalt pokerprotokoll som uppnår störst effektivitet genom att utnyttja egenskaperna hos pokerspelet och undvika "kryptera-och-shuffla"-modellen [13] . Istället för att blanda kort genererar spelare (krypterade) slumpmässiga nummer som används för att välja nästa kort. Varje nytt kort måste jämföras med resten som redan har delats ut för att upptäcka dubbletter [14] . Således är denna metod mest effektiv i spel som "poker", där antalet kort som delas ut till spelarna är mycket litet jämfört med storleken på hela kortleken [13] .
Kartgenereringsalgoritmen kräver att man organiserar ett kryptosystem med två nyckelegenskaper. Kryptering E måste vara additivt homomorf , det vill säga sådan att: E(c1 )E(c2 ) = E ( c1 + c2 ) . För det andra måste kollisioner upptäckas utan att klartexten avslöjas. Med andra ord, givet E(c 1 ) och E(c 2 ) , kan vi bestämma om c 1 och c 2 är lika . Ett exempel på ett system med sådana egenskaper är ElGamal-krypteringsschemat [15] .
Algoritmen fungerar enligt följande [13] :
Således behöver spelarna bara bestämma vilken kortkrypteringsmetod som används i spelet, samt vissa gränser för kollisioner, som är så små som antalet kort som krävs.