Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
16.04.2013
Размер:
28.38 Кб
Скачать

New Page 1 4. уРЕГЙЖЙЛБГЙС Rijndael РТЕДУФБЧМСЕФ УПВПК ЙФЕТБФЙЧОЩК ВМПЮОЩК ЫЙЖТ, ЙНЕАЭЙК РЕТЕНЕООХА ДМЙОХ ВМПЛПЧ Й ТБЪМЙЮОЩЕ ДМЙОЩ ЛМАЮЕК. дМЙОБ ЛМАЮБ Й ДМЙОБ ВМПЛБ НПЗХФ ВЩФШ ОЕЪБЧЙУЙНП ДТХЗ ПФ ДТХЗБ 128, 192 ЙМЙ 256 ВЙФ.

ъБНЕЮБОЙЕ: Ч ДБООПН ТБЪДЕМЕ ПВЯСУОСЕФУС УФТХЛФХТБ ЫЙЖТБ Й ПО ОЕ СЧМСЕФУС ТХЛПЧПДУФЧПН ДМС ТЕБМЙЪБГЙЙ. пВ БУРЕЛФБИ ТЕБМЙЪБГЙЙ НЩ ЗПЧПТЙН ПФДЕМШОП Ч УППФЧЕФУФЧХАЭЕН ТБЪДЕМЕ.

4.1 "уПУФПСОЙЕ", лМАЮ ЫЙЖТПЧБОЙС Й юЙУМП гЙЛМПЧ. тБЪОППВТБЪОЩЕ РТЕПВТБЪПЧБОЙС ТБВПФБАФ У РТПНЕЦХФПЮОЩН ТЕЪХМШФБФПН, ОБЪЩЧБЕНЩН уПУФПСОЙЕН (State).

пРТЕДЕМЕОЙЕ: РТПНЕЦХФПЮОЩК ТЕЪХМШФБФ ЫЙЖТПЧБОЙС ОБЪПЧЕН уПУФПСОЙЕН (State)

уПУФПСОЙЕ НПЦОП РТЕДУФБЧЙФШ Ч ЧЙДЕ РТСНПХЗПМШОПЗП НБУУЙЧБ ВБКФПЧ. ьФПФ НБУУЙЧ ЙНЕЕФ 4 УФТПЛЙ, Б ЮЙУМП УФПМВГПЧ ПВПЪОБЮЕОП ЛБЛ Nb Й ТБЧОП ДМЙОЕ ВМПЛБ, ДЕМЕООПК ОБ 32.

лМАЮ ЫЙЖТПЧБОЙС ФБЛЦЕ РТЕДУФБЧМЕО Ч ЧЙДЕ РТСНПХЗПМШОПЗП НБУУЙЧБ У ЮЕФЩТШНС УФТПЛБНЙ. юЙУМП УФПМВГПЧ ПВПЪОБЮЕОП ЛБЛ Nk Й ТБЧОП ДМЙОЕ ЛМАЮБ, ДЕМЕООПК ОБ 32. ьФП РПЛБЪБОП ОБ ТЙУХОЛЕ 1.

ч ОЕЛПФПТЩИ УМХЮБСИ ЛМАЮ ЫЙЖТПЧБОЙС РПЛБЪБО ЛБЛ МЙОЕКОЩК НБУУЙЧ 4-ВБКФПЧЩИ УМПЧ. уМПЧБ УПУФПСФ ЙЪ 4 ВБКФПЧ, ЛПФПТЩЕ ОБИПДСФУС Ч ПДОПН УФПМВГЕ (РТЙ РТЕДУФБЧМЕОЙЙ Ч ЧЙДЕ РТСНПХЗПМШОПЗП НБУУЙЧБ).

тЙУХОПЛ1. рТЙНЕТ РТЕДУФБЧМЕОЙС уПУФПСОЙС (Nb=6) Й лМАЮБ ЫЙЖТПЧБОЙС (Nk=4)

