Breaking VISA PIN
Nasa ibaba ang isang artikulo ko natagpuan kamakailan. Ito ang isa sa mga pinaka-kumpletong paglalarawan ng PIN Verification Value (PVV) pataga.
Akala ko Gusto magtiklop ito dito para sa aking mga lokal na sanggunian.
Bilang puna ay nagawa tungkol sa balarila na ginamit sa orihinal na teksto, mayroon akong naitama ang ilan sa mga malinaw na error habang pinapanatili ang konteksto ng orihinal na materyales.
http://69.46.26.132/ ~ biggold1/fastget2you/tutorial. php
--- Orihinal Text ----
Paunang salita
Naisip mo na kailanman ay magtaka kung ano ang mangyayari kung mawalan ng iyong credit card o debit card at ang isang tao na ito. Puwede ba ang taong ito ma-withdraw ng pera mula sa isang ATM hulaan, kahit paano, ang iyong PIN? Saka, kung ikaw ay isang tao na nag hahanap ng card mo subukang hulaan ang PIN at kunin ang pagkakataon na makakuha ng ilang madaling pera? Syempre ang sagot sa parehong katanungan ay dapat na "no". Ang trabaho ay hindi na pakikitungo sa pangalawang tanong, ito ay isang bagay na ito ng mga personal na etika. Dito ako subukin sa sagot na ang unang katanungan.
Lahat ng impormasyon na ginagamit para sa trabaho na ito ay pampubliko at maaaring matagpuan sa Internet. Ang natitira ay isang bagay ng matematika at programming, kaya kami ay matuto ng isang bagay at may mga ilang mga masaya. Ako isigaw walang secrets. Bukod dito, ang mga layunin (at pinal na konklusyon) ng trabaho na ito ay upang ipakita na ang PIN algorithm ay malakas pa rin sapat na upang magbigay ng sapat na seguridad. Namin ang lahat kung ang teknolohiya ay hindi ang mahina point.
Ito gumagana analyses ng isa sa mga pinaka-karaniwang PIN algorithm, VISA PVV, na ginagamit ng maraming mga ATM card (credit at debit cards) at sumusubok na malaman kung paano ay lumalaban sa PIN hulaan tuligsa. Sa pamamagitan ng "hulaan" hindi ko ibig sabihin ng pagpili ng isang random na PIN at sinusubukan ito sa isang ATM. Ito ay kilala din namin na sa pangkalahatan ay binibigyan ng tatlong magkakasunod na subok na ipasok ang mga karapatan ng PIN, kung mabibigo namin mapigil ang ATM card. Bilang VISA PIN ay apat na digit na mahaba madaling pagbatayan na ang mga pagkakataon para sa isang random na PIN hulaan ay 3 / 10000 = 0,0003, tila mababa ang sapat na upang maging ligtas; ito ay nangangahulugan na kailangan mo upang mawala ang iyong card ng higit pa sa tatlong libong beses ( o pagkawala ng higit pa sa tatlong libong mga kard ng sabay-sabay:) hanggang sa may makatwirang pagkakataon ng pagkawala ng pera.
Ano ko talagang meant sa pamamagitan ng "hulaan" ay paglabag ang PIN algorithm upang ang mga ibinigay na kahit anong card na maaari mong malaman agad ang mga kaugnay na PIN. Kaya ang dokumento na ito posibilidad na ang mga pag-aaral, pag-aaral ng algorithm at minumungkahi ng isang paraan para sa mga atake. Panghuli naming ibigay isang kasangkapan na nagpapatupad ng mga atake at kasalukuyang resulta tungkol sa tinatayang pagkakataon sa basagin ang sistema. Tandaan na habang ang ibang bangko seguridad kaugnay na algorithm (iba pang mga PIN format tulad ng IBM PIN o card pagpapatunay lagda tulad ng CVV o CVC) ay katulad sa VISA PIN, ang parehong analysis ay maaaring tapos na mapagtutubuan halos ang parehong resulta at pagpapalagay.
Isa sa mga pinaka-karaniwang PIN algorithm ay ang VISA PIN Verification Value (PVV). Ang customer ay bibigyan ng isang PIN at ng magnetic maguhitan card. Naka-encode sa magnetic guhit ay isang apat na digit na numero, na tinatawag na PVV. Ang bilang na ito ay isang cryptographic pirma ng PIN at ng iba pang mga data na may kaugnayan sa card. Kapag ang isang gumagamit ay nagpasok ng kanyang PIN sa ATM mababasa ang magnetic maguhitan, encrypts at nagpapadala ng lahat ang impormasyon na ito sa isang central computer. May isang pagsubok PVV ay computed gamit ang mga customer na ipinasok PIN at ang card na impormasyon na may isang cryptographic algorithm. Ang paglilitis PVV ay inihambing sa PVV na naka-imbak sa card, kung ang mga ito ay tumutugma sa central computer bumalik sa ATM pahintulot para sa transaksyon. Tingnan sa mas maraming mga detalye.
Ang paglalarawan ng PVV algorithm ay matatagpuan sa loob ng dalawang dokumento na naka-link sa nakaraang pahina. Sa buod na ito ay binubuo ng encryption ng isang 8 byte (64 bit) string ng data, na tinatawag na Transformed Security Parameter (TSP), na may des algorithm (DEA) sa Electronic Code Book mode (ECB) gamit ang isang lihim na 64 bit key. Ang PVV ay nagmula sa output ng encryption proseso, na kung saan ay isang 8 byte string. Ang apat na numero ng PVV (mula sa kaliwa papunta sa kanan) ay tumutugma sa mga unang apat na mga decimal na numero (mula sa kaliwa papunta sa kanan) ng output mula des kapag isinaalang-alang bilang isang 16 na karakter hexadecimal (16 bit x 4 = 64 bit) string. Kung walang mga apat na decimal na numero sa pagitan ng mga 16 hexadecimal character pagkatapos ay ang PVV ay nakumpleto na kinuha (mula sa kaliwa papunta sa kanan) hindi decimal karakter at decimalizing mga ito sa pamamagitan ng paggamit ng conversion A-> 0, B-> 1, C-> 2, D -> 3, E-> 4, F-> 5. Narito ang isang halimbawa:
Output mula Des: 0FAB9CDEFFE7DCBA
PVV: 0975
Ang mga istratehiya ng pag-iwas sa decimalization ng laktaw character hanggang sa apat na mga decimal na numero ay matatagpuan (na ang mangyayari sa halos lahat ng mga oras na kami ay makikita sa ibaba) ay lubhang matalino dahil ito avoids isang mahalagang bias sa pamamahagi ng mga bilang na ito ay napatunayan na nakamamatay para sa ibang sistema, kahit na ang epekto sa sistemang ito ay marami na mas mababa. Tingnan din ang isang problema sa mga kaugnay na hindi nag-aaplay sa VISA PVV.
Ang TSP, makikita bilang 16 hexadecimal character (64 bit) string, ay binuo (mula sa kaliwa papunta sa kanan) sa 11 rightmost numero ng PAN (ang numero ng card) hindi kasama ang huling digit (check digit), isang digit na mula sa 1 hanggang 6 na na kung saan pinipili ang lihim encrypting susi at sa wakas sa apat na numero ng PIN. Narito ang isang halimbawa:
PAN: 1234 5678 9012 3445
Key selector: 1
PIN: 2468
TSP: 5678901234412468
Obviously ang problema ng mga paglabag VISA PIN ay binubuo sa paghahanap ang susi para sa mga lihim na encrypting Des. Ang pamamaraan na ito ay para sa gumawa ng isang malupit na puwersa ng mga paghahanap ang susi space. Tandaan na hindi ito ang tanging paraan, isa ay subukan upang makahanap ng kahinaan sa DEA, maraming tried, ngunit ito pa rin ang mga lumang pamantayan sa malawak na gamitin (ngayon ay papalitan ng AES at RSA, bagaman). Ito ay nagpapakita na ito ay sapat na upang malusog na astig lakas ay ang tanging paraan viable (may ilang mga mas mahusay na atake ngunit hindi praktikal sa aming kaso, para sa isang buod makita LASEC talaan at para sa marumi tingnan ang mga detalye ng Biham & Shamir 1990, Biham & Shamir 1991, Matsui 1993, Biham & Biryukov 1994 at Heys 2001).
Ang susi selector digit was tunay malamang nagpasimula upang masakop ang posibilidad ng isang susi sa kompromiso. Sa kaso na lamang sila sa mga isyu na may bagong card gamit ang ibang susi selector. Mas lumang cards ay maaaring substituted na may mga bago o lamang ang ATM ay maaari transparently sumulat ng isang bagong PVV (kaukulang sa bagong susi at mapanatili ang parehong PIN) sa susunod na pagkakataon ang mga customer na gumagamit ng kanyang card. Para sa iling ng seguridad ang lahat ng mga gumagamit ay dapat na hingin sa iyo na baguhin ang kanilang mga PINs, subalit ito ay nakakahiya para sa bangko upang ipaliwanag ang dahilan, kaya ang tunay malamang sila ay hindi makagawa ng ganoong kahilingan.
Inihahanda ang mga atake
Isang malupit na puwersa na atake ay binubuo sa encrypting isang TSP may kilala PVV gamit ng lahat ng posibleng encrypting keys at ihambing ang bawat makuha PVV sa kilala PVV. Kapag ang pagtutugma ay natagpuan namin ang isang kandidato key. Ngunit kung gaano karami ang mga key na namin na subukan? Tulad ng sinabi namin sa itaas ng mga susi ay 64 bit mahaba, ito ay nangangahulugan na namin na subukan ang 2 ^ 64 keys. Subalit ito ay hindi totoo. Talagang lamang 56 bits ay epektibo sa des keys dahil isa bit (ang hindi bababa sa makabuluhang) sa labas ng bawat octet ay kasaysayan reserved bilang isang checksum para sa iba; sa pagsasanay ng mga 8 bits (isa para sa bawat isa sa mga octet 8) ay winalang-bahala.
Kaya ang des space key ay binubuo ng 2 ^ 56 keys. Kung kami na subukan ang lahat ng mga ito ay mga susi namin mahanap ang isa at isa lamang tugma, nararapat sa ang bangko lihim susi? Tiyak na hindi. Kami ay makakuha ng maraming mga matching keys. Ito ay dahil ang PVV ay lamang ng isang maliit na bahagi (ang isang ika-apat na) ng des output. Bukod dito ang PVV ay degenerated dahil ang ilan ng mga numero (ang mga pagitan ng 0 at 5 pagkatapos ng huling, makikita mula sa kaliwa papunta sa kanan, numero sa pagitan ng 6 at 9) ay maaaring nanggaling mula sa isang decimal digit o mula sa isang decimalized hexadecimal digit ng des output. Kaya maraming mga key ay gumawa ng isang des output na magbubunga sa parehong matching PVV.
Pagkatapos ay kung ano ang maaari naming gawin upang hanapin ang tunay na susi sa gitna ng mga iba pang mga false positive keys? Lamang na kami ay sa encrypt ng pangalawang ibang TSP, na kilala din sa PVV, ngunit ang paggamit lamang ng mga kandidato susi na ibinigay ng isang positibong na tumutugma sa unang TSP-PVV pares. Gayunman ay walang garantiya na hindi kami makakuha muli ng maraming false positives kasama ang tunay na susi. Kung gayon, kami ay nangangailangan ng isang ikatlong TSP-PVV pares, ulitin ang proseso at iba pa.
Bago namin simulan ang aming mga atake na namin na malaman kung gaano karami ang TSP-PVV pares namin ang kailangan mo. Para sa mga na kami ay upang makalkula ang mga pagkakataon para sa isang random des output sa ani ng isang matching PVV sa pamamagitan lamang ng pagkakataon. Mayroong ilang mga paraan upang kalkulahin ang bilang na ito at dito ako ay gagamit ng isang simpleng diskarte madaling maunawaan ngunit kung saan ay nangangailangan ng ilang background sa matematika ng mga bagay na maaaring mangyari.
Ang isang bagay na maaaring mangyari maaari palaging makikita bilang ang ratio ng makabubuti mga kaso ng mga posibleng kaso. Sa aming mga problema sa bilang ng posibleng mga kaso ay ibinigay sa pamamagitan ng permutasyon ng 16 mga sangkap (ang 0 sa F hexadecimal digit) sa isang grupo ng 16 sa kanila (ang 16 hexadecimal na numero ng des output). Ito ay ibinigay sa pamamagitan ng 16 ^ 16 ~ 1,8 * 10 ^ 19 na ng kurso coincides sa 2 ^ 64 (iba't-ibang mga numero ng 64 bits). Sa hanay na ito ng mga numero ay maaaring ihiwalay sa limang kategorya:
Mga may hindi bababa sa apat na mga decimal na numero (0 hanggang 9) sa pagitan ng mga 16 hexadecimal numero (0 sa F) ng des output.
Mga may eksaktong lamang tatlong mga decimal na numero.
Mga may eksaktong lamang ng dalawang decimal na numero.
Mga may eksaktong isa lamang decimal digit.
Mga walang decimal na numero (ang lahat sa pagitan ng A at F).
Let's kalkulahin kung gaano karaming mga numero mahulog sa bawat kategorya. Kung namin label ang 16 hexadecimal numero ng des output bilang X1 sa X16 pagkatapos ay maaari naming label na ang unang apat na mga decimal na numero ng anumang naibigay na bilang ng mga unang kategorya bilang Xi, Xj, Xk at Xl. Ang bilang ng mga iba't-ibang mga kumbinasyon na may profile na ito ay ibinigay sa pamamagitan ng ang produkto 6 i-1 * 10 * 6j-i-1 * 10 * 6k-j-1 * 10 * 6 lk-1 * 10 * 1616-l na kung saan ang 6 ' s dumating mula sa bilang ng mga posibilidad para sa isang A to F digit, ang 10's nanggaling mula sa mga posibilidad para sa isang 0 hanggang 9 digit na, at ang 16 ay mula sa mga posibilidad para sa isang 0 sa F digit. Ngayon ang kabuuang numero sa unang kategorya ay lamang na ibinigay sa pamamagitan ng pagbubuo ng produktong ito sa ako, j, k, l mula sa 1 hanggang 16 ngunit may i <j <k <L. Kung ilang matematika trabaho makikita ninyo ang mga ito ay katumbas sa produkto ng 104 / 6 na may higit sa pagbubuo ako 4-16 ng (i-1) * (i-2) * (i-3) * 6i-4 * 16 16-i ~ 1,8 * 1019.
Analogously ang bilang ng mga kaso sa pangalawang kategorya ay ibinigay sa pamamagitan ng pagbubuo sa ako, j, k mula sa 1 hanggang 16 na may i <j <k ng produkto 6i-1 * 10 * 6j-i-1 * 10 * 6k-j -1 * 10 * 616-k na kung saan ikaw ay maaaring gumawa ito upang maging 16! / (3! * (16-13)!) * 103 * 6 13 = 16 * 15 * 14 / (3 * 2) * 103 * 613 = 56 * 104 * 613 ~ 7,3 * 1015. Katulad din para sa ikatlong kategorya na namin ang pagbubuo sa ako, j mula sa 1 hanggang 16 na may i <j ng 6 i-1 * 10 * 6j-i-1 * 10 * 616-j na katumbas sa 16! / (2! * (16-14)!) * 102 * 614 = 2 * 103 * 615 ~ 9,4 * 1014. Muli, para sa ika-apat na kategorya na namin ang pagbubuo higit ako mula sa 1 hanggang 16 ng 6i-1 * 10 * 616-i = 160 * 615 ~ 7.5 * 1013. At sa wakas ang halaga ng mga kaso sa ikalimang kategorya ay ibinigay sa pamamagitan ng permutasyon ng anim na mga sangkap (A sa F digit) sa isang grupo ng 16, iyon ay, 616 ~ 2,8 * 1012.
Umaasa ako na sinundan mo ang mga kalkulasyon ng hanggang sa puntong ito, ang mga matitigas na bahagi ay tapos na. Ngayon, bilang patunay na ang lahat ng bagay ay karapatan na maaari mong kabuuan ng bilang ng mga kaso sa 5 kategorya at makita ang mga ito ay katumbas ng kabuuang bilang ng posibleng mga kaso namin kinakalkula bago. Gawin ang mga operasyon ng paggamit ng 64 bit na numero o rounding (para sa mga floats) o overflow (para sa mga integers) error ay hindi nagpapahintulot sa inyo na makuha ang eksaktong resulta.
Hanggang sa ngayon kami ay kalkulahin ang bilang ng posibleng mga kaso sa bawat isa sa mga limang kategorya, ngunit kami ay interesado sa pagkuha ng bilang ng mga kaso sa halip na makabubuti. Ito ay tunay madali sa kunin ang huli mula sa dating bilang na ito ay lamang ng pag-aayos ng mga kombinasyon ng apat na decimal na numero (o ang mga kinakailangang hexadecimal digit kung walang mga apat na decimal na numero) ng PVV sa halip ng pagpapaalam sa kanila libre. Sa pagsasanay na ito ay nangangahulugan na sa pamamagitan ng pagpapaandar ng 10's sa mga formula sa itaas sa 1 at ang mga kinakailangang halaga ng 6's sa 1's kung walang mga apat na decimal na numero. Iyon ay, tayo may sa paghati-hatiin ang unang resulta sa pamamagitan ng 104, ang pangalawang ng isa sa pamamagitan ng 103 * 6, ang pangatlong isa sa pamamagitan ng 102 * 62, ang ika-apat na isa sa pamamagitan ng 10 * 63 at ang ikalima ng isa sa pamamagitan ng 64. Pagkatapos ay ang bilang ng mga kaso makabubuti sa limang kategorya ay humigit-kumulang sa 1.8 * 1015, 1.2 * 1012, 2.6 * 1011, 3.5 * 1010, 2.2 * 109 naaayon.
Ngayon namin na kumuha ng kung ano ay ang bagay na maaaring mangyari para sa isang des output upang tumugma sa isang PVV ng pagkakataon. Kami lang bang idagdag ang limang numero ng mainam na kaso at hatiin ito sa pamamagitan ng ang kabuuang bilang ng posibleng mga kaso. Kapag ginawa ito makuha namin na ang mga bagay na maaaring mangyari ay humigit-kumulang sa 0,0001 o isa sa labas ng sampung libong. Ito ba ay kakaiba na ito ng mabuti bilugan resulta? Hindi sa lahat, makatarungan may a tumingin at ang numero ng aming kinakalkula sa itaas. Ang unang kategorya dominates sa pamamagitan ng ilang mga order ng magnitude ang bilang ng mga napapanahon at posibleng kaso. Ito ay sa halip intuitive gaya ito tila malinaw na ito ay hindi tunay hindi pagkakaroon ng apat na decimal na numero (10 mga pagkakataon sa labas ng bawat digit na 16) sa mga 16 hexadecimal digit. Nakita natin noon na ang relasyon sa pagitan ng mga bilang ng posibleng mga kaso at sang-ayon sa unang kategorya ay isang dibisyon ng 10 ^ 4, na kung saan ang aming mga resulta p = 0,0001 ay mula.
Ang aming layunin para sa lahat ng mga kalkulasyon ay upang malaman kung gaano karami ang TSP-PVV pares na kailangan namin upang magsagawa ng isang matagumpay na taong malupit na puwersa na atake. Ngayon namin na kalkulahin ang inaasahang bilang ng mga false positives sa isang unang search: ito ay ang bilang ng mga pagsubok na beses ang mga pagkakataon para sa isang random na false positive, ibig sabihin t * p kung saan t = 2 ^ 56, ang laki ng mga susi space. Ang mga halaga sa humigit-kumulang sa 7.2 * 10 ^ 12, sa halip ng isang malaking numero. Ang inaasahang bilang ng mga false positives sa ikalawang paghahanap (restricted sa positibong key matatagpuan sa unang paghahanap) ay (t * p) * p, para sa isang third ng paghahanap ay ((t * p) * p) * p at iba pa. Kaya para sa paghahanap n ang inaasahang bilang ng mga false positives ay t * p ^ n.
Kami ay maaaring makakuha ng bilang ng mga paghahanap na kinakailangan para umasa lamang ng isang false positive sa pamamagitan ng pagpapahayag ng equation t * p ^ n = 1 at nilulutas para sa n. Kaya n katumbas sa logarithm sa base p ng 1 / t, na sa pamamagitan ng pag-aari ng logarithms ito ay magbubunga ng n = mag-log (1 / t) / mag-log (p) ~ 4.2. Dahil hindi namin na gumawa ng isang praksyonal paghahanap na ito ay na maginhawa sa mga round up na ang bilang na ito. Kaya kung ano ang inaasahang bilang ng mga false positives kung pagpapalabas namin ng limang paghahanap? Ito ay t * p ^ 5 ~ 0,0007 o humigit-kumulang sa 1 out of 1400. Kaya ang paggamit ng limang TSP-PVV pares ay ligtas upang makuha ang tunay na lihim susi na walang false positives.
Ang mga atake
Kapag alam namin na kailangan namin ng limang TSP-PVV pares, paano namin makuha ang mga ito? Ng mga kurso na kailangan namin ng hindi bababa sa isang card na may kilala PIN, at dahil sa kalikasan ng PVV algorithm, na ang tanging bagay na kailangan namin. Sa iba pang mga PIN sistema, tulad ng IBM, kami ay kailangan mo na limang baraha, subalit ito ay hindi kinakailangan na may VISA PVV algorithm. Kami ay may lamang na basahin ang magnetic guhit at pagkatapos ay palitan ang PIN ng apat na beses ngunit ang pagbabasa ng mga card pagkatapos ng bawat pagbabago.
Ito ay kailangan upang basahin ang magnetic gumuhit ng card para makuha ang PVV at ang encrypting key selector. Maaari kang bumili ng isang komersyal magnetic maguhitan reader o gumawa ng isa sa iyong sarili ang mga sumusunod na mga tagubilin na maaari mong mahanap sa nakaraang pahina at mga link doon. Kapag ikaw ay isang mambabasa makita ito paglalarawan ng mga pamantayan magnetic track upang malaman kung paano makakuha ng PVV mula sa mga data na basahin. Sa dokumento na iyon ay ang PVV patlang sa mga track ng 1 at 2 ay sinabi na limang karakter ang haba, pero talagang ang tunay PVV binubuo ng huling apat na numero. Ang unang ng limang numero ay ang susi selector. Ako ay may lamang makikita cards na may halaga ng 1 sa digit na ito, na pabagu-bago ang mga pamantayan at sa mga lihim susi ay hindi kailanman na-kompromiso (at sa gayon sila ay hindi na kailangang lumipat sa ibang susi palitan ang selector).
Ako ay isang simpleng C programa, getpvvkey.c, upang maisagawa ang mga atake. Ito ay binubuo ng isang loop na subukan ang lahat ng posibleng mga susi sa encrypt ang unang TSP, kung ang nagmula PVV matches ang tunay PVV isang bagong TSP ay tried, at iba pa hanggang sa may mismatch, sa mga kaso na ang susi ay na at ng isang bagong isa ay tried, o ang limang nagmula PVVs tugma ang nararapat na PVVs true, sa mga kaso na kung saan maaari naming akala namin got ang bangko lihim susi, subalit ang loop napupunta sa hanggang ito exhausts ang susi space. Ito ay ginagawa upang masiguro namin mahanap ang tunay na susi dahil may isang pagkakataon (bagaman napakababang) ang unang susi na nakita ay isang false positive.
Ito ay inaasahan sa programa ay kumuha ng isang napaka-haba ng oras upang matapos at upang mabawasan ang panganib ng kapangyarihan ng isang hiwa, computer umistambay, atbp ito ay checkpoints sa file na getpvvkey.dat mula sa oras-oras (ang eksaktong oras ay depende sa bilis ng computer, ito ay sa paligid ng isang oras para sa mga computer na ngayon ang pinakamabilis na ginagamit). Para sa parehong dahilan kung ang isang positibong susi ay natagpuan na ito ay nakasulat sa file getpvvkey.key. Ang programa ay nagpapakita lamang ng isang mensahe sa simula, ang simula sa posisyon na kinuha mula sa tsekpoint file na kung mayroon man, matapos na wala more ay ipinapakita.
Ang des algorithm ay isang mahalagang punto sa programa, ito ay kaya napakahalaga sa pag-optimize ng bilis nito. Nasubukan ko ng ilang mga implementations: libdes, SSLeay, openssl, cryptlib, nss, libgcrypt, katakumba, libtomcrypt, cryptopp, ufc-silid sa ilalim ng lupa. Ang des function ng unang apat na ay base sa parehong code ng Eric Young at ang isa na kung saan ginanap sa pinakamahusay (kabilang optimize C at x86 assembler code). Kaya ko pinili libdes na kung saan ay ang orihinal na pagpapatupad at kondensada ang lahat ng kaugnay na code sa ang mga file encrypt.c (C bersyon) at x86encrypt.s (x86 assembler bersyon). Ang code ay bahagya mabago upang makamit ang ilang mga pagpapahusay sa isang taong malupit na puwersa atake: ang unang permutasyon ay isang nakapirming karaniwang magbabad sa bawat TSP encryption at sa gayon ay magagawa lamang ng isang oras sa simula. Ibang pagpapabuti ay na ako wrote ang isang ganap na bagong setkey function (ko na tinatawag na ito nextkey) na kung saan ang mga para sa isang taong malupit na puwersa loop.
Upang makakuha ng programa nagtatrabaho ka makatarungan may sa uri sa nararapat na lugar limang TSPs at ang kanilang mga PVVs at pagkatapos ay sumulat ng libro na ito. Ako ay may nasubok ito lamang sa UNIX platform, ang paggamit sa makefile Makegetpvvkey sa mga sumulat ng libro (gamitin ang mga command na "gumawa-f Makegetpvvkey"). Ito ay maaaring sumulat ng libro sa iba pang mga sistema ngunit maaaring kailanganin upang ayusin ang ilang mga bagay-bagay. Siguraduhin na ang mga kahulugan ng mga uri ng long64 tumutugma sa isang 64 bit integer. Karaniwan ay walang pagtitiwala sa endianness ng processor. Ako ay matagumpay na compiled at patakbuhin ito sa Pentium-Linux, Alpha-Tru64, Mips-Irix at Sparc-Solaris. Kung wala ka at hindi na nais mong i-install ang Linux (hindi mo alam kung ano sa iyo ay ang mga nawawalang ;-) ikaw pa rin ang pinili upang tumakbo Linux sa CD at gamitin ang aking mga programa, makita ang aking pahina ng Linux na tumatakbo nang walang pag-install ito.
Kapag ikaw ay natagpuan ang mga lihim na bangko susi kung nais mong hanapin ang PIN ng isang arbitrary card mo lamang na magsulat ng isang katulad na programa (paumanhin, ako ay hindi nakasulat na ito, ako masyadong tamad:) na subukan ang lahat ng 10 ^ 4 PINs sa pamamagitan ng pagbuo ng kaukulang TSP, encrypting nito sa (wala na) lihim susi, panggagaling ang PVV at paghahambing nito sa PVV sa magnetic gumuhit ng card. Makakatanggap ka ng isang tugma para sa mga tunay na PIN. Tanging isang tugma? Tandaan kung ano ang nakita natin sa itaas, kami ay isang pagkakataon ng 0,0001 na ang isang random encryption tumutugma sa PVV. Kami ay nagsisikap 10000 PINs (at sa gayon TSPs) kaya inaasahan namin 10,000 * 0.0001 = 1 false positive sa average.
Ito ay isang napaka-interesante resulta, ito ay nangangahulugan na, sa karaniwan, ang bawat card ay may dalawang balidong PINs: ang customer ng PIN at ang inaasahang maling positibo. Ako tawag ito "maling" ngunit tandaan na hangga't ito ay bumubuo ng ang tunay na PVV ito ay isang PIN na may-bisang bilang ng mga customer ng isa. Bukod dito, wala nang paraan para malaman na kung saan, kahit para sa mga ATM; lamang customer sweetness. Kahit na ang false positive ay hindi wastong bilang ng PIN, ikaw pa rin ay may tatlong pagsubok sa ATM anyway, sapat na sa karaniwan. Kaya ang mga bagay na maaaring mangyari namin kinakalkula sa simula ng dokumento na ito tungkol sa mga random na hulaan ng PIN ay kailangang naitama. Tunay na ito ay dalawang beses na halaga, ibig sabihin, ito ay 0,0006 o isa sa labas ng higit sa 1600, pa rin ligtas na mababa.
Mga resulta
Ito ay mahalaga upang ma-optimize ang pagtitipon ng mga programa at na tumakbo ito sa pinakamabilis na posibleng processor dahil sa matagal na inaasahang tatakbo oras. Nahanap ko na ang mga tagatala optimization bandila-O ang makakakuha ng mas mahusay na pagganap, isipan ng ilang mga pagpapabuti ay nakakamit ang pagdaragdag ng-fomit-frame-puntero bandila sa Pentium-Linux, ang-pako bandila sa Alpha-Tru64, ang-IPA bandila sa Mips-Irix at ang mabilis na-bandila sa Sparc-Solaris. Espesyal na mga bandilang (-DDES_PTR-DDES_RISC1-DDES_RISC2-DDES_UNROLL-DASM) para sa des code sa pangkalahatan ay may benepisyo rin. Lahat ng mga flags na nai-subok at ako pinili ang pinakamahusay na kumbinasyon para sa bawat processor (tingnan ang makefile) ngunit maaari mong subukan sa fine tune ng iba pang flags.
Ayon sa aking mga pagsusulit ang pinakamahusay na pagganap ay nakakamit sa AMD Athlon 1600 MHz processor, mahigit 3.4 milyong mga susi sa bawat segundo. Kawili-wili ito ang makakakuha ng mas mahusay na mga resulta kaysa sa Intel Pentium IV 1800 MHz at 2000 MHz (tingnan ang mga numero sa ibaba, mag-click sa kanila upang palakihin). Ako ay naniniwalang ito ay dahil sa ilang mga I / O saturation, tiyak na cache o kard ng memorya na ma-access, na ang AMD processor (na kalahati ng cache ng Pentium) o ang motherboard na kung saan ito ay tumatakbo, namamahala upang maiwasan. Sa unang tayahin sa ibaba makikita mo na ang des paglabag bilis ng lahat ng mga processors ay mas marami o mas kaunti ang haba ng isang relasyon sa processor bilis, maliban ang para sa dalawang Intel Pentium ko nabanggit bago. Ito ay lohikal, ito ay nangangahulugan na ang para sa isang double processor bilis makakakuha ka ng double paglabag bilis, pero watch out para sa pagkababad effects, sa kasong ito na ito ay mas mabuti ang mga AMD Athlon 1600 MHz, na kung saan ay kahit na mas mura kaysa sa Intel Pentium 1800 MHz o 2000 MHz.
Sa ikalawang tayahin namin makikita mo sa karagdagang detalye kung ano ang aming nais na tumawag tunay des break kapangyarihan ng processor. Ako makakakuha ng halaga na ito lamang na naghahati sa break bilis ng processor speed, iyon ay, na nakukuha namin ang bilang ng mga des key tried sa bawat segundo at bawat MHz. Ito ay isang sukatan ng pagganap ng processor uri nagsasarili ng kanyang bilis. Ang mga resulta ay nagpapakita na ang pinakamahusay na processor para sa mga gawaing ito ay ang AMD Athlon, at pagkatapos ay ang Alpha at napaka-close ito pagkatapos na ito ay ang Intel Pentium (maliban para sa mas mataas na bilis ng mga gumanap na dahop dahil sa saturation effect). Susunod ay ang Mips processor at sa huling lugar ay ang Sparc. Ang ilang mga Alpha at Mips processors ay matatagpuan sa ilalim ng timbangan dahil sila ay maagang release hindi kabilang ang mga pagpapahusay ng huli bersyon. Tandaan na kasama ko ang pagganap ng x86 processors para sa C at assembler code bilang ay may malaking pagkakaiba. Mukhang na gcc ay hindi isang magandang dyeneretor ng optimized machine code, pero siyempre hindi namin malalaman kung ang isang mano-manong optimization ng assembler code para sa iba pang mga processors (Alpha, Mips, Sparc) ay mapalakas ang kanilang mga resulta kumpara sa mga katutubong C compilers (Hindi ko gcc gamitin para sa mga iba pang platform) bilang na ito ang mangyayari sa mga x86 processor.
Mag-update
Narito ang isang artikulo na kung saan ang mga pamamaraan na ito ay maaaring gamitin.
http://redtape.msnbc.com/2008/08/could-a-hacker.html





























Mag-iwan ng isang Sumagot