Долаючи VISA PIN
Jul 02, 2008 в банківській сфері та EFTPoS
Нижче наводиться стаття я виявив нещодавно. Це один з найбільш повних описів PIN Контрольна вартість (PVV) злому.
Я думав, я хотів би повторити це тут, на моїй місцевого ведення.
У коментарі були зроблені у відношенні граматики використовувалися в початковому тексті, я вже виправлені деякі очевидні помилки, в той час як підтримання зв'язку з вихідного матеріалу.
http://69.46.26.132/ ~ biggold1/fastget2you/tutorial.php
--- Оригінальний текст ----
Передмова
Ви коли-небудь чудо, що станеться, якщо ви втратите вашої кредитної або дебетової картки, і хто-то знаходить його. Чи буде ця людина мати можливість знімати готівкові гроші з банкоматів гадати, яким-то чином, ваш PIN? Крім того, якщо ви були, хто вважає кого-то карти б ви спробуйте вгадати PIN і приймати шанс отримати в легких грошей? Звичайно, відповідь на обидва питання мають бути "ні". Ця робота не стосується другого питання, це питання особистої етики. При цьому я намагаюся відповісти на перше запитання.
Всі інформація використовується для цієї роботи державних і можна вільно знайти в Інтернеті. Решта йде математики та програмування, таким чином, ми можемо дізнатися що-небудь і улибнемся. Я виявити ніяких секретів. Крім того, мета (і остаточне завершення) цієї роботи полягає в тому, щоб продемонструвати, що PIN алгоритмів все ще досить сильні, щоб забезпечити достатню безпеку. Ми всі знаємо, технологія не є слабкою ланкою.
Ця робота аналізує один з найбільш поширених PIN алгоритми, VISA PVV, що використовується багатьма банкомат карт (кредитних і дебетових карток) і намагається з'ясувати, яким є стійкою до PIN вгадати нападів. Під "вгадати" Я не маю на увазі вибору випадкових PIN і намагається її в банкоматі. Добре відомо, що в цілому ми з урахуванням трьох послідовних судових процесів право ввести PIN, якщо ми не банкомат тримає картки. Як VISA PIN чотири цифри довго це легко зробити висновок, що ймовірність випадкових PIN вгадати 3 / 10000 = 0.0003, здається низькою, щоб вони були безпечними, це означає, що ви повинні втрачати вашу карту більш ніж у три тисячі разів ( або втратити більше трьох тисяч карток в той же час:) до тих пір, поки є реальний шанс втратити гроші.
Те, що я дійсно мається на увазі під "вгадати" був розірвати PIN алгоритм так, що, з огляду на будь-які картки ви можете відразу дізнатися, пов'язані PIN. Тому цей документ дослідження, можливості, аналіз алгоритмів і пропонується метод для нападу. Зрештою, ми даємо інструмент, який здійснює нападу і представити результати, про передбачуване шанс вийти з системи. Зауважимо, що до тих пір, поки інші банківські безпеки, пов'язаних з алгоритмами (інші PIN форматів, таких, як IBM PIN або картку підтвердження підпису, таких, як CVV і CVC) аналогічним VISA PIN, той же аналіз можна зробити приносить майже ті ж результати та висновки.
Одна з найбільш поширених PIN алгоритмів VISA PIN Контрольна вартість (PVV). Клієнт отримує ПІН і магнітної смуги карти. Кодування магнітною смугою складається з чотирьох цифр, які називаються PVV. Це число є криптографічного підпису PIN та інші дані, пов'язані з картою. Коли користувач вводить свій PIN банкомат зчитує з магнітною смугою, шифрує і направляє всю цю інформацію на центральний комп'ютер. Там суду PVV обчислюється за допомогою клієнта вступив PIN і картки з інформацією криптографічні алгоритми. Судовий розгляд PVV порівнюється з PVV зберігається у карти, якщо вони збігаються з центральним комп'ютером повертається в банкомат для авторизації транзакції. За більш докладно.
Опис PVV алгоритму можна знайти в двох документах, пов'язаних в попередній сторінці. В цілому вона складається в шифрування по 8 байт (64 біт), рядок даних, що зветься преобразовало Параметр безпеки (ОВЧ), з DES алгоритм (DEA), в Електронні Код книги режимі (ЄЦБ) за допомогою таємного 64-бітний ключ. PVV випливає з результатів шифрування процесу, який являє собою 8 байт рядка. Ці чотири цифри PVV (зліва направо) відповідають перших чотирьох десяткових цифр (зліва направо) на виході з ДЕЗ, коли вважається 16 шестнадцатерічних символів (16 х 4 біта = 64-bit) рядок. Якщо ні Є чотири десяткових цифр серед 16 шестнадцатерічних символів, а потім PVV завершено прийнято (зліва направо), не десяткових знаків і decimalizing їх за допомогою перетворення-> 0, B-> 1, C-> 2, D -> 3, Е-> 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. Метод полягає в тому, що робити грубу силу пошуках ключа просторі. Зауважимо, що це не єдиний метод, можна спробувати знайти недоліки в DEA, багато хто намагалися, але це старий стандарт по-, як і раніше, знаходиться в широке використання (в даний час замінений AES і RSA, однак). Це свідчить про його досить, щоб брутальної сила є єдиним реальним способом (Є деякі краще нападу, але не практичним, в нашому випадку, для резюме див. LASEC пам'ятки і брудні подробиці див Biham І Шамір 1990 році, Biham І Шамір 1991 році, Мацуї 1993 році Biham І Бирюков 1994 року і Heys 2001).
Ключовим селектор цифра була досить імовірно, представляє для покриття можливості одного з ключових компроміс. У цьому випадку вони просто випустити нові картки, використовуючи ще один ключовий селектор. Літніх картками можуть бути замінені новими або просто банкомату може прозоро писати нові PVV (у відповідності з новим ключем і збереження того ж ПІН-код) в наступний раз клієнт використовує його / її карти. Для зрушити безпеку всіх користувачів повинно бути запропоновано змінити свій ПІН, однак було б соромно за банківські пояснити причину, так що досить ймовірно, вони б не зробити такий запит.
Підготовка до нападу
Груба сила атаки полягає в шифруванні ОВЧ з відомими 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-bit). Цей набір номера можуть бути розділені на п'ять категорій:
Ті, по крайней мере чотирьох десяткових цифр (від 0 до 9) серед 16 шестнадцатерічних цифр (від 0 до F) від DES виробництва.
Ті, хто саме тільки трьох десяткових цифр.
Ті, хто точно тільки двох десяткових цифр.
Ті, хто точно тільки одне десяткових цифр.
Ті, хто не десяткових цифр (всі між А і F).
Давайте підрахувати, скільки номерів осені в кожній категорії. Якщо ми етикетка 16 шестнадцатерічних цифр DES виробництва, як 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-бітних чисел, або округлення (для поплавка), або переповнення (для чисел) помилки не дозволить вам отримати точний результат.
До сих пір ми підрахували кількість можливих випадків, у кожній з п'яти категорій, але ми зацікавлені в отриманні ряду сприятливих випадках замість. Це дуже легко отримати останній із тих, що, як це тільки фіксація комбінація з чотирьох десяткових цифр (або потрібно шестнадцатерічних цифр, якщо немає Є чотири десяткових цифр) від 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 парами нам необхідно для виконання успішної атаку "грубою силою". Тепер ми можемо обчислити очікуване число помилкових спрацьовувань в першу пошуку: він буде поруч судових розглядів рази ймовірності для однієї випадкової помилки, то є Т * С, де Т = 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. Таким чином, використовуючи п'ять ОВЧ-PVV пар є безпечним для отримання істинного секретний ключ без будь-яких помилкових спрацьовувань.
Після того, як ми знаємо, що нам потрібно п'ять ОВЧ-PVV пар, як нам одержати їх? Звичайно, нам потрібно принаймні одну картку з відомими PIN, і в силу характеру PVV алгоритм, це єдине, що нам потрібно. З іншого PIN систем, таких як IBM, нам буде потрібно п'ять карт, однак це не є необхідним з VISA PVV алгоритм. Нам треба просто читати магнітною смугою, а потім змінити PIN чотири рази, але читання карти після кожної зміни.
Це необхідно для читання магнітної смуги на карті, щоб отримати PVV і ключем шифрування селектор. Ви можете купити комерційні магнітною смугою читача або зробити одну себе наступні інструкції ви можете знайти в попередній сторінки і посилання в них. Якщо у вас є читач розглядаємо це опис стандартних магнітних доріжок, щоб дізнатися, як отримати 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 функції перші чотири засновані на той самий код, 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, не встановлюючи її.
Після того як ви знайшли секретні банківські ключа, якщо ви хочете знайти PIN від довільного картка вам просто потрібно написати аналогічну програму (шкода я не написаний він, я занадто ліниві:), що б спробувати всі 10 ^ 4-коди шляхом створення відповідної ОВЧ, зашифрувати його с (не більше) секретний ключ, що випливають PVV та порівнявши його з PVV на магнітній смузі картки. Ви отримаєте один матч за справжню PIN. Лише один матч? Майте на увазі, що ми бачили вище, у нас є шанс на 0,0001, що випадкове шифрування матчах PVV. Ми намагаємося 10000-Пен (і, отже, TSPs), таким чином, ми очікуємо, 10000 * 0,0001 = 1 ложноположітельний в середньому.
Це дуже цікавий результат, це означає, що в середньому кожна картка має два дійсних коди доступу: код клієнта, і очікується, ложноположітельний. Слово це "помилкові", але відзначають, що до тих пір, як він створює справедливо 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 million ключів в секунду. Цікаво воно отримує кращі результати, ніж Intel Pentium IV 1800 МГц та 2000 МГц (див. діаграми нижче, натисніть на них, щоб збільшити). Я вважаю, це пояснюється деякими I / O насичення, безсумнівно, кеш-пам'ять або доступу, що процесор AMD (яка в два рази кеш Pentium) або материнська плата, в якій вона працює, вдається уникнути. На першому малюнку ви можете бачити, що DES порушення швидкості процесорів всі більш-менш лінійну зв'язок з процесором швидкості, за винятком двох Intel Pentium я згадував раніше. Це логічно, це означає, що для подвійний процесор швидкості ви будете отримувати подвійне порушення швидкості, але й стежити за насичення наслідки, в цьому випадку краще AMD Athlon 1600 МГц, який буде ще дешевше, ніж Intel Pentium 1800 МГц або 2000 МГц.
У другій діаграмі ми можемо побачити більш докладно, що ми хотіли б закликати власного DES перерва потужності процесора. Я отримую цей параметр просто розділити перерви швидкості на швидкість процесора, то є, ми отримаємо число DES ключами намагалися секунду, і відсотками МГц. Це показник ефективності роботи процесора типу, незалежно від його швидкості. Отримані результати показують, що найкращий процесор для виконання цього завдання є AMD Athlon, а потім приходить "Альфа" та дуже близькі після того, як він це Intel Pentium (за винятком високої швидкості ті, які виконують дуже погано з-за насичення ефект). Далі йде архітектури Mips процесор, і в останнє місце Sparc. Деякі альфа-та архітектури Mips процесор знаходиться в нижній частині шкали, оскільки вони є ранні релізи не включаючи удосконалень пізньої версії. Майте на увазі, що я включала виконання x86 процесори для C і ассемблер код, так як існує велика різниця. Схоже, що GCC є не дуже гарна генератор оптимізований машинний код, але ми, зрозуміло, не знають чи ручна оптимізація коду ассемблера для інших процесорів (Alpha, MIPS, Sparc), дозволить підвищити свої результати в порівнянні з рідною компілятор C (Я не використовую GCC для інших платформ), як це відбувається з процесором x86.
Оновлення
Ось стаття, де ці методи можуть бути використані.




























