Cryptographic conversion algorithm ayon sa GOST 28147 89. Domestic data encryption standard. Mga pangunahing kinakailangan sa impormasyon

Ang kilalang terminong "pagganap ng processor" ay isang layunin, kinakalkula na parameter na sinusukat sa mga flop. Gayunpaman, karamihan sa mga tao ay sinusukat ito sa gigahertz, walang muwang na paniniwalang pareho sila. Walang nakakaalam ng terminong "pagganap ng code", at ipapaliwanag ko kaagad kung bakit.

Ang dahilan ay kamakailan lamang ay naisip ko ito at hindi pa sinasabi sa sinuman ang tungkol dito. Gayunpaman, ang pagganap ng code, tulad ng pagganap ng processor, ay may mga layuning katangian na maaaring masukat. Ang artikulong ito ay partikular na tungkol sa pagganap ng code na pinaandar ng core ng processor.

Paano sinusukat ang pagganap ng code? Dahil ako ang unang nagsalita tungkol dito, sa pamamagitan ng karapatan ng nakatuklas ay susukatin ko ito sa mga yunit ng RTT;).

Ngayon seryoso. Sa modernong mga processor, ang mga pangunahing pagbabago ay ang mga operasyon sa 32-bit na mga numero, lahat ng iba pa ay kakaiba. Samakatuwid, isasaalang-alang namin ang pangunahing bagay - mga operasyon na may 32-bit na mga numero. Ilang 32-bit na operasyon sa tingin mo ang maaaring gumanap nang sabay-sabay ng isang modernong processor core?

Sasagot ang mag-aaral - isa, iisipin ng kanyang guro at sasabihin na mayroong apat, ang propesyonal - na may labindalawang operasyon lamang sa ngayon.

Kaya, ang isang code ng programa na naglo-load ng lahat ng mga yunit ng pagpapatupad ng processor nang sabay-sabay sa buong oras ng pagpapatupad ng code ay magkakaroon ng pagganap na 12 RTT. maximum! Upang maging matapat, hindi pa ako nagsulat ng ganoong code bago, ngunit sa artikulong ito susubukan kong gumawa ng isang pagsisikap.

Patunayan ko na posible ang code na may sabay-sabay na pagpapatupad ng labindalawang 32-bit na operasyon

Ang program code na gumagamit ng isang actuator sa core ng processor ay natural na magkakaroon ng performance na 1 RTT. Maaaring ipagmalaki ng mga program na nabuo ng mga high-level language compiler at virtual machine interpreter ang naturang pagganap ng code. Hindi na kailangang ipagpalagay na ang tagapagpahiwatig ng pag-load ng processor, na makikita sa OS task manager, ay maaaring magsilbi bilang isang layunin na pamantayan para sa kahusayan ng code. Ang processor core load ay maaaring 100%, ngunit ang program code ay gagamit ng isang execution unit sa loob nito (performance 1 RTT). Sa kasong ito, sa 100% na pag-load, ang core ng processor ay gagana sa 1/12 ng pinakamataas na pagganap nito. Sa madaling salita, kapag ipinakita ng Windows Task Manager ang maximum na pag-load ng processor, ang aktwal na pagganap nito ay maaaring mag-iba mula 1 hanggang 12 RTT. Kung makakita ka ng 100% na pag-load sa anumang core ng processor sa window ng pagganap, mali na ipagpalagay na gumagana ang lahat ng actuator sa core na ito, hindi talaga!

Ang tanging pamantayan para sa hindi direktang pagtatasa ng pagpapatakbo ng isang core ng processor sa pinakamataas na pagganap ay maaaring ang pagkonsumo ng kuryente nito at, bilang resulta, ang ingay ng palamigan. Ngayon, kung maingay ang palamigan, kung gayon, oo, ang pagkarga ay naging maximum. Gayunpaman, oras na upang tapusin ang mga pangkalahatang konsepto at magpatuloy sa malupit na pagsasanay.

Tradisyonal na pagpapatupad ng GOST 28147-89

Hindi ako propesyonal sa larangan ng seguridad ng impormasyon, ngunit pamilyar pa rin ako sa paksa ng pag-encrypt. Na-inspire akong pag-aralan ang simetriko stream encryption partikular sa pamamagitan ng pakikipag-usap sa isang propesyonal na cryptographer na lubos kong iginagalang. At, nang makuha ang paksang ito, sinubukan kong gawin ito nang maayos, at hindi lamang maayos, ngunit mabilis din, na gumaganap ng maximum na bilang ng mga operasyon sa bawat yunit ng oras. Sa madaling salita, nahaharap ako sa gawain ng pagsulat ng code ng programa na may pinakamataas na halaga ng RTT.

Ang pagbabagong-anyo ng cryptographic alinsunod sa GOST 28147-89 ay ginagamit para sa pag-encrypt ng stream ng impormasyon sa mga channel ng komunikasyon at sa mga disk drive.

Sa kasalukuyan, ang pagpapatupad ng software ng GOST na ito sa RON ng gitnang processor ay malawakang ginagamit. Sa mga kilalang paraan ng pagpapatupad ng GOST, ang lahat ng lihim na impormasyon (mga susi sa pag-encrypt, mga kapalit na bloke) ay matatagpuan sa RAM. Binabawasan nito ang pagiging maaasahan ng pag-encrypt, dahil ang pagkakaroon ng RAM dump ay maaaring ganap na magbunyag ng lahat ng mga lihim na elemento ng crypto-transformation. Bilang karagdagan, ang pamamaraan ay may mga limitasyon sa pagganap dahil sa lokasyon ng pangunahing mga object ng conversion ng crypto sa OP at hindi kumpletong pag-load ng mga executive unit ng ALU. Ang mga modernong processor, na nagpapatupad ng pamamaraan ng crypto gamit ang isang kilalang pamamaraan, ay maaaring magbigay ng bilis ng pag-encrypt na 40–60 megabytes bawat segundo. At kung talagang mauunawaan natin ito hanggang sa wakas, ang dahilan ng mababang pagganap at mahinang seguridad ng conversion ng crypto ay ang pagpapatupad ng software ng substitution block. Para sa paglalarawan nito sa GOST, tingnan ang Fig. 1.

Ayon sa sugnay 1.2 ng GOST, ang bloke na ito ay nagpapatupad ng mga permutasyon ng tetrad (apat na bits) sa isang 32-bit na salita, ngunit ang arkitektura ng processor ng x86/64 at ang sistema ng pagtuturo nito ay hindi kaya ng epektibong pagmamanipula ng mga tetrad.

Para sa pagpapatupad ng software ng substitution block, ginagamit ang mga espesyal na talahanayan sa RAM, na inihanda sa yugto ng pagsisimula ng cryptofunction. Pinagsasama ng mga talahanayan na ito ang mga kapalit na node ng mga katabing tetrad sa 8 × 8-bit na byte na mga talahanayan, kaya naglalagay ng apat na 256-byte na talahanayan sa RAM.

Sa mas advanced na mga pagpapatupad, ang mga talahanayan na ito ay 1024 byte ang laki (256 na salita ng apat na byte). Ginawa ito upang maipatupad sa mga talahanayan ang isang karagdagang cyclic shift ng 11 na posisyon ng 32-bit na salita na nakuha bilang isang resulta ng pagpapalit (ang susunod na operasyon ng conversion algorithm ayon sa GOST). Ang isang halimbawa ng pagpapatupad ng GOST gamit ang paraang ito ay ipinapakita sa Appendix 1 (sa disk).

Ang impormasyon ng substitution block ay isang lihim na bahagi ng cryptofunction (tulad ng formulated sa GOST, tingnan ang Fig. 2).

Ang paglalagay ng mga talahanayan na ito kasama ang mga susi ng block ng pagpapalit sa OP ay sumasalungat sa mga kinakailangan ng GOST (sugnay 1.7), dahil ang lihim na impormasyon ay magagamit sa mga programa ng third-party na tumatakbo sa pag-install ng computing. Ang FSB, na nagpapatunay din sa mga pagpapatupad ng software ng pag-encrypt ayon sa GOST, ay tumitingin sa paglabag na ito, upang ilagay ito nang mahinahon, nang mapagpakumbaba. Kung, upang mailagay ang mga susi sa OP, ang FSB ay nangangailangan pa rin ng "dahon ng igos" - pag-mask sa mga susi gamit ang operasyon ng XOR, kung gayon walang kinakailangan para sa kapalit na mga bloke sa OP;

Sa madaling salita, pinapayagan ng FSB na maipasa ang mga naturang pagpapatupad ng software ng cryptoprocedure, sa kabila ng malinaw na pagbaba sa seguridad ng naturang solusyon at isang direktang paglabag sa sarili nitong mga kinakailangan ayon sa GOST (sugnay 1.7). At ito sa kabila ng mga kilalang paraan ng pagsira ng mga cipher sa pamamagitan ng pagkuha ng memory dump...

Babalik kami sa isyu ng pag-iimbak ng mga susi at kapalit na mga bloke sa mga panloob na rehistro ng processor nang kaunti mamaya (mayroong maganda at mabilis na solusyon), ngunit sa ngayon ay mag-iimbak lamang kami ng mga susi sa pag-encrypt sa mga rehistro ng MMX, ito ay mas maaasahan.

Ngunit sapat na ang mga lyrics, kung ano ang mahalaga para sa paksang isinasaalang-alang ay ang program code na ito ay may pagganap na 1 RTT. Ngayon magsulat tayo ng code na may pagganap ng 2 RTT.

Multithreaded na pagpapatupad ng GOST 28147-89

Ang tanging paraan upang mapabilis ang mga pamamaraan ng crypto sa kilalang algorithm ay ang pagpapakilala ng multithreading. Ang punto ng pagbabagong ito sa pagpapatupad ng algorithm ay upang kalkulahin ang ilang mga bloke ng data nang magkatulad.

Karamihan sa mga programmer ay nangangahulugan ng parallel processing na eksklusibo ang gawain ng ilang mga core ng processor, na naka-synchronize sa pamamagitan ng mga interrupt at semaphore sa memorya.

Gayunpaman, may isa pang opsyon para sa parallel na pagproseso ng data sa isang core ng processor. Hayaan akong ipaliwanag ang di-halatang ideyang ito.

Kasama sa mga modernong processor ang hindi bababa sa dalawa, at kahit tatlo hanggang anim na arithmetic-logical unit. Ang mga ALU na ito (mga FPU, address ng arithmetic unit, at iba pa) ay maaaring gumana nang hiwalay sa isa't isa ang tanging kundisyon para sa kanilang parallel na operasyon ay ang mga software object na kanilang pinapatakbo ay magkahiwalay. Sa madaling salita, sa mga tagubilin na sabay-sabay na nagpapatupad ng isang ALU, ang mga address ng memorya at mga numero ng rehistro ay dapat na iba. O, walang mga pagsusulat ang dapat gawin sa mga nakabahaging rehistro at mga address ng memorya na na-access ng iba't ibang mga yunit ng pagpapatupad ng processor.

Ang workload ng lahat ng ALU ay kinokontrol ng isang espesyal na yunit ng hardware sa loob ng processor core - ang scheduler, na nag-scan ng executable code forward, sa lalim na 32–64 bytes. Kung natuklasan ng scheduler ang mga tagubilin na maaaring patakbuhin sa ALU nang walang mga salungatan, pagkatapos ay sabay-sabay nitong pinapatakbo ang mga ito sa iba't ibang execution device. Sa kasong ito, ang counter ng executed commands ay tumuturo sa executing command (mayroong ilan sa mga ito sa naturang scheme), pagkatapos nito ang lahat ng command ay naisakatuparan na.

Karamihan sa mga sequence ng program na awtomatikong nabuo (ng mga compiler) ay hindi maaaring mag-load ng lahat ng ALU at FPU na matatagpuan sa core ng processor. Sa kasong ito, ang processor ng hardware ay idle, na makabuluhang binabawasan ang resultang pagganap nito. Nauunawaan ito ng mga developer ng processor at nagpapakilala ng mga mode para pataasin ang core frequency kapag hindi pa ganap na ginagamit ang hardware. Ito rin ang idinisenyo ng mga hypertrading system, at gagamitin ko ang system na ito para “pindutin” ang code nang maximum sa hinaharap.

Ang mga compiler, kahit na ang mga pinaka-optimized, at higit pa sa mga virtual machine engine, ay hindi makakabuo ng na-optimize na code sa mga tuntunin ng pagganap. Tanging isang programmer na may kaalaman sa engineering ang maaaring sumulat ng naturang na-optimize na code, at ang tool para sa pagsulat nito ay eksklusibong assembler.

Ang isang tipikal na paglalarawan ng posibilidad ng pagpapatupad ng ilang mga independiyenteng mga thread ng programa sa isang core ng processor ay ang pagpapatupad ng GOST, na isinagawa sa dalawang mga thread sa isang solong core ng processor. Ang ideya ng code ay simple: mayroong dalawang bloke ng data upang i-encrypt/decrypt, ngunit isang processor core na magsasagawa ng conversion. Posibleng isagawa ang conversion sa dalawang data block na ito nang sunud-sunod, at ginagawa ito hanggang ngayon. Sa kasong ito, ang oras na kinakailangan upang makumpleto ang mga pagbabago ay doble.

Ngunit magagawa mo ito nang iba: mga kahaliling utos na nauugnay sa pagproseso ng iba't ibang mga bloke ng data. Ang mga pagpipiliang ito ay ipinakita nang grapiko sa Fig. 3.


Sa figure, ang nangungunang halimbawa ay nagpapakita ng karaniwang pagkakasunud-sunod ng pagproseso ng dalawang independiyenteng mga bloke ng data. Ang unang bloke ay unang naproseso, pagkatapos ay ang processor ay nagpapatuloy upang iproseso ang pangalawang bloke. Naturally, ang nagreresultang oras ay katumbas ng dalawang beses sa oras na kinakailangan upang maproseso ang isang bloke, at ang mga actuator ng core ng processor ay hindi ganap na na-load.

Ang sumusunod ay isang halimbawa ng interleaving commands mula sa iba't ibang processing thread. Sa kasong ito, ang mga utos na nauugnay sa iba't ibang mga bloke ng data ay pinagsama-sama. Pinipili ng scheduler ang mga tagubilin na independyente sa isa't isa at ipinapadala ang mga ito para sa pagpapatupad sa ALU1 at ALU2. Ang pagpapangkat ng mga command ng una at pangalawang thread sa mga ALU na ito ay awtomatikong isinasagawa, dahil ang scheduler operating algorithm ay may kasamang pagpapangkat ng mga command na naka-link sa karaniwang data sa parehong executive device.

Upang gumana ang naturang program code nang walang ALU downtime, kinakailangan na ang bawat thread ng programa ay gumana sa sarili nitong hanay ng mga rehistro. Ang cache sa scheme na ito ay nagiging bottleneck (mayroon lamang itong dalawang data output port), kaya iniimbak namin ang mga key sa mga MMX register. Dahil sa kasong ito ang kapalit (at paglilipat) ng mga node sa memorya ay binabasa lamang, maaari silang maging karaniwan sa parehong mga thread ng programa.

Ito, siyempre, ay isang napaka-pinasimpleng paliwanag ng prinsipyo ng parallel na pagpapatupad ng mga thread ng programa sa isang solong core sa katotohanan, ang lahat ay mas kumplikado. Sa pagsasagawa, kailangan mong isaalang-alang ang arkitektura ng pipeline ng mga actuator, mga paghihigpit sa sabay-sabay na pag-access sa cache at block ng rehistro ng RON, ang pagkakaroon ng mga address arithmetic node, switch at marami pa... Kaya ito ay isang paksa para sa mga propesyonal, na mabibilang sa daliri... ng isang kamay.

