Материал из РУВИКИ — свободной энциклопедии

ПИН-код

ПИН-код
Изображение
Логотип РУВИКИ.Медиа Медиафайлы на РУВИКИ.Медиа

PIN-код (англ. Personal Identification Number — персональный идентификационный номер) — аналог пароля. В ходе авторизации операции используется одновременно как пароль доступа держателя карты к терминалу (банкомату) и как секретный ключ для цифровой подписи запроса. ПИН предусматривается для кредитных и подобных карт (например, сим-карт); с его помощью производится авторизация держателя карты. ПИН должен знать только держатель карты. Обычно предусмотрено ограничение попыток правильного ввода (в основном не больше 3 раз), после чего карта блокируется для использования.

В мобильных телефонах для разблокирования ПИН требуется ввести так называемый PUK (иногда называют PUC-код). Соответственно, для кода PIN1 необходим PUK1, а для PIN2 — PUK2. Если PUK введён неправильно 10 раз, сим-карта блокируется навсегда.

В банковских приложениях ПИН может генерироваться по алгоритмам IBM 3624 (детерминированный криптоалгоритм, использующий в качестве входа PAN) или проверяться по алгоритму VISA PVV. Второй алгоритм в принципе допускает ситуации, когда проверку может пройти не единственный установленный банком ПИН, но и несколько других (в 40 % случаев). В среднем одному проверочному значению PVV может соответствовать 1,58 различного ПИН-а, поэтому безопасность системы от этого эффекта не снижается[1][2][3].

В 2006 году был запущен слух, что ввод ПИН в банкомате в обратном порядке приводит к автоматическому вызову полиции. На практике подобные системы, например ATM SafetyPIN software, не применялись[4][5][6].

История[править | править код]

ПИН был разработан и запатентован шотландским инженером Джеймсом Гудфеллоу в 1965 году. Им было разработано устройство для автоматизированной выдачи денег путём принятия картонной карты (информация на которой представляла собой области с меткой радиоактивного углерода-14), которое имело клавиатуру для ввода ПИН.

Стандарт ISO 9564[править | править код]

Стандарт ISO 9564 является международным стандартом ПИН, который определяет основные положения его использования.

Основные принципы использования ПИН:

  • Шифрование того же ПИН-а тем же ключом, но для другого пользователя не должно давать такого же результата.
  • Безопасность шифрования ПИН должна зависеть от секретности ключа, а не секретности алгоритма.
  • ПИН должен быть аннулирован, если был скомпрометирован или находится под угрозой.
  • Хранящийся зашифрованный ПИН должен быть защищён от возможной подмены.

Также стандарт устанавливает некоторые особенности устройства для ввода ПИН:

  • Они должны содержать цифры от 0 до 9. Также на них могут быть изображены буквы для удобства клиента.
  • ПИН не должен быть отображён на дисплее или озвучен аппаратом.
  • Физическая защищённость от возможной перенастройки операций.
  • Защищённость от возможного наблюдения со стороны[7].

Верификация[править | править код]

Верификация представляет собой проверку соответствия ПИН-кода и номера карты. Это соответствие не является взаимно однозначным (достаточно вспомнить, что длина ПИН может быть 4 цифры, в то время как количество цифр в номере карты равно 16). Также одному номеру карты могут соответствовать различные значения ПИН-кода. Требование, предъявляемое к соответствию номера карты и ПИН-кода, следующее: для произвольного номера карты множество значений ПИН-кода, соответствующего данной карте, должно быть таким, чтобы вероятность угадать этот ПИН была невысокой. Существуют два распространённых метода генерации/верификации ПИН, в основе которых лежит использование алгоритмов IBM 3624 и VISA PIN Algorithms.

IBM 3624-offset[править | править код]

Алгоритм IBM 3624-Offset был создан для первого поколения ATM и таким образом получил широкое распространение.

Особенность метода в том, что даже выключенная ATM была способна произвести верификацию ПИН без необходимости в вычислительной технике и хранилище для управления базами данных записей пользователя. Вместо этого ПИН клиента может генерироваться из номера карты, зашифрованной секретным ключом.

