Кіріспе
Хабарды аутентификациялау коды алгоритмі
Криптографияда, шифрлау блогының тізбектелген хабарды аутентификациялау коды (CBC MAC) – бұл блок шифрінен хабарды аутентификациялау кодын (MAC) құру техникасы. Хабар, шифрлау блогының тізбегін (CBC) режимінде белгілі бір блок шифрлеу алгоритмін қолданып шифрланады, нәтижесінде әрбір блок алдыңғы блоктың дұрыс шифрлануына тәуелді болады. Бұл өзара тәуелділік, қарапайым мәтіннің кез келген біті өзгеретін болса, соңғы шифрланған блоктың блок шифрінің кілтінсіз болжауға немесе жоюға болмайтын етіп өзгеруіне себеп болады. CBC MAC-ті есептеу үшін m хабарламасы CBC режимінде нөлдік бастамалау векторымен шифрланады және соңғы блок сақталады. Төмендегі сурет құпия кілт k және блок шифрі E арқылы блоктардан тұратын хабарламаның CBC MAC есептеуін көрсетеді:
CBC MAC өзі өзгермелі ұзындықтағы хабарламалар және TLS 1.2, сондай-ақ Bluetooth Low Energy үшін (Bluetooth 4.0 нұсқасы бойынша, NIST SP 800 121 Rev2 қараңыз) қауіпсіз емес. Бұл TLS 1.3 үшін қолжетімді, бірақ OpenSSL-де әдепкі бойынша қосылмаған. CBC MAC сонымен қатар NIST SP 800 90B-да «шарттау компоненті» (әлдебір кездейсоқтық экстракторы, толық энтропиялы биттік тізбектерді жасау әдісі) ретінде де қолданылады.
In cryptography, a cipher block chaining message authentication code (CBC MAC) is a technique for constructing a message authentication code (MAC) from a block cipher. The message is encrypted with some block cipher algorithm in cipher block chaining (CBC) mode to create a chain of blocks such that each block depends on the proper encryption of the previous block. This interdependence ensures that a change to any of the plaintext bits will cause the final encrypted block to change in a way that cannot be predicted or counteracted without knowing the key to the block cipher. To calculate the CBC MAC of message m, one encrypts m in CBC mode with zero initialization vector and keeps the last block. The following figure sketches the computation of the CBC MAC of a message comprising blocks using a secret key k and a block cipher E:
CBC MAC on its own is not secure for variable length messages and TLS 1.2, as well as Bluetooth Low Energy (as of Bluetooth 4.0, see NIST SP 800 121 Rev2). It is available for TLS 1.3, but not enabled by default in OpenSSL. CBC MAC is also used as a "conditioning component" (a. k. a. randomness extractor, a method to generate bitstrings with full entropy) in NIST SP 800 90B.
Алгоритмді анықтайтын стандарттар
FIPS PUB 113 Компьютерлік деректерді аутентификациялау – (қазір ескірген) АҚШ үкіметінің стандарты, ол DES блокты шифр ретінде қолданылатын CBC MAC алгоритмін анықтады. CBC MAC алгоритмі сондай-ақ ANSI X9.9, ANSI X9.19, ISO 8731-1 және ISO/IEC 9797-1 MAC (Алгоритм 1) стандарттарына да кірген.
Белгілі және өзгермелі ұзындықтағы хабарламалардың қауіпсіздігі
Егер пайдаланылған блок шифры қауіпсіз болса (яғни, ол псевдокезекті пермутация болса), онда CBC MAC белгілі бір ұзындықтағы хабарламалар үшін қауіпсіз. Дегенмен, өзіндік, ол өзгермелі ұзындықтағы хабарламалар үшін қауіпсіз емес. Сондықтан, кез келген бір кілт тек белгілі және алдын ала анықталған ұзындықтағы хабарламалар үшін ғана қолданылуы керек. Себебі, дұрыс аутентификациялық тегті (яғни CBC MAC) екі хабарлама үшін білетін шабуылшы үшінші хабарламаны жасауға мүмкіндік туады, оның CBC MAC-ы да сол болады. Бұл, жай ғана, бірінші блокты t-мен XOR операциясы арқылы өңдеп, содан кейін m-ді осы өзгертілген блокпен біріктіру арқылы жасалады; яғни, жасай отырып. Хабарлама үшін MAC есептеу кезінде, біз MAC-ті m үшін әдеттегідей t ретінде есептейміз, бірақ бұл мән келесі кезеңге тізбектелегенде, бірінші хабарламаның MAC-і үшін алынған мәнмен қосымша XOR операциясын орындаймыз. Жаңа хабарламада осы тегтің болуы оны жояды, бірінші хабарламадағы ашық мәтін блоктарынан MAC-ке ешқандай үлес қалдырмайды m: және осылайша, хабарламаның тегі болады. Бұл мәселені хабарламаның соңына ұзындық блогын қосу арқылы шеше алмайсыз. Шындығында, CBC MAC, егер бір-бірінің префиксі болып табылатын екі хабарлама қолданылмаса, қауіпсіз екені дәлелденген, ал ұзындықты алдын ала қою – осының ерекше жағдайы. Егер өңдеу басталған кезде хабарламаның ұзындығы белгісіз болса, бұл қиындық тудыруы мүмкін.
This problem cannot be solved by adding a message size block to the end. in fact CBC MAC has been proven secure as long as no two messages that are prefixes of each other are ever used and prepending the length is a special case of this. This can be problematic if the message length may not be known when processing begins.
Шифрлау-соңғы-блок
Encrypt last block CBC MAC (ECBC MAC) соңғы блокты шифрлау арқылы анықталады. CBC MAC-ті өзгермелі ұзындықтағы хабарламаларға кеңейтудің басқа талқыланған әдістерімен салыстырғанда, соңғы блокты шифрлаудың артықшылығы – есептеу аяқталғанға дейін хабарлама ұзындығын білу қажеттілігінің болмауы.
Қате пайдалануды болдырмау үшін шабуыл жасау әдістері
Көптеген криптографиялық схемалардағыдай, шифрларды және басқа да протоколдарды ойсыз қолдану шабуылдарға мүмкіндік беруі мүмкін, криптографиялық қорғаныстың тиімділігін азайтуы (немесе тіпті оны қолданусыз қалдыруы) ықтимал. Біз CBC MAC-ті қате пайдаланудың салдарынан болатын шабуылдарды көрсетеміз.
Бастапқылау векторының мәнін өзгертуге рұқсат ету
Шифрлау блоктарының тізбегі (немесе басқа) режимінде блок шифрлауды қолдана отырып, деректерді шифрлау кезінде шифрлау процесінің бірінші сатысына инициализациялау векторы енгізу қалыпты жағдай. Әдетте, бұл вектор кездейсоқ таңдалуы (nonce) керек және блок шифр жұмыс істейтін кез келген құпия кілт үшін қайталанбауы тиіс. Бұл семантикалық қауіпсіздікті қамтамасыз етеді, себебі бірдей қарапайым мәтін бірдей шифрланған мәтінге шифрланбауын қамтамасыз етеді, бұл шабуылшыға арақатынас бар деген тұжырымға келуге мүмкіндік береді. CBC MAC сияқты хабарламаның аутентификациялық кодын есептеу кезінде инициализациялау векторының қолданылуы шабуылға ұшырау мүмкіндігін тудырады. Шифрланған мәтін блоктарының тізбегі шифрында, қарапайым мәтіннің бірінші блогы эксклюзивті «НЕ» операциясы арқылы инициализациялау векторымен біріктіріледі. Бұл операцияның нәтижесі шифрлау үшін блок шифрына берілетін кіріс болып табылады. Алайда, шифрлау және шифрлауды орындаған кезде, инициализациялау векторын қарапайым мәтінде жіберу қажет – әдетте шифрланған мәтіннің бірінші блогынан бірден бұрын, сонда қарапайым мәтіннің бірінші блогын дұрыс шифрдан шығарып, қалпына келтіруге болады. MAC есептеген кезде, инициализациялау векторын басқа тарапқа қарапайым мәтінде жіберу қажет, осылайша олар хабарламадағы тегтің өздері есептеген мәнмен сәйкес келедіін тексеріп алады. Егер инициализациялау векторын кез келген түрде таңдауға рұқсат берілсе, қарапайым мәтіннің бірінші блогын өзгертуге болады (басқа хабарламаны жіберу арқылы), ал хабарлама тегі сол болып қалады. Мысалы, CBC MAC үшін хабарлама тегін есептеу кезінде, MAC есептеуі басталатын инициализациялау векторын таңдадық деп есептейік. Бұл (хабарлама, тег) жұбын тудырады. Енді хабарламаны жасайық. , әр өзгертілген бит үшін инициализациялау векторындағы сәйкес битті кері бұрып, жаңа инициализациялау векторын жасайық. Осыдан кейін, осы хабарлама үшін MAC есептеуді бастаймыз. Қарапайым мәтіндегі және инициализациялау векторындағы биттер бірдей орындарда керілгендіктен, бұл өзгеріс бірінші кезеңде жойылды, яғни блок шифрына берілген кіріс сол болып қалады. Егер қарапайым мәтінге қосымша өзгерістер енгізілмесе, басқа хабарлама жіберілгеніне қарамастан, бірдей тег алынады. Егер инициализациялау векторын таңдау мүмкіндігі алынса және CBC MAC-тің барлық іске асырылымдары белгілі бір инициализациялау векторына (көбінесе нөлдер векторына, бірақ теориялық тұрғыдан алғанда, барлық іске асырылымдар келіскен кез келген мәнге) өздерін бекітсе, бұл шабуыл сәтті аяқтамайды. Қорыта айтқанда, егер шабуылшы MAC тексеру үшін қолданылатын инициализациялау векторын белгілей алса, ол MAC-ті жарамсыз деп танымай, бірінші дерек блогын кез келген түрде өзгерте алады.
Now produce the message For each bit modified in , flip the corresponding bit in the initialization vector to produce the initialization vector It follows that to compute the MAC for this message, we begin the computation by As bits in both the plain text and initialization vector have been flipped in the same places, the modification is cancelled in this first stage, meaning the input to the block cipher is identical to that for If no further changes are made to the plain text, the same tag will be derived despite a different message being transmitted. If the freedom to select an initialization vector is removed and all implementations of CBC MAC fix themselves on a particular initialization vector (often the vector of zeroes, but in theory, it could be anything provided all implementations agree), this attack cannot proceed. To sum up, if the attacker is able to set the IV that will be used for MAC verification, he can perform arbitrary modification of the first data block without invalidating the MAC.