чИПДОЩЕ ДБООЩЕ ДМС ЫЙЖТБ ( "ПФЛТЩФЩК ФЕЛУФ", ЕУМЙ ЙУРПМШЪХЕФУС ТЕЦЙН ЫЙЖТПЧБОЙС ECB) ПВПЪОБЮБАФУС ЛБЛ ВБКФЩ УПУФПСОЙС Ч РПТСДЛЕ a0,0, a1,0, a3,0, a0,1, a1,1, a3,1 ,a4,1 ... рПУМЕ ЪБЧЕТЫЕОЙС ДЕКУФЧЙС ЫЙЖТБ ЧЩИПДОЩЕ ДБООЩЕ РПМХЮБАФУС ЙЪ ВБКФПЧ УПУФПСОЙС Ч ФПН ЦЕ РПТСДЛЕ.

юЙУМП ГЙЛМПЧ ПВПЪОБЮЕОП ЛБЛ Nr Й ЪБЧЙУЙФ ПФ ЪОБЮЕОЙК Nb Й Nk. пОП РТЙЧЕДЕОП Ч фБВМЙГЕ 1.

фБВМЙГБ 1: юЙУМП ГЙЛМПЧ (Nr) ЛБЛ ЖХОЛГЙС ПФ ДМЙОЩ ЛМАЮБ Й ДМЙОЩ ВМПЛБ.

4.2 гЙЛМПЧПЕ РТЕПВТБЪПЧБОЙЕ гЙЛМПЧПЕ РТЕПВТБЪПЧБОЙЕ УПУФПЙФ ЙЪ ЮЕФЩТЕИ ТБЪМЙЮОЩИ РТЕПВТБЪПЧБОЙК. оБ РУЕЧДП-уЙ ЬФП ЧЩЗМСДЙФ УМЕДХАЭЙН ПВТБЪПН:

Round (State, RoundKey)

{

ByteSub(State); // ЪБНЕОБ ВБКФ

ShiftRow(State); // УДЧЙЗ УФТПЛ

MixColumn(State); // ЪБНЕЫЙЧБОЙЕ УФПМВГПЧ

AddRoundKey(State, RoundKey); // ДПВБЧМЕОЙЕ ГЙЛМПЧПЗП ЛМАЮБ

}

рПУМЕДОЙК ГЙЛМ ЫЙЖТБ ОЕНОПЗП ПФМЙЮБЕФУС. чПФ ЛБЛ ПО ЧЩЗМСДЙФ:

FinalRound(State, RoundKey)

{

ByteSub(State); // ЪБНЕОБ ВБКФ

ShiftRow(State); // УДЧЙЗ УФТПЛ

AddRoundKey(State, RoundKey); // ДПВБЧМЕОЙЕ ГЙЛМПЧПЗП ЛМАЮБ

}

ч РТЙЧЕДЕООПК ЪБРЙУЙ, "ЖХОЛГЙЙ" - Round, ByteSub Й Ф.Д. ЧЩРПМОСАФ УЧПЙ ДЕКУФЧЙС ОБД НБУУЙЧБНЙ, ХЛБЪБФЕМЙ (Ф.Е. State, RoundKey) ОБ ЛПФПТЩЕ ЙН РЕТЕДБАФУС.

лБЛ НПЦОП ЪБНЕФЙФШ, РПУМЕДОЙК ГЙЛМ ПФМЙЮБЕФУС ПФ РТПУФПЗП ГЙЛМБ ФПМШЛП ПФУХФУФЧЙЕН ЪБНЕЫЙЧБОЙС УФПМВГПЧ. лБЦДПЕ ЙЪ РТЙЧЕДЕООЩИ РТЕПВТБЪПЧБОЙК ТБЪПВТБОП ДБМЕЕ.

4.2.1 ъБНЕОБ ВБКФ (ByteSub) рТЕПВТБЪПЧБОЙЕ ByteSub РТЕДУФБЧМСЕФ УПВПК ОЕМЙОЕКОХА ЪБНЕОХ ВБКФ, ЧЩРПМОСЕНХАА ОЕЪБЧЙУЙНП У ЛБЦДЩН ВБКФПН УПУФПСОЙС. фБВМЙГЩ ЪБНЕОЩ (ЙМЙ S-ВМПЛЙ) СЧМСАФУС ЙОЧЕТФЙТХЕНЩНЙ Й РПУФТПЕОЩ ЙЪ ЛПНРПЪЙГЙЙ ДЧХИ РТЕПВТБЪПЧБОЙК:

