PIN-код (англ. Personal Identification Number — личный опознавательный номер) — аналог пароля. В ходе авторизации операции используется одновременно как пароль доступа держателя карты к терминалу (банкомату) и как секретный ключ для цифровой подписи запроса. Предусматривается для кредитных и подобных карт (например, сим-карт), с помощью которого производится авторизация держателя карты. PIN-код должен знать только держатель карты. Обычно предусмотрено ограничение попыток правильного ввода (в основном, не больше 3 раз), после чего карта блокируется для использования.
В мобильных телефонах для разблокирования PIN-кода требуется ввести так называемый PUK-код (иногда называют PUC-код (англ.)). Соответственно, для кода PIN1 необходим код PUK1, а для кода PIN2 — код PUK2. Если PUK-код введен неправильно 10 раз, SIM-карта блокируется навсегда.
По стандарту ISO 9564-1 PIN может содержать от 4 до 12 десятичных цифр.
В банковских приложениях PIN-код может генерироваться по алгоритмам IBM 3624 (детерминированный криптоалгоритм, использующий в качестве входа PAN) или проверяться по алгоритму VISA PVV. Второй алгоритм в принципе допускает ситуации, когда проверку может пройти не единственный установленный банком PIN-код, но и несколько других (в 40 % случаев). В среднем одному проверочному значению PVV может соответствовать 1,58 различных ПИН-кода, поэтому безопасность системы от этого эффекта не снижается.
В 2006 году был запущен слух, что ввод пин-кода в банкомате в обратном порядке приводит к автоматическому вызову полиции. На практике подобные системы, например, ATM SafetyPIN software не применялись.
PIN-код был разработан и запатентован шотландским инженером Джеймсом Гудфеллоу в 1965 году. Им был разработано устройство для автоматизированной выдачи денег путём принятия картонной карты (информация на которой представляла собой области с меткой радиоактивного углерода-14), а также имел клавиатуру для ввода PIN-кода.
Стандарт ISO 9564 является международным стандартом PIN-кода, который определяет основные положения его использования.
Основные принципы использования PIN: Шифрование того же PIN тем же ключом, но для другого пользователя не должно давать такой же результат Безопасность шифрования PIN должна зависеть от секретности ключа, а не секретности алгоритма PIN должен быть аннулирован, если был скомпрометирован или находится под угрозой Хранящийся зашифрованный PIN должен быть защищен от возможной подмены
Также стандарт устанавливает некоторые особенности устройства для ввода PIN: Для ввода должны содержать цифры от 0 до 9. Также на них могут быть изображены буквы для удобства клиента PIN не должен быть отображен на дисплее или озвучен аппаратом Физическая защищенность от возможной перенастройки операций Защищенность от возможного наблюдения со стороны
Верификация представляет собой проверку соответствия PIN-кода и номера карты. Это соответствие не является взаимно однозначным(достаточно вспомнить, что длина PIN может быть 4 цифры, в то время как количество цифр в номере карты равно 16). Также одному номеру карты могут соответствовать различные значения PIN-кода. Требование, предъявляемое к соответствию номера карты и PIN-кода следующее: для произвольного номера карты множество значений PIN-кода, соответствующего данной карте, должно быть таким, что вероятность угадать этот PIN была невысокой. Существуют два распространенных метода генерации/верификации PIN, в основе которых лежит использование алгоритмов IBM 3624 и VISA PIN Algorithms.
Алгоритм IBM 3624-Offset был создан для первого поколения ATM и таким образом получил широкое распространение.
Особенность метода в том, что даже выключенная ATM была способна произвести верификацию PIN без необходимости в вычислительной технике и хранилище для управления базами данных записей пользователя. Вместо этого, PIN клиента может генерироваться из номера карты, зашифрованной секретным ключом.
Алгоритм: берется номер карты(16 цифр) и шифруется с помощью DES. После шифрования все цифры, за исключением первых четырех выбрасываются. Тем не менее они могут представлять собой значения 'A'-'F', которые не приемлемы для стандартной раскладки ATM. К этим значениям применяется таблица децимилизации. Полученное значение принято называть PIN Natural.
Таблица децимилизации:
0123456789ABCDEF
0123456789012345
Для получения значения PIN-кода цифры PIN Natural складываются по модулю 10 с соответствующими цифрами величины PIN Offset, которая является произвольной последовательностью 4-х цифр. Значение PIN-Offset может быть записано на магнитной полосе карты или храниться в базе данных эмитента.
Пример:
Номер карты 4556 2385 7753 2239
Номер карты после шифрования DES 3F7C 2201 00CA 8AB3
Согласны алгоритму оставляем первые четыре цифры 3F7C
Согласно таблице децимилизации получаем Natural PIN 3572
PIN Offset 4344
Итоговый PIN 7816
Проверка PIN-кода, введенного держателем карты, осуществляется по PIN Offset и номеру карты. Легко заметить, что значение PIN полностью определяется номером карты и величиной PIN offset. Вероятность угадать PIN с первой попытки 0.0001
Алгоритм VISA используется многими банковскими системами и применим не только к картам типа VISA.
Данный Алгоритм генерирует значение PVV(PIN verification value) на основании TSP(transformed security parameter). PVV аналогично PIN Offset может храниться на магнитной полосе карты или в базе данных эмитента. Пользователь вводит PIN, который шифруется ATM и с данными карты отправляется в процессинг где вычисляется PVV на основе введенного PIN и происходит сравнение его со значением на магнитной полосе.
Вычисление PVV выполняется по следующему алгоритму:
За основу идет 64-битная строка TSP, которая представляет собой 16 шестнадцатеричных символов, в которую входят(слева-направо):
PAN12 — 12 правых цифр за исключением крайней правой цифры, представляющей собой контрольное число.
Считывается PAN12 слева-направо.
PVKI (PIN Verification Key Index) — цифра от 1 до 6 выбирается ключом шифрования
TSP шифруется алгоритмом 3Des(эффективная длина ключа 112 бит). После шифрования получаем строку длиной 64 бита, что равнозначно 16 шестнадцатеричных символов. Далее формируется PVV:
Шестнадцатеричная строка сканируется слева направо. Десятичные цифры выбираются и записываются в PVV до тех пор, пока не будут найдены 4 цифры.
Если после первого сканирования будут найдены менее четырех цифр, то при повторном сканировании выбираться будут только шестнадцатеричные цифры, которые конвертируются в десятичные вычитанием 10.
Пример:
вывод 3DES: 0FAB9CDEFFE7DCBA
PVV: 0975 (0, 9, 7, F=5)
Различие данных алгоритмов заключается в том, что алгоритм IBM является алгоритмом как генерации, так и верификации PIN-а, в то время как алгоритм PVV определяет только верификацию.
При IBM 3624 каждому номеру карты соответствует единственное значение PIN.
При алгоритме VISA PVV PIN является случайной величиной и от номера карты не зависит. Нетрудно вычислить, что в случае выбора PIN для каждого номера карты по равновероятному закону, данному значению PVV соответствует не менее двух значений PIN с вероятносью 42%. При этом среднее количество PIN, соответствующих данному значению PVV, равно 1.58. То есть при использовании VISA PVV вероятность угадать PIN-код в 1.58 раза выше, чем в случае IBM 3624. Однако в смысле необходимого объема перебора возможных PIN по порядку остается тем же.
Согласно требованиям международных платежных систем, значение PIN-кода не должно храниться(даже в защищенном виде), ни в терминалах обслуживания ни на хостинге эмитента. Рассмотрим возможности восстановления PIN-кода эмитентом по имеющимся у него данным.
В случае хранения PIN Offset/Pvv на магнитной полосе, очевидно, восстановить PIN-код у эмитента не получится. Поэтому хранение на магнитной полосе является рекомендуемым и уменьшает возможность компрометации со стороны персонала банка.
При хранении PIN Offset/Pvv в БД банка, при использовании IBM 3624 эмитент без труда вычисляет PIN-код карты. В случае алгоритма VISA эмитент может подобрать соответствующее хранящемуся в БД значению PVV значение PIN-кода перебором 10000 значений.
В случае хранения PIN Offset/PVV на магнитной полосе изменить PIN-код в банкомате не получится, поскольку изменение PIN-кода повлечет изменение PIN Offset/PVV. При хранении в БД, изменить PIN-код не представляет проблемы, так как в этом случае значения Offset/PVV будут вычислены для нового PIN-кода и помещены в БД вместо предыдущих значений.