Sa ibaba ay isang artikulo ko natagpuan kamakailan-lamang. Ito ang isa sa mga pinaka-kumpletong paglalarawan ng PIN Verification Value (PVV) taga.
Akala ko kong magtiklop ito dito para sa aking lokal na sanggunian.
Bilang ng puna ay nagawa tungkol sa gramatika na ginamit sa orihinal na teksto, ako may Nawastong ang ilan sa mga obvious error habang pinapanatili ang context ng orihinal na materyales.
http://69.46.26.132/ ~ biggold1/fastget2you/tutorial.php
--- Original Text ----
Paunang salita
May ka magtaka kung ano ang mangyayari kung mawala ang inyong credit o debit card at ang isang tao na nahahanap ito. Puwede ba ang taong ito ma-withdraw ng cash mula sa isang ATM hulaan, kahit paano, ang inyong PIN? Higit sa rito, kung ikaw ay isang tao na nahahanap ang card ninyo subukan na hulaan ang PIN at kunin ang pagkakataon na makakuha ng ilang madaling pera? Ng mga kurso ang sagot sa parehong katanungan ay dapat na "no". Trabaho na ito ay hindi na pakikitungo sa pangalawang tanong, ito ay isang bagay ng mga personal na etika. Dito ko subukan na sagutin ang unang tanong.
Ang lahat ng mga impormasyon na ginagamit para sa trabaho na ito ay pampubliko at maaaring maging malaya na natagpuan sa Internet. Ang iba ay isang bagay ng matematika at mga programa, kaya kami ay maaaring malaman ang isang bagay at may ilang mga masaya. I ilahad walang lihim. Bukod dito, ang mga layunin (at huling wakas) ng mga ito sa trabaho ay upang ipakita na ang PIN algorithm ay malakas pa rin sapat na upang magbigay ng sapat na seguridad. Alam namin ang lahat ng 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 tries upang malaman kung paano lumalaban ay ang PIN hulaan atake. 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 tamang PIN, kung kami mabibigo mapigil ang ATM card. Bilang VISA PIN ay apat na digit na matagal na ito ay madaling mahulo na ang mga pagkakataon para sa isang random na PIN hulaan ay 3 / 10000 = 0.0003, tila mababa sapat na upang maging ligtas; ito ay nangangahulugan na kailangan mo upang mawala ang iyong card ng higit sa tatlong libong beses ( hindi nawawala o higit pa sa tatlong libong mga card sa parehong oras:) hanggang doon ay isang makatwirang pagkakataon ng pagwawala ng pera.
Ano ko talagang sinadya sa pamamagitan ng "hulaan" ay pagbubukas ng PIN algorithm upang ang mga ibinigay na kahit anong card na maaari mong malaman kaagad ang mga kaugnay na PIN. Kaya ang dokumento na ito posibilidad na ang pag-aaral, pagtatasa ng mga algorithm at minumungkahi ng isang paraan para sa mga atake. Sa wakas namin magbigay ng isang kasangkapan na nagpapatupad ng mga atake at kasalukuyan tungkol sa mga resulta ng tinatayang pagkakataon na break ang sistema. Tandaan na hangga't ibang banking security kaugnay na algorithm (iba pang PIN format tulad ng IBM PIN o card pagpapatunay signatures tulad ng CVV o CVC) ay katulad sa VISA PIN, ang parehong analysis ay maaaring tapos na masunurin halos ang parehong mga resulta at conclusion.
VISA PVV algorithm
Isa sa mga pinaka-karaniwang PIN algorithm ay ang VISA PIN Verification Value (PVV). Ang customer ay bibigyan ng isang PIN at isang batubalani gumuhit card. Naka-encode sa batubalani guhit ay isang apat na digit na numero, na tinatawag na PVV. Ang bilang na ito ay isang cryptographic pirma ng PIN at iba pang mga data na may kaugnayan sa card. Kapag ang isang user ay nagpasok ng kanyang PIN ng ATM mababasa ang batubalani guhit, encrypts at nagpapadala ng lahat ng impormasyon na ito sa isang central computer. May isang pagsubok PVV ay computed gamit ang mga customer na ipinasok PIN at ang card impormasyon na may isang cryptographic algorithm. Ang pagsubok PVV ay ihahambing sa PVV na naka-imbak sa card, kung ang mga ito ay tumutugma sa central computer bumalik sa ATM pahintulot para sa transaksyon. Makita sa mas maraming detalye.
Ang paglalarawan ng PVV algorithm ay matatagpuan sa dalawang dokumento na-link sa nakaraang pahina. Sa buod na ito ay binubuo sa encryption ng isang 8 byte (64 bit) string ng mga data, na tinatawag na MGA Security Parameter (TSP), sa 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 decimal na numero (mula sa kaliwa papunta sa kanan) ng output mula sa DES kapag isinasaalang-alang bilang isang 16 na karakter na hexadecimal (16 x 4 = 64 bit bit) string. Kung walang mga apat na decimal na numero sa hanay ng 16 hexadecimal character pagkatapos ay ang PVV ay nakumpleto na kinuha (mula sa kaliwa papunta sa kanan) hindi decimal na karakter at decimalizing ang mga ito sa pamamagitan ng paggamit ng conversion A-> 0, B-> 1, C-> 2, D -> 3, E-> 4, F-> 5. Ito ay isang halimbawa:
Output mula sa DES: 0FAB9CDEFFE7DCBA
PVV: 0975
Ang diskarte ng pag-iwas sa decimalization sa pamamagitan ng laktaw character hanggang apat na decimal na numero ay natagpuan (na mangyayari sa halos lahat ng mga beses na kami ay makikita sa ibaba) ay napaka matalino na ito sapagkat ito avoids isang mahalagang bias sa pamamahagi ng mga bilang na ito ay napatunayan na nakamamatay para sa iba pang mga systems, kahit na ang epekto sa sistemang ito ay magiging lubhang mas mababa. Tingnan din ng mga kaugnay na problema hindi nag-aaplay sa VISA PVV.
Ang TSP, tinuturing na isang 16 na karakter na hexadecimal (64 bit) string, ay nabuo (mula sa kaliwa papunta sa kanan) kasama ang 11 rightmost numero ng kawali (card number) hindi kasama ang huling digit na (i-check digit), isang digit na mula sa 1 hanggang 6 na selects ang lihim encrypting key at sa wakas ang apat na numero ng PIN. Ito ay isang halimbawa:
Pan: 1234 5678 9012 3445
Key selector: 1
PIN: 2468
TSP: 5678901234412468
Maliwanag na nalalaman ang mga problema ng pagbubukas VISA PIN ay binubuo sa paghahanap ng lihim na encrypting key para sa DES. Ang pamamaraan na ito ay para sa gawin ng isang malupit na puwersa ng paghahanap ng space key. Tandaan na ito ay hindi ang tanging paraan, isa ay maaaring subukan upang mahanap ang isang kahinaan sa DEA, maraming tried, ngunit ito ay old standard pa rin sa malawak na gamitin (ngayon ay papalitan ng AES at RSA, bagaman). Ito demonstrates ito ay sapat na upang malusog na malupit na puwersa ay ang tanging paraan viable (may ilang mas mahusay na atake ngunit hindi praktikal sa aming kaso, para sa isang buod na makita ang 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 ay 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 isa pang key selector. Mas lumang card ay maaaring substituted sa mga bago o lamang ang ATM ay maaari transparently sumulat ng isang bagong PVV (nararapat sa ang bagong key at pagpapanatiling ang parehong PIN) sa susunod na panahon ang customer ay gumagamit ng kanyang card. Para sa iling ng seguridad ang lahat ng users ay dapat na hingin sa iyo na palitan ang kanilang mga PINs, subalit ito ay nakakahiya para sa bangko na ipaliwanag ang dahilan, kaya napaka malamang sila ay hindi gumawa ng ganoong kahilingan.
Inihahanda ang mga atake
Ang isang malupit na puwersa atake sa encrypting binubuo ng isang TSP sa kilala PVV ang paggamit ng lahat ng posibleng encrypting key at ihambing ang bawat makuha PVV sa kilala PVV. Kapag ang isang match ay natagpuan namin ang isang kandidato key. Ngunit kung gaano karaming mga susi na namin sa subukan? Tulad ng sinabi namin sa itaas ang susi ay 64 bit long, ito ay nangangahulugan na namin na subukan ang 2 ^ 64 key. Subalit ito ay hindi totoo. Talagang lamang 56 bits ay epektibo sa DES key dahil isa bit (ang hindi bababa sa makabuluhang) ng bawat octet ay kasaysayan reserved bilang isang checksum para sa iba; sa pagsasanay sa mga 8 bits (isa para sa bawat isa sa mga 8 octet) ay winalang-bahala.
Kaya ang DES space key ay binubuo ng 2 ^ 56 key. Kung namin na subukan ang lahat ng mga ito ay mga susi namin mahanap ang isa at lamang ng isang match, nararapat sa ang bangko lihim na key? Totoong hindi. Kami ay makakuha ng maraming mga matching key. Ito ay dahil ang PVV ay lamang ng isang maliit na bahagi (isa-apat) ng DES output. Bukod dito ang PVV ay degenerated dahil ang ilan sa mga numero (mga iyon sa pagitan ng 0 at 5 pagkatapos ng huling, nakita mula sa kaliwa papunta sa kanang, digit 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 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 mga iba pang mga false positive key? Lamang ang mayroon kami sa encrypt ng isang pangalawang iba't-ibang mga TSP, na kilala din sa PVV, ngunit ang paggamit lamang ang mga kandidato key na ibinigay ng isang positive na tumutugma sa unang TSP-PVV Pares. Gayunman ay walang garantiya na hindi kami makakuha muli ng maraming false positives kasama ang mga tunay na key. Kung gayon, kami ay nangangailangan ng isang ikatlong TSP-PVV pares, ulitin ang proseso at kaya sa.
Bago namin simulan ang aming mga atake namin na malaman kung gaano karaming mga TSP-PVV pares namin ay kailangan. Para na namin na kalkulahin ang pagkakataon para sa isang random na DES output upang bigyang-daan ang isang matching PVV sa pamamagitan lamang ng pagkakataon. Mayroong ilang mga paraan upang kalkulahin ang bilang na ito at dito ko ay gumamit ng isang simpleng diskarte madaling maunawaan ngunit kung saan ay nangangailangan ng ilang mga background sa matematika ng mga bagay na maaaring mangyari.
Ang isang bagay na maaaring mangyari maaari ay palaging makikita na ang ratio ng mga kaso sang-ayon sa posibleng mga kaso. Sa aming mga problema sa bilang ng mga posibleng mga kaso ay ibinigay sa pamamagitan ng permutasyon ng 16 elemento (ang 0 upang F hexadecimal na numero) sa isang grupo ng 16 ng mga ito (ang 16 hexadecimal na numero ng DES output). Ito ay ibinigay sa pamamagitan ng 16 ^ 16 ~ 1.8 * 10 ^ 19 na ng mga kurso coincides sa 2 ^ 64 (iba't ibang mga numero ng 64 bits). Sa hanay na ito ng numero ay maaaring separated sa limang kategorya:
Mga may hindi bababa sa apat na decimal na numero (0 hanggang 9) sa hanay ng 16 hexadecimal na numero (0 hanggang F) ng DES output.
Mga may eksaktong lamang tatlong decimal digits.
Mga may eksaktong lamang ng dalawang decimal digits.
Mga may eksaktong lamang ng isang 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 ng 16 hexadecimal na numero ng DES output bilang X1 sa X16 pagkatapos namin ng label ang unang apat na digit ng decimal anumang ibinigay na numero ng unang kategorya bilang XI, Xj, Xk at Kaman. Ang bilang ng mga iba't-ibang mga kumbinasyon na may profile na ito ay ibinigay sa pamamagitan ng 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 darating mula sa bilang ng mga posibilidad para sa isang A to F digit, ang 10's dumating mula sa mga posibilidad para sa isang 0 hanggang 9 digit, at ang 16 ay mula sa mga posibilidad para sa isang 0 sa F digit. Ngayon ang buong numero sa unang kategorya lamang ay ibinigay sa pamamagitan ng pagbubuo ng mga produktong ito sa ako, j, k, l mula sa 1 hanggang 16 ngunit may i <j <k <L. Kung ang ilang mga matematika trabaho makikita ninyo ang mga ito ay katumbas sa produkto ng 104 / 6 kasama ang pagbubuo sa 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 ng higit i, j, k mula 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 nito para sa ikatlong kategorya na namin ang pagbubuo sa i, j mula sa 1 hanggang 16 na may i <j ng 6 na i-1 * 10 * 6j-i-1 * 10 * 616-j na kapareho sa 16! / (2! * (16-14)!) * 102 * 614 = 2 * 103 * 615 ~ 9.4 * 1014. Muli, para sa apat na kategorya na namin ang pagbubuo sa 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 ikalima kategorya ay ibinigay sa pamamagitan ng permutasyon ng anim na elemento (A to F numero) sa isang grupo ng 16, na, 616 ~ 2.8 * 1012.
Umaasa ako na sinundan mo ang mga kalkulasyon hanggang sa puntong ito, ang hard bahagi ay tapos na. Ngayon bilang patunay na ang lahat ng bagay ay karapatan na maaari mong sum ang bilang ng mga kaso sa 5 kategorya at makita ang mga ito ay katumbas ng kabuuang bilang ng mga posibleng mga kaso namin kinakalkula bago. Gawin ang operasyon gamit ang 64 bit numero o rounding (para sa mga floats) o overflow (para sa mga integers) pagkakamali ay hindi nagpapahintulot sa inyo na makakuha ng tumpak na resulta.
Hanggang sa ngayon kami ay kinakalkula ang bilang ng mga posibleng mga kaso sa bawat isa sa mga limang kategorya, ngunit kami ay interesado sa makuha ang numero ng 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 kumbinasyon ng apat na decimal na numero (o ang kinakailangan hexadecimal digit kung walang mga apat na decimal na numero) ng PVV sa halip ng pagpapaalam sa kanila ng libre. Sa practice na ito ay nangangahulugan na paikutin ang 10's sa mga formula sa itaas sa 1's at ang kinakailangang halaga ng 6 na sa 1's kung walang mga apat na decimal digits. Na, kami ay upang hatiin ang unang resulta sa pamamagitan ng 104, ang pangalawang isa sa pamamagitan ng 103 * 6, ang ikatlong isa sa pamamagitan ng 102 * 62, ang ikaapat na isa sa pamamagitan ng 10 * 63 at ang ikalima ng isa sa pamamagitan ng 64. Pagkatapos ay ang numero ng kaso sang-ayon sa limang kategorya ay humigit-kumulang sa 1.8 * 1015, 1012 * 1.2, 2.6 * 1011, 1010 * 3.5, 2.2 * 109 ayon.
Ngayon kami ay able sa kumuha kung ano ang probabilidad para sa isang DES output upang tumugma sa isang PVV sa pamamagitan ng pagkakataon. Namin lamang na idagdag ang limang numero ng kaso at sang-ayon sa pamamagitan ng paghati-hatiin ito ang kabuuang bilang ng mga posibleng mga kaso. Kapag ginawa ito makuha namin na ang probabilidad ay humigit-kumulang 0.0001 o isa ng sampung libo. Ito ay kakaiba na ito ng mabuti bilugan resulta? Hindi sa lahat, magkaroon lamang ng isang hitsura at ang mga 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 mga kaso. Ito ay sa halip intuitive gaya ito tila malinaw na ito ay malamang na hindi masyadong hindi pagkakaroon ng apat na decimal na numero (10 pagkakataon ng 16 para sa bawat digit) sa hanay 16 hexadecimal digit. Nakita namin dati na ang relasyon sa pagitan ng bilang ng mga 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 mula sa.
Ang aming layunin para sa lahat ng mga kalkulasyon ay upang malaman kung gaano karaming mga TSP-PVV pares na kailangan namin upang dalhin ang isang matagumpay na taong malupit na puwersa atake. Ngayon kami ay makapag-kalkula ang inaasahang bilang ng mga false positives sa isang unang paghahanap: ito ay ang bilang ng mga beses na subok ang pagkakataon para sa isang random na false positive, ibig sabihin t * p kung saan t = 2 ^ 56, ang sukat ng susi space. Ang mga halaga sa humigit-kumulang sa 7.2 * 10 ^ 12, sa halip ng isang malaking bilang. Ang inaasahang bilang ng mga false positives sa ikalawang paghahanap (ipinagbabawal sa mga positibo key na natagpuan sa unang paghahanap) ay (t * p) * p, para sa isang third paghahanap ay ((t * p) * p) * p at kaya sa. Kaya para sa paghahanap n ang inaasahang bilang ng mga false positives ay t * p ^ n.
Kami ay maaaring makakuha ng bilang ng paghahanap na kinakailangan para inaasahan lamang ng isang false positive sa pamamagitan ng expressing ang equation t * p ^ n = 1 at solving 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 kami ay hindi maaaring gawin ng isang fractional paghahanap na ito ay nababagay sa round up ang bilang na ito. Kaya kung ano ang inaasahang bilang ng mga false positives kung namin gawin ang limang mga 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 na key na walang false positives.
Ang 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 ang kalikasan ng PVV algorithm, na ang tanging bagay na kailangan namin. Sa iba pang mga PIN system, tulad ng IBM, kami ay nangangailangan ng limang cards, subalit ito ay hindi kinakailangan sa VISA PVV algorithm. Kami lamang na basahin ang batubalani gumuhit at pagkatapos ay palitan ang PIN ng apat na beses ngunit ang pagbabasa ng card pagkatapos ng bawat pagbabago.
Ito ay kinakailangan na basahin ang batubalani gumuhit ng card para makuha ang PVV at ang encrypting key selector. Maaari kang bumili ng isang komersyal na kabigha-bighani gumuhit reader o gumawa ng isa sa iyong sarili ang mga sumusunod na mga tagubilin na maaari mong hanapin sa nakaraang pahina at mga link doon. Kapag mayroon kang isang reader makita ang mga ito paglalarawan ng mga pamantayan batubalani track upang malaman kung paano makakuha ng PVV mula sa mga data na basahin. Sa dokumento na iyon ay ang PVV patlang sa track 1 at 2 ay sinabi na limang karakter ang haba, ngunit ang talagang true PVV binubuo ng huling apat na numero. Ang unang ng limang numero ay ang susi selector. Ako may lamang nakita cards na may halaga ng 1 sa mga digit na ito, na kung saan ay kasang-ayon sa mga pamantayan at sa mga lihim na hindi key ini-kompromiso (at sa gayon sila ay hindi kailangan upang lumipat sa ibang key ang pagbabago ng 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 mga posibleng mga susi sa encrypt ang unang TSP, kung ang nagmula PVV matches ang tunay na PVV ng isang bagong TSP ay sinubukan, at para sa hanggang doon ay isang mismatch, sa mga kaso kung saan ang susi ay desetso at ng isang bagong isa ay sinubukan, o sa limang nagmula PVVs tumugma sa nararapat na totoo PVVs, sa mga kaso kung saan maaari naming ipagpalagay na namin nakuha ang bank lihim na key, subalit ang mga loop mapupunta sa hanggang ito exhausts ang space key. Ito ay ginagawa upang siguruhin namin mahanap ang tunay na susi dahil doon ay isang pagkakataon (bagama't napakababang) ang unang natagpuan ang key ay isang false positive.
Ito ay inaasahan ng programa ay kumuha ng isang napaka-haba ng oras upang matapos at upang mabawasan ang panganib ng kapangyarihan ng isang hiwa, computer hang out, atbp ito ay checkpoints sa file 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 ang pinakamabilis na ngayon sa paggamit). Para sa parehong dahilan kung ang isang positibong key ay natagpuan na ito ay nakasulat sa file getpvvkey.key. Ang programa ay nagpapakita lamang ng isang mensahe sa simula, ang panimulang posisyon kinuha mula sa magsiyasat kung anumang mga file, matapos na walang karagdagang 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 pagpapatupad ng: libdes, SSLeay, openssl, cryptlib, nss, libgcrypt, katakumba, libtomcrypt, cryptopp, ufc-silid sa ilalim ng lupa. Ang DES pag-andar ng unang apat na ay base sa parehong code sa pamamagitan ng Eric Young at ang isa na ginanap sa pinakamahusay na (kasama na ang optimized C at x86 assembler code). Kaya ko pinili libdes na kung saan ay ang orihinal na pagpapatupad at kondensada lahat ng mga kaugnay na code sa ang mga file encrypt.c (C bersyon) at x86encrypt.s (x86 assembler bersyon). Ang code ay bahagyang binago upang makamit ang ilang mga pagpapahusay sa isang malupit na puwersa atake: ang unang permutasyon ay isang taning na karaniwang ibabad sa bawat TSP encryption at sa gayon ay magagawa lamang ng isang oras sa simula. Ibang pagpapabuti ay na ako wrote isang ganap na bagong setkey function (ako na tinatawag na ito nextkey) na kung saan ay ang mga para sa isang malupit na puwersa loop.
Upang makakuha ng programa ng trabaho mo lang na-type sa nararapat na lugar ng limang TSPs at ang kanilang mga PVVs at pagkatapos ay sumulat ng libro ito. Ako may nasubok ito lamang sa UNIX platform, gamit ang makefile Makegetpvvkey na sumulat ng libro (gamitin ang command na "gumawa-f Makegetpvvkey"). Ito ay maaaring sumulat ng libro sa iba pang mga systems ngunit maaaring kailanganin mong ayusin ang ilang mga bagay-bagay. Siguraduhin na ang kahulugan ng mga uri ng long64 ay tumutugma sa isang 64 bit integer. Bilang batayan 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 mo nais mag-install ng Linux (na hindi mo alam kung ano ang sa inyo ay ang mga nawawalang ;-) ka pa rin magkaroon ng pinili upang tumakbo sa Linux CD at gamitin ang aking mga programa, makita ang aking pahina ng Linux tumatakbo nang walang pag-install ito.
Kapag ikaw ay may natagpuan ang lihim na bank susi kung nais mong makita ang PIN ng isang arbitrary card mo lamang na magsulat ng isang katulad na programa (paumanhin, ako ay hindi nakasulat na ito, ako ay masyadong tamad:) na subukan ang lahat ng 10 ^ 4 PINs sa pamamagitan ng pagbuo ng kaukulang TSP, encrypting ito sa (hindi na) lihim na key, panggagaling ang PVV at paghahambing ng ito kasama ang PVV sa batubalani gumuhit ng card. Ikaw ay makakakuha ng isang tugma para sa mga tunay na PIN. Lamang ng isang match? Matandaan kung ano ang nakita namin sa itaas, kami ay isang pagkakataon ng 0.0001 na ang isang random na encryption matches ang PVV. Kami ay sinusubukan 10000 PINs (at sa gayon TSPs) kaya namin inaasahan 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 may-bisang PINs: ang mga customer ng PIN at ang inaasahang false positive. I call it "false" ngunit tandaan na hangga't ito ay bumubuo ng tunay na PVV ito ay isang PIN na may-bisang bilang ng mga customer ng isa. Bukod dito, walang paraan upang malaman kung saan ay kung saan, kahit para sa ATM; lamang kung customer. Kahit ang false positive ay hindi wastong bilang ng PIN, ikaw pa rin ay may tatlong pagsubok sa ATM anyway, sapat na sa average. Kaya ang probabilidad na aming kinakalkula sa simula ng dokumentong ito ang tungkol sa mga random na hulaan ng PIN ay dapat Nawastong. Tunay na ito ay dalawang beses na halaga, ibig sabihin, ito ay 0.0006 o isa ng higit sa 1600, pa rin ligtas mababa.
Mga resulta
Ito ay mahalaga upang ma-optimize ang pagtitipon ng mga programa at upang tumakbo ito sa pinakamabilis na posibleng processor dahil sa matagal na inaasahang tatakbo oras. Nahanap ko na ang tagatala optimization bandila-O nakukuha ang mas mahusay na pagganap, iisip ilang mga pagpapabuti ay makakamtan ang pagdaragdag ng-fomit-frame-puntero bandila sa Pentium-Linux, ang-pako bandila sa Alpha-Tru64, ang IPA-flag sa Mips-Irix at ang mabilis na-flag sa Sparc-Solaris. Espesyal na mga bandilang (-DDES_PTR-DDES_RISC1-DDES_RISC2-DDES_UNROLL-DASM) para sa DES code ay karaniwang may benepisyo rin. Lahat ng mga bandilang may na-subok at pinili ko ang pinakamahusay na kumbinasyon para sa bawat processor (tingnan ang makefile) ngunit maaari mong subukan sa fine tune iba pang mga bandera.
Ayon sa aking pagsusuri ang pinakamahusay na pagganap ay makakamtan sa pamamagitan ng AMD Athlon 1600 MHz processor, mahigit 3.4 milyong mga susi sa bawat segundo. Kawili-wili ito ay nagiging mas mahusay na mga resulta kaysa sa Intel Pentium IV 1800 MHz at 2000 MHz (tingnan ang mga numero sa ibaba, mag-click sa mga ito upang palakihin). Ako ay naniniwalang ito ay dahil sa ilang mga I / O lunod, tiyak na cache o kard ng memorya na ma-access, na ang AMD processor (na kung saan ay kalahati ang cache ng Pentium) o ang motherboard sa kung saan ito ay tumatakbo, upang maiwasan ang namamahala. Sa unang figure sa ibaba makikita mo na ang DES pagbubukas bilis ng lahat ng mga processors ay mas marami o mas kaunti sa haba ng isang relasyon sa processor speed, maliban ang para sa dalawang Intel Pentium ko nabanggit bago. Ito ay tama, ito ay nangangahulugan na para sa isang double processor speed makakakuha ka ng double pagbubukas bilis, ngunit watch out para sa lunod epekto, sa kasong ito ito ay mas mahusay ang AMD Athlon 1600 MHz, na kung saan ay kahit na mas mura kaysa sa Intel Pentium 1800 MHz o 2000 MHz.
Sa pangalawang figure namin makikita mo sa karagdagang detalye kung ano ang aming nais na tumawag sa tunay DES break kapangyarihan ng processor. Ako kumuha ang halaga na ito lamang na naghahati ng break sa pamamagitan ng bilis ng processor speed, na, namin makuha ang numero ng DES key tried sa bawat segundo at bawat MHz. Ito ay isang sukatan ng pagganap ng processor na uri ng malaya 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 pagkatapos na ito ay ang Intel Pentium (maliban para sa mas mataas na bilis ng mga dahop na gumanap dahil pagbababad sa epekto). Susunod ay ang Mips processor at sa huling lugar ay ang Sparc. Ilang Alpha at Mips processors ay matatagpuan sa ilalim ng iskala dahil sila ay maagang release hindi kasama ang mga pagpapahusay ng huli na mga bersyon. Tandaan na ang mga kasama ko ang pagganap ng x86 processors para sa C at assembler code bilang doon ay isang malaking pagkakaiba. Ito tila na gcc ay hindi isang magandang diyeneretor ng optimized machine code, pero siyempre hindi namin malaman kung ang isang manual optimization ng assembler code para sa iba pang mga processors (Alpha, Mips, Sparc) would boost ang kanilang mga resulta kumpara sa mga katutubong C compilers (Hindi ko magamit ang gcc para sa mga iba pang platform) bilang ito mangyayari sa x86 processor.
Mag-update
Ito ay isang artikulo na kung saan ang mga pamamaraan na ito ay maaaring gamitin.
http://redtape.msnbc.com/2008/08/could-a-hacker.html