1. рЕТЧПЕ - РПМХЮЕОЙЕ ПВТБФОПЗП ЬМЕНЕОФБ ПФОПУЙФЕМШОП ХНОПЦЕОЙС Ч РПМЕ GF(28), ПРЙУБООПЗП Ч ТБЪДЕМЕ 2.1. '00' РЕТЕИПДЙФ УБН Ч УЕВС.

2. рТЙНЕОЕОЙЕ БЖЙООПЗП РТЕПВТБЪПЧБОЙС (ОБД GF(2)), ПРТЕДЕМООПЗП ЛБЛ:

y0 = 1 1 1 1 1 0 0 0 x0 + 0 y1 0 1 1 1 1 1 0 0 x1 1 y2 0 0 1 1 1 1 1 0 x2 1 y3 0 0 0 1 1 1 1 1 x3 0 y4 1 0 0 0 1 1 1 1 x4 0 y5 1 1 0 0 0 1 1 1 x5 0 y6 1 1 1 0 0 0 1 1 x6 1 y7 1 1 1 1 0 0 0 1 x7 1 рТЙНЕОЕОЙЕ ПРЙУБООПЗП S-ВМПЛБ ЛП ЧУЕН ВБКФБН УПУФПСОЙС ПВПЪОБЮЕОП ЛБЛ ByteSub(State). тЙУХОПЛ 2 ЙММАУФТЙТХЕФ РТЙНЕОЕОЙЕ РТЕПВТБЪПЧБОЙС ByteSub Л УПУФПСОЙА.

тЙУХОПЛ 2: ByteSub ДЕКУФЧХЕФ ОБ ЛБЦДЩК ВБКФ УПУФПСОЙС.

4.2.2 рТЕПВТБЪПЧБОЙЕ УДЧЙЗБ УФТПЛ (ShiftRow). рПУМЕДОЙЕ 3 УФТПЛЙ УПУФПСОЙС ГЙЛМЙЮЕУЛЙ УДЧЙЗБАФУС ОБ ТБЪМЙЮОПЕ ЮЙУМП ВБКФ. уФТПЛБ 1 УДЧЙЗБЕФУС ОБ у1 ВБКФ, УФТПЛБ 2 - ОБ у2 ВБКФ Й УФТПЛБ 3 - ОБ у3 ВБКФ.

ъОБЮЕОЙС УДЧЙЗПЧ у1, у2 Й у3 ЪБЧЙУСФ ПФ ДМЙОЩ ВМПЛБ Nb. йИ ЧЕМЙЮЙОЩ РТЙЧЕДЕОЩ Ч ФБВМЙГЕ 2.

Nb C1 C2 C3 4 1 2 3 6 1 2 3 8 1 3 4 фБВМЙГБ 2: чЕМЙЮОБ УДЧЙЗБ ДМС ТБЪОПК ДМЙОЩ ВМПЛПЧ.

пРЕТБГЙС УДЧЙЗБ РПУМЕДОЙИ 3 УФТПЛ УПУФПСОЙС ОБ ПРТЕДЕМЕООХА ЧЕМЙЮЙОХ ПВПЪОБЮЕОБ ЛБЛ ShiftRow(State). тЙУХОПЛ 3 РПЛБЪЩЧБЕФ ЧМЙСОЙЕ РТЕПВТБЪПЧБОЙС ОБ УПУФПСОЙЕ.

тЙУХОПЛ 3: ShiftRow ДЕКУФЧХЕФ ОБ УФТПЛЙ УПУФПСОЙС.

4.2.3 рТЕПВТБЪПЧБОЙЕ ЪБНЕЫЙЧБОЙС УФПМВГПЧ (MixColumn). ч ЬФПН РТЕПВТБЪПЧБОЙЙ УФПМВГЩ УПУФПСОЙС ТБУУНБФТЙЧБАФУС ЛБЛ НОПЗПЮМЕОЩ ОБД GF(28) Й ХНОПЦБАФУС РП НПДХМА x4+1 ОБ НОПЗПЮМЕО c(x), ЧЩЗМСДСЭЙК УМЕДХАЭЙН ПВТБЪПН:

c(x)='03' x3  +  '01' x2   +  '01' x  +  '02'

лБЛ ПРЙУБОП Ч ТБЪДЕМЕ 2.2, ЬФП НПЦЕФ ВЩФШ РТЕДУФБЧМЕОП Ч ЧЙДЕ НБФТЙЮОПЗП ХНОПЦЕОЙС. рХУФШ b(x)=c(x)a(x),

