Долаючи VISA PIN

Середа, 2 липня 2008 року @ 12:38 ранку | Банки і EFTPoS

Нижче наводиться стаття я виявив нещодавно. Це один з найбільш повних описів злому.

Я думав, я хотів би повторити це тут, на моїй місцевого ведення.

У коментарі були зроблені у відношенні граматики використовувалися в початковому я вже виправлені деякі очевидні помилки, в той час як підтримання зв'язку з вихідного матеріалу.

http://69.46.26.132/ ~ biggold1/fastget2you/tutorial.php

--- ----

Передмова
Ви коли-небудь чудо, що станеться, якщо ви втратите вашої дебетової і хто-то знаходить його. Чи буде ця людина мати можливість знімати готівкові гроші з банкоматів гадати, яким-то чином, ваш Крім того, якщо ви були, хто вважає кого-то б ви спробуйте вгадати приймати шанс отримати Звичайно, відповідь на обидва питання мають бути "ні". Ця робота не стосується другого питання, це питання При цьому я намагаюся відповісти на перше запитання.

Всі інформація використовується для цієї роботи державних і можна вільно в Решта йде та програмування, таким чином, ми можемо що-небудь і улибнемся. Я виявити ніяких секретів. Крім того, мета (і остаточне роботи полягає в тому, щоб продемонструвати, що алгоритмів все ще досить сильні, щоб забезпечити достатню Ми всі знаємо, є

Ця робота аналізує один з найбільш поширених що використовується багатьма дебетових карток) і намагається з'ясувати, яким є стійкою PIN вгадати нападів. Під "вгадати" Я не маю на увазі вибору випадкових намагається її в банкоматі. Добре відомо, що в цілому ми з урахуванням трьох послідовних судових процесів право ввести якщо ми не банкомат тримає Як PIN чотири цифри довго це легко зробити висновок, що ймовірність випадкових вгадати 3 / 10000 = 0.0003, здається низькою, щоб вони були безпечними, це означає, що ви повинні втрачати карту більш ніж у три тисячі разів ( або втратити більше трьох тисяч карток в той же час:) до тих пір, поки є реальний шанс втратити

Те, що я дійсно мається на увазі під "вгадати" був розірвати так, що, з огляду на будь-які ви можете відразу дізнатися, пов'язані Тому цей документ дослідження, можливості, аналіз і пропонується метод Зрештою, ми даємо інструмент, який здійснює представити результати, про передбачуване шанс вийти з системи. Зауважимо, що до тих пір, інші банківські пов'язаних з алгоритмами (інші форматів, таких, як PIN картку підтвердження підпису, таких, як і CVC) аналогічним той же аналіз можна зробити приносить майже ті ж результати та висновки.


PVV


Одна з найбільш поширених алгоритмів PIN Клієнт отримує і Кодування складається з чотирьох цифр, які називаються Це число є криптографічного підпису та інші дані, пов'язані Коли користувач вводить свій банкомат зчитує шифрує і направляє всю цю інформацію на центральний комп'ютер. Там суду обчислюється за допомогою клієнта вступив з інформацією криптографічні Судовий розгляд порівнюється з зберігається карти, якщо вони збігаються з центральним комп'ютером повертається в банкомат для авторизації За більш докладно.

Опис можна знайти в двох документах, пов'язаних в попередній сторінці. В цілому вона складається в по 8 байт (64 біт), рядок преобразовало (ОВЧ), з (DEA), в Код книги режимі (ЄЦБ) за допомогою таємного 64-бітний ключ. випливає з результатів процесу, який являє собою 8 байт рядка. Ці чотири цифри (зліва направо) відповідають перших чотирьох десяткових цифр (зліва направо) на виході з коли вважається 16 шестнадцатерічних символів (16 х 4 біта = 64-bit) рядок. Якщо ні Є чотири десяткових цифр серед 16 шестнадцатерічних символів, а потім завершено прийнято (зліва направо), не десяткових знаків і decimalizing їх за допомогою перетворення-> 0, B-> 1, C-> 2, D -> 3, Е-> 4, F-> 5. Ось приклад:

Результат від 0FAB9CDEFFE7DCBA

0975

Стратегія уникнення decimalization на пропуск символів, до тих пір, поки чотири десяткових цифр можна знайти (що станеться, буде практично весь час, як ми побачимо нижче) дуже умен, оскільки він дозволяє уникнути упередженості важливо у розподілі цифр, яка була доведена бути смертельним для інших систем, хоча вплив цієї системи було б набагато менше. Див. також пов'язана з цим проблема не застосовують для

ОВЧ, бачили, як 16 шестнадцатерічних символів (64 біт) рядок, формується (зліва направо) з 11-правий цифри PAN за винятком останньої цифрі (контрольна цифра), одна цифра від 1 до 6 , Який обирає таємним ключем шифрування і, нарешті, чотирьох цифр Ось приклад:

PAN: 1234 5678 9012 3445
Ключові селектор: 1
2468

ОВЧ: 5678901234412468

Очевидно, що проблема руйнування PIN полягає в пошуках таємного ключа для шифрування Метод полягає в тому, що робити грубу силу пошуках ключа просторі. Зауважимо, що це не єдиний метод, можна спробувати знайти недоліки в DEA, багато хто намагалися, але це старий стандарт по-, як і раніше, знаходиться в широке використання (в даний час замінений AES і однак). Це свідчить про його досить, щоб брутальної сила є єдиним реальним способом (Є деякі краще нападу, але не практичним, в нашому випадку, для резюме див. LASEC пам'ятки і брудні подробиці див Biham І Шамір 1990 році, Biham І Шамір 1991 році, Мацуї 1993 році Biham І Бирюков 1994 року і Heys 2001).

Ключовим селектор цифра була досить імовірно, представляє для покриття можливості одного з ключових компроміс. У цьому випадку вони просто випустити нові картки, використовуючи ще один ключовий селектор. Літніх картками можуть бути замінені новими або просто банкомату може прозоро писати нові (у відповідності з новим ключем і збереження того ж в наступний раз клієнт використовує його / Для зрушити користувачів повинно бути запропоновано змінити свій ПІН, однак було б соромно банківські пояснити причину, так що досить ймовірно, вони б не зробити такий запит.

Підготовка нападу


Груба сила полягає в шифруванні ОВЧ з відомими з використанням усіх можливих ключів шифрування, так і порівняти отримані кожним з відомими Після матчу знаходиться у нас є кандидат ключ. Але скільки ключів ми спробувати? Як ми вже говорили вище, ключовим є 64-бітний довго, то це означає, що ми повинні спробувати 2 ^ 64 ключів. Однак це не так. На самом деле только 56 біт є ефективними в ключами, оскільки один біт (молодший) з кожного октета була історично захищені від підробки, як контрольна для інших; на практиці ці 8 біт (по одному для кожної з 8 октетов), ігноруються.

Тому ключем простір складається з 2 ^ 56 ключів. Якщо ми намагаємося всі ці ключі, що ми зможемо знайти один і тільки один матч, відповідний секретний ключ? Звичайно, ні. Ми будемо отримувати багато, відповідні клавіші. Це відбувається тому, що це лише невелика частина (одна четверта) від виробництва. Крім того це переріс тому, що деякі з цифр (між 0 та 5 після останнього, бачили зліва направо, між цифрою 6 і 9) може виходити від десяткових цифр або від decimalized шестнадцатерічних цифр виробництва. Таким чином, багато хто ключі будуть виробляти виробництва, який дає до того ж відповідає

Тоді те, що ми можемо зробити для того, щоб знайти реальні ключовим серед тих інших позитивний помилкові ключі? Просто ми для шифрування другого різних ОВЧ, а також з відомими але використовуючи тільки клавіші кандидатом, який дав позитивні відповідність з першого пара. Однак немає ніякої гарантії, ми не будемо отримувати знову багато помилкових спрацьовувань разом із справжнім ключем. Якщо це так, нам буде потрібно третій пара, повторіть цей процес і так далі.

Перед тим як ми почнемо атаку ми повинні знати, скільки пар нам буде потрібно. Для цього нам треба обчислити випадкового виробництва, в результаті зіставлення тільки випадково. Є кілька способів вирахувати це число, і тут я буду використовувати простий підхід легко зрозуміти, але яка потребує певного фону математиці

завжди можна розглядати як співвідношення сприятливих випадків до можливих випадках. У нашій проблемою кількість можливих випадків дається з 16 елементів (від 0 до F шестнадцатерічних цифр), у групі з 16 з них (16 шестнадцатерічних цифр вихідних). Це визначається по 16 ^ 16 ~ 1,8 * 10 ^ 19, яка, зрозуміло збігалися з 2 ^ 64 (різних номерів з 64-bit). Цей набір номера можуть бути розділені на п'ять категорій:

Ті, по крайней мере чотирьох десяткових цифр (від 0 до 9) серед 16 шестнадцатерічних цифр (від 0 до F) від виробництва.

Ті, хто саме тільки трьох десяткових цифр.

Ті, хто точно тільки двох десяткових цифр.

Ті, хто точно тільки одне десяткових цифр.

Ті, хто не десяткових цифр (всі між А і F).

Давайте підрахувати, скільки номерів осені в кожній категорії. Якщо ми етикетка 16 шестнадцатерічних цифр виробництва, як X1 на X16 тоді ми можемо ярлик перших чотирьох десяткових цифр або інший номер першої категорії, як Xi, XJ, XK та XL. Число різних комбінацій з цього напряму залежить від продукту 6 I-1 * 10 * 6j-I-1 * 10 * 6K-J-1 * 10 * 6 LK-1 * 10 * 1616-L, де 6 ' S надходить з числа можливостей для F цифри, в 10 з можливостей від 0 до 9 цифр, і 16 з можливостей від 0 до F цифри. Тепер загальне число в першій категорії просто приділяти шляхом підсумовування цього продукту за I, J, K, L від 1 до 16, але з I <J <K <Л. Якщо ви робите деякі математичні роботи ви побачите цей дорівнює твором 104 / 6 з суммірованіем за I від 4 до 16 (I-1) * (I-2) * (I-3) * 6i-4 * 16 16-я ~ 1,8 * 1019.

Аналогічно число випадків, у другій категорії надається шляхом підсумовування над I, J, K від 1 до 16 з I <J <До даного продукту 6i-1 * 10 * 6j-I-1 * 10 * 6K-J -1 * 10 * 616-K, які ви можете працювати це буде 16! / (3! * (16-13)!) * 103 * 6 13 = 16 * 15 * 14 / (3 * 2) * 103 * 613 = 56 * 104 * 613 ~ 7.3 * 1015. Аналогічно для третьої категорії ми суммірованія над I, J від 1 до 16 з I <J 6 I-1 * 10 * 6j-I-1 * 10 * 616-J, який дорівнює 16! / (2! * (16-14)!) * 102 * 614 = 2 * 103 * 615 ~ 9.4 * 1014. Знову ж таки, для четвертої категорії ми суммірованія за I від 1 до 16 6i-1 * 10 * 616-I = 160 * 615 ~ 7,5 * 1013. І, нарешті, сума випадків, в п'ятої категорії дається з шести елементів (М цифр с) до групи 16, тобто, 616 ~ 2.8 * 1012.

Я сподіваюся, що ви виконали розрахунки до цього моменту, важко частиною це робиться. Тепер в якості доказу того, що все правильно ви можете сума ряді випадків у 5 категоріях і подивитися, так само загальне число можливих випадків ми розраховані перш. У операцій з використанням 64-бітних чисел, або округлення (для поплавка), або переповнення (для чисел) помилки не дозволить вам отримати точний результат.

До сих пір ми підрахували кількість можливих випадків, у кожній з п'яти категорій, але ми зацікавлені в отриманні ряду сприятливих випадках замість. Це дуже легко отримати останній із тих, що, як це тільки фіксація комбінація з чотирьох десяткових цифр (або потрібно шестнадцатерічних цифр, якщо немає Є чотири десяткових цифр) від замість даючи їм безкоштовно. На практиці це означає перетворення в 10 у формулі вище на 1 і необхідну суму в 6 в 1 в тому випадку, якщо немає Є чотири десяткових цифр. Це означає, що ми повинні робити перший результат на 104, другий 103 * 6, третій 102 * 62, четвертий на 10 * 63 та п'ятий 64. Тоді число сприятливих випадків в п'яти категоріях приблизно 1,8 * 1015, 1.2 * 1012, 2.6 * 1011, 3.5 * 1010, 2.2 * 109, відповідно.

Тепер ми можемо отримати те, ймовірність для виведення на матч випадково. Нам просто потрібно додати п'ять номерів сприятливих випадках і розділіть його на загальне число можливих випадків. При цьому ми що ймовірність дуже приблизно 0,0001 або один з десяти тисяч. Хіба дивно, це добре округлені результат? Зовсім ні, просто подивіться на номери ми розрахованих вище. До першої категорії домінує на кілька порядків число сприятливих та можливі випадки. Це скоріше інтуїтивне, як представляється очевидним, що дуже малоймовірно, що, не маючи чотири десяткових цифр (10 шансів з 16 цифр відсотків) серед 16 шестнадцатерічних цифр. Ми бачили раніше, що взаємозв'язок між кількістю можливих і вигідні справи в першій категорії було розділення на 10 ^ 4, от де наші результаті P = 0.0001 приходить с.

Наша мета для всіх цих розрахунків полягає в тому, щоб з'ясувати, скільки парами нам необхідно для виконання успішної силою". Тепер ми можемо обчислити очікуване число помилкових спрацьовувань в першу пошуку: він буде поруч судових розглядів рази для однієї випадкової помилки, то є Т * С, де Т = 2 ^ 56, розмір ключа просторі. Це становить приблизно 7.2 * 10 ^ 12, досить велика кількість. Очікуване число помилкових спрацьовувань у другій пошуку (тільки для позитивних ключів ознайомитися в першому пошуку) будуть (T * P) * P, на третій пошуку буде ((T * P) * P) * P і так далі. Таким чином, для N пошуки очікуваного кількості помилкових спрацьовувань буде T * P ^ Н.

Ми можемо отримати низку обшуків необхідно очікувати лише один ложноположітельний виразити рівнянням T * P ^ N = 1 і рішення для Н. Так N дорівнює в базі P 1 / T, яка за властивостями логаріфмов він дає N = LOG (1 / T) / вхід (С) ~ 4.2. Оскільки ми не можемо зробити пошук дробно це зручно круглі цей номер. Тому те, що очікуване кількість помилкових спрацьовувань, якщо ми проводимо п'ять обшуків? Він T * P ^ 5 ~ 0,0007, або приблизно 1 з 1400. Таким чином, використовуючи п'ять пар є безпечним для отримання істинного секретний ключ без будь-яких помилкових спрацьовувань.


Після того, як ми знаємо, що нам потрібно п'ять пар, як нам одержати їх? Звичайно, нам потрібно принаймні одну відомими і в силу характеру це єдине, що нам потрібно. З іншого систем, таких як IBM, нам буде потрібно п'ять карт, однак це не є необхідним з PVV Нам треба просто читати а потім змінити чотири рази, але читання після кожної зміни.

Це необхідно для читання щоб отримати і ключем шифрування селектор. Ви можете купити комерційні або зробити одну себе наступні інструкції ви можете знайти в попередній сторінки і посилання в них. Якщо у вас є розглядаємо це опис стандартних магнітних доріжок, щоб дізнатися, як отримати даними наступним чином. У цьому документі області в напрямках 1 і 2, вважається п'ять символів давно, але на самому справі справжній складається з чотирьох останніх цифр. Перший з п'яти цифр є ключовим селектор. Я тільки бачив карти зі значенням 1 в цій цифрі, яка відповідає стандарту і з секретним ключем і не в комп'ютері (і, отже, вони не повинні перейти до іншої ключовий зміни Selector).

Я зробив просту програму на С, getpvvkey.c, виконувати Вона складається з петель спробувати всі можливі ключі для шифрування першого ОВЧ, якщо отримані матчів вірно нових ОВЧ судом, і так далі до тих пір, поки існує невідповідність, і в цьому випадку ключ відкидаються, а нове судом, або п'яти, отриманих PVVs матч відповідні PVVs вірно, і в цьому випадку ми можемо припустити, ми отримали секретний ключ, однак цикл триває до тих пір, поки вона виснажує ключовим простором. Це робиться для забезпечення ми знаходимо дійсно ключовий, оскільки існує ймовірність (хоча й дуже низький) перший ключовий виявили є хибним позитивним.

Очікується, програма займе дуже багато часу, щоб закінчити та звести до мінімуму ризик відключення електроенергії, комп'ютерні вивішувати і т.д. це контрольно-пропускні пункти в файл getpvvkey.dat час від часу (точний час залежить від швидкості на комп'ютері, це близько однієї години для самих швидких комп'ютерів в даний час використання). По тій же причині, якщо позитивний ключ було написано у файлі getpvvkey.key. Програма відображає тільки одне повідомлення на початку, початкова позиція взята з контрольно-пропускний пункт файл, якщо такі є, після цього більше нічого не відображається.

є ключовим моментом у програмі, тому дуже важливо оптимізувати його швидкість. Я тестіровал кілька реалізацій: libdes, SSLeay, OpenSSL, cryptlib, NSS, libgcrypt, катакомбах, libtomcrypt, cryptopp, UFC-склепі. функції перші чотири базуються на той же код, Eric Young, і те, яке здійснюється найкращим (включає оптимізований C і x86 код збирача). Тому я вибрав libdes яка була оригінальною та здійснення всіх відповідних конденсованих код у файли encrypt.c (C версія) і x86encrypt.s (x86 Версія ассемблера). Код трохи змінено для досягнення деяких удосконалень атаку "грубою силою": початковий є фіксованою загальною крутих в кожному ОВЧ тому можна зробити тільки один раз на початку. Ще одним удосконаленням є те, що я написав зовсім нову функцію SetKey (я назвав його nextkey), яка є оптимальною для грубої сили петля.

Для того, щоб отримати робочу програму ви просто відповідному місці п'ять TSPs та їх PVVs, а потім узагальнити його. Я тестували тільки на платформах UNIX, з використанням Makegetpvvkey Makefile для компіляції (використовуйте команду "Make-F Makegetpvvkey"). Він може скласти від інших систем, але ви, можливо, буде потрібно виправити деякі речі. Будьте впевнені, що визначення long64 відповідає 64-bit ціле. В принципі немає ніякої залежності від порядку байтів в процесор. Я успішно зібраний і запустити його на Pentium-Linux, Альфа-Tru64, архітектури Mips-Irix і Sparc-Solaris. Якщо у вас немає і не хочете, щоб встановити Linux (ви не знаєте, що вам не вистачає ;-) вас ще є вибір для запуску Linux на CD та використовувати мою програму, див. мою сторінку Linux, не встановлюючи її.

Після того як ви знайшли банківські ключа, якщо ви хочете знайти від довільного вам просто потрібно написати аналогічну програму (шкода я не написаний він, я занадто ліниві:), що б спробувати всі 10 ^ 4-коди шляхом створення відповідної ОВЧ, зашифрувати його с (не більше) секретний ключ, що випливають та порівнявши його з магнітній Ви отримаєте один матч за справжню Лише один матч? Майте на увазі, що ми бачили вище, у нас є шанс на 0,0001, що випадкове матчах Ми намагаємося 10000-Пен (і, отже, TSPs), таким чином, ми очікуємо, 10000 * 0,0001 = 1 ложноположітельний в середньому.

Це дуже цікавий результат, це означає, що в середньому кожна два дійсних коди код клієнта, і очікується, ложноположітельний. Слово це "помилкові", але відзначають, що до тих пір, як він створює справедливо це настільки ж актуальними, як один клієнт. Крім того, немає можливості дізнатися, яка, які, навіть для банкомату, тільки клієнт знає. Навіть якщо ложноположітельний були не дійсні, як ви ще три судових процесу в банкоматі в будь-якому випадку, достатньо в середньому. Тому ми розраховується на початку цього документа про випадковому здогадуватися про повинна бути виправлена. На самом деле воно в два рази перевищує вартість, тобто, це 0,0006 або один з більш ніж 1600 рік, по-, як і раніше, безпечно низьким.

Результати


Важливо, щоб оптимізувати компіляцію програми та запустити її в можливий швидкий процесор з-за довгого часу очікується запуск. Я виявив, що компілятор оптимізації прапор-O отримує кращу продуктивність, думки деяке поліпшення досягається додаванням-fomit-кадр-покажчик прапор на Pentium-Linux, то-прапор на піку Альфа-Tru64, прапор-МПА від архітектури Mips-Irix та швидкість прапор на Sparc-Solaris. Спеціальні прапори (-DDES_PTR-DDES_RISC1-DDES_RISC2-DDES_UNROLL-DASM) для код, як переваги, як добре. Всі ці прапори вже були випробувані і я вибрав найкраще поєднання для кожного процесора (див. Makefile), але ви можете спробувати для тонкої настройки інших прапорів.

За моїми випробувань кращої продуктивності досягається за AMD Athlon 1600 МГц процесор, що перевищує 3.4 million ключів в секунду. Цікаво воно отримує кращі результати, ніж Intel Pentium IV 1800 МГц та 2000 МГц (див. діаграми нижче, натисніть на них, щоб збільшити). Я вважаю, це пояснюється деякими I / O насичення, безсумнівно, кеш-пам'ять або що процесор AMD (яка в два рази кеш Pentium) або материнська плата, в якій вона працює, вдається уникнути. На першому малюнку ви можете бачити, що порушення швидкості процесорів всі більш-менш лінійну зв'язок з процесором швидкості, за винятком двох Intel Pentium я згадував раніше. Це логічно, це означає, що для подвійний процесор швидкості ви будете отримувати подвійне порушення швидкості, але й стежити за насичення наслідки, в цьому випадку краще AMD Athlon 1600 МГц, який буде ще дешевше, ніж Intel Pentium 1800 МГц або 2000 МГц.

У другій діаграмі ми можемо побачити більш докладно, що ми хотіли б закликати власного перерва потужності процесора. Я отримую цей параметр просто розділити перерви швидкості на швидкість процесора, то є, ми отримаємо число ключами намагалися секунду, і відсотками МГц. Це показник ефективності роботи процесора незалежно від його швидкості. Отримані результати показують, що найкращий процесор для виконання цього завдання є AMD Athlon, а потім приходить "Альфа" та дуже близькі після того, як він це Intel Pentium (за винятком високої швидкості ті, які виконують дуже погано з-за насичення ефект). Далі йде архітектури Mips процесор, і в останнє місце Sparc. Деякі альфа-та архітектури Mips процесор знаходиться в нижній частині шкали, оскільки вони є ранні релізи не включаючи удосконалень пізньої версії. Майте на увазі, що я включала виконання x86 процесори для C і ассемблер код, так як існує різниця. Схоже, що GCC є не дуже гарна генератор оптимізований машинний код, але ми, зрозуміло, не знають чи ручна оптимізація коду ассемблера для інших процесорів (Alpha, MIPS, Sparc), дозволить підвищити свої результати в порівнянні з рідною компілятор C (Я не використовую GCC для інших платформ), як це відбувається з процесором x86.

Оновлення

Ось стаття, де ці методи можуть бути використані.

http://redtape.msnbc.com/2008/08/could-a-hacker.html

Нещодавно

  • Аматорське радіо і Radhaz
  • Забезпечення розробки додатків посилання
  • Кеті школа - школа будівельного проекту в Камбоджі.
  • Syetms електронні пристрої і міркування
  • Інтернет-банкінг оцінки міркувань безпеки
  • Мобільний банкінг безпеки та оцінка ризику міркування
  • DNS Hack потреб ямковий ремонт - серйозна проблема
  • Cisco команду Шпаргалка
  • Прихований Skype смайлики
  • Долаючи VISA PIN
  • Залишити Відповісти

    XHTML: Ви можете використовувати ці теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> < дель DATETIME = ""> <em> <i> <q cite=""> <strike> <strong>