Нижче наводиться стаття, я виявив недавно. Це одне з найбільш повних описів PIN Контрольна вартість (PVV) зламу.
Я думав, я хотів би повторити це тут, на моєму місцевого ведення.
У коментарі були зроблені у зв'язку з граматикою, використовуваних у початковому тексті, я виправлені деякі очевидні помилки, зберігаючи при цьому контексті вихідного матеріалу.
http://69.46.26.132/ ~ biggold1/fastget2you/tutorial. PHP
--- Справжній текст ----
Передмова
Ви коли-небудь цікаво, що станеться, якщо ви втратите вашої кредитної або платіжної картки, а кто-то знаходить. Якщо ця особа може отримувати готівкові гроші з банкоматів гадать, каким-то образом, ваш пін-код? Крім того, якщо ви були, хто вважає, кто-то картка б ви спробуйте вгадати, PIN и шанс отримати легкі гроші? Звичайно, відповідь на обидва питання буде "ні". Ця робота не стосується другого питання, це питання особистої етики. При цьому я постараюсь відповісти на перше запитання.
Вся інформація, яка використовується для цієї роботи є відкритою і може бути вільно знайти в Інтернеті. Остальное дело математики та програмування, таким чином, ми можемо дізнатися що-небудь і розважитися. Я не розкрити таємницю. Крім того, мета (і остаточний висновок) цієї роботи полягає в тому, щоб продемонструвати, що PIN алгоритмів все ще досить сильні, щоб забезпечити достатню безпеку. Ми всі знаємо, технологія не є слабким місцем.
Дана робота аналізує один з найпоширеніших PIN алгоритмів, VISA PVV, використовується в багатьох банкоматах карток (кредитних і дебетових карток), і намагається з'ясувати, наскільки стійкі є PIN вгадати нападів. Під "вгадати" Я не маю на увазі, вибираючи випадкові PIN і намагається її в банкоматі. Добре відомо, що в цілому ми з урахуванням трьох послідовних спроб введення право PIN, якщо ми не банкомат тримає картки. Як VISA PIN чотири цифри довго можна легко зробити висновок, що ймовірність випадкового PIN вгадали 3 / 10000 = 0.0003, здається низьким, щоб він був безпечним, воно означає, що вам треба втратити карту більш ніж у три тисячі разів ( або втратити більше, ніж три тисячі карт одночасно:) до тих пір, поки існує розумна ймовірність втратити гроші.
Те, що я дійсно мається на увазі під "вгадати" був розірвати PIN алгоритм так що при будь-якій карткою Ви можете відразу дізнатися, пов'язані PIN. Тому цей документ дослідження, можливості, аналіз алгоритмів і пропонується метод для нападу. На закінчення ми даємо інструмент, що реалізує атаку та представити результати, про можливий шанс вийти з системи. Зауважимо, що до тих пір, поки інший банківської безпеки, пов'язаних з алгоритмами (інші PIN форматів, таких як IBM PIN або картки перевірка підписів, такі, як CVV або CVC) аналогічні VISA PIN, той же аналіз може бути зроблено приносить майже ті ж результати та висновки.
VISA PVV алгоритм
Одна з найбільш поширених PIN алгоритмів VISA PIN Контрольна вартість (PVV). Клієнт отримує ПІН та магнітної смуги карти. Закодовані в магнітної смуги складається з чотирьох цифр, які називаються PVV. Це число є криптографічного підпису PIN та інші дані, пов'язані з картою. Коли користувач вводить свій PIN банкомат зчитує з магнітною смугою, шифрує і спрямовує всю цю інформацію на центральний комп'ютер. Там суду PVV обчислюється з використанням клієнт вступив PIN і карти з криптографічних алгоритмів. Судовий розгляд PVV порівнюється з PVV, що зберігаються в карті, якщо вони відповідають центральний комп'ютер повертається в банкоматі для авторизації трансакції. Див більш докладно.
Опис PVV алгоритму можна знайти в двох документах, пов'язаних в попередній сторінці. В цілому він полягає в шифрування 8 байт (64 біт) рядок даних, називається Преобразованние безпеки Параметр (TSP), з DES алгоритм (DEA) в електронних книг кодексу режиму (ЄЦБ) за допомогою таємного ключа 64 біт. PVV випливає з результатів шифрування процесу, який являє собою 8 байт рядка. Чотири цифри PVV (зліва направо) відповідає перших чотирьох десяткових цифр (зліва направо) від виходу з DES, якщо його розглядати як 16 шіснадцяткові символів (16 х 4 = бітні 64-бітних) рядок. Якщо немає Є чотири десяткових цифр з 16 шіснадцяткові символів потім PVV завершена прийняті (зліва направо), не десяткове символів і decimalizing них за допомогою перетворення-> 0, B-> 1, C-> 2, D -> 3, E-> 4, F-> 5. Ось приклад:
Результат від DES: 0FAB9CDEFFE7DCBA
PVV: 0975
Стратегія уникнення decimalization на пропуск символів до чотирьох десяткових цифр знайдені (що буває практично весь час, як ми побачимо нижче) дуже розумний, оскільки він дозволяє уникнути упередженості важливо в розподілі цифр який виявився смертельним для інших систем, хоча вплив на цю систему буде набагато менше. Див також пов'язана з цим проблема, не відносяться до VISA PVV.
ОВЧ, бачили, як 16 шіснадцяткові символів (64 біт) рядок, формується (зліва направо) з 11 праворуч цифри PAN (номер картки), за винятком останньої цифри (контрольна цифра), одна цифра від 1 до 6 який обирає таємним ключем шифрування, і, нарешті, чотирьох цифр PIN. Ось приклад:
PAN: 1234 5678 9012 3445
Ключові селектору: 1
PIN: 2468
ОВЧ: 5678901234412468
Очевидно, що проблема руйнування VISA PIN полягає у пошуку таємного ключа для шифрування DES. Метод полягає в тому, що робити грубу силу пошуках ключа просторі. Зауважимо, що це не єдиний метод, можна спробувати знайти недоліки в ДЕА, багато намагалися, але це старий стандарт, як і раніше, в широкому використанні (в даний час замінений AES і RSA, однак). Це свідчить про його досить, щоб груба сила є єдиним реальним способом (Є кілька атак, але краще не практично в нашому випадку, в резюме див. LASEC пам'ятки і брудні подробиці див Biham І Шамірі 1990, Biham І Шамірі 1991 році, Мацуї 1993, Biham І Бірюков 1994 та Heys 2001).
Ключовим селектор цифра досить імовірно, представив на можливість компромісу ключа. У цьому випадку вони просто випустити нові картки, використовуючи інший селектор ключа. Раніше картки можуть бути замінені на нові або просто банкомати можуть прозоро писати нові PVV (відповідний новим ключем і збереження того ж ПІН) наступного разу клієнт використовує його / її карту. Для струси безпеки всі користувачі повинні попросити їх змінити PIN-коду, однак було б соромно за банківські пояснити причину, так що досить ймовірно, вони б не зробити такий запит.
Підготовка до нападу
Груба сила атаки полягає в шифруванні ОВЧ з відомими PVV, використовуючи всі можливі ключі шифрування і порівнювати кожен отримав PVV з відомими PVV. Якщо файл знайдений у нас є кандидат ключа. Але скільки клавіші ми спробувати? Як ми вже говорили вище ключ довжиною 64 біт, то це означає, що ми повинні спробувати 2 ^ 64 ключів. Однак це не так. На самом деле тільки 56 біт є ефективними в DES ключами, оскільки один біт (молодший) з кожної октете історично захищені як контрольна для інших, на практиці ці 8 біт (по одному для кожної з 8 октетов) ігноруються.
Тому DES ключа простір складається з 2 ^ 56 ключів. Якщо ми спробуємо всі ці ключі будуть знайдені один і лише один матч, у відповідності з банківським секретний ключ? Звичайно, ні. Ми отримаємо багато відповідності клавіш. Це відбувається тому, що PVV це лише невелика частина (одна четверта) від DES вихідних. Крім того PVV є вироділісь, оскільки деякі цифри (тих, від 0 до 5 після останнього, видел з лева на право, між цифрою 6 і 9) може виходити від десяткових цифр або decimalized шіснадцяткові цифри DES виробництва. Таким чином, багато хто ключі дасть DES виробництва, який дає до того ж відповідає PVV.
Тоді те, що ми можемо зробити для того, щоб знайти реальні ключові числі інших ложноположітельний ключі? Просто у нас є для шифрування другого різних ОВЧ, а також з відомими PVV, але тільки за допомогою ключів, які кандидат дав позитивну відповідність з першого ОВЧ-PVV пара. Однак немає жодних гарантій того, ми не зможемо отримати ще багато помилкові спрацьовування разом із справжнім ключем. Якщо це так, то нам буде потрібно третя ОВЧ-PVV пара, повторіть цей процес і так далі.
Перед тим, як ми розпочнемо нашу атаку ми повинні знати, скільки ОВЧ-PVV пара нам потрібна. Для цього ми повинні обчислити ймовірність випадкового DES виведення приносити відповідності PVV тільки випадково. Є кілька шляхів для розрахунку цього числа, і тут я буду використовувати простий підхід легко зрозуміти, але яка вимагає певного фону в математиці імовірності.
Ймовірність завжди можна розглядати як співвідношення сприятливих випадків до можливих випадків. У нашій задачі число можливих випадках дається перестановка з 16 елементів (від 0 до F шістнадцятковий цифр) в групі з 16 з них (16 шістнадцятковий цифр DES вихідних). Це дає 16 ^ 16 ~ 1.8 * 10 ^ 19, який, звичайно, збігається з 2 ^ 64 (різні номери 64 біт). Цей набір номера можуть бути розділені на п'ять категорій:
Ті, принаймні чотирьох десяткових цифр (від 0 до 9) з 16 шістнадцятковий цифр (від 0 до F) від DES вихідних.
Ті, хто точно лише три десяткових цифр.
Ті, хто точно тільки двох десяткових цифр.
Ті, хто точно тільки одне десяткова цифра.
Ті, хто не десяткових цифр (від всіх і F).
Давайте підрахувати, скільки номерів падіння в кожній категорії. Якщо ми етикетка 16 шістнадцятковий цифр DES виводяться X1 для X16, то можна ярлик перших чотирьох десяткових цифр будь-який номер першої категорії, як Сі, 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-й, який дорівнює 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-бітних чисел або округлення (для поплавка) або переповнення (для чисел) помилки не дозволяють отримати точний результат.
До сих пір ми підрахували кількість можливих випадків, у кожній з п'яти категорій, але ми зацікавлені в отриманні число сприятливих випадках замість. Дуже легко отримати останній з колишньої так як це просто фіксація комбінація з чотирьох десяткових цифр (або потрібно шістнадцятковий цифр, якщо немає Є чотири десяткових цифр) від PVV замість надання їм безкоштовно. На практиці це означає перетворення в 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, відповідно.
Тепер ми можемо отримати те, що ймовірність DES вихід на матч PVV випадково. Нам просто потрібно додати п'ять номерів сприятливих випадки і розділіть його на загальне число можливих випадків. При цьому ми отримуємо, що ймовірність дуже 0.0001 або приблизно один з десяти тисяч. Це дивно, це добре, округлений результат? Зовсім ні, просто подивіться на номери ми підрахували вище. До першої категорії домінує на кілька порядків число сприятливих та можливі випадки. Це скоріше інтуїтивне, як представляється очевидним, що це дуже малоймовірно, що, не маючи чотирьох десяткових цифр (10 шансів з 16 відсотків цифра) серед 16 шістнадцятковий цифр. Ми бачили раніше, що взаємозв'язок між числом можливих і сприятливих випадках в першу категорію було поділ на 10 ^ 4, що, коли наш результат P = 0.0001 приходить від.
Наша мета для всіх цих розрахунків полягає в тому, щоб з'ясувати, скільки ОВЧ-PVV пара потрібно мати успішний грубої сили нападу. Тепер ми можемо обчислити очікувану кількість помилкові спрацьовування на першому пошуку: воно буде поруч судових розглядів рази ймовірності для однієї випадкової ложноположітельний, тобто T * P, де Т = 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) / LOG (P) ~ 4.2. Оскільки ми не можемо зробити пошук дрібно це зручно раунд цього числа. Тому те, що очікуване кількість помилкові спрацьовування, якщо ми проводимо п'ять обшуків? Це T * P ^ 5 ~ 0.0007, або приблизно 1 з 1400. Таким чином, використовуючи п'ять ОВЧ-PVV пара безпечно отримати істинне секретний ключ, не помилкові спрацьовування.
Напад
Після того, як ми знаємо, що нам потрібно п'ять ОВЧ-PVV пара, як ми отримуємо їх? Звичайно, нам потрібно принаймні, одну карту з відомим PIN, і в силу характеру PVV алгоритм, це єдине, що нам потрібно. З іншого PIN систем, таких як IBM, нам знадобиться п'ять карт, однак це не є необхідним з VISA PVV алгоритму. Нам просто потрібно йти з магнітною смугою, а потім змінити PIN чотири рази, але читання карти після кожного зміни.
Потрібно читати магнітній смузі картки, щоб отримати PVV і ключа шифрування Selector. Ви можете купити комерційний магнітною смугою читача або зробити самостійно, виконавши інструкції ви знайдете в попередньої сторінки та посилання в ньому. Після того, як ви читачеві побачити це опис стандартних магнітних доріжок, щоб дізнатися, як отримати PVV від зчитування даних. У цьому документі PVV області в напрямках 1 і 2 вважаються п'ять характеру довго, але насправді істинний PVV складається з чотирьох останніх цифр. Перший з п'яти цифр є ключовим селектор. Я тільки бачив картки зі значенням 1 у цій цифрі, яка у відповідності зі стандартом, і секретний ключ ніколи не скомпрометований (і, отже, вони не повинні перейти до іншої ключовою зміни Selector).
Я зробив просту програму на С, getpvvkey.c, щоб здійснити напад. Вона складається з петлі спробувати всі можливі ключі для шифрування перший ОВЧ, якщо отримані PVV матчів вірно PVV нових ОВЧ судом, і так до тих пір, поки існує невідповідність, і в цьому випадку ключ відкидаються, а нове судом, або п'яти, отриманих PVVs матчу відповідає справжньої PVVs, і в цьому випадку ми можемо припустити, ми отримали банківський секретним ключем, однак цикл продовжується до тих пір, поки вона ізнуряет ключових просторі. Це робиться для забезпечення ми знаходимо справжні ключових тому що існує ймовірність (хоча й дуже низький) першим ключовим знайдені ложноположітельний.
Очікується, програма займе дуже багато часу, щоб закінчити і звести до мінімуму ризики, відключення електрики, комп'ютер зависає, і так далі це контрольно-пропускних пунктів у файлі getpvvkey.dat час від часу (точний час залежить від швидкості на комп'ютері, це приблизно одну годину для найшвидших комп'ютерів в даний час використання). З тієї ж причини, якщо позитивні ключ було написано у файлі getpvvkey.key. Програма відображає лише одне повідомлення на початку року, починаючи з позицією КПП файл, якщо такі є, після цього більше нічого не відображається.
DES алгоритм є ключовим пунктом в програмі, тому дуже важливо оптимізувати його швидкість. Я перевіряв декілька реалізацій: libdes, SSLeay, OpenSSL, cryptlib, NSS, libgcrypt, катакомб, libtomcrypt, cryptopp, UFC-склеп. DES функції перших чотирьох, засновані на тих же код Ерік Янг, і той, що найбільш ефективні (включає оптимізований C і Асемблері код x86). Таким чином, я вибрав libdes яка була оригінальною та здійснення всіх відповідних конденсованих код у файли encrypt.c (C версія) і x86encrypt.s (x86 асемблер версія). Код злегка змінений для досягнення будь-яких поліпшень в атаку "грубою силою: початковий перестановка є фіксованою загальною круті в кожному ОВЧ шифрування, і тому можна зробити тільки один раз на початку. Ще одне покращення в тому, що я написав зовсім нову setkey функцію (я назвав його nextkey), яка є оптимальною для грубої сили петлі.
Для того, щоб отримати робочу програму ви повинні набрати у відповідному місці п'ять TSPs та їх PVVs, а потім зібрати його. Я тестували тільки в UNIX платформ, за допомогою Makefile Makegetpvvkey узагальнити (використовуйте команду "Make-F Makegetpvvkey"). Він може скласти від інших систем, але ви, можливо, знадобиться встановити деякі речі. Будьте впевнені, що визначення типу long64 відповідає 64-бітне ціле. У принципі, немає залежності від endianness від процесора. Я успішно узагальнені і запустити його на Pentium-Linux, Альфа-Tru64, MIPS-Irix і Sparc-Solaris. Якщо у вас немає і не хочете, щоб встановити Linux (ви не знаєте, що вам не вистачає ;-) Ви все ще можете вибрати для запуску Linux на CD і використовувати свої програми, див. мою сторінку Linux, не встановлюючи його.
Після того як ви знайшли секретні банківські ключа, якщо ви хочете знайти PIN від довільного картка вам просто потрібно написати аналогічну програму (жаль я не написали його, я занадто ліниві:), що б спробувати всі 10 ^ 4 коди шляхом створення відповідної ОВЧ, зашифрувати його с (не більше) секретного ключа, що випливають PVV та порівнявши його з PVV на магнітній смузі карти. Ви отримаєте один матч за справжню PIN. Тільки один матч? Пам'ятайте, що ми бачили вище, у нас є шанс на 0.0001, що випадкове шифрування матчів PVV. Ми намагаємося 10000-Пен (і, отже, TSPs), таким чином, ми очікуємо, 10000 * 0.0001 = 1 ложноположітельний в середньому.
Це дуже цікавий результат, це означає, що, в середньому, кожна картка має два дійсних коди: клієнт PIN і очікувалося ложноположітельний. Я назвав це "помилковою", але відзначають, що до тих пір, як він створює справжню PVV це PIN ж актуальні, як один клієнт. Крім того, немає можливості дізнатися, який є, які, навіть в банкоматі, тільки замовник знає. Навіть якщо ложноположітельний були не дійсні як PIN, ви ще три судових процесу в будь-якому банкоматі, достатньо в середньому. Тому ймовірність ми підрахували, на початку цього документа про випадковому здогадуватися про PIN має бути виправлений. Насправді це два рази вище, ніж вартість, тобто, вона 0.0006 або один з більш ніж 1600, як і раніше, безпечно низька.
Результати
Важливо, щоб оптимізувати компіляцію програми та запустити її в найкоротші можливі процесора з-за довгого часу очікується запуск. Я виявив, що компілятори оптимізації прапор-O отримує кращу продуктивність, подумав деяке поліпшення досягається додаванням-fomit-кадр-вказівника на прапор Pentium-Linux,-сплеску прапор на "Альфа-Tru64,-МПА прапор на MIPS-Irix та швидкість прапор на Sparc-Solaris. Спеціальні прапори (-DDES_PTR-DDES_RISC1-DDES_RISC2-DDES_UNROLL-DASM) для DES кодексу, в цілому, а вигоди. Всі ці прапори вже випробувані і я вибрала найкраще поєднання для кожного процесора (див. Makefile), але ви можете спробувати оптимізувати інші прапори.
На мою випробувань кращої продуктивності досягається з AMD Athlon 1600 МГц процесор, перевищивши 3,4 млн. ключів в секунду. Цікаво воно отримує кращі результати, ніж Intel Pentium IV 1800 МГц та 2000 МГц (див. діаграму нижче, натисніть на них, щоб збільшити). Я вважаю, це пов'язано з деякими I / O насичення, то кеш-пам'яті або доступу, що процесор AMD (яка вдвічі кеш Pentium) або материнська плата, в якій вона працює, вдається уникнути. У першому малюнку ви можете побачити, що DES порушення швидкості процесорів все більш або менш лінійної взаємозв'язку з процесором швидкості, за винятком двох Intel Pentium я згадував раніше. Це логічно, це означає, що за подвійний процесор швидкості ви отримаєте подвійний розрив швидкості, але стежити за насичення ефектів, в даному випадку це краще, AMD Athlon 1600 МГц, які будуть навіть дешевше, ніж Intel Pentium 1800 МГц або 2000 МГц.
На другій діаграмі можна бачити більш докладно те, що ми б назвали власного DES-брейк потужність процесора. Я отримую це значення простого поділу перерви швидкості на швидкості процесора, тобто, ми отримуємо число DES ключами спробували в секунду і на МГц. Це показник ефективності роботи процесора типу, незалежно від його швидкості. Отримані результати свідчать про те, що кращий процесор для виконання цього завдання є AMD Athlon, а потім приходить Alpha і дуже близькі після того, як його Intel Pentium (за винятком високої швидкості ті, які виконують дуже погано з-за ефекту насичення). Далі йде MIPS процесор, і в останньому місці Sparc. Деякі Alpha і MIPS процесори розташовані в нижній частині шкали, оскільки вони є ранні релізи не включаючи збільшення наприкінці версій. Майте на увазі, що я включала виконання x86 процесори для C і Асемблері код як є велика різниця. Здається, що GCC є не дуже гарна генератора оптимізований машинний код, але ми, зрозуміло, не знають ручної оптимізації коду асемблер для інших процесорів (Alpha, MIPS, Sparc) буде збільшити свої результати в порівнянні з рідною компілятор C (я не використовую GCC для цих інших платформ), як це відбувається з процесором x86.
Оновлення
Ось стаття, де ці методи можуть бути використані.
http://redtape.msnbc.com/2008/08/could-a-hacker.html