b0 = 02 03 01 01 a0 b1 01 02 03 01 a1 b2 01 01 02 03 a2 b3 03 01 01 02 a3 рТЙНЕОЕОЙЕ ЬФПК ПРЕТБГЙЙ ЛП ЧУЕН ЮЕФЩТЕН УФПМВГБН УПУФПСОЙС ПВПЪОБЮЕОП ЛБЛ MixColumn(State). тЙУХОПЛ 4 ДЕНПОУФТЙТХЕФ РТЙНЕОЕОЙЕ MixColumn Л УПУФПСОЙА.

тЙУХОПЛ 4: MixColumn ДЕКУФЧХЕФ ОБ УФПМВГЩ УПУФПСОЙС.

4.2.4 дПВБЧМЕОЙЕ ГЙЛМПЧПЗП ЛМАЮБ

ч ДБООПК ПРЕТБГЙЙ ГЙЛМПЧПК ЛМАЮ ДПВБЧМСЕФУС Л УПУФПСОЙА РПУТЕДУФЧПН РТПУФПЗП EXOR. гЙЛМПЧПК ЛМАЮ ЧЩТБВБФЩЧБЕФУС ЙЪ ЛМАЮБ ЫЙЖТПЧБОЙС РПУТЕДУФЧПН БМЗПТЙФНБ ЧЩТБВПФЛЙ ЛМАЮЕК (key schedule). дМЙОБ ГЙЛМПЧПЗП ЛМАЮБ ТБЧОБ ДМЙОЕ ВМПЛБ Nb.

рТЕПВТБЪПЧБОЙЕ, УПДЕТЦБЭЕЕ ДПВБЧМЕОЙЕ РПУТЕДУФЧПН EXOR ГЙЛМПЧПЗП ЛМАЮБ Л УПУФПСОЙА, ПВПЪОБЮЕОП ЛБЛ AddRoundKey(State, RoundKey). пОП РТПЙММАУФТЙТПЧБООП ОБ ТЙУХОЛЕ 5.

тЙУХОПЛ 5: рТЙ ДПВБЧМЕОЙЙ ЛМАЮБ ГЙЛМПЧПК ЛМАЮ УЛМБДЩЧБЕФУС РПУТЕДУФЧПН EXOR У УПУФПСОЙЕН.

4.3 бМЗПТЙФН ЧЩТБВПФЛЙ ЛМАЮЕК (Key Schedule) гЙЛМПЧЩЕ ЛМАЮЙ РПМХЮБАФУС ЙЪ ЛМАЮБ ЫЙЖТПЧБОЙС РПУТЕДУФЧПН БМЗПТЙФНБ ЧЩТБВПФЛЙ ЛМАЮЕК. пО УПДЕТЦЙФ ДЧБ ЛПНРПОЕОФБ: ТБУЫЙТЕОЙЕ ЛМАЮБ (Key Expansion) Й ЧЩВПТ ГЙЛМПЧПЗП ЛМАЮБ (Round Key Selection). пУОПЧПРПМБЗБАЭЙЕ РТЙОГЙРЩ БМЗПТЙФНБ ЧЩЗМСДСФ УМЕДХАЭЙН ПВТБЪПН:

пВЭЕЕ ЮЙУМП ВЙФ ГЙЛМПЧЩИ ЛМАЮЕК ТБЧОП ДМЙОЕ ВМПЛБ, ХНОПЦЕООПК ОБ ЮЙУМП ГЙЛМПЧ РМАУ 1 (ОБРТЙНЕТ, ДМС ДМЙОЩ ВМПЛБ 128 ВЙФ Й 10 ГЙЛМПЧ ФТЕВХЕФУС 1408 ВЙФ ГЙЛМПЧПЗП ЛМАЮБ).

лМАЮ ЫЙЖТПЧБОЙС ТБУЫЙТСЕФУС Ч тБУЫЙТЕООЩК лМАЮ (Expanded Key).

гЙЛМПЧЩЕ ЛМАЮЙ ВЕТХФУС ЙЪ тБУЫЙТЕООПЗП ЛМАЮБ УМЕДХАЭЙН ПВТБЪПН: РЕТЧЩК ГЙЛМПЧПК ЛМАЮ УПДЕТЦЙФ РЕТЧЩЕ Nb УМПЧ, ЧФПТПК - УМЕДХАЭЙЕ Nb УМПЧ Й Ф.Д.

