ПИН-код

Материал из Википедии — свободной энциклопедии
(перенаправлено с «PIN-код»)
Перейти к: навигация, поиск

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

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

По стандарту ISO 9564-1 ПИН может содержать от 4 до 12 десятичных цифр[1].

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

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

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

ПИН-код был разработан и запатентован шотландским инженером Джеймсом Гудфеллоу в 1965 году[источник не указан 1058 дней]. Им было разработано устройство для автоматизированной выдачи денег путём принятия картонной карты (информация на которой представляла собой области с меткой радиоактивного углерода-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 будут вычислены для нового ПИН-кода и помещены в базу данных вместо предыдущих значений.

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

Ссылки[править | править вики-текст]