Алгоритм: берётся номер карты (16 цифр) и шифруется с помощью DES. После шифрования все цифры, за исключением первых четырёх выбрасываются. Тем не менее они могут представлять собой значения 'A'-'F', которые неприемлемы для стандартной раскладки ATM. К этим значениям применяется таблица децимилизации. Полученное значение принято называть PIN Natural.

Таблица децимилизации:

0123456789ABCDEF

0123456789012345

Для получения значения ПИН-кода цифры PIN Natural складываются по модулю 10 с соответствующими цифрами величины PIN Offset, которая является произвольной последовательностью 4 цифр. Значение PIN Offset может быть записано на магнитной полосе карты или храниться в базе данных эмитента.

Пример:

Номер карты 4556 2385 7753 2239

Номер карты после шифрования DES 3F7C 2201 00CA 8AB3

Согласно алгоритму оставляем первые четыре цифры 3F7C

Согласно таблице децимилизации получаем Natural PIN 3572

PIN Offset 4344

Итоговый ПИН 7816

Проверка ПИН-кода, введённого держателем карты, осуществляется по PIN Offset и номеру карты. Легко заметить, что значение ПИН полностью определяется номером карты и величиной PIN Offset. Вероятность угадать ПИН с первой попытки — 0,0001[8].

VISA PVV Algorithms[править | править код]

Алгоритм VISA используется многими банковскими системами и применим не только к картам типа VISA.

Данный алгоритм генерирует значение PVV (PIN verification value) на основании TSP (transformed security parameter). PVV аналогично PIN Offset может храниться на магнитной полосе карты или в базе данных эмитента. Пользователь вводит ПИН-код, который шифруется ATM и с данными карты отправляется в процессинг, где вычисляется PVV на основе введённого ПИН-кода и происходит сравнение его со значением на магнитной полосе.

Вычисление PVV выполняется по следующему алгоритму:

За основу берётся 64-битная строка TSP, которая представляет собой 16 шестнадцатеричных символов, в которую входят (слева направо):

PAN12 — 12 правых цифр[чего?] за исключением крайней правой цифры, представляющей собой контрольное число.

Считывается PAN12 слева направо.

PVKI (PIN Verification Key Index) — цифра от 1 до 6 выбирается ключом шифрования

ПИН-код — 4 цифры

Пример:

PAN: 1234 5678 9012 3445 PVKI: 1 PIN: 9090 TSP: 5678901234419090

TSP шифруется алгоритмом 3Des (эффективная длина ключа 112 бит). После шифрования получаем строку длиной 64 бита, что равнозначно 16 шестнадцатеричных символов. Далее формируется PVV:

Шестнадцатеричная строка сканируется слева направо. Десятичные цифры выбираются и записываются в PVV до тех пор, пока не будут найдены 4 цифры.

Если после первого сканирования будут найдены менее четырёх цифр, то при повторном сканировании выбираться будут только шестнадцатеричные цифры, которые конвертируются в десятичные вычитанием 10.

Пример:

Вывод 3DES: 0FAB9CDEFFE7DCBA

PVV: 0975 (0, 9, 7, F=5)

Различие данных алгоритмов заключается в том, что алгоритм IBM является алгоритмом как генерации, так и верификации ПИН-кода, в то время как алгоритм PVV определяет только верификацию[9].

Безопасность[править | править код]

При IBM 3624 каждому номеру карты соответствует единственное значение ПИН.

При алгоритме VISA PVV PIN является случайной величиной и от номера карты не зависит. Нетрудно вычислить, что в случае выбора ПИН для каждого номера карты по равновероятному закону, данному значению PVV соответствует не менее двух значений ПИН с вероятносью 42 %. При этом среднее количество ПИН, соответствующих данному значению PVV, равно 1,58. То есть при использовании VISA PVV вероятность угадать ПИН-код в 1,58 раза выше, чем в случае IBM 3624. Однако в смысле необходимого объёма перебора возможных ПИН по порядку остаётся тем же. 

Согласно требованиям международных платёжных систем, значение ПИН-кода не должно храниться (даже в защищённом виде) ни в терминалах обслуживания, ни на хостинге эмитента.

Существует несколько возможностей восстановления ПИН-кода эмитентом по имеющимся у него данным.

В случае хранения PIN Offset/PVV на магнитной полосе, очевидно, восстановить ПИН-код у эмитента не получится. Поэтому хранение на магнитной полосе является рекомендуемым и уменьшает возможность компрометации со стороны персонала банка.