4.3.1 тБУЫЙТЕОЙЕ ЛМАЮБ (Key Expansion) тБУЫЙТЕООЩК ЛМАЮ РТЕДУФБЧМСЕФ УПВПК МЙОЕКОЩК НБУУЙЧ 4-ЕИ ВБКФПЧЩИ УМПЧ Й ПВПЪОБЮЕО ЛБЛ W[Nb*(Nr+1)]. рЕТЧЩЕ Nk УМПЧ УПДЕТЦБФ ЛМАЮ ЫЙЖТПЧБОЙС. чУЕ ПУФБМШОЩЕ УМПЧБ ПРТЕДЕМСАФУС ТЕЛХТУЙЧОП ЙЪ УМПЧ У НЕОШЫЙНЙ ЙОДЕЛУБНЙ. бМЗПТЙФН ЧЩТБВПФЛЙ ЛМАЮЕК ЪБЧЙУЙФ ПФ ЧЕМЙЮЙОЩ Nk: ОЙЦЕ РТЙЧЕДЕОБ ЧЕТУЙС ДМС Nk ТБЧОПЗП ЙМЙ НЕОШЫЕЗП 6 Й ЧЕТУЙС ДМС Nk ВПМШЫЕЗП 6.

дМС Nk<6 ЙМЙ Nk=6 НЩ ЙНЕЕН:

KeyExpansion(CipherKey,W)

{

for (i = 0;  i < Nk;  i++) W[i] = CipherKey[i];

for (j = Nk;   j < Nb*(Nk+1);   j+=Nk)

    {

    W[j] = W[j-Nk] ^ SubByte( Rotl( W[j-1] ) ) ^ Rcon[j/Nk];

    for (i = 1;   i < Nk   &&  i+j < Nb*(Nr+1);   i++)

        W[i+j] = W[i+j-Nk] ^ W[i+j-1];

    }

}

лБЛ НПЦОП ЪБНЕФЙФШ, РЕТЧЩЕ Nk УМПЧ ЪБРПМОСАФУС ЛМАЮПН ЫЙЖТПЧБОЙС. лБЦДПЕ РПУМЕДХАЭЕЕ УМПЧП W[i] РПМХЮБЕФУС РПУТЕДУФЧПН EXOR РТЕДЩДХЭЕЗП УМПЧБ W[i-1] Й УМПЧБ ОБ Nk РПЪЙГЙК ТБОЕЕ W[i-Nk]. дМС УМПЧ, РПЪЙГЙС ЛПФПТЩИ ЛТБФОБ Nk, РЕТЕД EXOR РТЙНЕОСЕФУС РТЕПВТБЪПЧБОЙЕ Л W[i-1], Б ЪБФЕН ЕЭЕ РТЙВБЧМСЕФУС ГЙЛМПЧБС ЛПОУФБОФБ. рТЕПВТБЪПЧБОЙЕ УПДЕТЦЙФ ГЙЛМЙЮЕУЛЙК УДЧЙЗ ВБКФПЧ Ч УМПЧЕ, ПВПЪОБЮЕООЩК ЛБЛ Rotl, ЪБФЕН УМЕДХЕФ SubByte - РТЙНЕОЕОЙЕ ЪБНЕОЩ ВБКФ.

дМС Nk>6 НЩ ЙНЕЕН:

KeyExpansion(CipherKey,W)

{

for (i=0; i<Nk; i++) W[i]=CipherKey[i];

for (j=Nk; j<Nb*(Nk+1); j+=Nk)

    {

    W[j] = W[j-Nk] ^ SubByte(Rotl(W[j-1])) ^ Rcon[j/Nk];

    for (i=1; i<4; i++)   W[i+j] = W[i+j-Nk] ^ W[i+j-1];

    W[j+4] = W[j+4-Nk] ^ SubByte(W[j+3]);

    for (i=5; i<Nk; i++) W[i+j] = W[i+j-Nk] ^ W[i+j-1];

    }

}

пФМЙЮЙЕ ДМС УИЕНЩ РТЙ Nk>6 УПУФПЙФ Ч РТЙНЕОЕОЙЙ SubByte ДМС ЛБЦДПЗП 4-ЗП ВБКФБ ЙЪ Nk.