Ang parallel encryption method ay epektibong ipinatupad lamang para sa 64-bit processor operating mode, dahil sa mode na ito mayroong sapat na bilang ng RON (hangga't sa 16 na piraso!). Ang isang halimbawa ng pagpapatupad ng GOST gamit ang paraang ito ay ipinapakita sa Appendix 2 (sa disk).

Malinaw na ang pagpapatupad ng GOST na ito ay may pagganap ng code ng 2 RTT code. Ngayon tingnan natin kung paano ito nakakaapekto sa oras ng pagpapatupad.

Ang cycle ng encryption para sa isang thread (Appendix 1) ay 352 clock cycle, at sa panahong ito 8 bytes ng data ang kinakalkula para sa isang two-threaded na pagpapatupad ng GOST (Appendix 2) 416 na mga cycle ng processor ang kailangan, ngunit 16 bytes ang kinakalkula. Kaya, ang nagreresultang bilis ng conversion ay tumataas mula 80 hanggang 144 megabytes para sa isang 3.6 GHz na processor.

Lumilitaw ang isang kawili-wiling larawan: ang code ay naglalaman ng eksaktong dalawang beses ng maraming mga utos, at nagpapatupad lamang ng 15% na mas mahaba, ngunit sa palagay ko ay naunawaan na ng mga mambabasa ang dahilan ng hindi pangkaraniwang bagay na ito...

Theoretically, ang code mula sa pangalawang halimbawa ay dapat na isagawa sa parehong bilang ng mga cycle tulad ng code mula sa unang halimbawa, ngunit ang scheduler node ay binuo ng mga inhinyero ng Intel, ngunit sila ay tao rin, at lahat tayo ay malayo sa perpekto. Kaya posible na suriin ang pagiging epektibo ng kanilang paglikha. Ang code na ito ay gagana rin sa isang AMD processor, at maaari mong ihambing ang kanilang mga resulta.

Kung sinuman ang hindi kukuha ng aking salita para dito, kung gayon para sa mga hindi naniniwala, ang mga programa ng pagsubok na may mga counter ng orasan ay kasama sa disk. Ang mga programa ay nasa source code, natural sa assembler, kaya may pagkakataon na suriin ang aking mga salita, at sa parehong oras, tingnan ang ilan sa mga trick ng propesyonal na coding.

Paggamit ng mga rehistro ng SSE at mga utos ng AVX ng mga modernong processor upang ipatupad ang GOST 28147-89

Kasama sa mga modernong processor ng arkitektura ng x86/64 ang isang set ng mga SSE register na may sukat na 16 bytes at mga espesyal na FPU (hindi bababa sa dalawa) upang magsagawa ng iba't ibang mga operasyon sa mga register na ito. Posibleng ipatupad ang GOST sa kagamitang ito, at sa kasong ito, ang mga kapalit na node ay maaaring ilagay hindi sa anyo ng mga talahanayan sa RAM, ngunit direkta sa mga nakalaang SSE registers.

Ang isang rehistro ng SSE ay maaaring tumanggap ng dalawang talahanayan ng 16 na hanay nang sabay-sabay. Kaya, apat na rehistro ng SSE ang ganap na makakatanggap ng lahat ng mga kapalit na talahanayan. Ang tanging kundisyon para sa naturang placement ay ang interleaving requirement, ayon sa kung aling mga tetrad ng parehong byte ang dapat ilagay sa iba't ibang SSE registers. Bilang karagdagan, ipinapayong ilagay ang mababa at matataas na tetrad ng mga input byte, ayon sa pagkakabanggit, sa mababa at mataas na tetrad ng mga byte ng SSE registers.

Natutukoy ang mga kinakailangang ito sa pamamagitan ng pag-optimize para sa umiiral na hanay ng mga AVX command. Kaya, ang bawat byte ng SSE register ay maglalaman ng dalawang tetrad na tumutugma sa iba't ibang byte ng input register ng substitution block, habang ang posisyon ng byte sa SSE register ay natatanging tumutugma sa index sa substitution block substitution table.

Ang isang diagram ng isa sa mga posibleng paglalagay ng mga kapalit na node sa mga rehistro ng SSE ay ipinapakita sa Fig. 4.


Ang paglalagay ng lihim na impormasyon ng mga kapalit na node sa mga rehistro ng SSE ay nagpapataas ng seguridad ng pamamaraan ng crypto, ngunit ang kumpletong paghihiwalay ng lihim na impormasyong ito ay posible kung ang mga sumusunod na kundisyon ay natutugunan:

  • Ang processor core ay inililipat sa hypervisor host mode, at ang interrupt block (APIC) ay puwersahang hindi pinagana dito. Sa kasong ito, ang core ng processor ay ganap na nakahiwalay sa OS at mga application na tumatakbo sa pag-install ng computing.
  • Ang mga rehistro ng SSE ay na-load at ang computing core ay nakahiwalay bago magsimula ang OS;
  • Ang mga programa para sa mga cryptoprocedure alinsunod sa GOST ay matatagpuan sa isang hindi nababagong lugar ng memorya ng pag-install ng computing (alinman sa BIOS o sa flash memory ng MDZ).

Ang pagsunod sa mga kinakailangang ito ay magtitiyak ng kumpletong paghihiwalay at kawalan ng pagbabago ng program code ng cryptoprocedures at ang lihim na impormasyong ginagamit sa mga ito.

Para sa mahusay na sampling ng tetrad SSE registers, ang multi-input byte switch na kasama sa mga FPU block ay ginagamit. Ang mga switch na ito ay nagbibigay-daan sa mga paglipat mula sa anumang source byte patungo sa anumang destination byte, gamit ang mga indeks na matatagpuan sa isang espesyal na SSE index register. Bukod dito, ang paglipat ay isinasagawa nang magkatulad para sa lahat ng 16 na byte ng rehistro ng tatanggap ng SSE.

Ang pagkakaroon ng mga substitution storage node sa SSE registers at isang multi-input switch sa FPU blocks, posibleng ayusin ang sumusunod na pagbabago sa substitution block (Fig. 5).

Sa scheme na ito, ang input register sa bawat tetrad ay tumutukoy sa address para sa kaukulang switch, na nagpapadala ng impormasyon mula sa mga drive ng mga kapalit na node sa output register sa pamamagitan ng data bus. Ang scheme na ito ay maaaring ayusin sa tatlong paraan:

  • Gumawa ng naaangkop na disenyo ng chip, ngunit ito ay hindi kapani-paniwala para sa amin.
  • Ang pag-reprogram ng microcode at paglikha ng iyong sariling utos ng processor upang ipatupad ang function na ito sa mga umiiral na processor ay hindi na isang pantasya, ngunit, sa kasamaang-palad, ito ay hindi makatotohanan sa kasalukuyang mga kondisyon.
  • Sumulat ng isang programa gamit ang mga opisyal na utos ng AVX. Maaaring hindi masyadong epektibo ang opsyon, ngunit maaari itong ipatupad "dito at ngayon." Kaya iyon ang susunod nating gagawin.

Ang pagpapatakbo ng mga switch ay kinokontrol ng isang espesyal na three-address command na AVX VPSHUFB. Ang unang operand nito ay ang tagatanggap ng impormasyon mula sa mga switch, ang pangalawa ay ang pinagmulan kung saan nakakonekta ang mga input ng switch. Ang ikatlong operand ay isang control register para sa mga switch, ang bawat byte ay nauugnay sa isang kaukulang switch; ang halaga sa loob nito ay tumutukoy sa bilang ng direksyon kung saan binabasa ng switch ang impormasyon. Para sa paglalarawan ng utos na ito mula sa opisyal na dokumentasyon ng Intel, tingnan ang Fig. 5. Sa Fig. Ipinapakita ng Figure 6 ang isang diagram kung paano gumagana ang utos na ito - kalahati lamang ng mga rehistro ng SSE ang ipinapakita, para sa ikalawang kalahati ang lahat ay magkatulad.


Ang switch ay gumagamit lamang ng pinakamababang apat na bits upang matukoy ang direksyon ng commutation, ang huling bit sa bawat byte ay ginagamit upang pilitin ang katumbas na receiver byte sa zero, ngunit ang switch function na ito ay hindi pa in demand sa aming kaso.

Ang isang programa para sa pag-sample ng mga tetrad sa pamamagitan ng mga switch ng FPU ay isinulat, ngunit hindi ko ito inilagay sa application - ito ay masyadong nakakalungkot. Ang pagkakaroon ng 128-bit na rehistro at paggamit lamang ng 32 bits dito ay hindi propesyonal.

Tulad ng sinasabi nila, "Ang aming finish line ay ang abot-tanaw," kaya pisilin ito, pisilin ito ... pipindutin namin ito at ilagay ito sa mga bag!

Ito ay hindi isang laro sa mga salita, ngunit isang malupit na katotohanan ng FPU - Ang mga rehistro ng SSE ay maaaring hatiin sa pantay na mga bahagi at ang parehong mga pagbabago ay maaaring gawin sa mga bahaging ito sa isang utos. Upang maunawaan ito ng processor, mayroong isang magic letter na "P" - isang packet na inilalagay bago ang command mnemonic, at hindi gaanong mahiwagang mga titik na "Q", "D", "W", "B", na ay inilalagay sa dulo at ideklara Anong mga bahagi ang nahahati sa mga rehistro ng SSE sa utos na ito?

Interesado kami sa batch mode na may SSE register na nahahati sa apat na 32-bit blocks; alinsunod dito, ang lahat ng mga utos ay lagyan ng prefix na "P" at sa dulo ay may simbolo na "D". Ginagawa nitong posible na iproseso ang apat na 32-bit na bloke na kahanay sa isang utos ng processor, iyon ay, kalkulahin ang apat na bloke ng data nang magkatulad.

Ang programa na nagpapatupad ng paraang ito ay makukuha sa Appendix 3, kasama ang lahat ng mga paliwanag doon.

Gayunpaman, pindutin nang labis! Ang mga modernong processor ay may hindi bababa sa dalawang FPU, at dalawang independiyenteng mga thread ng pagtuturo ay maaaring gamitin upang ganap na mai-load ang mga ito. Kung tama kang magpapalit ng mga command mula sa mga independiyenteng thread, maaari mong i-load nang buo ang parehong FPU unit sa trabaho at makakuha ng walong parallel na naprosesong stream ng data nang sabay-sabay. Ang nasabing programa ay isinulat, at maaari itong matingnan sa Appendix 4, ngunit kailangan mong panoorin itong mabuti - maaari kang mabaliw. Ito ang tinatawag na “the code is not for everyone...”.

Isyu sa presyo

Ang paggamit ng mga rehistro ng SSE upang mag-imbak ng mga kapalit na node ay naiintindihan - nagbibigay ito ng ilang garantiya ng paghihiwalay ng lihim na impormasyon, ngunit ang kahulugan ng pagkalkula ng cryptofunction mismo sa FPU ay hindi halata. Samakatuwid, ang oras ng pagpapatupad ng mga karaniwang pamamaraan ay sinusukat gamit ang direktang paraan ng kapalit alinsunod sa GOST para sa apat at walong mga thread.

Para sa apat na mga thread, nakuha ang isang bilis ng pagpapatupad ng 472 cycle ng processor. Kaya, para sa isang processor na may dalas na 3.6 GHz, ang isang thread ay kinakalkula sa bilis na 59 megabytes bawat segundo, at apat na mga thread, ayon sa pagkakabanggit, sa bilis na 236 megabytes bawat segundo.

Para sa walong mga thread, nakuha ang isang bilis ng pagpapatupad ng 580 na mga cycle ng processor. Kaya, para sa isang 3.6 GHz processor, ang isang thread ay binibilang sa 49 megabytes bawat segundo, at walong mga thread sa 392 megabytes bawat segundo.

Tulad ng nakikita ng mambabasa, ang code sa halimbawa #3 ay may pagganap na 4 RTT, at ang code sa halimbawa #4 ay may pagganap na 8 RTT. Sa mga halimbawang ito sa mga rehistro ng SSE, ang mga pattern ay kapareho ng kapag gumagamit ng RON, tanging ang scheduler ang nagbawas ng kahusayan nito. Kasalukuyan itong nagbibigay ng 20% ​​na pagtaas sa tagal habang dinodoble ang haba ng code.

Bukod dito, nakuha ang mga resultang ito gamit ang mga unibersal na AVX na utos na magagamit sa parehong mga processor ng Intel at AMD. Kung nag-optimize ka para sa isang AMD processor, ang resulta ay magiging mas mahusay. Ito ay salungat sa uso, ngunit gayunpaman ito ay totoo, at narito kung bakit: Ang mga processor ng AMD ay may karagdagang hanay ng mga tagubilin, ang tinatawag na extension ng XOP, at sa karagdagang hanay ng mga tagubilin na ito ay mayroong mga makabuluhang pinasimple ang pagpapatupad ng algorithm ng GOST.

Ito ay tumutukoy sa mga utos para sa lohikal na burst byte shift at burst cyclic shift ng double words. Sa mga halimbawang ibinigay sa Appendice 3 at 4, ang mga pagkakasunud-sunod ng mga unibersal na utos ay ginagamit na nagpapatupad ng kinakailangang pagbabago: sa unang kaso, isang "dagdag" na utos, at sa kabilang kaso, apat na dagdag na utos nang sabay-sabay. Kaya may mga reserbang pag-optimize, at marami.

Pagdating sa karagdagang pag-optimize, ito ay nagkakahalaga ng pag-alala sa pagkakaroon ng 256-bit registers (YMM registers), gamit kung saan maaari mong theoretically doble ang bilis ng mga kalkulasyon. Ngunit sa ngayon ito ay isang pag-asa lamang sa ngayon, ang mga processor ay napakabagal kapag nagpapatupad ng 256-bit na mga tagubilin (ang mga FPU ay may lapad ng landas na 128 bits). Ipinakita ng mga eksperimento na sa mga modernong processor, ang pagbibilang ng 16 na thread sa mga rehistro ng YMM ay hindi nagbibigay ng anumang benepisyo. Ngunit ito ay para lamang sa ngayon; sa mga bagong modelo ng processor, ang pagganap ng 256-bit na mga tagubilin ay walang alinlangan na tataas, at pagkatapos ay ang paggamit ng 16 na parallel na mga thread ay magiging maipapayo at hahantong sa isang mas malaking pagtaas sa bilis ng pamamaraan ng crypto .

Sa teorya, maaari kang umasa sa bilis na 600–700 megabytes bawat segundo kung ang processor ay may dalawang FPU na may gumaganang lapad ng landas na 256 bit bawat isa. Sa kasong ito, maaari nating pag-usapan ang pagsusulat ng code na may kahusayan na 16 RTT, at hindi ito pantasya, ngunit sa malapit na hinaharap.

Hinalo

Muli ang tanong ng bilang ng mga rehistro ay lumitaw; Ngunit ang hypertrading mode ay makakatulong sa amin. Ang processor core ay may pangalawang set ng mga register na available sa logical processor mode. Samakatuwid, isasagawa namin ang parehong code sa dalawang lohikal na processor nang sabay-sabay. Sa mode na ito, siyempre, hindi na tayo magkakaroon ng higit pang mga actuator, ngunit dahil sa alternation makakakuha tayo ng buong load ng lahat ng actuators.

Hindi ka makakaasa sa pagtaas ng 50% dito; ang bottleneck ay ang cache memory kung saan nakaimbak ang mga teknolohikal na maskara, ngunit maaari ka pa ring makakuha ng pagtaas ng 100 karagdagang megabytes. Ang opsyong ito ay hindi ipinapakita sa mga apendise (ang mga macro ay katulad ng mga ginamit sa 8 RTT code), ngunit ito ay magagamit sa mga file ng programa. Kaya kung sinuman ang hindi naniniwala sa posibilidad ng pag-encrypt sa bilis na 500 megabytes bawat segundo sa isang core ng processor, hayaan silang magpatakbo ng mga test file. May mga text din na may comments para walang makaisip na nagsisinungaling ako.

Ang focus na ito ay posible lamang sa mga processor ng Intel, ang AMD ay mayroon lamang dalawang FPU unit sa bawat dalawang processor modules (katulad ng hypertrading mode). Ngunit may apat pang ALU na magiging kasalanan na hindi gamitin.

Maaari mong ilagay ang Bulldozer processor modules sa isang mode na katulad ng hypertrading mode, ngunit patakbuhin ang conversion sa RON sa iba't ibang mga module sa isang thread, at sa SSE registers sa isa pang thread at makakuha ng parehong 12 RTT. Hindi ko pa nasubukan ang opsyong ito, ngunit sa tingin ko ay gagana nang mas mahusay ang 12 RTT code sa AMD. Ang mga interesado ay maaaring subukan ito sa mga programa ng pagsubok ay maaaring i-adjust nang madali sa "Bulldozers".

Sino ang nangangailangan nito?

Isang seryosong tanong, ngunit may simpleng sagot - kailangan ito ng lahat. Sa lalong madaling panahon lahat tayo ay mahuhulog sa mga ulap, mag-iimbak tayo ng parehong data at mga programa doon, at doon, oh, kung paano natin gustong lumikha ng sarili nating, pribadong sulok. Upang gawin ito, kakailanganin mong i-encrypt ang trapiko, at ang bilis ng conversion ng crypto ang magiging pangunahing kadahilanan sa pagtukoy ng komportableng trabaho sa cloud. Ang aming napiling algorithm ng pag-encrypt ay maliit - alinman sa GOST o AES.

Bukod dito, kakaiba, ang algorithm ng pag-encrypt ng AES na binuo sa mga processor ay lumalabas na mas mabagal ang mga pagsubok na nagpapakita ng mga bilis na 100–150 megabytes bawat segundo, at ito ay may pagpapatupad ng hardware ng algorithm! Ang problema ay nasa single-threaded na bilang at ang kapalit na bloke, na gumagana sa mga byte (isang talahanayan ng 256 na mga hilera). Kaya lumalabas na mas epektibo ang GOST kapag ipinatupad sa arkitektura ng x86/64, sino ang mag-aakalang...

Ito ay kung pag-uusapan natin ang nakamit na antas ng bilis ng pag-encrypt. At kung isaisip natin ang mga teoretikal na pagpipino sa larangan ng pagtaas ng kahusayan ng code, malamang na walang nangangailangan nito. Halos walang mga espesyalista sa 3–6 RTT level, ang mga compiler ay karaniwang bumubuo ng code sa 1–2.5 RTT level, at karamihan sa mga programmer ay hindi alam ang assembler, at kahit alam nila ang spelling nito, hindi nila naiintindihan ang disenyo ng isang modernong processor. At kung wala ang kaalamang ito, hindi mahalaga kung ito ay isang assembler o ilang uri ng SI-sharp.

Ngunit hindi lahat ay napakalungkot: ang ilalim na linya pagkatapos ng isang linggo ng walang tulog na gabi ay isang bagong algorithm para sa pagpapatupad ng GOST, na magiging isang kasalanan na hindi patent. At ang mga aplikasyon para sa mga patent (tatlo sa kabuuan) ay nakumpleto na at nai-file, kaya, mga ginoo, mga negosyante, pumila - ang mga kababaihan at mga bata ay nakakuha ng diskwento.

). Kasabay nito, sa Russian media at mga blog ng Russian user, ang bilang ng mga tala tungkol sa algorithm na ito ay lumalaki: parehong sumasaklaw sa mga resulta ng mga pag-atake sa Russian standard na may iba't ibang antas ng pagiging maaasahan, at naglalaman ng mga opinyon tungkol sa mga katangian ng pagpapatakbo nito. Ang mga may-akda (at, dahil dito, mga mambabasa) ng mga talang ito ay madalas na nakakakuha ng impresyon na ang domestic encryption algorithm ay luma na, mabagal at may mga kahinaan na ginagawang mas madaling kapitan ng mga pag-atake kaysa sa mga dayuhang encryption algorithm na may katulad na haba ng key. Sa seryeng ito ng mga tala, nais naming sabihin sa iyo sa isang naa-access na form tungkol sa kasalukuyang estado ng mga gawain sa pamantayang Ruso. Sasakupin ng unang bahagi ang lahat ng pag-atake sa GOST 28147-89 na kilala ng internasyonal na cryptographic na komunidad at kasalukuyang mga pagtatasa ng lakas nito. Sa hinaharap na mga publikasyon, susuriin din natin ang mga katangian ng pamantayan mula sa punto ng view ng kakayahang bumuo ng mga epektibong pagpapatupad.

Nicolas Courtois - "ang dakila at kakila-kilabot"

Magsimula tayo sa isang kuwento tungkol sa mga aktibidad ni Nicolas Courtois, na siyang may-akda ng isang buong serye ng mga gawa na nakatuon sa pamantayan ng pag-encrypt ng block ng Russia ().

Noong Oktubre 2010, nagsimula ang proseso ng pagsasaalang-alang sa pagsasama ng GOST 28147-89 algorithm sa internasyonal na pamantayang ISO/IEC 18033-3. Noong Mayo 2011, isang artikulo ng sikat na cryptographer na si Nicolas Courtois ang lumabas sa ePrint electronic archive, na minarkahan ng isang napaka-hindi maliwanag na saloobin patungo sa kanya mula sa mundo ng cryptographic na komunidad. Ang mga publikasyon ni Courtois ay isang malungkot na halimbawa ng pagmamanipula ng mga konsepto, na hindi nagbubunyag ng anumang mga bagong katangian ng bagay na pinag-uusapan, ngunit sa isang pag-angkin sa sensasyon ay naghihikayat sa pagkalat ng mga maling opinyon tungkol sa mga aktwal na katangian nito sa isang walang kakayahan na kapaligiran.

Algebraic na pamamaraan

Ang pangangatwiran ni Courtois ay binuo sa paligid ng dalawang klase ng mga pamamaraan ng cryptanalysis: mga pamamaraang algebraic at mga kaugalian. Tingnan natin ang unang klase ng mga pamamaraan.

Sa isang pinasimple na paraan, ang paraan ng algebraic cryptanalysis ay maaaring inilarawan bilang ang compilation at solusyon ng isang malaking sistema ng mga equation, ang bawat isa sa mga solusyon ay tumutugma sa layunin ng cryptanalyst (halimbawa, kung ang isang system ay pinagsama-sama gamit ang isang pares ng plaintext at ciphertext, pagkatapos ang lahat ng solusyon ng system na ito ay tumutugma sa mga susi kung saan ang plaintext na ito ay na-convert sa isang ito ay naka-encrypt). Iyon ay, sa kaso ng problema ng cryptanalysis ng isang block cipher, ang kakanyahan ng algebraic na paraan ng cryptanalysis ay ang susi ay matatagpuan bilang isang resulta ng paglutas ng isang sistema ng polynomial equation. Ang pangunahing kahirapan ay upang makagawa ng isang simpleng sistema hangga't maaari, na isinasaalang-alang ang mga katangian ng isang partikular na cipher, upang ang proseso ng paglutas nito ay tumatagal ng kaunting oras hangga't maaari. Dito ginagampanan ang pangunahing papel ng mga tampok ng bawat partikular na cipher na sinusuri.

Ang pamamaraang algebraic na ginamit ni Courtois ay maaaring madaling ilarawan bilang mga sumusunod. Sa unang yugto, ang mga naturang katangian ng GOST 28147-89 ay ginagamit bilang pagkakaroon ng isang nakapirming punto para sa bahagi ng pagbabagong-anyo ng pag-encrypt, pati na rin ang tinatawag na punto ng pagmuni-muni. Salamat sa mga pag-aari na ito, maraming mga pares ang napili mula sa isang sapat na malaking bilang ng mga pares ng plaintext-ciphertext, na ginagawang posible na isaalang-alang ang mga pagbabagong hindi sa 32, ngunit sa 8 round lamang. Ang ikalawang yugto ay na, batay sa mga resulta ng 8 round transformations na nakuha sa unang yugto, isang sistema ng mga nonlinear equation ay itinayo, kung saan ang mga key bit ay hindi alam. Susunod, ang sistemang ito ay nalutas (ito ay simple, ngunit sa katotohanan ay ang pinaka-oras na bahagi ng pamamaraan, dahil ang sistema ay binubuo ng mga hindi linear na equation).

Tulad ng nabanggit sa itaas, wala kahit saan sa trabaho ang isang detalyadong paglalarawan at pagsusuri ng pagiging kumplikado ng pangalawa at pangunahing yugto ng pagtukoy ng susi. Ito ay ang pagiging kumplikado ng ikalawang yugto na tumutukoy sa pagiging kumplikado ng buong pamamaraan sa kabuuan. Sa halip, ang may-akda ay nagbibigay ng kilalang-kilala na "mga katotohanan" na batayan kung saan siya ay gumagawa ng mga pagtatantya ng lakas ng paggawa. Ang mga "katotohanan" na ito ay sinasabing batay sa mga pang-eksperimentong resulta. Ang pagsusuri ng "mga katotohanan" mula sa trabaho ni Courtois sa kabuuan ay ibinibigay sa gawain ng mga domestic na may-akda. Ang mga may-akda ng gawaing ito ay nagpapansin na marami sa mga "katotohanan" ni Courtois na ipinakita nang walang anumang ebidensya ay natagpuang mali sa panahon ng eksperimentong pagsubok. Ang mga may-akda ng artikulo ay nagpatuloy at, kasunod ni Courtois, ay nagsagawa ng pagsusuri sa pagiging kumplikado ng ikalawang yugto gamit ang mga algorithm at pagtatantya na may mahusay na itinatag. Ang mga resultang pagtatantya ng pagiging kumplikado ay nagpapakita ng kumpletong hindi nalalapat ng ipinakita na pag-atake. Bilang karagdagan sa mga domestic na may-akda, ang malalaking problema na mayroon si Courtois sa mga pagtatasa at pagbibigay-katwiran sa kanyang mga pamamaraan ay nabanggit din, halimbawa, sa trabaho.

Differential na pamamaraan

Isaalang-alang natin ang pangalawang paraan ng Courtois, na batay sa differential cryptanalysis.

Ang pangkalahatang paraan ng differential cryptanalysis ay batay sa pagsasamantala ng mga katangian ng nonlinear mapping na ginagamit sa cryptographic primitives, na nauugnay sa impluwensya ng key value sa mga dependencies sa pagitan ng mga pagkakaiba sa pagitan ng mga pares ng input at mga pares ng output value ng mga mappings na ito. . Ilarawan natin ang pangunahing ideya ng kaugalian na pamamaraan ng pagsusuri ng cryptographic ng isang block cipher. Karaniwan, binabago ng mga block cipher ang data ng pag-input sa mga yugto gamit ang isang bilang ng mga tinatawag na round transformation, at ang bawat round transformation ay hindi gumagamit ng buong key, ngunit ilang bahagi lamang nito. Isaalang-alang natin ang isang bahagyang "pinutol" na cipher, na naiiba sa orihinal dahil wala itong huling pag-ikot. Ipagpalagay natin na posibleng matukoy na ang pag-encrypt ng dalawang plaintext na naiiba sa ilang nakapirming posisyon gamit ang naturang "pinutol" na cipher ay malamang na magreresulta sa mga ciphertext na naiiba din sa ilang nakapirming posisyon. Ipinapakita ng property na ito na ang isang "pinutol" na cipher ay malamang na nag-iiwan ng dependency sa pagitan ng ilang plaintext at mga resulta ng kanilang pag-encrypt. Upang mabawi ang bahagi ng susi gamit ang halatang kapintasan na ito, kinakailangan na makapag-encrypt ng mga paunang napiling plaintext sa susi na gusto nating bawiin (ang tinatawag na "chosen plaintext attack"). Sa simula ng "key opening" na pamamaraan, isang bilang ng mga pares ng mga plaintext ay random na nabuo, na naiiba sa parehong mga nakapirming posisyon. Ang lahat ng mga teksto ay naka-encrypt gamit ang isang "buong" cipher. Ang mga resultang pares ng ciphertext ay ginagamit upang mabawi ang mga key bit na ginamit sa huling round na pagbabago, gaya ng mga sumusunod. Gamit ang ilang random na piniling halaga ng gustong key bits, ang isang pagbabagong kabaligtaran sa huling round na pagbabago ay inilalapat sa lahat ng ciphertext. Sa katunayan, kung nahulaan natin ang nais na halaga ng mga key bit, makukuha natin ang resulta ng isang "pinutol" na cipher, at kung hindi natin hulaan, talagang "i-encrypt pa natin ang data," na magbabawas lamang sa pagtitiwala sa pagitan ng mga bloke na nabanggit sa itaas (ang pagkakaiba ay nasa ilang mga nakapirming posisyon). Sa madaling salita, kung kabilang sa mga resulta ng naturang "karagdagang pagproseso" ng mga ciphertext ay mayroong maraming mga pares na naiiba sa mga nakapirming posisyon na kilala sa amin, nangangahulugan ito na nahulaan namin ang mga kinakailangang key bit. Kung hindi, magkakaroon ng makabuluhang mas kaunting mga pares. Dahil bahagi lang ng key ang ginagamit sa bawat round, ang hinanap na bits (iyon ay, ang key bits na ginamit sa huling round) ay hindi kasing dami ng mga bits sa buong key at maaari lang ulitin sa pamamagitan ng pag-uulit ng mga hakbang sa itaas . Sa kasong ito, tiyak na matitisod tayo sa tamang kahulugan balang araw.

Mula sa paglalarawan sa itaas, sumusunod na ang pinakamahalagang bagay sa pamamaraan ng pagsusuri sa kaugalian ay ang mga bilang ng mga mismong posisyon sa mga plaintext at ciphertext, ang mga pagkakaiba kung saan gumaganap ng isang mahalagang papel sa pagbawi ng mga pangunahing piraso. Ang pangunahing presensya ng mga posisyong ito, pati na rin ang hanay ng kanilang mga numero, ay direktang nakasalalay sa mga katangian ng mga nonlinear na pagbabagong iyon na ginagamit sa anumang block cipher (karaniwan ay ang lahat ng "nonlinearity" ay puro sa tinatawag na S-boxes o kapalit na mga node).

Gumagamit si Courtois ng bahagyang binagong bersyon ng pamamaraang kaugalian. Ating pansinin kaagad na si Courtois ay nagsasagawa ng kanyang pagsusuri para sa mga S-box na iba sa mga kasalukuyan at sa mga iminungkahi sa ISO. Ang gawain ay nagbibigay ng mga katangian ng kaugalian (mga numero kung saan dapat magkaiba ang mga bloke) para sa isang maliit na bilang ng mga pag-ikot. Ang katwiran para sa pagpapalawig ng mga katangian para sa higit pang mga round ay, gaya ng dati, batay sa "mga katotohanan". Ipinahayag ni Courtois, muli, nang walang iba kundi ang kanyang awtoridad, isang hindi sinusuportahang palagay na ang pagpapalit ng mga S-box ay hindi makakaapekto sa paglaban ng GOST 28147-89 laban sa kanyang pag-atake (habang sa hindi kilalang mga kadahilanan, ang mga S-box mula sa 1st working draft ng hindi isinaalang-alang ang pagdaragdag sa pamantayang ISO/IEC 18033-3). Ang pagsusuri na isinagawa ng mga may-akda ng artikulo ay nagpapakita na kahit na kunin natin ang walang batayan na "mga katotohanan" ni Courtois sa pananampalataya at pag-aralan ang GOST 28147-89 sa iba pang mga S-block, ang pag-atake ay muling lumalabas na hindi mas mahusay kaysa sa isang kumpletong paghahanap.

Ang isang detalyadong pagsusuri ng mga gawa ni Courtois na may isang detalyadong pagpapatunay ng kawalang-saligan ng lahat ng mga pahayag tungkol sa pagbaba sa paglaban ng pamantayang Ruso ay isinagawa sa mga gawa [,].

