Эта статья — о пароле для некоторых устройств. О мультсериале см. Смешарики. Пин-Код.
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), которое имело клавиатуру для ввода ПИН.
Верификация представляет собой проверку соответствия ПИН-кода и номера карты. Это соответствие не является взаимно однозначным (достаточно вспомнить, что длина ПИН может быть 4 цифры, в то время как количество цифр в номере карты равно 16). Также одному номеру карты могут соответствовать различные значения ПИН-кода. Требование, предъявляемое к соответствию номера карты и ПИН-кода, следующее: для произвольного номера карты множество значений ПИН-кода, соответствующего данной карте, должно быть таким, чтобы вероятность угадать этот ПИН была невысокой. Существуют два распространённых метода генерации/верификации ПИН, в основе которых лежит использование алгоритмов IBM 3624 и VISA PIN Algorithms.
Алгоритм 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 используется многими банковскими системами и применим не только к картам типа 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 выбирается ключом шифрования
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-карта блокируется до правильного введения PUC (англ.Personal Unblocking Code), который предоставляет десять попыток для ввода. В случае неправильного ввода PUC SIM-карта блокируется навсегда.
В случае хранения PIN Offset/PVV на магнитной полосе изменить ПИН-код в банкомате не получится, поскольку изменение ПИН-кода повлечёт изменение PIN Offset/PVV. При хранении в базе данных изменить ПИН-код не представляет проблемы, так как в этом случае значения PIN Offset/PVV будут вычислены для нового ПИН-кода и помещены в базу данных вместо предыдущих значений.
Во многих автомагнитолах применяется система ввода кода после полного отключения питания, что направлено на предотвращение использования украденной техники. Код автомагнитолы присваивается на заводе либо вводится пользователем при его установке. Если код вводится несколько раз подряд неверно, то магнитола блокируется на время или навсегда.
Автомагнитола Ford 4000 с предустановленным защитным кодом (Keycode)