En sekvens kallas superincreasing , vars varje term är större än summan av alla tidigare termer. Mer formellt är en sekvens av positiva heltal superökande om villkoret [1] [2] är uppfyllt :
Denna klass av sekvenser används flitigt i Merkle-Hellmans ryggsäckskryptosystem .
Det är till exempel superökande, men inte.
Antag att vi står inför uppgiften att konstruera en superökande sekvens för ett visst antal objekt . Elementet väljs slumpmässigt från en enhetlig fördelning av naturliga tal över följande segment: . Nästa element väljs enhetligt från segmentet , medlemmen av sekvensen som följer efter det väljs från segmentet , elementet väljs slumpmässigt från segmentet . Uppenbarligen, med sådana fördelningar av sekvensmedlemmarna, kommer supertillväxtvillkoret att vara uppfyllt, eftersom den nedre gränsen för varje segment är exakt lika med summan av alla de högra gränserna för de föregående segmenten ökade med en [3] . Låt oss till exempel konstruera flera superökande sekvenser på det här sättet för :
n | Linjesegmentet | Exempel 1 | Exempel 2 | Exempel 3 |
---|---|---|---|---|
ett | 5 | tio | 32 | |
2 | 56 | 49 | 64 | |
3 | 98 | 113 | 97 | |
fyra | 225 | 225 | 225 | |
5 | 481 | 510 | 493 |
Om det är slumpmässigt valda nummer, kan de återstående elementen i den superökande sekvensen hittas från olikheten [4] :
Låt , . Då, till exempel, sekvensen uppfyller villkoret och är superökande.
Varje element i Fibonacci-sekvensen uppfyller relationen: , vars noll och första medlemmar är: . Av detta kan man se att de första medlemmarna i Fibonacci-sekvensen: . Ibland kan du stöta på en generaliserad Fibonacci-sekvens . Detta är en sekvens vars medlemmar uppfyller ekvationens villkor: . Det vill säga, den generaliserade sekvensen erhålls från den klassiska genom att ändra de två första termerna i Fibonacci-sekvensen och behåller principen för bildandet av följande termer. För att konstruera en superökande sekvens används formen av den generaliserade Fibonacci-sekvensen. För att beräkna någon medlem av den superökande sekvensen är det nödvändigt att välja fyra element: två initiala ( och ) och två positiva faktorer ( och ) [5] .
Vi får följande fall:
Låt oss till exempel ta . De första elementen i den resulterande superökande sekvensen är: .
Tillståndet för igenväxt uppfylls av ett antal krafter av . Genom att känna till den superökande sekvensen kan vi konstruera en ny med hjälp av uppsättningen . För implementering är det nödvändigt att tillämpa på uppsättningen av följande operationer [6] :
Detaljerat exempel för en vald superökande sekvens :
Vi fick en ny superökande sekvens .
Merkle-Hellmans kryptosystem är baserat på "knapsäckproblemet" - en krypteringsalgoritm för offentlig nyckel - som beskrivs nedan. Problemet ser ut så här: givet en sekvens av icke- repeterande positiva heltal. Låt talet också tillhöra mängden naturliga tal. Om detta är möjligt är det nödvändigt att hitta en uppsättning pseudoslumpmässiga binära sekvenser för att uppfylla villkoret: [2] .
Låt vara en superökande sekvens. I det här fallet står vi inför ett "lätt" problem med en ryggsäck, vilket inte är svårt att lösa. För att göra detta jämförs det med elementet . Om då värdet minskas med och hoppa till medlemmen av sekvensen . Åtgärden upprepas tills processen avslutas. Om i slutändan , så hittas lösningen på problemet i form av en sekvens , annars existerar den inte [2] .
Om sekvensen inte är superökande (eller normal) är ryggsäckar ett "hårt" problem som bara kan lösas genom att räkna upp alla möjliga alternativ.
Den privata nyckeln i Merkle-Hellman-algoritmen är sekvensen av vikter för det superökande ryggsäcksproblemet, medan den publika nyckeln är sekvensen av vikter för det normala ryggsäcksproblemet med samma lösning. Det finns ett sätt att konvertera det superökande ryggsäcksproblemet till ett normalt ryggsäcksproblem med hjälp av modulära aritmetik. För att få en normal ryggsäckssekvens kommer vi att använda en superökande ryggsäckssekvens. Låt oss till exempel ta en talföljd: , och modulo multiplicera varje element i denna sekvens med talet . Ett villkor ställs på: värdet på modulen måste vara större än summan av alla element i sekvensen, till exempel . Och multiplikatorn måste vara ett relativt primtal med en modulo, till exempel . I ett sådant fall skulle den normala ryggsäckssekvensen vara [2] :
Vi får en normal talföljd: . Den superökande ryggsäckssekvensen är den privata nyckeln, medan den normala ryggsäckssekvensen är den offentliga nyckeln.
Ett flerpartisystem för hemlighetsdelning med en superökande sekvens föreslogs 2017. Det unika med systemet ligger i det faktum att det inte bara är multilateralt, utan också implementerar en struktur med sekventiell åtkomst efter nivåer. Algoritmen använder Shamir-schemat , eller snarare genereringen av hemliga aktier, följt av den hemliga återställningsfasen [7] .
Låt oss presentera en algoritm för att implementera ett multilateralt hemlighetsdelningssystem.
Generering av hemliga aktier [8]Steg 1.1. En hemlighet väljs , där är något primtal som är känt för alla parter och anger det slutliga storleksfältet . Låt , var är antalet deltagare mellan vilka du behöver dela hemligheten .
Steg 1.2. Låt oss omvandla hemligheten till -bitars pseudo-slumpmässiga binära talsystem och bilda sekvensen .
Steg 1.3. Låt oss komponera en binär längdsekvens från slumpmässigt valda element: .
Steg 1.4. Vi använder XOR- operationen mellan elementen i sekvenserna från steg 1.2 och steg 1.3. Som ett resultat får vi en ny sekvens: .
Steg 1.5. Låt oss bygga en superökande sekvens av slumpmässiga längdtal : .
Steg 1.6. Vi beräknar beloppet , som kommer att vara känt för alla deltagare. Funktion pseudokod:
funktion bugsum(a, b); Ingång: och . output: summa. summa ; för i r göra summa summa ; slutet retursumma;Steg 1.7. Välj ett primtal , som kommer att tillkännages för alla deltagare, och så att: och för , där antalet nivåer och det totala antalet deltagare i nivån .
Steg 1.8. Vi fördelar bland alla deltagare på nivån med , där bestämmer graden av Shamir-schemapolynomet på nivån . Därefter måste du konvertera elementen i sekvensen i steg 1.3 till decimalsystemet och även fördela dem efter nivå med hjälp av .
Hemlig återhämtningsfas [8]Steg 2.1. Åtminstone får deltagarna hemligheten på nivån och får en andel för .
Steg 2.2. Den första nivån kontrollerar om det verkligen är sant för det belopp som erhölls i steg 1.6. Om olikheten är sann, matar den första nivån ut och skickar till den andra nivån ett nytt summavärde: . Annars matar den ut och skickar till nästa lager och lägger till sin utdatabit till den tomma sekvensen . Det är nödvändigt att gå igenom alla nivåer och gradvis fylla sekvensen .
Steg 2.3. Nivån utför hemlig återhämtning och sekvenssådd . Vi upprepar beräkningarna som utfördes i steg 1.4 med XOR-operationen: .
Steg 2.4 . Slutligen fick vi en hemlig binär sekvens som kan konverteras till decimal för att få hemligheten .