NUSH | |
---|---|
Skaber | Anatoly Lebedev , Alexey Volchkov |
Oprettet | 1999 _ |
offentliggjort | 2000 _ |
Nøglestørrelse | 128, 192, 256 bit |
Blokstørrelse | 64, 128, 256 bit |
Antal runder | 36, 68, 132 |
NUSH ("Vores") er en bloksymmetrisk krypteringsalgoritme udviklet af Anatoly Lebedev og Alexei Volchkov for det russiske firma LAN Crypto.
NUSH har flere forskellige varianter, der har forskellige blokstørrelser (64, 128, 256 bit), forskelligt antal runder (36, 128 eller 132 runder afhængig af blokstørrelsen) og bruger en nøglelængde på 128, 192 eller 256 bit. Algoritmen bruger ikke S-bokse, men kun operationer som AND, OR, XOR, modulo addition og cykliske skift. Før første og efter sidste runde udføres en "blegning" af nøglen.
Denne algoritme blev fremsat i NESSIE-projektet , men blev ikke valgt, fordi det blev vist, at lineær kryptoanalyse kan være mere effektiv end et brute-force-angreb.
Andre algoritmer kan bygges på basis af krypteringsalgoritmen. Flere af dem præsenteres i denne artikel.
Lad os introducere notation. Lad være længden af den krypterede klartekstblok . (startnøgle) - valgt efter et eller andet skema baseret på nøglen K. Bitvis tilføjet til kildeteksten: Derefter opstår r-1 runder, givet ved følgende ligninger, hvori (Rund undernøgle) - runde undernøgler, # - bitvise konjunktion eller disjunktion , vælges i henhold til skemaet, , er kendte konstanter, >>>j er et cyklisk skift til højre med j bit:
for i=1…(r-1)
Den sidste iteration adskiller sig kun fra de vigtigste ved fraværet af en permutation efter evaluering af udtrykkene på højre side af lighederne:
Output: krypteret blok
Ifølge den generelle formel for invertering af produktet af operatører er der også konstrueret en dekrypteringsprocedure.
Én dekrypteringsiteration udføres:
( -længde , du kan udføre et cyklisk skift til venstre ved at )
Derefter er den vigtigste dekrypteringscyklus, bestående af iterationer, heller ikke væsentlig forskellig fra den forrige:
for i=r-1…1
Nogle kilder mener, at krypteringsproceduren består af 4 gange færre runder, bestående af 4 iterationer af ovennævnte type (uden indledende og sidste addition modulo 2). Så forfatterne af chifferen skrev selv deres algoritme som følger:
hvor - den tilsvarende konstant tilføjes til iterationsnøglen
Algoritmerne ligner hinanden, da "+"-operationen er defineret af forfatterne separat fra hovedbeskrivelsen af krypteringsmetoden. Det skal bemærkes, at skemaet for "+" operationer kan ændres ved at vælge reversible binære operationer på vektorer med længde . Den ikke-lineære operation af almindelig addition med ignorering af overløb er beregnet til at komplicere lineær kryptoanalyse. Og XOR-operationen hjælper med at undgå differentiel kryptoanalyse . I det følgende vil vi overveje den første beskrivelse af algoritmen givet i en artikel af kinesiske matematikere, der udførte en lineær kryptoanalyse af algoritmen.
Valget af "+" operationer blev foretaget på baggrund af resultaterne af forskning om parallelisering af beregninger på Pentium-type processorer. Valget af at ændre rækkefølgen af registre a, b, c, d fra rund til rund fremskynder forekomsten af diffusion og forvirring. Grundlæggende operationer (XOR, modulo addition , OR, AND) og deres rækkefølge fremskynder udførelsen af algoritmen implementeret i C på de fleste platforme, og implementeringen af algoritmen i assembler er ret kort.
Fra ovenstående beskrivelse er det klart, at for implementeringen af algoritmen er det nødvendigt:
Samtidig er der ingen substitutionstabeller, der er til stede, for eksempel i GOST, og runden består af 6 operationer. Det faktum, at skiftet udføres af en tidligere kendt værdi, som ikke afhænger af hverken klartekst eller nøgle, forenkler i høj grad implementeringen af algoritmen på mikrokredsløb. Algoritmens enkelhed gør det nemt at kontrollere, at der ikke er en såkaldt "bagdør" i en bestemt implementering.
Der spilles 36 runder
jeg | jeg | jeg | jeg | ||||
---|---|---|---|---|---|---|---|
0 | ac25 | 9 | 6a29 | atten | 96 da | 27 | d25e |
en | 8a93 | ti | 6d84 | 19 | 905f | 28 | a926 |
2 | 243d | elleve | 34 bd | tyve | d631 | 29 | 1c7b |
3 | 262e | 12 | a267 | 21 | aa62 | tredive | 5f12 |
fire | f887 | 13 | cc15 | 22 | 4d15 | 31 | 4ecc |
5 | c4f2 | fjorten | 04fe | 23 | 70 cb | 32 | 3c86 |
6 | 8e36 | femten | b94a | 24 | 7533 | 33 | 28db |
7 | 9fa1 | 16 | df24 | 25 | 45fc | 34 | fc01 |
otte | 7dc0 | 17 | 40ef | 26 | 5337 | 35 | 7cb1 |
jeg | jeg | jeg | jeg | ||||
---|---|---|---|---|---|---|---|
0 | fire | 9 | 2 | atten | 5 | 27 | 13 |
en | 7 | ti | 9 | 19 | en | 28 | 12 |
2 | elleve | elleve | fire | tyve | 2 | 29 | 3 |
3 | otte | 12 | 13 | 21 | fire | tredive | 6 |
fire | 7 | 13 | en | 22 | 12 | 31 | elleve |
5 | fjorten | fjorten | fjorten | 23 | 3 | 32 | 7 |
6 | 5 | femten | 6 | 24 | 9 | 33 | femten |
7 | fire | 16 | 7 | 25 | 2 | 34 | fire |
otte | otte | 17 | 12 | 26 | elleve | 35 | fjorten |
Med en bloklængde på 128 bit spilles 68 runder. Derfor 68 32-bit konstanter og 68 .
Bloklængde 256 bitMed en bloklængde på 256 bit spilles der 132 runder. Derfor 132 64-bit konstanter og 132 .
Nøglen er repræsenteret som en sammenkædning af N/4-bit ord. KS og KF er sat vilkårligt, og det hele
128-bit nøgle Bloker i 64 bitNøgle K er opdelt i 8 ord
Blokkere i 128 bit og 256 bitK-tasten er opdelt i henholdsvis 4 og 2 ord, så de runde tangenter gentages med en periode på 4 eller 2. I sidstnævnte tilfælde er der det samme blandt KS og KF.
192-bit nøgleAfhængigt af blokkens længde er nøglen opdelt i 12, 6 og 3 n-bit dele, som bestemmer gentagelsesperioden for de runde tangenter.
256-bit nøgleHer er nøglen foreningen af 16, 8 eller 4 binære ord.
jeg | # | jeg | # | jeg | # | jeg | # |
---|---|---|---|---|---|---|---|
0 | OG | 16 | ELLER | 32 | ELLER | 48 | OG |
en | ELLER | 17 | ELLER | 33 | ELLER | 49 | OG |
2 | OG | atten | OG | 34 | OG | halvtreds | OG |
3 | ELLER | 19 | OG | 35 | ELLER | 51 | OG |
fire | ELLER | tyve | OG | 36 | ELLER | 52 | OG |
5 | ELLER | 21 | OG | 37 | OG | 53 | OG |
6 | ELLER | 22 | OG | 38 | ELLER | 54 | ELLER |
7 | ELLER | 23 | ELLER | 39 | OG | 55 | OG |
otte | OG | 24 | OG | 40 | ELLER | 56 | ELLER |
9 | ELLER | 25 | ELLER | 41 | OG | 57 | ELLER |
ti | ELLER | 26 | ELLER | 42 | OG | 58 | ELLER |
elleve | OG | 27 | ELLER | 43 | ELLER | 59 | OG |
12 | ELLER | 28 | OG | 44 | ELLER | 60 | OG |
13 | OG | 29 | ELLER | 45 | OG | 61 | OG |
fjorten | ELLER | tredive | OG | 46 | OG | 62 | ELLER |
femten | ELLER | 31 | OG | 47 | OG | 63 | ELLER |
For yderligere iterationer gentages alt:
Algoritmen indeholder ikke operationer med bitkompleksitet højere end , hvor er bitlængden af modulet eller operanderne (f.eks. moduloprodukt, at finde det inverse (ved multiplikation) element eller den største fælles divisor har bitkompleksitet , og eksponentiering har bit kompleksitet ). Derfor er det naturligt at forvente en høj hastighed på algoritmen. Forfatterne giver følgende data:
Blokstørrelse, bit | C program | Samlingsprogram | ||
---|---|---|---|---|
Ure pr. blok | Ure pr. byte | Ure pr. blok | Ure pr. byte | |
64 | 180 | 23 | 130 | 17 |
128 | 340 | 22 | 250 | 16 |
Hovedårsagen til elimineringen af NUSH-algoritmen i NESSIE-konkurrencen var algoritmens sårbarhed over for lineær kryptoanalyse fundet af Wu Wenling og Feng Dengo.
I deres artikel "Linear cryptanalysis of the NUSH block cipher" bruger de begrebet angrebskompleksitet , hvor det karakteriserer behovet for hukommelse og - for mængden af beregning.
For N=64 og N=128 bit foreslås 3 typer angreb, og for N=256 - to. Kompleksiteten af de tilsvarende angreb:
Blok længde, bit | Nøglenængde, bit | |
---|---|---|
64 | 128 | |
192 | ||
256 | ||
128 | 128 | |
192 | ||
256 | ||
256 | 128 | |
192 | ||
256 |
I nogle tilfælde er versionen med 192-bit nøglen væsentligt mere sikker end versionen med den længere nøgle. Du kan også bemærke, at der er tilfælde, hvor kompleksiteten af angrebene af chifferen med den mindste nøglelængde og den største er næsten den samme. Derudover påvirker en forøgelse af nøglelængden ikke kompleksiteten af angrebet så meget, som vi ønsker.
Der er således angreb på NUSH-chifferet, der er mere effektive end brute force. Derfor er der en mulighed for, at disse angreb forbedres, eller at computerteknologien når et niveau, der er tilstrækkeligt til at bryde chifferen inden for rimelig tid.
Som et eksempel kan du overveje det andet angreb på en chiffer med en bloklængde på N=64 bit. Krypteringsanalyse er baseret på konstruktionen af afhængigheder mellem bits af nøglen, originalen og chifferteksten, gyldige med en sandsynlighed forskellig fra 1/2. Disse relationer er bygget på basis af en ligning, der er gyldig med en sandsynlighed på 3/4
,
Denne ligning kan kontrolleres ved hjælp af beskrivelsen af algoritmen, og under hensyntagen til, at for den sidste (laveste) bit, er operationerne "+" og sammenfaldende. Faktisk har vi forholdet . Tilføjer vi forholdet til begge dele af ligningen, får vi det påkrævede.
Yderligere, givet specifikke værdier , kan det vises, at det ikke afhænger af alle bits af nøglen og klarteksten, nemlig:
I betragtning af de første 4 runder af dekryptering, kan det fastslås, at .
Brug af Piling-up-lemmaet, med sandsynlighed . Vi fik forbindelsen mellem de centrale bits og de almindelige tekster og chiffertekster.
Fra nøgleskemaet kan det fås, at hvis nøglelængden er 128 eller 256 bit, så , hvis nøglen består af 192 bit, så . Ud fra disse data estimerer vi tidskompleksiteten af angrebet givet af følgende algoritme:
Kompleksiteten i forhold til mængden af lagret information er estimeret til . Det er, hvor mange åben-chiffertekst-par en kryptoanalytiker skal have. Samtidig er teksterne på ingen måde vilkårlige. Det kan ses af ovenstående relationer, at de ikke afhænger af alle bits af input- og outputblokkene. Følgelig skal der blandt prøven af klartekst- og chiffertekstblokke være blokke med forskellige tilsvarende bits. Driften af algoritmen med et mindre antal kendte tekster er mulig, men så er det mindre sandsynligt, at det "maksimale" antal fundet i andet trin faktisk svarer til den reelle nøgle i lyset af den ikke-overskridelse af roden af spredningen af antallet af begivenheder "ligningen er opfyldt" over måtten. forventning om forskellen i antallet af denne begivenhed og dens modsætning (du kan overveje Bernoulli-ordningen, hvor sandsynligheden for "succes" er lig med sandsynligheden for at opfylde forholdet).
Andre angreb, der foreslås i samme artikel, adskiller sig i analysen på det sidste trin af forholdet for andre runder og har ingen uafhængig interesse.
Andre algoritmer kan bygges på basis af NUSH. I særdeleshed:
Inden hashing starter, forlænges teksten:
Funktionen bruger følgende variable:
Startværdier: , , hvor er konstanter, der tilføjes til KR-nøglen under kryptering, KS=KF=KR=0
For i = 0 til l-1
{
For j=0 til L/2-1 er //L antallet af runder for den tilsvarende type NUSH { } H = NUSH(V) //Krypteringsoperation For j=15 til 4 For j=15 til 4}
For i= 0 til 3
{
For j=0 til L/2-1 H = NUSH( ) For j=15 til 4}
Hashværdi af længde t*n (t<16) bits — første t n-bit ord i register T
Baseret på hash-funktionen kan en meddelelsesgodkendelsesprocedure bygges. Den adskiller sig kun fra den tidligere algoritme ved brug af en nøgle, der ikke er nul .
Lad SYNC være en kendt binær vektor med længde LENGTH. Der er to versioner af denne chiffer.
Mulighed 1Lad N = LÆNGDE være længden af den blok, der bruges i NUSH-kryptering (LÆNGDE = 64, 128, 256) Lad være en vektor af COUNT N-bit ord, der vil blive tilføjet til almindelig tekst og chiffertekst til henholdsvis kryptering og dekryptering.
For i =0 til COUNT −1
{
SYNC=(SYNC+65257)mod}
Mulighed 2Her er N=LÆNGDE / 2, hvor LÆNGDE = henholdsvis 128, 256, 512. Lad være en vektor med længden N, SYNC=[SYNC_0SYNC_1] er en vektor med længden 2N T er et midlertidigt register med længden N=4n, , , , er de tilsvarende konstanter for NUSH-algoritmen.
Udførte beregninger:
SYNC[0] = SYNC[0] ^ NUSH(SYNC[0])
SYNC[1] = SYNC[1] ^ NUSH(SYNC[1]) T=SYNC[1]
For i =0 til COUNT −1
{
T = (T + 127)mod}
En specifik gruppe G introduceres med en operation defineret af forfatterne af algoritmen baseret på Montgomery multiplikation.
Multiplikation Montgomery . Vi vælger et primtal P med længden n bit, tallet For to heltal A og B vil Montgomery-produktet være tallet: , hvor . At dividere med betyder at ignorere de nederste N bits af tallet. Gruppedrift:
beregnet med N=n. A og B anses for at være lige store, hvis de adskiller sig enten med P eller med 0. Der opnås en abelsk multiplikativ gruppe G. En isomorfi kan konstrueres mellem G og det reducerede system af rester modulo P:
Gruppen er konstrueret ved hjælp af et primtal P, således at det også er primtal.
Algoritmens kryptografiske styrke er sikret af kompleksiteten af det diskrete logaritmeproblem. Kompleksiteten af hacking anslås til . I denne gruppe er generatoren a valgt. Privat nøgle: et tilfældigt heltal x ensartet fordelt på segmentet [0, P-2]. Offentlig nøgle: et element i gruppen G .
KrypteringOutput: c||e
DekrypteringDenne algoritme er baseret på den tidligere beskrevne hash-funktion. Lad Q være et primtal af længde 2m bit, som er en divisor af tallet P-1. Under operationen vil vi forstå den operation, der allerede er introduceret tidligere , hvor Q bruges som et primtal.
Offentlig nøgleEthvert nummer . Ideelt valgt med en ensartet fordeling.
UnderskriverUnderskriften anses for korrekt, hvis jeg giver bevis for skemaets rigtighed. Det er klart, at algoritmens rigtighed svarer til rigtigheden af ligheden .
Den resulterende lighed kan omskrives som potenser af generatoren g af undergruppen H på følgende måde: . fra definitionen. Hvor . Operationen er lineær i det andet argument op til at tage lighed modulo Q. Faktisk, . Derfor ,. Hvorfra følger ligheden, der skal bevises, da rækkefølgen af elementet g er lig med Q.
Godkendelsesprocessen ligner den digitale signaturordning. De offentlige og private nøgler vælges på nøjagtig samme måde. Den private nøgle opbevares af den person, der ønsker at bevise sin "identitet" (lad det være part A). Der er fire trin i godkendelsesprocessen:
Symmetriske kryptosystemer | |
---|---|
Stream-cifre | |
Feistel netværk | |
SP netværk | |
Andet |