Kasabay nito, kahit na si Courtois mismo ay umamin ng ganap na kakulangan ng katumpakan sa mga kalkulasyon! Ang sumusunod na slide ay kinuha mula sa pagtatanghal ni Courtois sa seksyon ng maikling paunawa ng FSE 2012.

Dapat pansinin na ang gawain ni Courtois ay paulit-ulit ding pinuna ng mga dayuhang mananaliksik. Halimbawa, ang kanyang trabaho sa pagbuo ng mga pag-atake sa AES block encryption algorithm gamit ang XSL na pamamaraan ay naglalaman ng parehong pangunahing mga bahid gaya ng gawain sa pagsusuri ng pamantayang Ruso: karamihan sa mga pagtatantya ng intensity ng paggawa ay lumilitaw sa teksto na ganap na walang batayan at walang batayan - detalyado ang pagpuna ay matatagpuan, halimbawa, sa trabaho. Bilang karagdagan, si Courtois mismo ay umamin sa malawakang pagtanggi na i-publish ang kanyang trabaho sa mga pangunahing kumperensya ng cryptography at sa mga itinatag na peer-reviewed na mga journal, kadalasang nag-iiwan lamang sa kanya ng pagkakataong magsalita sa maikling seksyon ng anunsyo. Halimbawa, maaari mong basahin ang tungkol dito sa seksyon 3 ng trabaho. Narito ang ilang mga quote mula mismo kay Courtois na may kaugnayan sa kanyang trabaho:

  • "Sa tingin ko ay hindi mararamdaman ng mga manonood ng Asiacrypt na ito ay kawili-wili." Tagasuri ng Asiacrypt 2011.
  • “… mayroong isang malaki, malaki, malaking problema: ang pag-atake na ito, na siyang pangunahing kontribusyon ng papel ay nai-publish na sa FSE’11 (ito ang pinakamahusay na papel), …”. Tagasuri para sa Crypto 2011.

Kaya, ang propesyonal na bahagi ng internasyonal na komunidad ng cryptographic ay tumutukoy sa kalidad ng trabaho ni Courtois na walang mas kaunting pag-aalinlangan kaysa, sabihin, ang mga pahayag ng ilang mga espesyalista sa Russia tungkol sa kanilang kakayahang i-crack ang AES para sa 2,100, na hindi nakumpirma ng anumang pare-parehong mga kalkulasyon, o ang pinakabagong "ebidensya" ng isang dalawang-pahinang hypothesis sa hindi pagkakapantay-pantay ng mga klase ng pagiging kumplikado P at NP.

Mga pag-atake nina Isobe at Dinur-Dankelman-Shamir

Ang pangkalahatang ideya ng mga pag-atake ng Isobe () at Dinur-Dankelman-Shamir (simula dito: DDS attack) () ay ang bumuo para sa isang tiyak na (nakadepende sa key) na makitid na hanay ng mga plaintext ng isang katumbas na pagbabago sa set na ito, na mayroong isang istrakturang mas simple kaysa sa mismong pagbabagong-anyo ng encryption. Sa kaso ng Isobe method, ito ang set ng 64-bit blocks x na F 8 -1 (Swap(F 8 (z))) = z, kung saan z = F 16 (x), hanggang F 8 ( x) at F 16 ( x) ay nagpapahiwatig ng unang 8 at unang 16 na round ng GOST 28147-89 encryption, ayon sa pagkakabanggit, sa pamamagitan ng Swap - ang pagpapatakbo ng pagpapalit ng mga kalahati ng isang 64-byte na salita. Kung ang plaintext ay kasama sa set na ito, ang resulta ng buong 32-round na pagbabagong-anyo ng GOST 28147-89 ay kasabay ng resulta ng 16-round one, na siyang pinagsasamantalahan ng may-akda ng pag-atake. Sa kaso ng DDS method, ito ang set ng x na F 8 (x) = x (fixed point ng transformation F 8). Para sa anumang plaintext mula sa set na ito, ang pagbabagong GOST 28147-89 ay gumagana nang eksakto kapareho ng huling 8 round nito, na pinapasimple ang pagsusuri.

Ang pagiging kumplikado ng pag-atake ng Isobe ay 2,224 na operasyon ng pag-encrypt, ang pag-atake ng DDS ay 2,192. Gayunpaman, ang lahat ng tanong tungkol sa kung ang pag-atake ng Isobe at DDS ay nagpapakilala ng mga bagong paghihigpit sa mga kundisyon para sa paggamit ng aming algorithm ay inalis sa pamamagitan ng pagtatasa sa mga kinakailangan para sa dami ng materyal na kinakailangan upang maisagawa ang bawat isa sa mga pag-atake: ang pamamaraang Isobe ay nangangailangan ng 2 32 pares ng plaintext at ciphertext, at para sa paraan ng DDS - 2 64. Ang pagproseso ng naturang mga volume ng materyal nang hindi binabago ang susi ay isang priori na hindi katanggap-tanggap para sa anumang block cipher na may haba ng block na 64: sa materyal ng volume 2 32 , isinasaalang-alang ang problema ng mga kaarawan (tingnan, halimbawa, ), ang posibilidad ng paglitaw ng paulit-ulit na mga bloke ay malapit sa 1/2, na magbibigay sa attacker na makagawa ng ilang mga konklusyon tungkol sa mga plaintext mula sa mga ciphertext nang hindi tinutukoy ang susi. Ang pagkakaroon ng 2 64 na pares ng plain at naka-encrypt na mga teksto na nakuha sa isang susi ay talagang nagbibigay-daan sa kaaway na magsagawa ng mga operasyon ng pag-encrypt at pag-decryption nang hindi nalalaman ang susi na ito. Ito ay dahil sa isang purong combinatorial property: ang kaaway sa kasong ito ay may buong encryption conversion table. Ang sitwasyong ito ay ganap na hindi katanggap-tanggap sa ilalim ng anumang makatwirang kondisyon sa pagpapatakbo. Halimbawa, sa CryptoPro CSP mayroong teknikal na limitasyon sa dami ng naka-encrypt na materyal (nang walang pangunahing conversion) na 4 MB (tingnan). Kaya, ang isang mahigpit na pagbabawal sa paggamit ng isang susi sa materyal ng naturang dami ay likas sa anumang block cipher na may haba ng bloke na 64 bits, at samakatuwid, ang mga pag-atake ng Isobe at DDS ay hindi sa anumang paraan ay nagpapaliit sa saklaw ng paggamit ng GOST 28147-89 algorithm. habang pinapanatili ang pinakamataas na posibleng lakas na 2,256.

Siyempre, dapat tandaan na ang mga mananaliksik (Isobe at Dinur-Dankelman-Shamir) ay nagpakita na ang ilang mga katangian ng GOST 28147-89 algorithm ay ginagawang posible na makahanap ng mga path ng pagsusuri na hindi isinasaalang-alang ng mga tagalikha ng algorithm. Ang simpleng anyo ng key schedule, na makabuluhang pinapasimple ang gawain ng pagbuo ng mga epektibong pagpapatupad, ay nagbibigay-daan din sa ilang bihirang kaso ng mga key at plaintext na bumuo ng mas simpleng paglalarawan ng mga pagbabagong ginawa ng algorithm.

Ipinakikita ng gawain na ang negatibong katangian ng algorithm na ito ay madaling maalis nang may ganap na pangangalaga ng mga katangian ng pagpapatakbo, ngunit, sa kasamaang-palad, ito ay isang mahalagang bahagi ng algorithm sa karaniwang ginagamit nitong anyo.

Tandaan na ang ilang kapabayaan sa mga pagtatantya ng average na intensity ng paggawa ay naroroon din sa gawain ni Dinur, Dunkelman at Shamir. Kaya, kapag gumagawa ng isang pag-atake, hindi binibigyang pansin ang sumusunod na punto: para sa isang makabuluhang proporsyon ng mga susi, ang hanay ng mga plaintext na x, na ang F 8 (x) = x, ay walang laman: maaaring walang mga nakapirming puntos. para sa 8 round ng pagbabago. Ang pagkakaroon ng mga nakapirming punto ay nakasalalay din sa pagpili ng mga kapalit na node. Kaya, ang pag-atake ay naaangkop lamang para sa ilang mga kapalit na node at key.

Ito rin ay nagkakahalaga ng pagbanggit ng isa pang trabaho na may pag-atake sa GOST 28147-89. Noong Pebrero 2012, lumitaw ang isang na-update na bersyon ng artikulo (napetsahan Nobyembre 2011) sa ePrint electronic archive ng International Cryptographic Association, na naglalaman ng bagong pag-atake sa GOST 28147-89. Ang mga katangian ng ipinakita na pag-atake ay ang mga sumusunod: ang dami ng materyal ay 2 32 (tulad ng Isobe), at ang lakas ng paggawa ay 2 192 (tulad ng DDS). Kaya, pinahusay ng pag-atakeng ito ang pag-atake ng DDS na tala ng oras sa mga tuntunin ng dami ng materyal mula 2 64 hanggang 2 32. Napansin namin nang hiwalay na ang mga may-akda ay matapat na ipinakita ang lahat ng mga kalkulasyon na may katwiran para sa pagiging kumplikado at dami ng materyal. Pagkatapos ng 9 na buwan, isang pangunahing error ang natagpuan sa mga kalkulasyon sa itaas, at mula noong Nobyembre 2012, ang na-update na bersyon ng artikulo sa electronic archive ay hindi na naglalaman ng anumang mga resulta tungkol sa domestic algorithm.

Mga pag-atake sa pag-aakalang may alam ang umaatake tungkol sa mga susi

Sa wakas, tandaan namin na sa panitikan mayroon ding isang bilang ng mga gawa (tingnan, halimbawa, at ) na nakatuon sa mga pag-atake sa GOST 28147-89 sa tinatawag na linked key model. Ang modelong ito ay karaniwang naglalaman ng pagpapalagay na ang isang umaatake ay maaaring makakuha ng access para sa pagsusuri hindi lamang sa mga pares ng mga bukas na teksto at naka-encrypt gamit ang nais na key, kundi pati na rin sa mga pares ng bukas at naka-encrypt na mga teksto na nakuha gamit ang (hindi alam din) na mga key na naiiba sa nais. sa pamamagitan ng kilalang regular na paraan (halimbawa, sa mga nakapirming bit na posisyon). Sa modelong ito, posible talagang makakuha ng mga kawili-wiling resulta tungkol sa GOST 28147-89, ngunit sa modelong ito posible na makakuha ng hindi gaanong malakas na mga resulta tungkol sa, halimbawa, ang pamantayan ng AES, na pinaka-malawak na ginagamit sa modernong mga pampublikong network ( tingnan, halimbawa,). Tandaan na ang mga kondisyon para sa pagsasagawa ng ganitong uri ng pag-atake ay lumitaw kapag gumagamit ng isang cipher sa isang tiyak na protocol. Dapat pansinin na ang mga resulta ng ganitong uri, kahit na ang mga ito ay walang alinlangan na interes sa akademiko mula sa punto ng view ng pag-aaral ng mga katangian ng mga pagbabagong cryptographic, ay talagang hindi nauugnay sa pagsasanay. Halimbawa, ang lahat ng mga tool sa proteksyon ng impormasyon ng cryptographic na na-certify ng FSB ng Russia ay nakakatugon sa mga pinakamahigpit na kinakailangan para sa mga scheme ng pagbuo ng key ng pag-encrypt (tingnan, halimbawa,). Tulad ng ipinahiwatig sa mga resulta ng pagsusuri, kung mayroong 18 nauugnay na mga susi at 2 10 pares ng mga bloke ng plaintext at ciphertext, ang pagiging kumplikado ng ganap na pagbubukas ng pribadong key, na may posibilidad na magtagumpay na 1-10 -4, ay talagang 2 26 . Gayunpaman, kung ang nabanggit na mga kinakailangan para sa pagbuo ng pangunahing materyal ay natutugunan, ang posibilidad ng paghahanap ng mga naturang susi ay 2 -4352, iyon ay, 24096 beses na mas mababa kaysa kung susubukan mo lamang hulaan ang sikretong susi sa unang pagsubok.

Ang mga gawa na may kaugnayan sa modelo na may mga naka-link na susi ay kinabibilangan din ng trabaho, na noong 2010 ay nagdulot ng maraming ingay sa mga elektronikong publikasyong Ruso, na hindi nagdurusa sa ugali ng maingat na pagsuri sa materyal sa karera para sa mga sensasyon. Ang mga resulta na ipinakita dito ay hindi suportado ng anumang mahigpit na katwiran, ngunit naglalaman ng malakas na mga pahayag tungkol sa kakayahang i-hack ang pamantayan ng estado ng Russian Federation sa isang mahinang laptop sa loob ng ilang segundo - sa pangkalahatan, ang artikulo ay isinulat sa pinakamahusay na mga tradisyon. ng Nicolas Courtois. Ngunit, sa kabila ng ganap na halatang kawalang-saligan ng artikulo sa mambabasa na higit pa o hindi gaanong pamilyar sa mga pangunahing prinsipyo ng mga publikasyong pang-agham, tiyak na tiyakin na tiyakin sa publiko ng Russia pagkatapos ng gawain na nagsulat si Rudsky ng isang detalyado at masusing teksto na naglalaman ng isang komprehensibong pagsusuri. ng pagkukulang na ito. Ang artikulo na may self-explanatory na pamagat na "Sa zero praktikal na kahalagahan ng trabaho" Key recovery attack sa buong GOST block cipher na may zero na oras at memorya "" ay nagbibigay ng katwiran na ang average na pagiging kumplikado ng pamamaraan na ibinigay ay hindi mas mababa sa pagiging kumplikado ng kumpletong paghahanap.

Dry residue: ano ang tibay sa pagsasanay?

Sa konklusyon, nagpapakita kami ng isang talahanayan na naglalaman ng data sa lahat ng mga resulta ng mahigpit na inilarawan at makatwirang pag-atake sa GOST 28147-89 na kilala sa internasyonal na komunidad ng cryptographic. Tandaan na ang pagiging kumplikado ay ibinibigay sa mga operasyon ng pag-encrypt ng GOST 28147-89 algorithm, at ang memorya at materyal ay ipinahiwatig sa mga bloke ng algorithm (64 bits = 8 bytes).

Atake Sidhi ng paggawa Alaala Kinakailangang materyal
Isobe 2 224 2 64 2 32
Dinur-Dankelman-Shamir, FP, 2DMitM 2 192 2 36 2 64
Dinur-Dankelman-Shamir, FP, low-memory 2 204 2 19 2 64
2 224 2 36 2 32
Dinur-Dankelman-Shamir, Reflection, 2DMitM 2 236 2 19 2 32
Kumpletuhin ang paghahanap 2 256 1 4
Bilang ng mga nanosecond mula noong likhain ang Uniberso 2 89

Sa kabila ng isang medyo malakihang cycle ng pananaliksik sa larangan ng paglaban ng GOST 28147-89 algorithm, sa sandaling ito ay walang isang pag-atake na kilala, ang mga kondisyon para sa pagpapatupad nito ay makakamit kasama ang kasamang mga kinakailangan sa pagpapatakbo para sa isang haba ng block na 64 bits. Ang mga paghihigpit sa dami ng materyal na maaaring iproseso sa isang key na nagreresulta mula sa mga parameter ng cipher (haba ng key bit, haba ng block bit) ay makabuluhang mas mahigpit kaysa sa minimum na volume na kinakailangan upang maisagawa ang anumang kasalukuyang kilalang pag-atake. Dahil dito, kapag nakakatugon sa umiiral na mga kinakailangan sa pagpapatakbo, wala sa mga pamamaraan ng cryptanalysis na iminungkahi hanggang sa petsa ng GOST 28147-89 ang nagpapahintulot sa pagtukoy ng isang susi na may lakas ng paggawa na mas mababa kaysa sa kumpletong paghahanap.

Sa ating bansa, ang isang pinag-isang algorithm para sa cryptographic na representasyon ng data ay naitatag para sa mga sistema ng pagproseso ng impormasyon sa mga network ng computer, mga indibidwal na sistema ng computing at mga computer, na tinutukoy GOST 28147-89.

Ang cryptographic data conversion algorithm na ito ay isang 64-bit block algorithm na may 256-bit na key, na idinisenyo para sa pagpapatupad ng hardware at software, nakakatugon sa mga kinakailangan sa cryptographic at hindi nagpapataw ng mga paghihigpit sa antas ng pagiging lihim ng protektadong impormasyon.

Kapag inilalarawan ang algorithm, ginagamit ang sumusunod na notasyon:

L at R - bit sequence;
Ang LR ay isang pinagsama-samang mga sequence L at R, kung saan ang mga bit ng sequence R ay sumusunod sa mga bit ng sequence L;
(+) - bitwise karagdagan modulo 2 ("eksklusibo O" operasyon);
[+] - pagdaragdag ng 32-bit na mga numero modulo 2 32;
(+) - pagdaragdag ng 32-bit na mga numero modulo 2 32 -1.

Ang mga numero ay pinagsama ayon sa sumusunod na panuntunan:

A [+] B = A + B kung A + B< 2 32 ,
A [+] B = A + B - 2 32 kung A + B >= 2 32 . A (+) B = A + B kung A + B< 2^32 - 1, A {+} B = A + B - (2^32 - 1), если A + B >= 2^32 - 1.

Nagbibigay ang algorithm ng apat na operating mode:

Sa anumang kaso, ang isang 256-bit key K ay ginagamit upang i-encrypt ang data, na kinakatawan bilang walong 32-bit na subkey K i:

K = K 7 K 6 K 5 K 4 K 3 K 2 K 1 K 0 .

Ang pag-decryption ay ginagawa gamit ang parehong key gaya ng pag-encrypt, ngunit ang proseso ay ang kabaligtaran ng proseso ng pag-encrypt ng data.

Madaling kapalit na mode

Ang una at pinakamadaling mode ay kapalit. Ang data na ie-encrypt ay nahahati sa 64-bit na mga bloke. Ang pamamaraan ng pag-encrypt para sa isang bloke ng bukas na data T 0 ay may kasamang 32 cycle (j=1...32).

Ang Block T 0 ay nahahati sa dalawang sequence ng 32 bits: B(0)A(0), kung saan ang B(0) ay ang left o high-order bits, A(0) ang right o low-order bits.

Ang mga pagkakasunud-sunod na ito ay ipinasok sa mga drive N 1 at N 2 bago magsimula ang unang ikot ng pag-encrypt.

Ang unang cycle (j=1) ng pamamaraan ng pag-encrypt para sa isang 64-bit na data block ay inilalarawan ng mga sumusunod na formula:

Dito ay tinutukoy ko ang numero ng pag-ulit (i = 1, 2,..., 32).

Ang function na f ay tinatawag na encryption function. Ang argumento nito ay ang modulo 2 32 sum ng numerong A(i) na nakuha sa nakaraang hakbang ng pag-ulit at ang key number X(j) (ang dimensyon ng bawat isa sa mga numerong ito ay 32 digit).

Ang pagpapaandar ng pag-encrypt ay nagsasangkot ng dalawang operasyon sa nagresultang 32-bit na kabuuan. Ang unang operasyon ay tinatawag na K substitution Ang K substitution block ay binubuo ng 8 substitution nodes na K(1) ... K(8) na may memory na 64 bits bawat isa. Ang 32-bit vector na dumarating sa substitution block ay nahahati sa 8 sequential 4-bit vectors, ang bawat isa ay na-convert sa isang 4-bit vector ng kaukulang kapalit na node, na isang talahanayan ng 16 integer sa hanay na 0.. .15.

Tinutukoy ng input vector ang address ng isang row sa talahanayan, isang numero kung saan ang output vector. Ang mga 4-bit na output vector ay pagkatapos ay magkakasunod na pinagsama sa isang 32-bit na vector. Ang talahanayan ng substitution block K ay naglalaman ng mga pangunahing elemento na karaniwan sa network ng computer at bihirang baguhin.

Ang pangalawang operasyon ay isang cyclic shift sa kaliwa ng 32-bit vector na nakuha bilang resulta ng pagpapalit ng K. Ang 64-bit block ng naka-encrypt na data T sh ay kinakatawan bilang T sh = A (32) B (32).

Ang natitirang mga bloke ng bukas na data sa simpleng kapalit na mode ay naka-encrypt sa parehong paraan.

Pakitandaan na ang simpleng kapalit na mode ay magagamit lamang upang i-encrypt ang data sa mga limitadong kaso. Kasama sa mga kasong ito ang pagbuo ng isang susi at ang pag-encrypt nito na may probisyon ng imitasyon na proteksyon (proteksyon laban sa pagpapataw ng maling data) para sa paghahatid sa mga channel ng komunikasyon o imbakan sa memorya ng computer.

Gamma mode

Buksan ang data, nahahati sa 64-bit na mga bloke T(i) (i=1, 2,..., m, kung saan ang m ay tinutukoy ng dami ng naka-encrypt na data), ay naka-encrypt sa gamma mode sa pamamagitan ng bitwise na karagdagan modulo 2 na may ang gamma cipher Гш, na ginawa sa mga bloke ng 64 bits, iyon ay, Гш = (Г(1),Г(2),...,Г(i),...,Г(m)).

Ang data encryption equation sa gamma mode ay maaaring ipakita bilang mga sumusunod:

Ш(i) = A (Y(i-1) [+] C2, Z(i-1) (+) C1) (+) T(i) = Г(i) (+) T(i) .
Narito ang Ш(i) ay isang 64-bit block ng ciphertext,
A - encryption function sa simpleng kapalit na mode (ang mga argumento ng function na ito ay dalawang 32-bit na numero),
Ang C1 at C2 ay mga constant na tinukoy sa GOST 28147-89,
Ang Y(i) at Z(i) ay mga dami na natutukoy nang paulit-ulit habang ang gamma ay nabuo tulad ng sumusunod:
(Y(0), Z(0)) = A(S), kung saan ang S ay isang 64-bit na binary sequence (sync message);
(Y(i), Z(i)) = (Y(i-1) [+] C2, Z(i-1) (+) C1) para sa i = 1, 2,...,m.

Posible lamang ang pag-decryption ng data kung mayroong mensahe ng pag-synchronize, na hindi isang lihim na elemento ng cipher at maaaring maimbak sa memorya ng computer o maipadala sa mga channel ng komunikasyon kasama ang naka-encrypt na data.

Gamma mode na may feedback

Mode paglalaro na may feedback ay halos kapareho sa gamma mode. Tulad ng sa gamma mode, ang bukas na data, nahahati sa 64-bit na mga bloke T(i) (i=1, 2,..., m, kung saan ang m ay tinutukoy ng dami ng naka-encrypt na data), ay naka-encrypt sa pamamagitan ng bitwise addition modulo 2 na may gamma cipher Г sh, na ginawa sa mga bloke ng 64 bits:

G w = (G(1),G(2),...,G(i),...,G(m)).

Ang bilang ng mga binary digit sa T(m) block ay maaaring mas mababa sa 64, habang ang bahagi ng cipher gamut na hindi ginagamit para sa encryption mula sa G(m) block ay itinatapon.

Ang data encryption equation sa closed-loop gamma mode ay maaaring ipakita bilang mga sumusunod:


Narito ang Ш(i) ay isang 64-bit block ng ciphertext,
A - encryption function sa simpleng kapalit na mode. Ang argumento ng pag-andar sa unang hakbang ng umuulit na algorithm ay isang 64-bit na mensahe ng pag-synchronize, at sa lahat ng mga kasunod na hakbang ito ay ang nakaraang bloke ng naka-encrypt na data Ш(i-1).

Mga pag-unlad ng imitasyon na pagsingit

Proseso ng produksyon imitovstaki ay pare-pareho para sa alinman sa mga mode ng pag-encrypt ng data.