При хранении PIN Offset/PVV в базе данных банка при использовании IBM 3624 эмитент без труда вычисляет ПИН-код карты. В случае алгоритма VISA эмитент может подобрать соответствующее хранящемуся в базе данных значению PVV значение ПИН-кода перебором 10 000 значений.

Уязвимости[править | править код]

В 2002 году студенты Кембриджского университета открыли decimalization table attack[8].

ПИН-код для банковских карт генерируется путём шифрования номера карты. Зашифрованный номер представляет шестнадцатеричное значение и берутся первые четыре цифры. Таблица децимилизации используется для конвертации этого значения в десятичный вид путём перевода A в 0, B в 1 и т. д. Эти таблицы не считаются конфиденциальными аппаратными модулями и могут быть предоставлены вместе с номером карты. Манипулируя содержимым таблицы, становится возможным узнать больше о значении ПИН-кода, чем исключением отдельных комбинаций. Например, если используется таблица

0123456789ABCDEF

0000000100000000,

соответствие с ПИН-кодом 0000 подтвердит, что ПИН не содержит цифру 7, что исключает более 10 % от всех возможных комбинаций. Среднее значение попыток, необходимых для угадывания ПИН-кода, — 15.

SIM-карта[править | править код]

В случае неправильного введения ПИН-кода в течение трёх раз SIM-карта блокируется до правильного введения PUC (англ. Personal Unblocking Code), который предоставляет десять попыток для ввода. В случае неправильного ввода PUC SIM-карта блокируется навсегда.

В случае хранения PIN Offset/PVV на магнитной полосе изменить ПИН-код в банкомате не получится, поскольку изменение ПИН-кода повлечёт изменение PIN Offset/PVV. При хранении в базе данных изменить ПИН-код не представляет проблемы, так как в этом случае значения PIN Offset/PVV будут вычислены для нового ПИН-кода и помещены в базу данных вместо предыдущих значений.

Код блокировки автомагнитолы[править | править код]

Во многих автомагнитолах применяется система ввода кода после полного отключения питания, что направлено на предотвращение использования украденной техники. Код автомагнитолы присваивается на заводе либо вводится пользователем при его установке. Если код вводится несколько раз подряд неверно, то магнитола блокируется на время или навсегда.

Автомагнитола Ford 4000 с предустановленным защитным кодом (Keycode)

Примечания[править | править код]

  1. И.М. Голдовский. Занимательные факты из биографии ПИН, или Теория вероятностей в индустрии платежных карт // ПЛАС. — 2009. — № 5 (451). — P. 3—11. Архивировано 28 декабря 2013 года.
  2. VISA PIN Algorithms z/OS V1R12.0 Cryptographic Services ICSF Application Programmer's Guide SA22-7522-13 (англ.). IBM. Дата обращения: 5 декабря 2013.
  3. L. Padilla. Breaking VISA PIN (англ.) (февраль 2009). Дата обращения: 5 декабря 2013. Архивировано 15 сентября 2013 года.
  4. Правда ли, что набрав пин-код в банкомате наоборот, можно вызвать полицию? / Советы экспертов / Пластиковые карты на Prostobank.ua. Дата обращения: 19 августа 2015. Архивировано 17 августа 2015 года.
  5. Как защититься от мошенников, ворующих наши деньги через банкоматы | Личные деньги | Деньги | Аргументы и Факты. Дата обращения: 5 декабря 2013. Архивировано 9 декабря 2013 года.
  6. Robin Sax. ATMurders Can Be Avoided (англ.) (16 сентября 2009). — Huffington Post. Дата обращения: 5 декабря 2013. Архивировано 7 ноября 2012 года.
  7. https://www.pcisecuritystandards.org/documents/PCI_PIN_Security_Requirements.pdf. Дата обращения: 28 декабря 2013. Архивировано 30 декабря 2014 года.
  8. 1 2 http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-560.pdf. Дата обращения: 27 декабря 2013. Архивировано 10 октября 2013 года.
  9. http://pic.dhe.ibm.com/infocenter/zos/v1r12/index.jsp?topic=%2Fcom.ibm.zos.r12.csfb400%2Fcsfb4za0519.htm

Ссылки[править | править код]