1 / 14

Универзитет у Београду Математички факултет АНАЛИЗА АЛГОРИТМА ЗА ШИФРОВАЊЕ У ПРОГРАМУ PKZIP

Универзитет у Београду Математички факултет АНАЛИЗА АЛГОРИТМА ЗА ШИФРОВАЊЕ У ПРОГРАМУ PKZIP. - мастер рад - аутор: ментор : Зоран Ташић проф. др Миодраг Живковић. ПРОГРАМ PKZIP. архивирање фајлова компримовање фајлова шифровање фајлова

toni
Download Presentation

Универзитет у Београду Математички факултет АНАЛИЗА АЛГОРИТМА ЗА ШИФРОВАЊЕ У ПРОГРАМУ PKZIP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Универзитет у БеоградуМатематички факултетАНАЛИЗА АЛГОРИТМА ЗА ШИФРОВАЊЕ У ПРОГРАМУ PKZIP - мастер рад - аутор: ментор: Зоран Ташић проф. др Миодраг Живковић

  2. ПРОГРАМ PKZIP • архивирање фајлова • компримовање фајлова • шифровање фајлова • 1989. прва верзија • Фил Кац (Phil Katz) – Phil Katz’s ZIP program • .zip формат • E.Biham, P.Kocher, A known plaintext attack on the PKZIP stream cipher, Fast Software Encryption 1994. Lecture Notes in Computer vol. 1008, Springer, 1994.

  3. ШИФРОВАЊЕ У ПРОГРАМУ PKZIP • Алгоритам развијен специјално за примену у програму Pkzip • Базиран на интерном кључу од 96-бита • Напад на интерни кључ методом грубе силе – сложеност 296 • У овом раду показује се да је могуће извршити напад сложености 238

  4. МОДИФИКАЦИЈА ИНТЕРНОГ КЉУЧА update_keys(char): KEY0 KEY1 KEY2 i + 134775813 char CRC32 CRC32 * mod32 + 1 i+1 LSB MSB 3 or 1 ??????11 xor temp CRC32(pval,char) = (pval » 8) xor crctab[LSB(pval) xor char] ??????11 KEY3 temp *

  5. Први корак шифровања Иницијализација интерног кључа и његова модификација под утицајем унете лозинке: key0=0x12345678; key1=0x23456789; key2=0x34567890; for i=1 to strlen(password) update_keys(password[i]); Други корак шифровања Додавање заглавља шифровања (11 случајно добијених бајтова и 12. бајт који се чита из заглавља фајла )и његово шифровање for i = 1 to 12 Ci = Pi xor key3i; update_keys (Pi); Трећи корак шифровања: Учитавање једног по једног знака из улазног фајла, шифровање тих знакова и модификација интерног кључа for i = 1 to sizeof(nesifr_file) учитај Pi; Ci = Pi xor key3i; update_keys(Pi); МЕХАНИЗАМ ШИФРОВАЊА

  6. ОДРЕЂИВАЊЕ ИНТЕРНОГ КЉУЧА • Одређивање листе вредности key3 • Одређивање листе вредности key2 • Редуковање броја могућих вредности key2 (опционо) • Одређивање листе вредности key1 • Одређивање листе вредности key0 • Одређивање интерног кључа • Одређивање лозинке (опционо)

  7. ОДРЕЂИВАЊЕ ЛИСТЕ ВРЕДНОСТИ KEY3 Ci = Pi xor key3i; key3i = Pi xor Ci; отворени текст (Pi) шифрат(Ci) • key3i i i i 1 xor 1 1 2 xor 2 2 3 xor 3 3 4 xor 4 4 ... ... ... 11 xor 11 11 12 xor 12 12 13 xor 13 13 ... ... ... n xor n n

  8. ОДРЕЂИВАЊЕ ЛИСТЕ ВРЕДНОСТИ KEY2 key2i+1 =crc32(key2i , MSB(key1i+1 )); key2i = crc32-1 (key2i+1 , MSB(key1i+1)) = (key2i+1 ‹‹ 8) xor crcinvtab[MSB(key2i+1 )] xor MSB(key1i+1 ); temp = key2 | 3; key3 = LSB((temp*(temp xor 1) » 8); key2 Претпоставља се да је фиксирана вредност key2i+1 key2i+1 2-31 temp ??????11 10-31 0-31 temp*(temp xor 1) key2i+1 ‹‹ 8 crcinvtab[MSB(key2i+1 )] MSB(key1i+1) 10-31 2-15 key3 key2i (key2i+1‹‹8) xor crcinvtab[MSB(key2i+1 )] xor MSB(key1i+1 ) кey3 – 256 могућих вредности; key3 зависи од битова 0-15 temp; На позицијама 0-1 temp налазе се јединице; Битови 0-15 temp зависе од битова 2-15 кey2; key3 зависи од битова 2-15 key2; Свака од key3 може се добити од 214/28 = 26 вредности доњих 16 битова key2; 216могућности за горњих 16 битова key2; За неку фиксирану key3, постоји 222могућих вредности горњих 30 битова key2 битови 10-15 се поклапају – морају бити исти key2i-64 могуће вредности за битове на позицијама 2-15; Вредности битова на позицијама 10-15 се поклапају; У просеку 2-6 могућихвредности битова 2-15 key2iдаје одговарајућу вредност key2i+1. Преостаје у просеку једна (64 * 2-6) вредност key2i, ако је позната вредност key2i+1. У просеку не значи увек и само једна (може их бити 0-5). Наставља се иста дискусија за key2i-1, key2i-2 ... Добија се око 222 могућих листа вредности (key2n, key2n-1,..., key22) Комплетне вредности key2i добијају се применом формуле: key2i+1 =crc32(key2i , MSB(key1i+1 ));

  9. РЕДУКОВАЊЕ БРОЈА МОГУЋИХ ВРЕДНОСТИ KEY2 • Број листа вредности (key2n, key2n-1, ... , key22) приближно је једнак броју могућих вредности key2n • Ако је познато више од 13 бајтова отвореног текста врши се редукција броја могућих кандидата за key2n. • Неке вредности key2n не дају ни једну вредност key2n-1, а неке различите вредности key2n дају исту вредност key2n-1. Ти дупликати се одбацују. Преостали број кандидата за key2n-1 је значајно мањи од броја кандидата за key2n.

  10. ОДРЕЂИВАЊЕ ЛИСТЕ ВРЕДНОСТИ KEY1 key2i+1 =crc32(key2i , MSB(key1i+1 )); MSB(key1i+1 )) =crc32-1 (key2i+1 , key2i ) = (key2i+1 ‹‹ 8) xor crcinvtab[MSB(key2i+1 )] xor key2i ; На основу познате листе (key2n, key2n-1, ... , key22)одређује се листа (MSB(key1n), MSB(key1n-1), ... , MSB(key13)). key1i+1 = (key1i + LSB(key0i+1))*134775813+1 (mod32) key1i + LSB(key0i+1) = (key1i+1 – 1)*134775813-1 (mod32) key1n- 224 могућности за доња 24 бита; 2-8 од њих је у одговарајућој вези са key1n-1; Добија се 216 одговарајућих вредности за key1n; За једну конкретну вредност key1nдобија се јединствена вредност key1n-1 + LSB(key0n). LSB(key0n) узима једну од 256 вредности. MSB(key1n-2) је познат, па само 2-8 вредности key1n-1 + LSB(key0n) води ка одговарајућој key1n-2 У просеку: једна фиксирана вредност key1n Води ка једној вредности key1n-1. У просеку не значи увек и само једна, може их бити две. key1i + LSB(key0i+1) * 134775813 1 + mod32 key1i+1 За једну конкрену листу (key2n, key2n-1, ... , key22) добија се око 216 могућих листа вредности (key1n, key1n-1, ... , key14).

  11. ОДРЕЂИВАЊЕ ЛИСТЕ ВРЕДНОСТИ KEY0 На основу добијене листе (key1n, key1n-1, ... , key14) добија се листа (LSB(key0n), LSB(key0n-1),.., LSB(key05)).На основу познатих key1iи key1i+1 добија се LSB(key0i+1) коришћењем формуле: LSB(key0i+1) = ((key1i+1 – 1) * 134775813-1) – key1i (mod32). key0i и key0i+1су повезани формулом:key0i+1=crc32(key0i, Pi), тј. key0i+1 = (key0i » 8) xor crctab[LSB(key0i) xor Pi]. Одатле се добија формула: (key0i » 8) = key0i+1 xor crctab[LSB(key0i) xor Pi]. key0n-1 0-7 0-7 key0n-1 0-15 key0n xor key0n-2 0-23 0-31 Аналогно се добијају: crctab[LSB(key0n) xor Pn] key0n-3 0-31 Из key0n-3 применом формуле key0i=crc32-1 (key0i+1, Pi) добијају се key0n-4, key0n-5,…, key01. Упоређују се вредности бајтова најмање тежине добијених вредности key0n-4, key0n-5, key0n-6, keyn-7и key0n-8 са већ познатим LSB(key0n-4), LSB(key0n-5),…,LSB(key05). Пореде се 5 бајтова и добија се подударање у 2-40случаја.С обзиром да има 238 кандидата, гарантује се добијање јединствене (праве) листе вредности key0i. n-8 = 5 n=13 - неопходан број познатих бајтова отвореног текста

  12. ОДРЕЂИВАЊЕ ИНТЕРНОГ КЉУЧА Ако је позната вредност интерног кључа у неком тренутку (key0i, key1i, key2i) могу се само на основу шифрата дешифровати преостали подаци и добити интерни кључ у било ком тренутку. (key0i+1, key1i+1, key2i+1) се добија коришћењем функције update_keys, а (key0i-1, key1i-1, key2i-1) се добија низом формула (Ci– шифрат, Pi– дешифрован знак): key2i-1 = crc32-1 (key2i, MSB(key1i)); key1i-1 = ((key1i – 1) * 134775813-1) – LSB(key0i) (mod 32); tempi-1 = key2i-1 | 3; key3i-1 = LSB((tempi-1 * (tempi-1 xor 1)) » 8); Pi-1 = Ci-1 xor key3i-1; key0i-1 = crc32-1 (key0i, Pi-1);

  13. ОДРЕЂИВАЊЕ ЛОЗИНКЕ На основу вредности интерног кључа (key01, key11, key21) одређује се лозинка која је коришћена за шифровање. Испитују се лозинке различитих дужина у растућем поретку: 0,1,2,... У зависности од дужине лозинке (l) примењује се један од три поступка: • Ако је l ≤ 4, лозинка се директно добија из key01. • Ако је 5 ≤ l ≤ 6, одређује се key20, key10 и key2-1, затим потенцијалне листе key2i, и key1i,i=-4(-5),…,0 које се формирају у првом кораку шифровања, а одатле пети (и шести) знак лозинке. Прва четири знака проналазе се као код лозинки дужине четири. • Ако је l>6,првих l-6 знакова узимају се на све могуће начине, а за последњих шест примењује се поступак као код одређивања лозинки дужине шест.

  14. АНАЛИЗА ЕФИКАСНОСТИ Време потребно за одређивање лозинке Време потребно за одређивање интерног кључа

More Related