Ang imitation insertion ay isang block ng p bits (imitation insertion Ir), na nabuo bago i-encrypt ang buong mensahe, o kahanay ng block-by-block encryption. Ang mga unang bloke ng bukas na data na lumahok sa pagbuo ng imitative insert ay maaaring maglaman ng impormasyon ng serbisyo (halimbawa, bahagi ng address, oras, mensahe ng pag-synchronize) at hindi naka-encrypt. Ang halaga ng parameter p (ang bilang ng mga binary bits sa simulation insert) ay tinutukoy ng mga kinakailangan sa cryptographic, na isinasaalang-alang ang katotohanan na ang posibilidad ng pagpapataw ng maling interference ay katumbas ng 1/2^p.

Upang makakuha ng simulate insertion, ang bukas na data ay ipinakita sa anyo ng 64-bit blocks T(i) (i = 1, 2,..., m, kung saan ang m ay tinutukoy ng dami ng naka-encrypt na data). Ang unang bloke ng plain data T(1) ay sumasailalim sa isang pagbabagong naaayon sa unang 16 na cycle ng encryption algorithm sa simpleng kapalit na mode. Bukod dito, ang susi na ginamit upang i-encrypt ang data ay ginagamit bilang isang susi upang makabuo ng imitative insert.

Ang 64-bit na numero na nakuha pagkatapos ng 16 na cycle ng operasyon ay summed modulo 2 na may pangalawang bloke ng bukas na data na T(2). Ang resulta ng pagsusuma ay muling sasailalim sa isang pagbabagong naaayon sa unang 16 na cycle ng encryption algorithm sa simpleng kapalit na mode. Ang resultang 64-bit na numero ay summed modulo 2 kasama ang ikatlong bloke ng bukas na data na T(3), atbp. Ang huling bloke T(m), kung kinakailangan, na may palaman sa isang buong 64-bit na bloke na may mga zero, ay summed modulo 2 na may resulta ng trabaho sa hakbang m-1, pagkatapos nito ay naka-encrypt sa simpleng kapalit na mode sa unang 16 na cycle ng algorithm. Mula sa nagresultang 64-bit na numero, napili ang isang segment na Ip ng haba p bits.

Ang imitative insertion Ir ay ipinapadala sa isang channel ng komunikasyon o sa memorya ng computer pagkatapos ng naka-encrypt na data. Ang natanggap na naka-encrypt na data ay na-decrypted, at mula sa natanggap na mga bloke ng bukas na data T(i), isang simulate insertion Ir ay nabuo, na pagkatapos ay inihambing sa isang simulate insertion na natanggap ng Ir mula sa channel ng komunikasyon o mula sa memorya ng computer hindi tumutugma ang mga pagsingit, ang lahat ng na-decrypt na data ay itinuturing na mali.

GOST 28147-89 encryption algorithm, paggamit nito at pagpapatupad ng software para sa mga computer sa Intel x86 platform.


Andrey Vinokurov

Paglalarawan ng algorithm.

Mga tuntunin at pagtatalaga.

Ang isang paglalarawan ng pamantayan ng pag-encrypt ng Russian Federation ay nakapaloob sa isang napaka-kagiliw-giliw na dokumento na pinamagatang "Cryptographic conversion algorithm GOST 28147-89". Ang katotohanan na sa pangalan nito sa halip na terminong "encryption" ay lumilitaw ang isang mas pangkalahatang konsepto " cryptographic na conversion ”, ay hindi naman sinasadya. Bilang karagdagan sa ilang malapit na nauugnay na mga pamamaraan sa pag-encrypt, ang dokumento ay naglalarawan ng isang algorithm para sa pagbuo pagsingit ng mga imitasyon . Ang huli ay walang iba kundi isang kumbinasyon ng kontrol sa cryptographic, iyon ay, isang code na nabuo mula sa orihinal na data gamit ang isang lihim na key para sa layunin ng proteksyon ng imitasyon , o pagprotekta sa data mula sa mga hindi awtorisadong pagbabago.

Sa iba't ibang hakbang ng mga algorithm ng GOST, ang data na kanilang pinapatakbo ay binibigyang kahulugan at ginagamit sa iba't ibang paraan. Sa ilang mga kaso, ang mga elemento ng data ay itinuturing bilang mga array ng mga independiyenteng bit, sa ibang mga kaso bilang isang unsigned integer, sa iba bilang isang structured complex na elemento na binubuo ng ilang mas simpleng elemento. Samakatuwid, upang maiwasan ang pagkalito, mahalagang magkasundo sa notasyong ginamit.

Tinutukoy ang mga elemento ng data sa artikulong ito sa pamamagitan ng malalaking titik na may istilong italic (halimbawa, X). Sa pamamagitan ng | X| nagsasaad ng laki ng elemento ng data X sa bits. Kaya, kung bibigyang-kahulugan natin ang elemento ng data X Bilang isang di-negatibong integer, maaari naming isulat ang sumusunod na hindi pagkakapantay-pantay:.

Kung ang isang elemento ng data ay binubuo ng ilang mas maliliit na elemento, ang katotohanang ito ay ipinahiwatig bilang mga sumusunod: X=(X 0 ,X 1 ,…,Xn –1)=X 0 ||X 1 ||…||Xn-1 . Ang proseso ng pagsasama-sama ng ilang elemento ng data sa isa ay tinatawag pagsasama-sama data at ipinahiwatig ng simbolong “||”. Natural, ang sumusunod na kaugnayan ay dapat masiyahan para sa mga laki ng mga elemento ng data: | X|=|X 0 |+|X 1 |+…+|Xn-1 |. Kapag tinukoy ang mga kumplikadong elemento ng data at ang pagpapatakbo ng pagsasama-sama, ang mga elemento ng bumubuo ng data ay nakalista sa pataas na pagkakasunud-sunod ng pangunguna. Sa madaling salita, kung bibigyang-kahulugan natin ang pinagsama-samang elemento at lahat ng elemento ng data nito bilang mga unsigned integer, maaari nating isulat ang sumusunod na pagkakapantay-pantay:

Sa algorithm, ang isang elemento ng data ay maaaring bigyang-kahulugan bilang isang array ng mga indibidwal na bits, kung saan ang mga bit ay tinutukoy ng parehong titik ng array, ngunit sa isang lowercase na bersyon, tulad ng ipinapakita sa sumusunod na halimbawa:

X=(x 0 ,x 1 ,…,x n –1)=x 0 +2 1 · x 1 +…+2 n-1 · x n –1 .

Kaya, kung napansin mo, ang tinatawag na GOST ay pinagtibay. "little-endian" na pagnunumero ng mga digit, i.e. Sa loob ng mga multi-bit na salita ng data, ang mga indibidwal na bit at mas mababang bilang na mga grupo ng mga bit ay hindi gaanong makabuluhan. Ito ay direktang nakasaad sa talata 1.3 ng pamantayan: "Kapag nagdadagdag at cyclically shifting binary vectors, ang pinakamahalagang bits ay itinuturing na mga bits ng drive na may malalaking numero." Dagdag pa, ang mga sugnay ng pamantayang 1.4, 2.1.1 at iba pa ay nangangailangan ng simulang punan ang mga rehistro ng imbakan ng virtual na aparato sa pag-encrypt ng data mula sa pinakamababa, i.e. hindi gaanong makabuluhang mga kategorya. Eksakto ang parehong pagkakasunud-sunod ng pagnunumero ay pinagtibay sa arkitektura ng microprocessor ng Intel x86, kaya naman kapag nagpapatupad ng cipher sa software sa arkitektura na ito, walang mga karagdagang permutasyon ng mga bit sa loob ng mga salita ng data ang kinakailangan.

Kung ang ilang operasyon na may lohikal na kahulugan ay isinagawa sa mga elemento ng data, pagkatapos ay ipinapalagay na ang operasyong ito ay isinasagawa sa kaukulang mga piraso ng mga elemento. Sa ibang salita A B=(a 0 b 0 ,a 1 b 1 ,…,isang n –1 b n-1), saan n=|A|=|B|, at ang simbolong “ ” ay nagsasaad ng arbitrary na binary logical na operasyon; bilang panuntunan, nangangahulugan ito ng operasyon eksklusibo o , na siyang operasyon din ng summation modulo 2:

Ang lohika ng pagbuo ng isang cipher at ang istraktura ng GOST key na impormasyon.

Kung maingat mong pag-aralan ang orihinal na GOST 28147–89, mapapansin mo na naglalaman ito ng paglalarawan ng mga algorithm sa ilang antas. Sa pinakatuktok ay may mga praktikal na algorithm na idinisenyo upang i-encrypt ang mga array ng data at bumuo ng mga imitative insert para sa kanila. Ang lahat ng mga ito ay batay sa tatlong mababang antas ng algorithm, na tinatawag sa GOST text mga cycle . Ang mga pangunahing algorithm na ito ay tinutukoy sa artikulong ito bilang mga pangunahing siklo upang makilala ang mga ito mula sa lahat ng iba pang mga cycle. Ang mga ito ay may mga sumusunod na pangalan at simbolo, ang huli ay ibinigay sa panaklong at ang kanilang kahulugan ay ipapaliwanag sa ibang pagkakataon:

  • ikot ng pag-encrypt (32-З);
  • cycle ng decryption (32-P);
  • cycle ng produksyon ng imitasyon insert (16-Z).

Kaugnay nito, ang bawat isa sa mga pangunahing cycle ay isang maramihang pag-uulit ng isang solong pamamaraan, na tinatawag na higit pang katiyakan sa gawaing ito. ang pangunahing hakbang ng conversion ng crypto .

Kaya, upang maunawaan ang GOST, kailangan mong maunawaan ang sumusunod na tatlong bagay:

  • anong nangyari pangunahing hakbang mga conversion ng crypto;
  • kung paano nabuo ang mga pangunahing siklo mula sa mga pangunahing hakbang;
  • sa tatlo mga pangunahing siklo lahat ng praktikal na GOST algorithm ay idinagdag.

Bago magpatuloy sa pag-aaral ng mga isyung ito, dapat nating pag-usapan ang pangunahing impormasyon na ginagamit ng mga algorithm ng GOST. Alinsunod sa prinsipyo ni Kirchhoff, na nasiyahan ng lahat ng modernong cipher na kilala sa pangkalahatang publiko, ang lihim nito ang nagsisiguro ng lihim ng naka-encrypt na mensahe. Sa GOST, ang pangunahing impormasyon ay binubuo ng dalawang istruktura ng data. Bukod sa actual susi , kinakailangan para sa lahat ng cipher, naglalaman din ito talahanayan ng pagpapalit . Nasa ibaba ang mga pangunahing katangian ng mga pangunahing istruktura ng GOST.

Ang pangunahing hakbang ng conversion ng crypto.

Ang pangunahing hakbang sa conversion ng crypto ay mahalagang isang pahayag na tumutukoy sa conversion ng isang 64-bit na bloke ng data. Ang isang karagdagang parameter ng operator na ito ay isang 32-bit block, na ginagamit bilang isang pangunahing elemento. Ang pangunahing diagram ng algorithm ng hakbang ay ipinapakita sa Figure 1.


Figure 1. Scheme ng pangunahing hakbang ng crypto-conversion ng GOST 28147-89 algorithm.

Nasa ibaba ang mga paliwanag ng pangunahing hakbang na algorithm:

Hakbang 0

  • N– isang na-convert na 64-bit na data block, sa panahon ng pagpapatupad ng hakbang na menor de edad nito ( N 1) at nakatatanda ( N 2) ang mga bahagi ay itinuturing bilang hiwalay na 32-bit unsigned integer. Kaya, maaari tayong magsulat N=(N 1 ,N 2).
  • X- 32-bit na pangunahing elemento;

Hakbang 1

Dagdag na may susi. Ang mas mababang kalahati ng na-convert na bloke ay idinagdag modulo 2 32 kasama ang pangunahing elemento na ginamit sa hakbang, ang resulta ay ililipat sa susunod na hakbang;

Hakbang 2

Pagpapalit ng block. Ang 32-bit na halaga na nakuha sa nakaraang hakbang ay binibigyang-kahulugan bilang isang hanay ng walong 4-bit na mga bloke ng code: S=(S 0 , S 1 , S 2 , S 3 , S 4 , S 5 , S 6 , S 7), at S 0 ay naglalaman ng 4 na pinakabata, at S 7 - 4 na pinakamahalagang piraso S.

Susunod, ang halaga ng bawat isa sa walong bloke ay pinapalitan ng bago, na pinili mula sa kapalit na talahanayan tulad ng sumusunod: block value S i pagbabago sa S i-ika-ika-sunod na elemento (pagnunumero mula sa zero) i-na kapalit na node (i.e. i-ika-linya ng kapalit na talahanayan, pagnunumero din mula sa simula). Sa madaling salita, ang isang elemento mula sa kapalit na talahanayan na may isang row number na katumbas ng bilang ng block na pinapalitan at isang column number na katumbas ng halaga ng block na pinapalitan bilang isang 4-bit non-negative integer ay pinili bilang isang kapalit. para sa halaga ng bloke. Ginagawa nitong malinaw ang laki ng kapalit na talahanayan: ang bilang ng mga row dito ay katumbas ng bilang ng mga 4-bit na elemento sa isang 32-bit na data block, iyon ay, walo, at ang bilang ng mga column ay katumbas ng bilang ng iba't ibang mga halaga ng isang 4-bit na bloke ng data, na kilala bilang 2 4, labing-anim.

Hakbang 3

I-rotate ang 11 bits pakaliwa. Ang resulta ng nakaraang hakbang ay paikot na inililipat ng 11 bits patungo sa pinakamahalagang bits at ipinapadala sa susunod na hakbang. Sa algorithm diagram, ang simbolo ay nagpapahiwatig ng function ng cyclically shifting nito argument 11 bits sa kaliwa, i.e. patungo sa mas mataas na ranggo.

Hakbang 4

Bitwise na karagdagan: Ang halaga na nakuha sa hakbang 3 ay idinagdag bitwise modulo 2 na ang mas mataas na kalahati ng bloke ay kino-convert.

Hakbang 5

Paglipat kasama ang kadena: ang ibabang bahagi ng na-convert na bloke ay inilipat sa lugar ng mas matanda, at ang resulta ng nakaraang hakbang ay inilalagay sa lugar nito.

Hakbang 6

Ang resultang halaga ng na-convert na bloke ay ibinalik bilang resulta ng pagpapatupad ng algorithm ng pangunahing hakbang ng conversion ng crypto.

Mga pangunahing cycle ng cryptographic transformations.

Tulad ng nabanggit sa simula ng artikulong ito, ang GOST ay kabilang sa klase ng mga block cipher, iyon ay, ang yunit ng pagproseso ng impormasyon dito ay isang bloke ng data. Samakatuwid, medyo makatuwirang asahan na tutukuyin nito ang mga algorithm para sa mga pagbabagong cryptographic, iyon ay, para sa pag-encrypt, pag-decrypting at "accounting" para sa isang kontrol na kumbinasyon ng isang bloke ng data. Ang mga algorithm na ito ay tinatawag mga pangunahing siklo GOST, na nagbibigay-diin sa kanilang pangunahing kahalagahan para sa pagtatayo ng cipher na ito.

Ang mga pangunahing loop ay binuo mula sa pangunahing hakbang cryptographic na pagbabagong tinalakay sa nakaraang seksyon. Sa panahon ng pangunahing hakbang, isang 32-bit key element lamang ang ginagamit, habang ang GOST key ay naglalaman ng walong naturang elemento. Samakatuwid, upang ang susi ay ganap na magamit, ang bawat isa sa mga pangunahing loop ay dapat na paulit-ulit na isagawa ang pangunahing hakbang kasama ang iba't ibang elemento nito. Kasabay nito, tila natural na sa bawat pangunahing cycle ang lahat ng mga pangunahing elemento ay dapat gamitin sa parehong bilang ng beses para sa mga kadahilanan ng lakas ng cipher, ang bilang na ito ay dapat na higit sa isa.

Ang lahat ng mga pagpapalagay na ginawa sa itaas, batay lamang sa sentido komun, ay naging tama. Ang mga pangunahing loop ay binubuo ng paulit-ulit na pagpapatupad pangunahing hakbang gamit ang iba't ibang mga pangunahing elemento at naiiba sa bawat isa lamang sa bilang ng mga pag-uulit ng hakbang at ang pagkakasunud-sunod kung saan ginagamit ang mga pangunahing elemento. Nasa ibaba ang order na ito para sa iba't ibang cycle.

Ikot ng pag-encrypt 32-Z:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 .


Larawan 2a. Scheme ng siklo ng pag-encrypt 32-З

Ikot ng pag-decryption 32-P:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 .


Larawan 2b. Scheme ng 32-P decryption cycle

Siklo ng produksyon ng imitasyon insert 16-З:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 .


Larawan 2c. Scheme ng production cycle ng imitasyon insert 16-Z.

Ang bawat isa sa mga cycle ay may sariling alphanumeric na pagtatalaga na naaayon sa pattern " n-X", kung saan ang unang elemento ng pagtatalaga ( n), ay tumutukoy sa bilang ng mga pag-uulit ng pangunahing hakbang sa cycle, at ang pangalawang elemento ng pagtatalaga ( X), sulat, ay tumutukoy sa pagkakasunud-sunod ng pag-encrypt ("Z") o pag-decryption ("P") sa paggamit ng mga pangunahing elemento. Ang order na ito ay nangangailangan ng karagdagang paliwanag:

Ang ikot ng pag-decryption ay dapat na kabaligtaran ng ikot ng pag-encrypt, iyon ay, ang sunud-sunod na aplikasyon ng dalawang mga siklo na ito sa isang arbitrary na bloke ay dapat na sa huli ay magbunga ng orihinal na bloke, na makikita sa sumusunod na kaugnayan: C 32-Р ( C 32-З ( T))=T, Saan T- di-makatwirang 64-bit na bloke ng data, C X ( T) – ang resulta ng loop execution X sa itaas ng bloke ng data T. Upang matupad ang kundisyong ito para sa mga algorithm na katulad ng GOST, kinakailangan at sapat na ang pagkakasunud-sunod ng paggamit ng mga pangunahing elemento ng kaukulang mga siklo ay magkabaligtaran. Madaling i-verify ang bisa ng nakasulat na kondisyon para sa kaso na isinasaalang-alang sa pamamagitan ng paghahambing ng mga pagkakasunud-sunod sa itaas para sa mga cycle 32-З at 32-Р. Isang kawili-wiling kahihinatnan ang sumusunod mula sa itaas: ang property ng isang cycle na inverse sa isa pang cycle ay reciprocal, ibig sabihin, ang 32-Z cycle ay inverse sa 32-P cycle. Sa madaling salita, ang pag-encrypt ng isang bloke ng data ay maaaring gawin ayon sa teorya gamit ang isang ikot ng pag-decryption, kung saan ang pag-decryption ng isang bloke ng data ay dapat isagawa ng isang ikot ng pag-encrypt. Sa dalawang magkabaligtaran na mga siklo, ang alinman sa isa ay maaaring gamitin para sa pag-encrypt, kung gayon ang pangalawa ay dapat gamitin upang i-decrypt ang data, gayunpaman, ang pamantayan ng GOST 28147-89 ay nagtatalaga ng mga tungkulin sa mga siklo at hindi binibigyan ang gumagamit ng karapatang pumili sa bagay na ito. .

Ang cycle para sa paggawa ng isang imitative insert ay kalahati hangga't ang encryption cycle, ang pagkakasunud-sunod ng paggamit ng mga pangunahing elemento dito ay kapareho ng sa unang 16 na hakbang ng encryption cycle, na madaling i-verify sa pamamagitan ng pagsasaalang-alang sa mga sequence sa itaas, samakatuwid ang pagkakasunud-sunod na ito sa pagtatalaga ng cycle ay naka-encode ng parehong titik na "Z".

Ang mga scheme ng mga pangunahing cycle ay ipinapakita sa Mga Figure 2a-c. Ang bawat isa sa kanila ay tumatagal bilang isang argumento at nagbabalik bilang isang resulta ng isang 64-bit na bloke ng data, na ipinahiwatig sa mga diagram N. Hakbang ng Simbolo( N,X) ay tumutukoy sa pagpapatupad ng pangunahing hakbang sa pagbabagong-anyo ng crypto para sa isang bloke ng data N gamit ang pangunahing elemento X. May isa pang pagkakaiba sa pagitan ng encryption at imitative insertion cycle calculation, na hindi binanggit sa itaas: sa pagtatapos ng basic encryption cycle, ang mataas at mababang bahagi ng resulta block ay pinapalitan, ito ay kinakailangan para sa kanilang mutual reversibility.

Mga pangunahing mode ng pag-encrypt.

Ang GOST 28147-89 ay nagbibigay ng sumusunod na tatlong data encryption mode:

  • simpleng kapalit,
  • paglalaro,
  • paglalaro na may feedback,

at isang karagdagang mode para sa pagbuo ng mga imitasyon na pagsingit.

Sa alinman sa mga mode na ito, ang data ay pinoproseso sa mga bloke ng 64 bits, kung saan ang array ay nahahati at sumasailalim sa cryptographic transformation, kaya naman ang GOST ay tumutukoy sa mga block cipher. Gayunpaman, sa dalawang gamma mode, posibleng magproseso ng hindi kumpletong bloke ng data na mas mababa sa 8 byte ang laki, na mahalaga kapag nag-e-encrypt ng mga array ng data ng di-makatwirang laki, na maaaring hindi isang multiple ng 8 byte.

Bago lumipat sa isang talakayan ng mga partikular na cryptographic transformation algorithm, kailangang linawin ang notasyong ginamit sa mga diagram sa mga sumusunod na seksyon:

T O, T w – mga hanay ng bukas at naka-encrypt na data, ayon sa pagkakabanggit;

, – i- sunud-sunod na 64-bit na mga bloke ng bukas at naka-encrypt na data, ayon sa pagkakabanggit: , , maaaring hindi kumpleto ang huling bloke: ;

n– bilang ng mga 64-bit na bloke sa hanay ng data;

C X – function ng pag-convert ng 64-bit na data block gamit ang basic cycle na "X" algorithm.

Ngayon ay ilalarawan namin ang pangunahing mga mode ng pag-encrypt:

Madaling palitan.

Ang pag-encrypt sa mode na ito ay binubuo ng paglalapat ng cycle 32-З sa mga bloke ng bukas na data, decryption - cycle 32-Р sa mga bloke ng naka-encrypt na data. Ito ang pinakasimple sa mga mode; Ang mga scheme ng encryption at decryption algorithm sa simpleng kapalit na mode ay ipinapakita sa Mga Figure 3a at b, ayon sa pagkakabanggit, ang mga ito ay walang halaga at hindi nangangailangan ng mga komento.


Pagguhit. 3a. Algoritmo ng pag-encrypt ng data sa simpleng kapalit na mode


Pagguhit. 3b. Algoritmo ng pag-decryption ng data sa simpleng kapalit na mode

Ang laki ng hanay ng mga bukas o naka-encrypt na data, napapailalim sa pag-encrypt o pag-decryption, ayon sa pagkakabanggit, ay dapat na maramihang 64 bits: | T o |=| T w |=64· n , pagkatapos isagawa ang operasyon, ang laki ng resultang array ng data ay hindi nagbabago.