гЙЛМПЧБС ЛПОУФБОФБ ОЕЪБЧЙУЙФ ПФ Nk Й ПРТЕДЕМСЕФУС УМЕДХАЭЙН ПВТБЪПН:

Rcon[i] = ( RC[i], '00' , '00' , '00' ), ЗДЕ

RC[0]='01'

RC[i]=xtime(Rcon[i-1])

4.3.2 чЩВПТ ГЙЛМПЧПЗП ЛМАЮБ

i-ЩК ГЙЛМПЧПК ЛМАЮ РПМХЮБЕФУС ЙЪ УМПЧ НБУУЙЧБ ГЙЛМПЧПЗП ЛМАЮБ ПФ W[Nb*i] Й ДПW[Nb(i+1)]. ьФП РПЛБЪБОП ОБ ТЙУХОЛЕ 6.

тЙУХОПЛ 6: тБУЫЙТЕОЙЕ ЛМАЮБ Й ЧЩВПТ ГЙЛМПЧПЗП ЛМАЮБ ДМС Nb=6 Й Nk=4.

ъБНЕЮБОЙЕ: бМЗПТЙФН ЧЩТБВПФЛЙ ЛМАЮЕК НПЦОП ПУХЭЕУФЧМСФШ Й ВЕЪ ЙУРПМШЪПЧБОЙС НБУУЙЧБ W[Nb*(Nr+1)]. дМС ТЕБМЙЪБГЙК, Ч ЛПФПТЩИ УХЭЕУФЧЕООП ФТЕВПЧБОЙЕ Л ЪБОЙНБЕНПК РБНСФЙ, ГЙЛМПЧЩЕ ЛМАЮЙ НПЗХФ ЧЩЮЙУМСФШУС ОБ МЕФХ РПУТЕДУФЧПН ЙУРПМШЪПЧБОЙС ВХЖЕТБ ЙЪ Nk УМПЧ.

4.4 ыЙЖТ ыЙЖТ Rijndael УПУФПЙФ ЙЪ:

оБЮБМШОПЗП ДПВБЧМЕОЙС ГЙЛМПЧПЗП ЛМАЮБ;

Nr-1 ГЙЛМПЧ;

ЪБЛМАЮЙФЕМШОПЗП ГЙЛМБ.

оБ РУЕЧДП-уЙ ЬФП ЧЩЗМСДЙФ УМЕДХАЭЙН ПВТБЪПН:

Rijndael (State, CipherKey)

{

KeyExpansion(CipherKey, ExpandedKey); // тБУЫЙТЕОЙЕ ЛМАЮБ

AddRoundKey(State, ExpandedKey);  // дПВБЧМЕОЙЕ ГЙЛМПЧПЗП ЛМАЮБ

For ( i=1 ; i<Nr ; i++) Round(State,ExpandedKey+Nb*i); // ГЙЛМЩ

FinalRound(State, ExpandedKey+Nb*Nr); // ЪБЛМАЮЙФЕМШОЩК ГЙЛМ

}

еУМЙ РТЕДЧБТЙФЕМШОП ЧЩРПМОЕОБ РТПГЕДХТБ ТБУЫЙТЕОЙС ЛМАЮБ, ФП Rijndael ВХДЕФ ЧЩЗМСДЕФШ УМЕДХАЭЙН ПВТБЪПН:

Rijndael (State, CipherKey)

{

AddRoundKey(State, ExpandedKey);

For ( i=1 ; i<Nr ; i++) Round(State,ExpandedKey+Nb*i);

FinalRound(State, ExpandedKey+Nb*Nr);

}

ъБНЕЮБОЙЕ: тБУЫЙТЕООЩК ЛМАЮ ДПМЦЕО ЧУЕЗДБ РПМХЮБФШУС ЙЪ ЛМАЮБ ЫЙЖТПЧБОЙС Й ОЙЛПЗДБ ОЕ ХЛБЪЩЧБЕФУС ОБРТСНХА. оЕФ ОЙЛБЛЙИ ПЗТБОЙЮЕОЙК ОБ ЧЩВПТ ЛМАЮБ ЫЙЖТПЧБОЙС.

Соседние файлы в папке Rijn_rus