Ang simpleng kapalit na mode ng pag-encrypt ay may mga sumusunod na tampok:

  • Dahil ang mga bloke ng data ay independiyenteng naka-encrypt sa isa't isa at ang kanilang posisyon sa hanay ng data, ang pag-encrypt ng dalawang magkaparehong plaintext na bloke ay nagreresulta sa magkaparehong mga bloke ng ciphertext at vice versa. Ang nabanggit na pag-aari ay magbibigay-daan sa cryptanalyst na gumawa ng konklusyon tungkol sa pagkakakilanlan ng orihinal na mga bloke ng data kung makakatagpo siya ng magkaparehong mga bloke sa naka-encrypt na hanay ng data, na hindi katanggap-tanggap para sa isang seryosong cipher.
  • Kung ang haba ng naka-encrypt na array ng data ay hindi isang multiple ng 8 byte o 64 bits, ang problema ay lumitaw kung paano at paano dagdagan ang huling hindi kumpletong data block ng array sa buong 64 bits. Ang gawaing ito ay hindi kasing simple ng tila sa unang tingin. Ang mga malinaw na solusyon tulad ng "magdagdag ng isang hindi kumpletong bloke na may zero bits" o, sa pangkalahatan, "magdagdag ng isang hindi kumpletong bloke na may isang nakapirming kumbinasyon ng zero at isang bit" ay maaaring, sa ilalim ng ilang mga kundisyon, ay nagbibigay ng pagkakataon sa cryptanalyst na gumamit ng mga pamamaraan ng brute force upang matukoy ang mga nilalaman ng napaka-hindi kumpletong bloke na ito, at ang katotohanang ito ay nangangahulugan ng pagbaba ng security cipher. Bilang karagdagan, ang haba ng ciphertext ay magbabago, na tumataas sa pinakamalapit na integer multiple ng 64 bits, na kadalasang hindi kanais-nais.

Sa unang sulyap, ginagawang halos imposible ng mga feature sa itaas na gamitin ang simpleng kapalit na mode, dahil magagamit lang ito upang i-encrypt ang mga array ng data na may sukat na maramihang 64 bits at hindi naglalaman ng paulit-ulit na 64-bit na mga bloke. Tila na para sa anumang tunay na data imposibleng magarantiya ang katuparan ng mga kundisyong ito. Ito ay halos totoo, ngunit mayroong isang napakahalagang pagbubukod: tandaan na ang laki ng key ay 32 byte, at ang laki ng kapalit na talahanayan ay 64 bytes. Bilang karagdagan, ang pagkakaroon ng paulit-ulit na 8-byte na mga bloke sa isang susi o kapalit na talahanayan ay magsasaad ng kanilang napakababang kalidad, kaya ang gayong pag-uulit ay hindi maaaring umiral sa mga tunay na pangunahing elemento. Kaya, nalaman namin na ang simpleng kapalit na mode ay angkop para sa pag-encrypt ng pangunahing impormasyon, lalo na dahil ang ibang mga mode ay hindi gaanong maginhawa para sa layuning ito, dahil nangangailangan sila ng karagdagang elemento ng pag-synchronize ng data - isang mensahe ng pag-sync (tingnan ang susunod na seksyon). Ang aming hula ay tama; Inireseta ng GOST ang paggamit ng simpleng kapalit na mode na eksklusibo para sa pag-encrypt ng pangunahing data.

Gumming.

Paano mo mapupuksa ang mga pagkukulang ng simpleng kapalit na mode? Upang gawin ito, kinakailangan upang gawing posible na i-encrypt ang mga bloke na may sukat na mas mababa sa 64 bits at tiyakin na ang bloke ng ciphertext ay nakasalalay sa numero nito, sa madaling salita, gawing random proseso ng pag-encrypt. Sa GOST ito ay nakakamit sa dalawang magkakaibang paraan sa dalawang mga mode ng pag-encrypt, na nagbibigay paglalaro . Gumming - ito ang pagpapataw (pag-alis) ng isang cryptographic na sukat sa bukas (naka-encrypt) na data, iyon ay, isang pagkakasunud-sunod ng mga elemento ng data na nabuo gamit ang ilang cryptographic algorithm upang makakuha ng naka-encrypt (bukas) na data. Upang maglapat ng gamma sa panahon ng pag-encrypt at alisin ito sa panahon ng pag-decryption, dapat gamitin ang magkabilang kabaligtaran na mga pagpapatakbo ng binary, halimbawa, karagdagan at pagbabawas modulo 2 64 para sa 64-bit na mga bloke ng data. Sa GOST, para sa layuning ito, ginagamit ang pagpapatakbo ng bitwise na karagdagan modulo 2, dahil ito ang kabaligtaran ng sarili nito at, bukod dito, ay pinakasimpleng ipinatupad sa hardware. Nilulutas ng Gamma ang parehong mga nabanggit na problema: una, ang lahat ng mga elemento ng gamma ay iba para sa mga tunay na naka-encrypt na array at, samakatuwid, ang resulta ng pag-encrypt ng kahit na dalawang magkaparehong bloke sa isang array ng data ay magiging iba. Pangalawa, kahit na ang mga elemento ng gamma ay nabuo sa pantay na mga bahagi ng 64 bits, isang bahagi ng naturang bloke na may sukat na katumbas ng laki ng naka-encrypt na bloke ay maaaring gamitin.

Ngayon ay lumipat tayo nang direkta sa paglalarawan ng gamma mode. Ang gamma para sa mode na ito ay nakuha tulad ng sumusunod: sa tulong ng ilang algorithmic recurrent number sequence generator (RNGN), 64-bit data block ay nabuo, na pagkatapos ay na-convert gamit ang 32-3 cycle, iyon ay, naka-encrypt sa simpleng kapalit na mode, na nagreresulta sa mga bloke ng gamma. Dahil sa katotohanan na ang aplikasyon at pag-alis ng gamma ay isinasagawa gamit ang parehong bitwise na eksklusibo o operasyon, ang mga algorithm ng pag-encrypt at decryption sa gamma mode ay magkapareho, ang kanilang pangkalahatang pamamaraan ay ipinapakita sa Figure 4.

Ang RGPG na ginamit upang makabuo ng sukat ay isang paulit-ulit na function: – mga elemento ng paulit-ulit na pagkakasunud-sunod, f- pag-andar ng pagbabagong-anyo. Dahil dito, ang tanong ay hindi maiiwasang lumitaw tungkol sa pagsisimula nito, iyon ay, tungkol sa elemento Sa katunayan, ang elemento ng data na ito ay isang parameter ng algorithm para sa mga diagram na itinalaga bilang S, at tinatawag sa cryptography i-sync ang pagpapadala , at sa aming GOST – paunang pagpuno isa sa mga nagrerehistro ng encoder. Para sa ilang mga kadahilanan, nagpasya ang mga developer ng GOST na gamitin hindi ang mensahe ng pag-synchronize nang direkta upang simulan ang RGFC, ngunit ang resulta ng conversion nito ayon sa 32-Z cycle: . Ang pagkakasunud-sunod ng mga elemento na nabuo ng RGHR ay ganap na nakasalalay sa paunang pagpuno nito, iyon ay, ang mga elemento ng sequence na ito ay isang function ng kanilang numero at ang paunang pagpuno ng RGHR: kung saan f i(X)=f(f i –1 (X)), f 0 (X)=X. Isinasaalang-alang ang pagbabagong-anyo gamit ang simpleng kapalit na algorithm, ang pag-asa sa susi ay idinagdag din:

saan Г ii-ika elemento ng iskala, K- susi.

Kaya, ang pagkakasunud-sunod ng mga elemento ng gamma na gagamitin sa gamma mode ay natatanging tinutukoy ng pangunahing data at ang mensahe ng pag-synchronize. Naturally, para mabaliktad ang pamamaraan ng pag-encrypt, ang parehong mensahe ng pag-synchronize ay dapat gamitin sa mga proseso ng pag-encrypt at pag-decryption. Mula sa pangangailangan ng pagiging natatangi ng gamma, ang kabiguang sumunod sa kung saan ay humahantong sa isang sakuna pagbaba sa lakas ng cipher, ito ay sumusunod na upang i-encrypt ang dalawang magkaibang mga array ng data sa parehong key, ito ay kinakailangan upang matiyak ang paggamit ng iba't ibang mga mensahe ng pag-synchronize. Ito ay humahantong sa pangangailangan na mag-imbak o magpadala ng mensahe ng pag-synchronize kasama ang mga channel ng komunikasyon kasama ang naka-encrypt na data, bagama't sa ilang mga espesyal na kaso maaari itong paunang natukoy o kalkulahin sa isang espesyal na paraan kung ang pag-encrypt ng dalawang array na may parehong key ay hindi kasama.

Ngayon tingnan natin ang RGPC na ginamit sa GOST upang makabuo ng mga elemento ng gamut. Una sa lahat, dapat tandaan na hindi kinakailangang magbigay ng anumang istatistikal na katangian ng nabuong pagkakasunod-sunod ng mga numero. Ang RGHR ay idinisenyo ng mga developer ng GOST batay sa pangangailangan na matupad ang mga sumusunod na kondisyon:

  • ang panahon ng pag-uulit ng pagkakasunud-sunod ng mga numero na nabuo ng RGPC ay hindi dapat mag-iba nang malaki (sa mga terminong porsyento) mula sa pinakamataas na posibleng halaga para sa isang ibinigay na laki ng bloke na 2 64;
  • Ang mga katabing halaga na ginawa ng RGPG ay dapat na magkakaiba sa bawat isa sa bawat byte, kung hindi, ang gawain ng cryptanalyst ay magiging simple;
  • Ang RGPC ay dapat na medyo madaling ipatupad pareho sa hardware at software sa mga pinakakaraniwang uri ng mga processor, karamihan sa mga ito ay kilala na 32-bit.

Batay sa nakalistang mga prinsipyo, ang mga tagalikha ng GOST ay nagdisenyo ng isang matagumpay na RGHR, na may mga sumusunod na katangian:

saan C 0 =1010101 16 ;

saan C 1 =1010104 16 ;

Ang subscript sa isang numero ay nagpapahiwatig ng sistema ng numero nito, kaya ang mga constant na ginamit sa hakbang na ito ay nakasulat sa hexadecimal.

Ang pangalawang expression ay nangangailangan ng mga komento, dahil ang GOST text ay naglalaman ng iba pa: , na may parehong pare-parehong halaga C 1 . Ngunit higit pa sa teksto ng pamantayan ang isang komento ay ibinigay na, lumalabas, sa ilalim ng operasyon ng pagkuha ng natitirang modulo 2 32 –1 doon ay hindi naiintindihan sa parehong paraan tulad ng sa matematika. Ang pagkakaiba ay ayon sa GOST (2 32 –1) mod(2 32 –1)=(2 32 –1), hindi 0. Sa katunayan, pinapasimple nito ang pagpapatupad ng formula, at ang mathematically correct expression para dito ay ibinigay sa itaas.

  • ang panahon ng pag-uulit ng pagkakasunud-sunod para sa ibabang bahagi ay 2 32, para sa mas lumang bahagi 2 32 –1, para sa buong pagkakasunud-sunod ang panahon ay 2 32 (2 32 –1), ang patunay ng katotohanang ito ay napakasimple, kunin ito sarili mo. Ang una sa dalawang formula ay ipinatupad sa isang utos, ang pangalawa, sa kabila ng maliwanag na pagiging kumplikado nito, sa dalawang utos sa lahat ng modernong 32-bit na mga processor - ang unang utos ay ang karaniwang karagdagan modulo 2 32 na may pag-iimbak ng bitbit, at ang pangalawa. idinaragdag ng command ang bitbit na bit sa resultang kahulugan.

Ang encryption algorithm diagram sa gamma mode ay ipinapakita sa Figure 4 sa ibaba ay mga paliwanag para sa scheme:


Figure 4. Algorithm para sa pag-encrypt (pag-decrypting) ng data sa gamma mode.

Hakbang 0

Tinutukoy ang data ng input para sa pangunahing hakbang ng conversion ng crypto:

  • T o(w) – isang hanay ng mga bukas (naka-encrypt) na data ng di-makatwirang laki, na napapailalim sa isang pamamaraan ng pag-encrypt (decryption) sa panahon ng pamamaraan, ang array ay na-convert sa 64-bit na mga bahagi;
  • S i-sync ang pagpapadala , isang 64-bit na elemento ng data na kinakailangan upang masimulan ang gamma generator;

Hakbang 1

Ang paunang pagbabago ng mensahe ng pag-synchronise, na isinagawa upang "i-randomize" ito, iyon ay, upang maalis ang mga istatistikal na pattern na naroroon, ang resulta ay ginagamit bilang paunang pagpuno ng RGPC;

Hakbang 2

Isang hakbang ng operasyon ng RGPC, ang pagpapatupad ng paulit-ulit na algorithm nito. Sa hakbang na ito, ang pinakamatanda ( S 1) at junior ( S 0) ang mga bahagi ng sequence ng data ay nabuo nang hiwalay sa isa't isa;

Hakbang 3

Gumming. Ang susunod na 64-bit na elemento na nabuo ng RGPC ay sumasailalim sa isang pamamaraan ng pag-encrypt gamit ang cycle 32-3, ang resulta ay ginagamit bilang elemento ng gamma upang i-encrypt (i-decrypt) ang susunod na bloke ng bukas (naka-encrypt) na data ng parehong laki.

Hakbang 4

Ang resulta ng algorithm ay isang naka-encrypt (na-decrypted) na array ng data.

Ang mga sumusunod ay ang mga tampok ng gamma bilang isang encryption mode:

  1. Ang magkaparehong mga bloke sa isang bukas na hanay ng data ay magbubunga ng iba't ibang mga bloke ng ciphertext kapag naka-encrypt, na gagawing posible na itago ang katotohanan ng kanilang pagkakakilanlan.
  2. Dahil ang gamma overlay ay ginaganap nang bitwise, ang pag-encrypt ng isang bahagyang bloke ng data ay madaling maisagawa sa pamamagitan ng pag-encrypt ng mga piraso ng bahagyang bloke na iyon sa pamamagitan ng paggamit ng kaukulang mga piraso ng gamma block. Kaya, upang i-encrypt ang isang hindi kumpletong bloke ng 1 bit, ayon sa pamantayan, ang hindi bababa sa makabuluhang bit mula sa gamma block ay dapat gamitin.
  3. Ang mensahe ng pag-sync na ginamit para sa pag-encrypt ay dapat na maipadala sa anumang paraan para magamit sa pag-decryption. Ito ay maaaring makamit sa mga sumusunod na paraan:
  • mag-imbak o magpadala ng mensahe ng pag-synchronize kasama ng isang naka-encrypt na array ng data, na hahantong sa pagtaas ng laki ng array ng data kapag naka-encrypt ayon sa laki ng mensahe ng pag-synchronize, iyon ay, ng 8 bytes;
  • gumamit ng isang paunang natukoy na halaga ng mensahe ng pag-synchronise o bumuo nito nang sabay-sabay ng pinagmulan at tagatanggap ayon sa isang tiyak na batas, sa kasong ito ay walang pagbabago sa laki ng ipinadala o nakaimbak na hanay ng data;

Ang parehong mga pamamaraan ay umakma sa isa't isa, at sa mga bihirang kaso kung saan ang una, pinaka-karaniwang isa ay hindi gumagana, ang pangalawa, mas kakaibang isa ay maaaring gamitin. Ang pangalawang paraan ay may mas kaunting aplikasyon, dahil posible na gumawa ng isang mensahe ng pag-synchronize na paunang natukoy lamang kung hindi hihigit sa isang array ng data ang naka-encrypt sa isang naibigay na hanay ng mga pangunahing impormasyon, na hindi nangyayari nang madalas. Hindi rin laging posible na makabuo ng isang mensahe ng pag-synchronize nang sabay-sabay sa pinagmulan at tatanggap ng isang array ng data, dahil nangangailangan ito ng mahigpit na koneksyon sa isang bagay sa system. Kaya, ang tila tamang ideya ng paggamit ng numero ng ipinadalang mensahe bilang isang mensahe ng pag-synchronize sa isang sistema para sa pagpapadala ng mga naka-encrypt na mensahe ay hindi angkop, dahil ang mensahe ay maaaring mawala at hindi maabot ang tatanggap, kung saan ang mga sistema ng pag-encrypt ng ang source at receiver ay magiging desynchronize. Samakatuwid, sa kasong isinasaalang-alang, walang alternatibo sa pagpapadala ng mensahe ng pag-synchronize kasama ng naka-encrypt na mensahe.

Sa kabilang banda, maaaring ibigay ang kabaligtaran na halimbawa. Sabihin nating ang data encryption ay ginagamit upang protektahan ang impormasyon sa disk, at ito ay ipinatupad sa isang mababang antas upang matiyak ang independiyenteng pag-access, ang data ay naka-encrypt ng sektor; Sa kasong ito, imposibleng iimbak ang mensahe ng pag-sync kasama ang naka-encrypt na data, dahil hindi mababago ang laki ng sektor, ngunit maaari itong kalkulahin bilang ilang function ng disk read head number, track (cylinder) number, at sector number sa track. Sa kasong ito, ang mensahe ng pag-synchronize ay nakatali sa posisyon ng sektor sa disk, na malamang na hindi magbago nang walang pag-reformat ng disk, iyon ay, nang hindi sinisira ang data dito.

Ang gamma mode ay may isa pang kawili-wiling tampok. Sa mode na ito, ang mga bit ng data array ay naka-encrypt nang hiwalay sa isa't isa. Kaya, ang bawat bit ng ciphertext ay nakasalalay sa kaukulang bit ng plaintext at, siyempre, ang sequence number ng bit sa array: . Ito ay nagpapahiwatig na ang pagbabago ng isang ciphertext bit sa kabaligtaran na halaga ay magreresulta sa isang katulad na pagbabago sa kabaligtaran na halaga ng isang plaintext bit:

kung saan nagsasaad ng baligtad na may paggalang sa t bit value().

Ang property na ito ay nagbibigay sa isang attacker ng pagkakataon, sa pamamagitan ng pag-impluwensya sa mga ciphertext bits, na gumawa ng predictable at kahit na na-target na mga pagbabago sa kaukulang plaintext na nakuha pagkatapos ng decryption, nang hindi nagtataglay ng sikretong key. Inilalarawan nito ang kilalang katotohanan sa cryptology na ang pagiging lihim at pagiging tunay ay magkaibang katangian mga sistema ng cryptographic . Sa madaling salita, ang mga katangian ng isang cryptosystem upang magbigay ng proteksyon laban sa hindi awtorisadong pag-access sa mga nilalaman ng isang mensahe at laban sa hindi awtorisadong mga pagbabago sa isang mensahe ay independyente at maaari lamang mag-overlap sa ilang partikular na kaso. Nangangahulugan ito na mayroong mga cryptographic algorithm na nagbibigay ng isang tiyak na lihim ng naka-encrypt na data at sa parehong oras ay hindi nagpoprotekta laban sa mga pagbabago sa anumang paraan, at vice versa, tinitiyak ang pagiging tunay ng data at hindi nililimitahan ang kakayahang maging pamilyar sa kanilang sarili. sila. Para sa kadahilanang ito, ang itinuturing na pag-aari ng gamma mode ay hindi dapat ituring na kawalan nito.

Gamma na may feedback.

Ang mode na ito ay halos kapareho sa gamma mode at naiiba lamang dito sa paraan ng pagbuo ng mga elemento ng gamma - ang susunod na elemento ng gamma ay nabuo bilang isang resulta ng 32-3 cycle na pagbabago ng nakaraang bloke ng naka-encrypt na data, at upang i-encrypt ang unang bloke ng array ng data, ang gamma element ay nabuo bilang resulta ng parehong ikot ng pag-synchronize ng pagbabago. Nakakamit nito ang block chaining—bawat ciphertext block sa mode na ito ay nakadepende sa katumbas at lahat ng nakaraang plaintext block. Samakatuwid, kung minsan ang mode na ito ay tinatawag paglalaro na may magkakaugnay na mga bloke . Ang katotohanan na ang mga bloke ay naka-link ay walang epekto sa lakas ng cipher.

Ang diagram ng encryption at decryption algorithm sa gamma mode na may feedback ay ipinapakita sa Figure 5 at, dahil sa pagiging simple nito, ay hindi nangangailangan ng anumang mga komento.


Figure 5. Algorithm para sa pag-encrypt (pag-decrypting) ng data sa gamma mode na may feedback.

Ang pag-encrypt sa closed-loop na gamma mode ay may parehong mga tampok tulad ng pag-encrypt sa regular na gamma mode, maliban sa epekto ng ciphertext corruption sa kaukulang plaintext. Para sa paghahambing, isulat natin ang mga function ng block decryption para sa parehong nabanggit na mga mode:

Gumming;

Gamma na may feedback;

Kung sa regular na gamma mode ang mga pagbabago sa ilang mga bit ng ciphertext ay nakakaapekto lamang sa kaukulang mga bit ng plaintext, kung gayon sa feedback gamma mode ang larawan ay medyo mas kumplikado. Tulad ng makikita mula sa kaukulang equation, kapag nagde-decryption ng data block sa closed-loop na gamma mode, ang open data block ay nakadepende sa katumbas at dating naka-encrypt na data blocks. Samakatuwid, kung ipinakilala mo ang mga pagbaluktot sa isang naka-encrypt na bloke, pagkatapos pagkatapos ng pag-decryption, ang dalawang bloke ng bukas na data ay mababaluktot - ang kaukulang isa at ang isa na sumusunod dito, at ang mga pagbaluktot sa unang kaso ay magiging katulad ng sa gamma mode , at sa pangalawang kaso - tulad ng sa madaling kapalit. Sa madaling salita, sa kaukulang bloke ng bukas na data ang parehong mga bit ay masisira tulad ng sa bloke ng naka-encrypt na data, at sa susunod na bloke ng bukas na data ang lahat ng mga bit ay independiyente sa bawat isa na may posibilidad na 1 / 2 ay magbabago sa kanilang mga halaga.

Pagbuo ng isang simulate insert para sa array ng data.

Sa mga nakaraang seksyon, tinalakay namin ang epekto ng katiwalian ng naka-encrypt na data sa kaukulang plain data. Natukoy namin na kapag nagde-decryption sa simpleng kapalit na mode, ang kaukulang bloke ng bukas na data ay lumalabas na nabaluktot sa isang hindi mahuhulaan na paraan, at kapag nagde-decrypt ng isang bloke sa gamma mode, ang mga pagbabago ay mahuhulaan. Sa closed-loop na gamma mode, ang dalawang bloke ay nagiging distorted, ang isa sa isang predictable na paraan at ang isa sa isang unpredictable na paraan. Nangangahulugan ba ito na mula sa punto ng view ng proteksyon laban sa pagpapataw ng maling data, ang gamma mode ay masama, at ang simpleng pagpapalit at feedback na gamma mode ay mabuti? - Sa anumang kaso. Kapag pinag-aaralan ang sitwasyong ito, kinakailangang isaalang-alang na ang mga hindi mahuhulaan na pagbabago sa isang naka-decrypt na bloke ng data ay maaari lamang makita kung ang parehong data na ito ay kalabisan, at mas malaki ang antas ng kalabisan, mas malamang ang pagtuklas ng pagbaluktot. Ang napakalaking redundancy ay nangyayari, halimbawa, para sa mga teksto sa natural at artipisyal na mga wika, sa kasong ito ang katotohanan ng pagbaluktot ay napansin halos hindi maiiwasan. Gayunpaman, sa ibang mga kaso, halimbawa, kapag na-distort ang mga naka-compress na digitized na sound image, makakakuha lang tayo ng ibang imahe na nakikita ng ating tainga. Ang pagbaluktot sa kasong ito ay mananatiling hindi natukoy, maliban kung, siyempre, mayroong isang priori na impormasyon tungkol sa likas na katangian ng tunog. Ang konklusyon dito ay ito: dahil ang kakayahan ng ilang mga mode ng pag-encrypt na makita ang mga pagbaluktot na ipinakilala sa naka-encrypt na data ay lubos na nakasalalay sa pagkakaroon at antas ng kalabisan ng naka-encrypt na data, ang kakayahang ito ay hindi isang likas na pag-aari ng kaukulang mga mode at hindi maaaring ituring bilang kanilang kalamangan.

Upang malutas ang problema ng pag-detect ng mga pagbaluktot sa isang naka-encrypt na array ng data na may isang naibigay na posibilidad, ang GOST ay nagbibigay para sa isang karagdagang mode ng cryptographic transformation - ang pagbuo ng imitative insertion. Ang imitasyon na insert ay isang kumbinasyon ng kontrol na nakadepende sa bukas na data at lihim na impormasyon ng key. Ang layunin ng paggamit ng imitative insertion ay upang makita ang lahat ng hindi sinasadya o sinadyang pagbabago sa hanay ng impormasyon. Ang problemang inilarawan sa nakaraang talata ay maaaring matagumpay na malulutas sa pamamagitan ng pagdaragdag ng mga imitative insert sa naka-encrypt na data. Para sa isang potensyal na umaatake, ang sumusunod na dalawang gawain ay halos imposibleng lutasin kung wala siyang susi:

  • pagkalkula ng imitative insertion para sa isang naibigay na bukas na hanay ng impormasyon;
  • pagpili ng bukas na data para sa isang ibinigay na simulation insert;

Ang diagram ng algorithm para sa pagbuo ng simulate insert ay ipinapakita sa Figure 6.


Figure 6. Algorithm para sa pagbuo ng simulate insert para sa array ng data.

Ang isang bahagi ng bloke na natanggap sa output ay kinukuha bilang isang simulate insertion, kadalasan ang 32 hindi bababa sa makabuluhang mga bit. Kapag pumipili ng laki ng isang pekeng insert, dapat isaalang-alang na ang posibilidad ng matagumpay na pagpapataw ng maling data ay katumbas ng 2 –| ako | bawat pagtatangka sa pagpili, kung ang umaatake ay walang mas epektibong paraan ng pagpili sa kanyang pagtatapon kaysa sa simpleng paghula. Kapag gumagamit ng 32-bit simulated insert, ang posibilidad na ito ay katumbas ng

Talakayan ng GOST cryptographic algorithm.

Cryptographic na lakas ng GOST.

Kapag pumipili ng isang cryptographic algorithm para magamit sa isang partikular na pag-unlad, ang isa sa mga kadahilanan sa pagtukoy ay ang lakas nito, iyon ay, ang paglaban sa mga pagtatangka ng kalaban na ipakita ito. Ang tanong ng lakas ng isang cipher, sa mas malapit na pagsusuri, ay bumaba sa dalawang magkakaugnay na tanong:

  • Posible bang i-crack ang cipher na ito?
  • kung gayon, gaano kahirap gawin ito;

Ang mga cipher na hindi maaaring masira ay tinatawag na absolutely o theoretically strong. Ang pagkakaroon ng naturang mga cipher ay napatunayan ng teorama ni Shannon, ngunit ang presyo ng lakas na ito ay ang pangangailangang gumamit ng isang susi upang i-encrypt ang bawat mensahe na hindi mas maliit sa laki kaysa sa mensahe mismo. Sa lahat ng mga kaso, maliban sa isang bilang ng mga espesyal, ang presyo na ito ay labis, kaya sa pagsasagawa, ang mga cipher na hindi ganap na ligtas ay pangunahing ginagamit. Kaya, ang pinakakaraniwang mga scheme ng pag-encrypt ay maaaring masira sa isang takdang panahon, o, mas tiyak, sa isang tiyak na bilang ng mga hakbang, ang bawat isa ay ilang operasyon sa mga numero. Para sa kanila, ang pinakamahalagang konsepto ay ang praktikal na pagtitiyaga, na nagpapahayag ng praktikal na kahirapan ng kanilang pagtuklas. Ang isang quantitative measure ng kahirapan na ito ay maaaring ang bilang ng elementarya na arithmetic at logical na mga operasyon na dapat gawin upang buksan ang cipher, iyon ay, upang matukoy ang kaukulang plaintext para sa isang naibigay na ciphertext na may posibilidad na hindi bababa sa isang ibinigay na halaga. Kasabay nito, bilang karagdagan sa decrypted data array, ang cryptanalyst ay maaaring may mga bloke ng bukas na data at kaukulang naka-encrypt na data, o kahit na ang kakayahang makakuha ng kaukulang naka-encrypt na data para sa anumang bukas na data na pipiliin niya - depende sa nakalista at maraming iba pang hindi natukoy mga kondisyon, ang mga hiwalay na uri ng cryptanalysis ay nakikilala.

Ang lahat ng mga modernong cryptosystem ay itinayo sa prinsipyo ng Kirchhoff, iyon ay, ang lihim ng mga naka-encrypt na mensahe ay tinutukoy ng lihim ng susi. Nangangahulugan ito na kahit na ang encryption algorithm mismo ay kilala sa cryptanalyst, siya, gayunpaman, ay hindi magagawang i-decrypt ang mensahe kung wala siyang naaangkop na susi. Ang isang cipher ay itinuturing na mahusay na dinisenyo kung walang paraan upang masira ito nang mas mahusay kaysa sa pamamagitan ng malupit na puwersa sa buong key space, i.e. sa lahat ng posibleng pangunahing halaga. Ang GOST ay malamang na tumutugma sa prinsipyong ito - sa mga taon ng masinsinang pananaliksik, hindi isang solong epektibong paraan ng cryptanalysis nito ang iminungkahi. Sa mga tuntunin ng lakas, ito ay maraming mga order ng magnitude na nakahihigit sa nakaraang pamantayan ng pag-encrypt ng Amerika, ang DES.

Gumagamit ang GOST ng 256-bit key at ang volume ng key space ay 2,256. Wala sa mga electronic device na kasalukuyang umiiral o inaasahang ipapatupad sa malapit na hinaharap ang maaaring gamitin upang kunin ang isang susi sa panahong mas mababa sa maraming daan-daang taon. Ang value na ito ay naging de facto key size standard para sa simetriko cryptographic algorithm sa mga araw na ito, at sinusuportahan din ito ng bagong US encryption standard. Ang dating pamantayang Amerikano, ang DES, na may tunay na sukat ng key na 56 bits at ang dami ng key space na 2 56 lamang ay hindi na sapat na stable sa liwanag ng mga kakayahan ng mga modernong tool sa pag-compute. Ipinakita ito noong huling bahagi ng dekada 90 sa pamamagitan ng ilang matagumpay na pagtatangka ng brute force na sirain ang DES. Bilang karagdagan, ang DES ay madaling kapitan sa mga espesyal na pamamaraan ng cryptanalysis tulad ng kaugalian at linear. Kaugnay nito, ang DES ay maaaring may interes sa pananaliksik o siyentipiko sa halip na praktikal na interes. Noong 1998, opisyal na kinilala ang kahinaan ng cryptographic nito - inirerekomenda ng US National Institute of Standards ang paggamit ng triple DES encryption. At sa pagtatapos ng 2001, isang bagong pamantayan sa pag-encrypt ng US, ang AES, ay opisyal na naaprubahan, na binuo sa iba't ibang mga prinsipyo at libre mula sa mga pagkukulang ng hinalinhan nito.

Mga tala sa arkitektura ng GOST.

Kilalang-kilala na ang pamantayan ng domestic encryption ay isang kinatawan ng isang buong pamilya ng mga cipher na binuo sa parehong mga prinsipyo. Ang pinakasikat na "kamag-anak" nito ay ang dating pamantayan sa pag-encrypt ng Amerika, ang DES algorithm. Ang lahat ng mga cipher na ito, tulad ng GOST, ay naglalaman ng tatlong antas na mga algorithm. Sa core ay palaging may isang tiyak na "pangunahing hakbang", sa batayan kung saan ang "mga pangunahing siklo" ay binuo sa isang katulad na paraan, at sa kanilang batayan ang mga praktikal na pamamaraan para sa pag-encrypt at pagbuo ng mga imitative na pagsingit ay binuo. Kaya, ang pagtitiyak ng bawat isa sa mga cipher ng pamilyang ito ay namamalagi nang tumpak sa pangunahing hakbang nito, o sa halip kahit na sa bahagi nito. Bagaman ang arkitektura ng mga klasikal na block cipher, kung saan ang GOST ay tumutukoy, ay higit pa sa saklaw ng artikulong ito, ito ay nagkakahalaga pa rin ng ilang mga salita tungkol dito.

Ang mga algorithm para sa "pangunahing hakbang ng crypto-transformation" para sa mga cipher tulad ng GOST ay binuo sa magkatulad na paraan, at ang arkitektura na ito ay tinatawag balanseng Feistel network (balanseng Feistel network) pagkatapos ng pangalan ng taong unang nagmungkahi nito. Ang scheme ng conversion ng data sa isang cycle, o, gaya ng karaniwang tawag dito, bilog , ay ipinapakita sa Figure 7.


Figure 7. Mga nilalaman ng pangunahing hakbang ng crypto-transformation para sa mga block cipher na katulad ng GOST.

Ang isang bloke ng pantay na laki ay ibinibigay sa input ng pangunahing hakbang, ang mas mataas at mas mababang mga halves ay pinoproseso nang hiwalay sa bawat isa. Sa panahon ng conversion, ang mas mababang kalahati ng block ay inilalagay sa lugar ng mas lumang kalahati, at ang mas lumang kalahati, pinagsama gamit ang bitwise na operasyon eksklusibo o ” na may resulta ng pagkalkula ng isang tiyak na function, bilang kapalit ng bunso. Kinukuha ng function na ito bilang argumento ang mababang kalahati ng block at ang pangunahing elemento ng impormasyon ( X), ay bahagi ng nilalaman ng cipher at tinatawag na function ng pag-encrypt . Para sa iba't ibang mga kadahilanan, naging kapaki-pakinabang na hatiin ang naka-encrypt na bloke sa dalawang bahagi ng pantay na laki: | N 1 |=|N 2 | – ang katotohanang ito ay makikita ng salitang “balanse” sa pangalan ng arkitektura. Gayunpaman, ang pag-encrypt ng mga hindi balanseng network ay ginagamit din paminsan-minsan, kahit na hindi kasingdalas ng mga balanseng network. Bilang karagdagan, ang mga pagsasaalang-alang ng lakas ng cipher ay nangangailangan na ang laki ng pangunahing elemento ay hindi dapat mas mababa sa laki ng kalahati ng bloke: sa GOST, ang lahat ng tatlong laki ay katumbas ng 32 bits .

Kung ilalapat namin ang nasa itaas sa diagram ng pangunahing hakbang ng algorithm ng GOST, magiging malinaw na ang mga bloke 1,2,3 ng algorithm (tingnan ang Fig. 1) ay tinutukoy ang pagkalkula ng pag-andar ng pag-encrypt nito, at mga bloke 4 at 5 tukuyin ang pagbuo ng output block ng pangunahing hakbang batay sa mga nilalaman ng input block at encryption function na mga halaga. Higit pang mga detalye tungkol sa mga arkitektura ng mga modernong block cipher na may lihim na susi ay matatagpuan sa mga klasikong gawa, o, sa isang inangkop na anyo, sa aking mga gawa.

Sa nakaraang seksyon, inihambing na namin ang DES at GOST sa mga tuntunin ng tibay, ngayon ay ihahambing namin ang mga ito sa mga tuntunin ng functional na nilalaman at kadalian ng pagpapatupad. Sa mga siklo ng pag-encrypt ng GOST, ang pangunahing hakbang ay paulit-ulit na 32 beses, para sa DES ang halagang ito ay 16. Gayunpaman, ang mismong GOST encryption function ay mas simple kaysa sa katulad na DES function, na naglalaman ng maraming irregular bit permutations. Ang mga operasyong ito ay lubhang hindi epektibo sa mga modernong hindi dalubhasang processor. Ang GOST ay hindi naglalaman ng mga naturang operasyon, kaya ito ay mas maginhawa para sa pagpapatupad ng software.

Wala sa mga pagpapatupad ng DES para sa platform ng Intel x86 na sinuri ng may-akda ang umabot sa kalahati ng pagganap ng pagpapatupad ng GOST na iminungkahi sa artikulong ito, sa kabila ng dalawang beses na mas maikling cycle. Ang lahat ng nasa itaas ay nagpapahiwatig na ang mga developer ng GOST ay isinasaalang-alang ang parehong positibo at negatibong aspeto ng DES, at mas makatotohanang tinasa ang kasalukuyan at hinaharap na mga kakayahan ng cryptanalysis. Gayunpaman, ang pagkuha ng DES bilang batayan kapag inihambing ang pagganap ng mga pagpapatupad ng cipher ay hindi na nauugnay. Ang bagong pamantayan sa pag-encrypt ng US ay mas mahusay na gumagana nang may kahusayan - na may parehong laki ng key tulad ng GOST (256 bits), gumagana ang AES ng halos 14% na mas mabilis - ito ay kung ihahambing sa mga tuntunin ng bilang ng mga "elementarya na operasyon". Bilang karagdagan, ang GOST ay halos hindi maaaring parallelize, habang ang AES ay may higit pang mga posibilidad sa bagay na ito. Sa ilang mga arkitektura ang bentahe ng AES ay maaaring mas mababa, sa iba ay maaaring mas malaki. Kaya, sa isang Intel Pentium processor umabot ito sa 28%. Ang mga detalye ay matatagpuan sa.

Mga kinakailangan para sa kalidad ng pangunahing impormasyon at mga mapagkukunan ng mga susi.

Hindi lahat ng mga susi at kapalit na talahanayan ay nagbibigay ng maximum na lakas ng cipher. Ang bawat algorithm ng pag-encrypt ay may sariling pamantayan para sa pagsusuri ng pangunahing impormasyon. Kaya, para sa DES algorithm alam na mayroong tinatawag na " mahina na mga susi ", kapag ginamit, ang koneksyon sa pagitan ng bukas at naka-encrypt na data ay hindi naka-mask nang sapat, at ang cipher ay medyo madaling masira.

Kung ang isang komprehensibong sagot sa tanong tungkol sa pamantayan ng kalidad ng mga key ng GOST at mga talahanayan ng kapalit ay maaaring makuha kahit saan, maaari lamang itong mula sa mga developer ng algorithm. Ang nauugnay na data ay hindi nai-publish sa bukas na press. Gayunpaman, ayon sa itinatag na pamamaraan, upang i-encrypt ang inuri-uri na impormasyon, ang pangunahing data na natanggap mula sa isang awtorisadong organisasyon ay dapat gamitin. Sa hindi direktang paraan, ito ay maaaring magpahiwatig ng pagkakaroon ng mga pamamaraan para sa pagsuri ng pangunahing data para sa mga kuto. Kung ang pagkakaroon ng mahinang mga susi sa GOST ay isang mapagtatalunang isyu, kung gayon ang pagkakaroon ng mahina na mga kapalit na yunit ay walang pag-aalinlangan. Malinaw, ang "walang halaga" na talahanayan ng kapalit, ayon sa kung saan ang anumang halaga ay pinalitan ng kanyang sarili, ay napakahina na kapag ginagamit ito, ang cipher ay maaaring ma-crack nang simple, anuman ang susi.

Tulad ng nabanggit sa itaas, ang pamantayan para sa pagtatasa ng pangunahing impormasyon ay hindi magagamit, ngunit ang ilang pangkalahatang pagsasaalang-alang ay maaari pa ring gawin tungkol sa mga ito.

Susi

Ang susi ay dapat na isang hanay ng mga independiyenteng istatistika na mga bit na kumukuha sa mga halaga na 0 at 1 na may pantay na posibilidad na hindi ganap na maalis na ang ilang partikular na mga halaga ng key ay maaaring maging "mahina", iyon ay, ang Ang cipher ay maaaring hindi magbigay ng tinukoy na antas ng lakas kung ginamit. Gayunpaman, siguro, ang proporsyon ng naturang mga halaga sa kabuuang masa ng lahat ng posibleng mga susi ay hindi gaanong maliit. Hindi bababa sa, ang masinsinang pagsasaliksik sa cipher ay hindi pa nagsiwalat ng isang ganoong susi para sa alinman sa mga kilalang (i.e., iminungkahi ng FAPSI) na mga talahanayan ng pagpapalit. Samakatuwid, ang mga susi na nabuo gamit ang ilang tunay na random na sensor ng numero ay may mataas na kalidad na may posibilidad na naiiba sa pagkakaisa sa maliit na halaga. Kung ang mga susi ay nabuo gamit ang isang pseudo-random na generator ng numero, ang generator na ginamit ay dapat magbigay ng mga istatistikal na katangian sa itaas, at, bilang karagdagan, ay may mataas na lakas ng cryptographic - hindi bababa sa GOST mismo. Sa madaling salita, ang gawain ng pagtukoy sa mga nawawalang miyembro ng pagkakasunud-sunod ng mga elemento na nabuo ng generator ay hindi dapat maging mas simple kaysa sa gawain ng pagsira sa cipher. Bilang karagdagan, maaaring gamitin ang iba't ibang pamantayang pang-istatistika upang tanggihan ang mga susi na may mahinang katangiang pang-istatistika. Sa pagsasagawa, ang dalawang pamantayan ay karaniwang sapat: upang suriin ang equiprobable na pamamahagi ng mga key bit sa pagitan ng mga halaga 0 at 1, ang Pearson test (chi square) ay karaniwang ginagamit, at upang suriin ang kalayaan ng mga key bits, ang run test ay ginagamit. . Maaari mong basahin ang tungkol sa mga nabanggit na pamantayan sa mga aklat-aralin o mga sangguniang aklat sa mga istatistika ng matematika.

Ang pinakamahusay na diskarte para sa pagbuo ng mga susi ay ang paggamit ng mga midrange sensor ng hardware, ngunit hindi ito palaging katanggap-tanggap para sa mga kadahilanang pang-ekonomiya. Kapag bumubuo ng isang maliit na hanay ng mga pangunahing impormasyon, isang makatwirang alternatibo sa paggamit ng naturang sensor ay ang "electronic roulette" na paraan, na malawakang ginagamit sa pagsasanay, kapag ang susunod na nabuong bahagi ng mga random na bit ay nakasalalay sa sandali sa oras na pinindot ng operator ang isang ilang key sa keyboard ng computer. Sa pamamaraang ito, ang pinagmumulan ng random na data ay ang gumagamit ng computer, o mas tiyak, ang mga katangian ng oras ng kanyang reaksyon. Sa kasong ito, ilang piraso lamang ng random na data ang maaaring mabuo sa bawat keystroke, kaya ang pangkalahatang bilis ng pagbuo ng pangunahing impormasyon ay mababa - hanggang sa ilang mga bit bawat segundo. Malinaw, ang diskarte na ito ay hindi angkop para sa pagkuha ng malalaking array ng mga susi.

Sa kaso kung kailan kinakailangan upang bumuo ng isang malaking hanay ng mga pangunahing impormasyon, ang paggamit ng iba't ibang software pseudo-random na mga sensor ng numero ay posible at napakalawak. Dahil ang naturang sensor ay nangangailangan ng mataas na antas ng cryptographic strength, natural na gamitin ang gamma generator ng cipher mismo bilang ito - "pinutol" lang namin ang gamma na nabuo ng cipher sa "mga piraso" ng kinakailangang laki, para sa GOST - 32 byte. Siyempre, para sa diskarteng ito kakailanganin namin ang isang "master key", na makukuha namin gamit ang electronic roulette method na inilarawan sa itaas, at sa tulong nito, gamit ang isang cipher sa gamma generator mode, nakakakuha kami ng isang hanay ng mga pangunahing impormasyon ng laki. kailangan namin. Kaya ang dalawang paraan ng pagbuo ng mga key na ito - "manual" at "algorithmic" - ay gumagana nang magkasabay, na umaakma sa isa't isa. Ang mga pangunahing scheme ng pagbuo sa mga sistema ng proteksyon ng cryptographic na impormasyon na "mababa ang badyet" ay halos palaging binuo sa prinsipyong ito.

Talahanayan ng pagpapalit

Ang kapalit na talahanayan ay isang pangmatagalang elemento ng key, iyon ay, ito ay may bisa para sa isang mas mahabang panahon kaysa sa isang solong key. Ipinapalagay na karaniwan ito sa lahat ng mga node ng pag-encrypt sa loob ng parehong sistema ng proteksyon ng cryptographic. Kahit na nilabag ang pagiging kumpidensyal ng talahanayan ng pagpapalit, ang lakas ng cipher ay nananatiling napakataas at hindi bumababa sa ilalim ng pinapayagang limitasyon. Samakatuwid, walang partikular na pangangailangan na panatilihing lihim ang talahanayan, at sa karamihan ng mga komersyal na aplikasyon ng GOST ito ay ginagawa. Sa kabilang banda, ang talahanayan ng pagpapalit ay isang kritikal na elemento para matiyak ang lakas ng buong cipher. Ang pagpili sa maling talahanayan ay maaaring magresulta sa cipher na madaling masira ng mga kilalang pamamaraan ng cryptanalysis. Ang pamantayan para sa pagbuo ng mga kapalit na yunit ay isang mahigpit na binabantayang lihim at ang FAPSI ay malabong ibahagi ito sa publiko sa malapit na inaasahang hinaharap. Sa huli, ang pagsasabi kung ang isang ibinigay na talahanayan ng pagpapalit ay mabuti o masama ay nangangailangan ng malaking dami ng trabaho—maraming libong oras ng tao at makina. Kapag napili at nagamit na, dapat palitan ang isang table kung at kung ang cipher na gumagamit nito ay naging vulnerable sa isa o ibang uri ng cryptanalysis. Samakatuwid, ang pinakamahusay na pagpipilian para sa karaniwang gumagamit ng cipher ay ang kumuha ng isa sa ilang mga talahanayan na naging pampubliko. Halimbawa, mula sa pamantayan para sa hash function, na kilala rin bilang "central banking" function; Ang impormasyon tungkol sa mga talahanayan na ito ay matatagpuan sa bukas na press at maging sa Internet, kung titingnan mo nang husto.

Para sa mga hindi sanay na dumaan sa madaling ruta, nasa ibaba ang isang pangkalahatang pamamaraan para sa pagkuha ng mga de-kalidad na talahanayan:

  1. Gamit ang isa o ibang diskarte, bumuo ka ng isang set ng walong kapalit na unit na may garantisadong hindi linearity na mga katangian. Mayroong ilang mga naturang pamamaraan, ang isa sa mga ito ay ang paggamit ng tinatawag na mga function ng baluktot.
  2. Sinusuri mo ang katuparan ng pinakasimpleng "pamantayan sa kalidad" - halimbawa, ang mga na-publish para sa mga kapalit na node ng DES. Narito ang ilan pang pangkalahatang pagsasaalang-alang sa bagay na ito: Ang bawat substitution node ay maaaring ilarawan ng apat na lohikal na function mula sa apat na lohikal na argumento. Kung ang mga function na ito ay nakasulat sa minimal na anyo(ibig sabihin, na may pinakamababang posibleng haba ng expression) ay hindi magiging kumplikado, ang naturang kapalit na node ay tinatanggihan. Bilang karagdagan, ang mga indibidwal na function sa loob ng buong talahanayan ng pagpapalit ay dapat na sapat na naiiba sa bawat isa. Sa yugtong ito, maraming malinaw na mababang kalidad na mga talahanayan ang inalis.
  3. Para sa isang cipher na may mga talahanayan na iyong pinili, bumuo ng iba't ibang mga bilog na modelo na naaayon sa iba't ibang uri ng cryptanalysis at sukatin ang mga kaukulang katangian ng "profile". Kaya, para sa linear cryptanalysis, bumuo ng isang linear statistical analogue ng encryption round at kalkulahin ang "profile" na katangian - isang tagapagpahiwatig ng nonlinearity. Kung ito ay hindi sapat, ang kapalit na talahanayan ay tatanggihan.
  4. Sa wakas, gamit ang mga resulta ng nakaraang talata, isasailalim mo ang cipher kasama ang talahanayan na iyong pinili sa masinsinang pananaliksik - isang pagtatangka sa cryptanalysis gamit ang lahat ng kilalang pamamaraan. Ang yugtong ito ang pinakamahirap at nakakaubos ng oras. Ngunit kung ito ay ginawa na may mataas na kalidad, kung gayon na may mataas na antas ng posibilidad ay masasabi na ang cipher na may mga talahanayan na iyong pinili ay hindi mabibiyak ng mga mortal lamang, at, posible, ay magiging masyadong matigas para sa katalinuhan. serbisyo.

Gayunpaman, magagawa mo ito nang mas simple. Ang bagay ay ang mas maraming round sa isang cipher, mas mababa ang impluwensya ng mga katangian ng lakas ng isang round sa lakas ng buong cipher. Ang GOST ay may kasing dami ng 32 rounds - higit pa sa halos lahat ng cipher na may katulad na arkitektura. Samakatuwid, para sa karamihan ng mga domestic at komersyal na aplikasyon ay sapat na upang makakuha ng mga substitution node bilang mga independiyenteng random na permutasyon ng mga numero mula 0 hanggang 15. Ito ay praktikal na maipapatupad, halimbawa, sa pamamagitan ng pag-shuffling ng isang deck ng labing-anim na card, na ang bawat isa ay itinalaga ng isa sa ang mga halaga ng tinukoy na hanay.

Tungkol sa talahanayan ng pagpapalit, isa pang kawili-wiling katotohanan ang dapat tandaan. Para sa reversibility ng mga cycle ng pag-encrypt na "32-З" at "32-Р" hindi kinakailangan na ang mga kapalit na node ay mga permutasyon ng mga numero mula 0 hanggang 15. Gumagana ang lahat kahit na ang kapalit na node ay may mga dobleng elemento, at tinutukoy ang kapalit sa pamamagitan ng naturang node , ay hindi maibabalik, ngunit sa kasong ito ang lakas ng cipher ay nabawasan. Kung bakit eksakto ito ay hindi tinalakay sa artikulong ito, ngunit hindi mahirap i-verify ang katotohanan mismo. Upang gawin ito, sapat na subukan munang i-encrypt at pagkatapos ay i-decrypt ang isang bloke ng data gamit ang isang "depektong" kapalit na talahanayan, ang mga node na naglalaman ng mga dobleng halaga.

Mga pagkakaiba-iba sa tema ng GOST

Kadalasan, para sa paggamit sa isang sistema ng proteksyon ng data ng cryptographic, kinakailangan ang isang algorithm na may mas mabilis na bilis ng pagpapatupad kaysa sa GOST, at hindi kinakailangan ang gayong mataas na lakas ng cryptographic. Ang isang tipikal na halimbawa ng naturang mga gawain ay ang iba't ibang uri ng mga electronic stock trading system na namamahala ng mga sesyon ng pangangalakal sa real time. Dito, kinakailangan ang mga algorithm ng pag-encrypt na ginamit upang gawing imposibleng i-decrypt ang data ng pagpapatakbo ng system sa panahon ng session (data tungkol sa mga isinumiteng order, natapos na mga transaksyon, atbp.), Pagkatapos ng pag-expire nito, ang data na ito, bilang panuntunan, ay hindi na. walang silbi para sa mga umaatake. Sa madaling salita, kinakailangan ang garantisadong tibay ng ilang oras lamang - ito ang karaniwang tagal ng isang sesyon ng kalakalan. Malinaw na ang paggamit ng isang ganap na GOST sa sitwasyong ito ay pagbaril ng mga maya na may kanyon.

Ano ang dapat gawin dito at sa mga katulad na kaso upang mapataas ang bilis ng pag-encrypt? Ang sagot ay nasa ibabaw - gumamit ng pagbabago ng cipher na may mas kaunting mga pangunahing hakbang (pag-ikot) sa mga pangunahing cycle. Sa mga oras na binabawasan namin ang bilang ng mga round ng pag-encrypt, tumataas ang performance ng parehong halaga. Maaaring makamit ang pagbabagong ito sa dalawang paraan - sa pamamagitan ng pagbawas sa haba ng susi at pagbabawas ng bilang ng "mga siklo ng pagsusuri" ng susi. Alalahanin na ang bilang ng mga pangunahing hakbang sa mga pangunahing siklo ng pag-encrypt ay N=n·m, Saan n– bilang ng mga 32-bit na elemento sa key, m– bilang ng mga cycle ng paggamit ng mga pangunahing elemento, sa pamantayan n=8, m=4. Maaari mong bawasan ang alinman sa mga numerong ito, ngunit ang pinakasimpleng opsyon ay bawasan ang haba ng susi nang hindi naaapektuhan ang paraan ng paggamit nito.

Malinaw na ang presyo para sa pagpapabilis ng trabaho ay isang pagbaba sa lakas ng cipher. Ang pangunahing kahirapan ay medyo mahirap na mas marami o hindi gaanong tumpak na tantiyahin ang laki ng pagbawas na ito. Malinaw, ang tanging posibleng paraan upang gawin ito ay ang pagsasagawa ng isang buong sukat na pag-aaral ng mga variant ng cipher na may pinababang mga siklo ng conversion ng cryptographic. Ito ay malinaw na, una, ito ay nangangailangan ng paggamit ng classified na impormasyon, na kung saan ay pag-aari lamang ng mga developer ng GOST, at, pangalawa, ito ay napaka-labor-intensive. Samakatuwid, susubukan naming magbigay ng isang pagtatasa, napaka, napakagaspang, batay lamang sa mga pangkalahatang pattern.

Tulad ng para sa paglaban ng cipher sa pag-crack sa pamamagitan ng "malawak" na mga pamamaraan, iyon ay, sa isang "brute force" na pag-atake, ang lahat ay higit pa o hindi gaanong malinaw dito: ang isang susi ng 64 bits ay nasa isang lugar sa bingit ng pagiging naa-access sa ganitong uri ng pag-atake, ang isang cipher na may susi na 96 bits o mas mataas ( tandaan na ang susi ay dapat maglaman ng isang integer na numero ng 32-bit na mga elemento) ay medyo lumalaban dito. Sa katunayan, ilang taon na ang nakalilipas, ang nakaraang pamantayan sa pag-encrypt ng US, ang DES, ay paulit-ulit na na-hack ng mga pamamaraan ng brute force - una ito ay na-hack ng isang network ng computer na inayos batay sa pandaigdigang Internet, at pagkatapos ay ng isang dalubhasang network, i.e. isang computer na partikular na idinisenyo para sa layuning ito. Ipagpalagay natin na ang karaniwang bersyon ng GOST, kapag ipinatupad sa software sa mga modernong processor, ay gumagana nang apat na beses na mas mabilis kaysa sa DES. Pagkatapos ang 8-round na "reduced GOST" ay gagana nang 16 beses na mas mabilis kaysa sa DES. Ipagpalagay din natin na sa panahon mula noong pag-hack ng DES, ang pagganap ng pag-compute ay apat na beses ayon sa Batas ni Moore. Bilang resulta, nakuha namin na ang pagsuri ngayon ng isang 64-bit na key para sa "nabawasang GOST" na may walong mga cycle ay 64 beses na mas mabilis kaysa sa pagsuri ng isang DES key sa isang pagkakataon. Kaya, ang bentahe ng bersyong ito ng GOST kaysa sa DES sa mga tuntunin ng pagiging kumplikado ng isang malupit na pag-atake ay nabawasan mula 2 64–56 = 2 8 = 256 hanggang 256 / 64 = 4 na beses. Sumang-ayon, ito ay isang napaka-ilusyon na pagkakaiba, halos wala.

Mas mahirap masuri ang paglaban ng mga mahinang pagbabago sa GOST sa "masinsinang" mga pamamaraan ng cryptanalysis. Gayunpaman, ang isang pangkalahatang pattern ay maaaring masubaybayan din dito. Ang katotohanan ay ang mga katangian ng "profile" ng marami sa pinakamakapangyarihang uri ng cryptanalysis ngayon ay nakadepende nang malaki sa bilang ng mga round ng pag-encrypt. Kaya, para sa linear cryptanalysis (LCA) ito ay magiging isang linearity na katangian L :

saan C at mga constant, R ay ang bilang ng mga round. Mayroong katulad na relasyon para sa differential cryptanalysis. Sa kanilang "pisikal na kahulugan," lahat ng katangian ng ganitong uri ay mga probabilidad. Karaniwan, ang dami ng paunang data na kinakailangan para sa cryptanalysis at ang pagiging kumplikado nito ay inversely proportional sa mga naturang katangian. Kasunod nito na ang mga tagapagpahiwatig ng intensity ng paggawa na ito ay lumalaki nang husto sa bilang ng mga pangunahing hakbang sa pag-encrypt. Samakatuwid, kapag ang bilang ng mga pag-ikot ay nabawasan ng ilang beses, ang pagiging kumplikado ng mga pinakakilalang uri ng pagsusuri ay magbabago bilang, napaka-humigit-kumulang at halos, ang ugat ng kapangyarihang ito mula sa orihinal na dami. Ito ay isang napakalaking pagbaba sa tibay.

Sa kabilang banda, ang GOST ay dinisenyo na may malaking margin ng kaligtasan at ngayon ay lumalaban sa lahat ng kilalang uri ng cryptanalysis, kabilang ang kaugalian at linear. Kaugnay ng LCA, nangangahulugan ito na para sa matagumpay na pagpapatupad nito, mas maraming pares na “open block - encrypted block” ang kinakailangan kaysa sa “umiiral sa kalikasan,” iyon ay, higit sa 2 64 . Isinasaalang-alang ang nasa itaas, nangangahulugan ito na para sa isang matagumpay na LCA ng isang 16-round GOST, hindi bababa sa mga bloke o 2 35 bytes o 32 GB ng data ang kinakailangan, at para sa isang 8-round na isa, hindi bababa sa mga bloke o 2 19 byte o 0.5 MB.

Ang mga konklusyon mula sa lahat ng nasa itaas ay ibinibigay sa sumusunod na talahanayan, na nagbubuod sa mga katangian ng mga pinababang bersyon ng GOST.

Bilang ng mga round Sukat ng susi, mga piraso Index ng pagganap Mga posibleng katangian ng cipher (napakagaspang na pagtatantya)
24 192 1,33 Lumalaban sa pinakakilalang uri ng CA, o nasa bingit ng paglaban. Ang praktikal na pagpapatupad ng CA ay imposible dahil sa mataas na mga kinakailangan para sa paunang data at intensity ng paggawa.
16 128 2 Theoretically, ito ay hindi matatag sa ilang mga uri ng cryptanalysis, ngunit ang kanilang praktikal na pagpapatupad sa karamihan ng mga kaso ay mahirap dahil sa mataas na mga kinakailangan para sa source data at labor intensity.
12 95 2,67 Hindi ito lumalaban sa ilang kilalang uri ng cryptanalysis, ngunit angkop para sa pagtiyak ng pagiging lihim ng maliit na halaga ng data (hanggang sampu o daan-daang kilobytes) sa maikling panahon.
8 64 4 Hindi ito lumalaban sa ilang kilalang uri ng cryptanalysis, ngunit angkop para sa pagtiyak ng pagiging lihim ng maliliit na halaga ng data (hanggang sampu-sampung kilobytes) sa maikling panahon.

Ang huling dalawang opsyon, na may 12 at 8 round, ay may kakayahang magbigay ng napaka, napakalimitadong oras na proteksyon. Ang kanilang paggamit ay nabibigyang katwiran lamang sa mga gawain kung saan kailangan lamang ng panandaliang lihim ng protektadong data, sa pagkakasunud-sunod ng ilang oras. Ang isang posibleng lugar ng aplikasyon para sa mga mahihinang variant ng cipher na ito ay upang harangan ang trapiko ng UDP mula sa mga electronic exchange trading system. Sa kasong ito, ang bawat data packet (datagram, ang gitnang "D" mula sa abbreviation na UDP) ay naka-encrypt gamit ang isang hiwalay na 64-bit key, at ang key mismo ay naka-encrypt gamit ang isang session key (isang key na ang saklaw ay isang session ng komunikasyon sa pagitan dalawang computer) at ipinapadala kasama ng data.

Bago matapos ang mga pinababang bersyon ng GOST, sasabihin ko na ang lahat ng mga pagsasaalang-alang sa itaas ay lubos na haka-haka. Ang pamantayan ay nagbibigay ng tibay para lamang sa isa, 32-round na variant. At walang makapagbibigay sa iyo ng garantiya na ang paglaban ng mga pinababang bersyon ng cipher sa pag-crack ay magbabago sa paraang ipinahiwatig sa itaas. Kung nagpasya kang gamitin ang mga ito sa iyong mga pag-unlad, tandaan na nakatapak ka sa napakaalog na lupa, na maaaring lumabas mula sa ilalim ng iyong mga paa anumang sandali. Dahil ang bilis ng pag-encrypt ay isang kritikal na isyu para sa iyo, marahil ay dapat mong isaalang-alang ang paggamit ng isang mas mabilis na cipher o isang mas malakas na computer? Ang isa pang pagsasaalang-alang kung bakit ito ay nagkakahalaga ng paggawa ay ang mga mahina na bersyon ng GOST ay magiging pinaka-sensitibo sa kalidad ng mga kapalit na yunit na ginamit.

May downside din ang isyung pinag-iisipan. Paano kung ang bilis ng pag-encrypt ay hindi kritikal, ngunit ang mga kinakailangan sa lakas ay napakahigpit? Ang paglaban ng GOST ay maaaring tumaas sa dalawang paraan - tawagan natin silang "malawak" at "masidhi". Ang una sa mga ito ay hindi hihigit sa isang simpleng pagtaas sa bilang ng mga round ng pag-encrypt. Hindi lubos na malinaw sa akin kung bakit maaaring kailanganin ito, dahil ang domestic standard ay nagbibigay na ng kinakailangang tibay nang wala ito. Gayunpaman, kung dumaranas ka ng paranoia nang higit sa kinakailangang antas (at lahat ng "tagapagtanggol ng impormasyon" ay obligadong magdusa mula dito, ito ay isang kondisyon ng pagiging angkop sa propesyonal, ang tanging tanong ay ang kalubhaan ng kaso :), makakatulong ito medyo kumalma ka. Kung hindi ka sigurado sa KGB cipher na ito o sa substitution table na ginagamit mo, double lang, quadruple, atbp. bilang ng mga round – piliin ang multiplicity batay sa kalubhaan ng iyong kaso. Ang diskarte na ito ay nagbibigay-daan sa iyo upang talagang madagdagan ang lakas ng cipher - kung ang naunang cryptanalysis ay imposible lamang, ngayon ito ay imposible na kuwadrado!

Ang isang mas nakakalito at kawili-wiling tanong ay kung posible bang dagdagan ang lakas ng cipher nang hindi binabago ang numero at istraktura ng mga pangunahing hakbang sa pag-encrypt. Nakapagtataka, ang sagot dito ay positibo, bagama't muli tayong tumuntong sa nanginginig na lupain ng haka-haka. Ang katotohanan ay sa GOST, sa pangunahing hakbang ng conversion, dapat itong palitan ng 4 sa pamamagitan ng 4 na bits, ngunit sa pagsasanay (pag-uusapan natin ito mamaya) ang lahat ng mga pagpapatupad ng software ay nagsasagawa ng kapalit na byte sa pamamagitan ng byte, i.e. 8 by 8 bits - ginagawa ito para sa mga dahilan ng kahusayan. Kung agad naming idisenyo ang naturang kapalit bilang isang 8-bit, mapapabuti namin ang pagganap ng isang round. Una, ang "diffusion" na katangian o "avalanche" na indicator ay tataas - isang bit ng source data at/o key ay makakaimpluwensya sa mas malaking bilang ng mga bit ng resulta. Pangalawa, para sa mas malaking kapalit na mga node, maaaring makuha ang mas mababang kaugalian at linear na katangian, sa gayon ay binabawasan ang pagkamaramdamin ng cipher sa mga katulad na uri ng cryptanalysis. Ito ay totoo lalo na para sa pinababang mga siklo ng GOST, at para sa 8 at 12-round na mga pagpipilian, ang isang hakbang ay kinakailangan lamang. Ito ay medyo magbabayad para sa pagkawala ng tibay sa kanila mula sa pagbawas sa bilang ng mga round. Ang dahilan kung bakit mahirap gamitin ang pamamaraang ito ay kailangan mong magdisenyo ng mga naturang "pinalaki" na mga kapalit na yunit sa iyong sarili. At gayundin ang katotohanan na ang mga malalaking yunit ay karaniwang mas mahirap gawin kaysa sa mas maliliit.

Hindi karaniwang paggamit ng pamantayan.

Siyempre, ang pangunahing layunin ng GOST cryptographic algorithm ay pag-encrypt at proteksyon ng data. Gayunpaman, makakahanap din sila ng iba pang mga application na nauugnay, natural, sa seguridad ng impormasyon. Pag-usapan natin sila nang maikli:

1. Para sa pag-encrypt sa gamma mode, ang GOST ay nagbibigay para sa pagbuo ng isang cryptographic gamma - isang pagkakasunud-sunod ng mga bit na may mahusay na istatistikal na katangian at mataas na cryptographic na lakas. Ang gamma na ito ay pagkatapos ay ginagamit upang baguhin ang bukas na data, na nagreresulta sa naka-encrypt na data. Gayunpaman, hindi lamang ito ang posibleng aplikasyon ng cryptographic gamma. Ang katotohanan ay ang algorithm para sa henerasyon nito ay isang pseudo-random number sequence generator (PRNG) na may mahusay na mga katangian. Siyempre, ang paggamit ng naturang PRNG kung saan ang mga istatistikal na katangian lamang ng nabuong pagkakasunud-sunod ay kinakailangan, ngunit ang lakas ng cryptographic ay hindi kinakailangan, ay hindi masyadong makatwiran - para sa mga kasong ito mayroong mas mahusay na mga generator. Ngunit para sa iba't ibang mga application na may kaugnayan sa seguridad ng impormasyon, ang naturang mapagkukunan ay magiging lubhang kapaki-pakinabang:

  • Tulad ng nabanggit sa itaas, ang gamma ay maaaring gamitin bilang isang "hilaw na materyal" para sa pagbuo ng mga susi. Upang gawin ito, kailangan mo lamang kumuha ng gamma segment ng kinakailangang haba - 32 bytes. Sa ganitong paraan, maaaring gawin ang mga susi kung kinakailangan at hindi na kailangang itabi ang mga ito - kung kailangan muli ang naturang susi, magiging madali itong buuin muli. Kailangan mo lang tandaan kung saang key ito orihinal na nabuo, anong mensahe ng pag-synchronize ang ginamit, at kung anong byte ng nabuong gamma ang sinimulan ng susi. Ang lahat ng impormasyon maliban sa susi na ginamit ay hindi naiuri. Ang diskarte na ito ay magiging madali upang makontrol ang isang medyo kumplikado at branched key system gamit lamang ang isang "master key".
  • Katulad ng nauna, maaaring gamitin ang gamma bilang paunang “raw material” para sa pagbuo ng mga password. Dito maaaring lumitaw ang tanong: bakit kinakailangan na bumuo ng mga ito sa lahat Hindi ba mas madaling imbentuhin ang mga ito kung kinakailangan? Ang kabiguan ng pamamaraang ito ay malinaw na ipinakita sa pamamagitan ng isang serye ng mga insidente sa mga network ng computer, na ang pinakamalaki ay ang pang-araw-araw na paralisis ng Internet noong Nobyembre 1988 na sanhi ng Morris worm. Ang isa sa mga paraan na nakapasok ang isang malisyosong programa sa isang computer ay sa pamamagitan ng paghula ng mga password: sinubukan ng program na ipasok ang system sa pamamagitan ng sunud-sunod na pagsubok ng mga password mula sa panloob na listahan nito na ilang daang, at sa isang makabuluhang proporsyon ng mga kaso nagtagumpay ito. Ang imahinasyon ng tao para sa pag-imbento ng mga password ay naging napakahirap. Iyon ang dahilan kung bakit sa mga organisasyong iyon kung saan binibigyang pansin ang seguridad, ang mga password ay nabuo at ipinamamahagi sa mga gumagamit ng administrator ng seguridad ng system. Ang pagbuo ng mga password ay medyo mas kumplikado kaysa sa pagbuo ng mga susi, dahil sa kasong ito ang "raw" na binary gamma ay dapat i-convert sa simbolikong anyo, at hindi lamang "hiwain" sa mga piraso. Bilang karagdagan, ang mga indibidwal na halaga ay maaaring kailangang itapon upang matiyak na ang lahat ng mga alpabetikong character ay pantay na malamang na lumitaw sa password.
  • Ang isa pang paraan upang gamitin ang cryptographic gamma ay garantisadong pagbura ng data sa magnetic media. Ang katotohanan ay kahit na ang impormasyon ay muling isinulat sa isang magnetic medium, ang mga bakas ng nakaraang data ay nananatili, na maaaring maibalik sa pamamagitan ng naaangkop na pagsusuri. Upang sirain ang mga bakas na ito, ang naturang pag-overwrit ay kailangang isagawa nang maraming beses. Lumalabas na kakailanganing muling isulat ang impormasyon sa media nang mas kaunting beses kung ang naturang pamamaraan ay gumamit ng random o pseudo-random na data na mananatiling hindi alam ng mga eksperto na sinusubukang ibalik ang nabura na impormasyon. Ang gamma cipher ay magagamit dito.

2. Hindi lamang ang cryptographic gamma, kundi pati na rin ang cryptographic transformation mismo ay maaaring gamitin para sa mga pangangailangan na hindi direktang nauugnay sa encryption:

  • Alam namin na ang isa sa mga opsyon na ito para sa paggamit ng GOST ay ang pagbuo ng mga simulate na pagsingit para sa mga arrays ng data. Gayunpaman, sa batayan ng anumang block cipher, kabilang ang GOST, medyo madaling bumuo ng isang scheme para sa pagkalkula ng isang one-way hash function, na tinatawag din sa panitikan MDC, na sa iba't ibang mga mapagkukunan ay nangangahulugang baguhin ang detection code / pagpapatakbo (M pagbabago/ M anipulation D etection C ode) o digest ng mensahe (M sanaysay D igest C ode). Ang unang pag-decode ay lumitaw sa panitikan nang mas maaga, ang pangalawa, mas maikli, sa palagay ko, ay naimbento ng mga hindi maalala ang una :), - ito ay isang biro. Maaaring direktang gamitin ang MDC sa mga sistema ng proteksyon ng imitasyon bilang isang analogue ng pagpasok ng imitasyon, na, gayunpaman, ay hindi nakasalalay sa lihim na susi. Bilang karagdagan, ang MDC ay malawakang ginagamit sa mga scheme ng electronic digital signature (EDS), dahil ang karamihan sa mga naturang scheme ay idinisenyo sa paraang maginhawang pumirma sa isang bloke ng data na may nakapirming laki. Tulad ng alam mo, batay sa tinalakay na pamantayan ng GOST 28147-89, ang pamantayan ng Russian Federation para sa pagkalkula ng one-way na hash function na GOST R34.11-94 ay itinayo.
  • Hindi gaanong kilala na batay sa anumang block cipher, kabilang ang GOST, ang isang fully functional na digital signature scheme ay maaaring itayo, na may isang lihim na signature key at isang bukas na kumbinasyon ng pag-verify. Para sa ilang kadahilanan, ang scheme na ito ay hindi nakatanggap ng malawak na praktikal na pamamahagi, gayunpaman, sa ilang mga kaso maaari pa rin itong ituring na isang kaakit-akit na alternatibo sa "matematika" na mga digital signature scheme na kasalukuyang nangingibabaw sa mundo.

Panitikan

Mga sistema ng pagproseso ng impormasyon. Proteksyon ng cryptographic. Cryptographic transformation algorithm GOST 28147-89. Estado Com. USSR ayon sa mga pamantayan, M., 1989. ftp://ftp.wtc-ural.ru/pub/ru.crypt/GOST-28147
Shannon Claude. Teorya ng matematika ng mga lihim na sistema. Sa koleksyon na "Works on information theory and cybernetics", M., IL, 1963, p. 333-369. http://www.enlight.ru/crypto/articles/shannon/shann__i.htm
Pag-anunsyo ng Pag-apruba ng Federal Information Processing Standard (FIPS) 197, Advanced Encryption Standard (AES), Federal Register Vol. 66, Hindi. 235 / Huwebes, Disyembre 6, 2001 / Mga Paunawa, pp 63369–63371. http://csrc.nist.gov/encryption/aes/
Feistel Horst. Cryptography at seguridad ng computer. Pagsasalin ni A. Vinokurov ayon sa publikasyong Horst Feistel. Cryptography at Computer Privacy, Scientific American, Mayo 1973, Vol. 228, Hindi. 5, pp. 15-23. http://www.enlight.ru/crypto/articles/feistel/feist_i.htm
Schneier Bruce. Inilapat na cryptography. 2nd ed. Mga protocol, algorithm at pinagmulang teksto sa wikang C., M., “Triumph”, 2002 http://www.ssl.stu.neva.ru/psw/crypto/appl_rus/appl_cryp.htm
Menezes Alfred, van Oorschot Paul, Vanstone Scott. Handbook ng inilapat na cryptography. ttp://www.cacr.math.uwaterloo.ca/hac/
Vinokurov Andrey. Paano gumagana ang block cipher? Manuskrito. http://www.enlight.ru/crypto/articles/vinokurov/blcyph_i.htm
Vinokurov Andrey. Mga isyu sa cryptography para sa electronic journal na iNFUSED BYTES online. http://www.enlight.ru/crypto/articles/ib/ib.htm
Vinokurov Andrey, Primenko Eduard. Teksto ng ulat na "Sa pagpapatupad ng software ng mga pamantayan ng pag-encrypt sa Russian Federation at USA," kumperensya sa impormasyon, Moscow, MEPhI, Enero 28-29, 2001. Nai-publish sa mga paglilitis sa kumperensya.
Teknolohiya ng impormasyon. Proteksyon ng cryptographic na impormasyon. Hash function GOST R34.11-94, Pamantayan ng Estado ng Russian Federation, M., 1994.

Ang algorithm na ito ay ipinag-uutos para magamit bilang isang algorithm ng pag-encrypt sa mga organisasyon ng gobyerno ng Russian Federation at isang bilang ng mga komersyal.

Paglalarawan ng algorithm

Ang diagram ng algorithm ay ipinapakita sa Fig. 3.1. Tulad ng nakikita mo, ang disenyo ng algorithm na ito ay medyo simple, na malinaw na pinapasimple ang pagpapatupad ng software o hardware nito.

Ang algorithm ng GOST 28147-89 ay nag-encrypt ng impormasyon sa mga bloke ng 64 bits, na nahahati sa dalawang subblock ng 32 bits (N1 at N2). Ang subblock N1 ay pinoproseso sa isang tiyak na paraan, pagkatapos ay idinagdag ang halaga nito

na may halaga ng subblock N2 (idinagdag ang modulo 2), pagkatapos ay ang mga subblock ay pinapalitan. Isinasagawa ang pagbabagong ito sa isang tiyak na bilang ng mga round: 16 o 32, depende sa operating mode ng algorithm (inilarawan sa ibaba). Ang mga sumusunod na operasyon ay ginagawa sa bawat pag-ikot:

1. Key application. Ang mga nilalaman ng /VI subblock ay idinagdag modulo 2 32 na may bahagi ng Kx key.

Ang encryption key ng GOST 28147-89 algorithm ay may sukat na 256 bits, at ang Kx ay ang 32-bit na bahagi nito, i.e. ang 256-bit encryption key ay kinakatawan bilang isang concatenation ng 32-bit subkeys (Fig. 3.2):

Shch ATI, AG2, Yu, AG4, K5, Kb, K7.

Sa panahon ng proseso ng pag-encrypt, ginagamit ang isa sa mga subkey na ito, depende sa round number at operating mode ng algorithm.

kanin. 3.1. Algorithm diagram GOST 28147-

kanin. 3.2. Encryption key ng GOST 28147-89 algorithm

2. Pagpapalit ng mesa. Pagkatapos ng keying, ang /VI subblock ay nahahati sa 8 bahagi ng 4 na bits, ang halaga ng bawat isa ay indibidwal na pinapalitan alinsunod sa kapalit na talahanayan para sa bahaging ito ng subblock. Ang mga pagpapalit ng talahanayan (Kahon ng pagpapalit, S-box) ay kadalasang ginagamit sa mga modernong algorithm ng pag-encrypt, kaya sulit na isaalang-alang ang mga ito nang mas detalyado.

Ang pagpapalit ng talahanayan ay ginagamit sa ganitong paraan: isang bloke ng data ng isang tiyak na laki (sa kasong ito, 4-bit) ay ibinibigay sa input, ang numerical na representasyon kung saan tinutukoy ang bilang ng halaga ng output. Halimbawa, mayroon kaming S-box ng sumusunod na form:

4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1.

Hayaang dumating ang 4-bit block na "0100" sa input, i.e. ang halaga 4. Ayon sa talahanayan, ang halaga ng output ay magiging katumbas ng 15, i.e. "1111" (0 ay pinalitan ng 4, 1 ng 11, ang halaga ng 2 ay nananatiling hindi nagbabago, atbp.).

Tulad ng nakikita mo, ang disenyo ng algorithm ay napaka-simple, na nangangahulugan na ang pinakamalaking pasanin ng pag-encrypt ng data ay nahuhulog sa mga kapalit na talahanayan. Sa kasamaang palad, ang algorithm ay may pag-aari na mayroong "mahina" na mga talahanayan ng kapalit, gamit kung saan ang algorithm ay maaaring malutas sa pamamagitan ng mga pamamaraan ng cryptanalytic. Kasama sa mga mahihina, halimbawa, ang isang talahanayan kung saan ang output ay katumbas ng input:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

3. Bitwise cyclic shift sa kaliwa ng 11 bits.

Mga mode ng pagpapatakbo ng algorithm

Ang GOST 28147-89 algorithm ay may 4 na operating mode:

□ simpleng kapalit na mode;

□ gamma mode;

P gamma mode na may feedback;

□ paraan ng pagbuo ng mga imitasyon na attachment.

Ang mga mode na ito ay medyo naiiba sa mga karaniwang tinatanggap (inilarawan sa Seksyon 1.4), kaya sulit na isaalang-alang ang mga ito nang mas detalyado.

Ang mga mode na ito ay may iba't ibang layunin, ngunit ginagamit ang parehong pagbabago sa pag-encrypt na inilarawan sa itaas.

Madaling kapalit na mode

Sa simpleng kapalit na mode, ang bawat 64-bit na bloke ng impormasyon ay simpleng naka-encrypt gamit ang 32 round na inilarawan sa itaas. Ang mga 32-bit na subkey ay ginagamit sa sumusunod na pagkakasunud-sunod:

□ KO, Kl, K2, KZ, K4, K5, KB, AG7, KO, ATI, atbp. - sa round 1 hanggang 24;

□ K1, Kb, K5, K4, KZ, K2, K\, KO - sa mga round mula 25 hanggang 32.

Ang pag-decryption sa simpleng kapalit na mode ay isinasagawa sa eksaktong parehong paraan, ngunit may bahagyang naiibang pagkakasunud-sunod ng paggamit ng mga subkey:

□ KO, K\, K2, KZ, K4, K5, Kb, KP - sa round 1 hanggang 8;

□ KP, Kb, K5, K4, KZ, K2, K\, KO, K1, Kb, atbp. - sa mga round mula 9 hanggang 32.

Katulad ng karaniwang ECB mode, dahil sa hiwalay na pag-encrypt ng mga bloke, ang simpleng kapalit na mode ay mahigpit na hindi inirerekomenda para sa pag-encrypt ng data mismo; dapat lang itong gamitin para i-encrypt ang iba pang mga encryption key sa mga multi-key scheme.

Gamma mode

Sa gamma mode (Fig. 3.3), ang bawat plaintext block ay idinaragdag ng bit by bit modulo 2 sa isang 64-bit cipher gamma block. Ang gamma cipher ay isang espesyal na sequence na nabuo gamit ang mga pagbabagong inilarawan sa itaas bilang mga sumusunod:

1. Ang kanilang paunang pagpuno ay isinulat sa mga rehistro ng N1 at N2 - isang 64-bit na halaga na tinatawag na "mensahe sa pag-sync" (ang mensahe ng pag-sync ay halos isang analogue ng vector ng pagsisimula sa mga mode ng CBC, CFB at OFB).

2. Ang mga nilalaman ng mga rehistro ng /VI at N2 (sa kasong ito, i-sync ang mga mensahe) ay naka-encrypt sa simpleng kapalit na mode.

3. Ang mga nilalaman ng N1 ay idinagdag modulo (2 32 – 1) na may pare-parehong CI = 2 24 + 2 16 + 2 8 + 4, ang resulta ng karagdagan ay nakasulat sa rehistro ng /VI.

4. Ang mga nilalaman ng N2 ay idinagdag modulo 2 na may pare-parehong C2 = 2 24 + 2 16 + 2 8 +1, ang resulta ng karagdagan ay isinulat upang irehistro ang N2.

5. Ang mga nilalaman ng mga rehistro ng /VI at N2 ay output bilang isang 64-bit cipher gamma block (ibig sabihin, sa kasong ito, /VI at N2 ang bumubuo sa unang gamma block).

6. Kung kailangan ang susunod na gamma block (ibig sabihin, kailangan pang gawin ang karagdagang pag-encrypt o pag-decryption), bumalik sa hakbang 2.

Para sa decryption, ang gamma ay nabuo sa katulad na paraan, pagkatapos ay ang ciphertext at gamma bits ay muling XORed.

Upang makabuo ng parehong hanay ng cipher, ang user na nagde-decryption ng cryptogram ay dapat magkaroon ng parehong key at parehong halaga ng mensahe ng pag-synchronize na ginamit noong nag-encrypt ng impormasyon. Kung hindi, hindi posibleng makuha ang orihinal na teksto mula sa naka-encrypt.

Sa karamihan ng mga pagpapatupad ng GOST 28147-89 algorithm, ang mensahe ng pag-sync ay hindi isang lihim na elemento, gayunpaman, ang mensahe ng pag-sync ay maaaring maging sikreto gaya ng encryption key. Sa kasong ito, maaari naming isaalang-alang na ang epektibong haba ng key ng algorithm (256 bits) ay tumataas ng isa pang 64 bits ng synchronization message, na maaaring ituring bilang isang karagdagang elemento ng key.

Gamma mode na may feedback

Sa gamma mode na may feedback, ang resulta ng pag-encrypt sa nakaraang bloke ng plaintext ay ginagamit upang punan ang /VI at L/2 na mga rehistro, simula sa 2nd block, hindi ang nakaraang gamma block, ngunit ang resulta ng pag-encrypt ng nakaraang plaintext block (Larawan 3.4). Ang unang bloke sa mode na ito ay ganap na nabuo na katulad ng nauna.

kanin. 3.4. Bumubuo ng cipher gamma sa gamma mode na may feedback

Mode ng pagbuo ng imitasyon na attachment

Ang prefix ay isang cryptographic checksum na kinakalkula gamit ang isang encryption key at idinisenyo upang i-verify ang integridad ng mga mensahe. Upang kalkulahin ito, mayroong isang espesyal na mode ng GOST 28147-89 algorithm.

Ang pagbuo ng imitasyon na prefix ay ginagawa tulad ng sumusunod:

1. Ang unang 64-bit na bloke ng impormasyon kung saan kinakalkula ang imitasyon na prefix ay isinulat sa mga rehistro ng N1 at N2 at naka-encrypt sa pinababang simpleng kapalit na mode, kung saan ang unang 16 na round sa 32 ay ginaganap.

2. Ang resulta na nakuha ay summed modulo 2 kasama ang susunod na bloke ng impormasyon, na iniimbak ang resulta sa N1 at N2.

3. Ang M at N2 ay muling na-encrypt sa pinaikling simpleng kapalit na mode, atbp. hanggang sa huling bloke ng impormasyon.

Ang imitasyon na prefix ay itinuturing na 64-bit na nagreresultang mga nilalaman ng mga rehistrong N1 at N2 o bahagi nito. Kadalasan, ginagamit ang isang 32-bit imitative prefix, ibig sabihin, kalahati ng mga nilalaman ng mga rehistro. Ito ay sapat na, dahil, tulad ng anumang checksum, ang imitasyon na attachment ay inilaan, una sa lahat, upang maprotektahan laban sa hindi sinasadyang pagbaluktot ng impormasyon. Upang maprotektahan laban sa sinadyang pagbabago ng data, ginagamit ang iba pang mga pamamaraan ng cryptographic - pangunahin ang isang electronic digital signature (tingnan ang Seksyon 1.1).

Ang imitasyon na prefix ay ginagamit bilang mga sumusunod:

1. Kapag nag-e-encrypt ng anumang impormasyon, ang plaintext imitation prefix ay kinakalkula at ipinapadala kasama ng ciphertext.

2. Pagkatapos ng decryption, ang imitasyon na prefix ay muling kinakalkula at inihambing sa ipinadala.

3. Kung ang mga nakalkula at ipinadala na imitasyon na prefix ay hindi magkatugma, ang cipher text ay na-distort sa panahon ng paghahatid o ang mga maling key ay ginamit sa panahon ng pag-decryption.

Ang imitasyon na prefix ay partikular na kapaki-pakinabang para sa pagsuri sa tamang pag-decryption ng pangunahing impormasyon kapag gumagamit ng mga multi-key scheme.

Ang imitasyon na prefix ay ilang analogue ng MAC message authentication code, na kinakalkula sa CBC mode; Ang pagkakaiba ay kapag kinakalkula ang imitasyon na prefix, hindi ginagamit ang mensahe ng pag-synchronize, samantalang kapag kinakalkula ang MAC, ginagamit ang initialization vector.

Lakas ng cryptographic ng algorithm

Noong 1994, ang paglalarawan ng GOST 28147-89 algorithm ay isinalin sa Ingles at nai-publish; ito ay pagkatapos nito na ang mga resulta ng pagsusuri nito, na isinagawa ng mga dayuhang espesyalista, ay nagsimulang lumitaw; gayunpaman, walang mga pag-atake na lumalapit sa pagiging posible ang natagpuan sa loob ng mahabang panahon.

□ malaking haba ng key - 256 bits; kasama ang lihim na mensahe ng pag-synchronize, ang epektibong haba ng key ay tumataas sa 320 bits;

□ 32 rounds ng mga pagbabago; na pagkatapos ng 8 rounds ang buong epekto ng dispersion ng input data ay makakamit: ang pagbabago ng isang bit ng plaintext block ay makakaapekto sa lahat ng bits ng ciphertext block, at vice versa, ibig sabihin, mayroong maraming margin ng lakas.

Isaalang-alang natin ang mga resulta ng cryptanalysis ng GOST 28147-89 algorithm.

Pagsusuri ng mga talahanayan ng pagpapalit

Dahil ang mga kapalit na talahanayan ay hindi ibinigay sa pamantayan, ang ilang mga gawa (halimbawa, sa) ay nagmumungkahi na ang isang "kakayahang organisasyon" ay maaaring maglabas ng parehong "mabuti" at "masamang" kapalit na mga talahanayan. Gayunpaman, tinawag ng sikat na eksperto na si Bruce Schneier ang gayong mga pagpapalagay na "mga alingawngaw." Ito ay malinaw na ang cryptographic na lakas ng algorithm ay higit sa lahat ay nakasalalay sa mga katangian ng kapalit na mga talahanayan na ginamit nang naaayon, may mga mahina na kapalit na mga talahanayan (tingnan ang halimbawa sa itaas), ang paggamit nito ay maaaring gawing simple ang pag-atake ng algorithm. Gayunpaman, ang posibilidad ng paggamit ng iba't ibang mga kapalit na talahanayan ay tila isang napaka-karapat-dapat na ideya, na pabor sa kung saan ang sumusunod na dalawang katotohanan mula sa kasaysayan ng pamantayan ng pag-encrypt ng DES ay maaaring banggitin (para sa mga detalye, tingnan ang Seksyon 3.15):

□ ang mga pag-atake gamit ang parehong linear at differential cryptanalysis ng DES algorithm ay gumagamit ng mga partikular na tampok ng mga kapalit na talahanayan; kapag gumagamit ng iba pang mga talahanayan, ang cryptanalysis ay kailangang magsimulang muli;

□ ang mga pagtatangka ay ginawa upang palakasin ang DES laban sa linear at differential cryptanalysis sa pamamagitan ng paggamit ng mas matatag na mga talahanayan ng pagpapalit; ang mga naturang talahanayan, na talagang mas matatag, ay iminungkahi, halimbawa, sa s 5 DES algorithm; ngunit, sayang, imposibleng palitan ang DES ng s 5 DES, dahil ang mga kapalit na talahanayan ay mahigpit na tinukoy sa pamantayan, at naaayon, ang mga pagpapatupad ng algorithm ay malamang na hindi sumusuporta sa kakayahang baguhin ang mga talahanayan sa iba.

Ang isang bilang ng mga gawa (halimbawa, , at ) ay maling naghihinuha na ang mga lihim na kapalit na talahanayan ng GOST 28147-89 algorithm ay maaaring maging bahagi ng susi at dagdagan ang epektibong haba nito (na hindi mahalaga, dahil ang algorithm ay may napakalaking 256 -bit key). Gayunpaman, pinatunayan ng gawain na ang mga lihim na kapalit na talahanayan ay maaaring kalkulahin gamit ang sumusunod na pag-atake, na maaaring magamit nang praktikal:

1. Ang zero key ay nakatakda at ang paghahanap para sa "zero vector" ay ginanap, ibig sabihin, ang halaga z = /(0), kung saan ang /() ay ang round function ng algorithm. Ang yugtong ito ay tumatagal ng humigit-kumulang 2 pagpapatakbo ng pag-encrypt.

2. Gamit ang zero vector, ang mga halaga ng mga kapalit na talahanayan ay kinakalkula, na tumatagal ng hindi hihigit sa 2 11 na operasyon.

Mga pagbabago sa algorithm at ang kanilang pagsusuri

Ang gawain ay nagsagawa ng isang cryptanalysis ng mga pagbabago ng GOST 28147-89 algorithm:

□ GOST-H algorithm, kung saan, kaugnay sa orihinal na algorithm, ang pagkakasunud-sunod ng paggamit ng mga subkey ay binago, lalo na sa mga round mula 25 hanggang 32 na mga subkey ay ginagamit sa direktang pagkakasunud-sunod, ibig sabihin, eksaktong kapareho ng sa mga nakaraang round ng algorithm ;

□ 20-round GOST® algorithm, kung saan ang isang round ay gumagamit ng XOR sa halip na modulo-2 na karagdagan upang i-overlay ang susi.

Batay sa mga resulta ng pagsusuri, napagpasyahan na ang GOST-H at GOST© ay mas mahina kaysa sa orihinal na algorithm ng GOST 28147-89, dahil pareho silang may mga klase ng mahihinang key. Kapansin-pansin na sa mga tuntunin ng GOST© cryptanalysis, inuulit ng trabaho ang bawat salita sa seksyon na nakatuon sa cryptanalysis ng GOST 28147-89 algorithm, isang kilalang gawain na inilathala noong 2000 (nang walang anumang mga sanggunian sa orihinal). Tinatanong nito ang propesyonalismo ng mga may-akda ng akda at ang iba pang mga resulta nito.

Ang isang napaka-kagiliw-giliw na pagbabago ng algorithm ay iminungkahi sa trabaho: ang mga talahanayan S\…Ss ay dapat na naiiba; sa bawat pag-ikot ng algorithm dapat silang muling ayusin ayon sa isang tiyak na batas. Maaaring nakadepende ang permutation na ito sa encryption key, o maaari rin itong maging lihim (ibig sabihin, maging bahagi ng mas malaking encryption key kaysa sa orihinal na 256-bit key). Pareho sa mga pagpipiliang ito, ayon sa kanilang mga may-akda, ay makabuluhang nagpapataas ng paglaban ng algorithm laban sa linear at differential cryptanalysis.

At ang isa pang pagbabago na nauugnay sa mga kapalit na talahanayan ay ibinibigay sa trabaho, na sinusuri ang isa sa mga posibleng pamamaraan para sa pagkalkula ng mga kapalit na talahanayan batay sa susi ng pag-encrypt. Napagpasyahan ng mga may-akda ng gawain na ang gayong pag-asa ay nagpapahina sa algorithm, dahil humahantong ito sa pagkakaroon ng mga mahihinang key at sa ilang potensyal na kahinaan ng algorithm.

Full-Round Algorithm Analysis

Mayroon ding mga pag-atake sa full-round GOST 28147-89 nang walang anumang mga pagbabago. Ang isa sa mga unang gawaing pampubliko upang pag-aralan ang algorithm, isang kilalang gawain, ay nakatuon sa mga pag-atake na nagsasamantala sa mga kahinaan sa pangunahing pamamaraan ng pagpapalawak ng isang bilang ng mga kilalang algorithm ng pag-encrypt. Sa partikular, ang buong-ikot na GOST 28147-89 algorithm ay maaaring masira gamit ang differential cryptanalysis sa mga kaugnay na key, ngunit kung gagamitin lamang ang mga mahihinang kapalit na talahanayan. Ang 24-round na bersyon ng algorithm (kung saan ang unang 8 round ay nawawala) ay binubuksan sa katulad na paraan sa anumang mga kapalit na talahanayan, ngunit ang malakas na kapalit na mga talahanayan (halimbawa, ang ibinigay sa) ay ginagawang ganap na hindi praktikal ang gayong pag-atake.

Ang mga domestic scientist na sina A. G. Rostovtsev at E. B. Makhovenko noong 2001 ay nagmungkahi ng isang panimula na bagong paraan ng cryptanalysis (ayon sa mga may-akda, na makabuluhang mas epektibo kaysa sa linear at differential cryptanalysis) sa pamamagitan ng pagbuo ng isang layunin na function mula sa isang kilalang plaintext na naaayon dito ciphertext at ang nais na key value at paghahanap ng extremum nito na tumutugma sa tunay na halaga ng key. Natagpuan din nila ang isang malaking klase ng mga mahihinang key ng GOST 28147-89 algorithm, na ginagawang posible na buksan ang algorithm gamit lamang ang 4 na napiling plaintext at ang kaukulang mga ciphertext na may medyo mababang pagiging kumplikado. Ang cryptanalysis ng algorithm ay nagpapatuloy sa trabaho.

Noong 2004, isang grupo ng mga espesyalista mula sa Korea ang nagmungkahi ng pag-atake na, gamit ang differential cryptanalysis sa mga kaugnay na key, ay makakakuha ng 12 bits ng secret key na may posibilidad na 91.7%. Ang pag-atake ay nangangailangan ng 2 35 napiling plaintext at 2 36 na operasyon ng pag-encrypt. Tulad ng nakikita mo, ang pag-atake na ito ay halos walang silbi para sa aktwal na paglabag sa algorithm.