http://habrahabr.ru/post/229527/
это не мое

В связи с появлением статьи «Путешествия банковской транзакции», в рамках которой стали появляться вопросы по механизму проверке PIN, хотелось бы несколько уточнить данный вопрос. В данной статье будет рассмотрен только вопрос проверки т.н. online PIN, т.е. PIN, который вводится на терминале и передается для дальнейшей проверки в систему, которая выполняет авторизацию транзакции.

Прежде чем приступать непосредственно к вопросу прокерки PIN'а карты, остановимся на некоторых теоретических вопросах.

Прикладная криптография

Алгоритм DES

В настоящий момент, основным алгоритмом шифрования для всех действия с банковскими картами является алгоритм DES (а не 3DES, который используется только для операций шифрования, преимущественно, транспортного уровня). Не вдаваясь в терминологию и классификацию алгоритмов шифрования, просто скажу, что это блочный алгоритм шифрования с размером блока 8 байт и ключом в 56 бит (7 байт). На практике, ключ DES принято представлять в виде блока из 8 байт, где в каждом байте старшие 7 бит ялвются значащими, а последний бит — незначащим. Он может использоваться для контроля целостности ключа (об этом — далее).

Т.к., в настоящее время, ключ длинной 56 бит является недостаточным, с точки зрения безопасности, то вместо алгоритма DES для шифрования принять использовать алгоритм 3DES в режиме EDE (здесь и далее под обозначением 3DES я буду подразумевать именно использование схемы EDE). Обычно, в банковской среде применяется алгоритм 3DES с ключом двойной длинны (112 бит, 16 байт), при которой на первом и третьем шаге (см. описание алгоритма) применяется один и тот же ключ.

Алгоритмы проверки PIN

На данный момент, в основном, используются следующие 2 алгоритма проверки PIN: Visa PVV и IBM 3624 PIN offset.

Visa PVV

Данный алгоритм первоначально был разработан платежной системой Visa, но, в настоящее время является рекомендованным алгоритмом проверки PIN как для карт Visa, так и для MasterCard. В основе данного алгоритма лежит значение PVV (PIN verification value), которое является криптограммой, получаемой на основе следующих величин:

Номер карты (далее PAN)
Индекс ключа проверки PIN (PIN verification key index, далее, PVKI)
Ключ проверки PIN (PIN verification key, далее, PVK)
Сам PIN код карты

Для получения PVV формируется блок из PAN (последние 11 цифр, кроме контрольного числа карты), PVKI, PIN (строго, первые 4 цифры), который зашифровывается с помощью PVK, после чего из него, с помощью специальной функции, извлекаются 4-х значное число, которое и является значением PVV [1]. Данное значение PVV является эталонным для проверки PIN кода. Т.е. при получении операции с введенным PIN для его проверки на основании PAN, PVKI, PVK формируется новое значение PVV и сравнивается с эталонным PVV для карты. Если значения совпадают, то PIN считается верным, если не совпадают — неверным.

К особенностям данного алгоритма можно отнести следующие «ограничения»:
Принципиальная невозможность восстановления PIN из значения PVV
Использование PIN кода размером строго 4 цифры


IBM 3624 PIN offset

Данный алгоритм первоначально был разработан компанией IBM для использования в банкоматах IBM 3624. Как именно планировалось его использовать, история умалчивает, а автори статьи не знает, но, в данном случае, это не принципиально. В настоящее время данный алгоритм считается устаревшим, но достаточно успешно используется по нескольким причинам:

карточные системы «старых» регионов (Западная Европа, Северная Америка) достаточно консервативны и, во многом, работают на «достаточно» старых системах, что их вполне устраивает
данный алгоритм позволяет восстановить значение PIN кода из проверочного значения (см. далее), что м.б. весьма полезно при определнных условиях


В основе данного алгоритма лежит значение PIN offset (PIN verification value), которое является криптограммой, получаемой на основе следующих величин:

Контрольное значение (Validation data, далее VD) — некоторое значение (обычно — часть номера карты, но это не обязательно)
Децимализационная таблица (Decimalization table, далее DT)
Ключ проверки PIN (PIN verification key, далее, PVK)
Сам PIN код карты

Для простоты дальнейшего описания под ключом проверки PIN в случае метода IBM 3624 PIN offset будем совокупность ключа PVK и значения таблицы децимализации DT.
Для получения PIN offset контрольное значение VD заширфовывается с помощью ключа PVK, после чего из полученного значения с помощью таблицы децимализации DT получается блок из 16 десятичных цифр.
Из полученного блока берутся первые N цифр, где N — длина PIN (метод IBM 3624 позволяет проверять PIN с длиной до 16 цифр), далее из каждой цифры PIN по модулю 10 вычитается соответствующая цифра полученного блока. Полученное значение и будет значением PIN offset.

HSM

HSM — hardware security module, программно аппаратный комплекс, предназначенный для выполнения криптографических операций в защищенной среде. Сам HSM должен иметь защиту, позволяющую предотвратить несанкционированный доступ к хранящимся в нем данным. В его функции входит выполнение различных криптографических проверок, включая проверку карты, PIN, криптографичесокой подписи сообщений (MAC) и различных операций шифрования таким образом, чтобы предотвратить доступ к значимой информации (ключи, значения PIN кодов). Здесь стоит пояснить, что при использовании HSM само значение ключа, в общем случае, в открытом виде (т.е. в виде, приодном для выполнения операций в соответствии с алгоритмом DES/3DES) присутствует только внутри HSM в момент выполнения этой операции. Каким образом это достигается, зависит от конкретного HSM. Для наиболее распростаненных в карточных системах HSM (HSM производства SafeNet и Thales) используются 2 механизма:

Шифрование ключа под т.н. Мастер ключом HSM в различных вариантах. В этом случае само значение ключа хранится в зашифрованном виде на внешнем носителе (обычно — в процессинговой системе) и передается в HSM во время выполнения операции. В этом случае при выполнении операции HSM сначала расшифровывает ключ с помощью Мастер ключа, после чего уже выполняет, непосредственно, ту операцию, которая была запрошена
Хранение ключа в защищенном внутреннем хранилище HSM. В этом случае, обычно, на вход подается идентификатор ключа, по которому HSM извлекает его из внутреннего хранилища.

При этом сам принцип выполнения операции на HSM не зависит от того, какой именно из способов хранения ключей используется.
Везде далее, если это не указано в явном виде, будем считать, что ключ передается в защищенном HSM виде (т.е. зашифрованный под Мастер ключом HSM или в виде идентификатора).

Проверка PIN

Терминология

Для упрощения дальнейшего описания введем некоторые термины:
PIN блок — значение PIN кода карты, некоторым специальным образом упакованной в блок из 8 байт. Стоит пояснить, что никакого шифрования в данном процессе не используется. Способы упаковки, в данном случае, бывают разные, но это не принципиально.
Зашифрованный PIN блок — значение PIN блока, зашифрованное по алгоритму DES/3DES с помощью ключа (ключа терминала, банка, платежной сети, пр.), специально выделенного для целей шифрования PIN блока.
Проверочное значение PIN — PVV или PIN offset в зависимости от того, какой метод проверки PIN используется.
Дополнительные данные проверки PIN — данные, кроме PIN и проверочного значения PIN, необходимые для проверки PIN в соответствии с алгоритмами Visa PVV/IBM 3624 PIN offset в соответствии со списком, приведенным в описании алгоритмов (см. выше).


Требования платежных систем

В части проверки PIN можно указать следующее:
Открытые значения PIN и PIN блока не должны никаким образом передаваться, храниться или обрабатываться вне специально отведенных программно аппаратных комплексов (HSM на стороне процессинговых систем или EPP и некоторых других страшных абревиатур на стороне терминальных устройств(банкоматы, POS-терминалы и пр.)).
Зашифрованный PIN блок не должен храниться после завершения операции в системах, отвечающих за онлайн/оффлайн обработку транзакций (есть еще системы, отвечающие за выпуск самих карт, их это требование не касается).


Проверка PIN

Как мы уже определились ранее, для проверки PIN нам необходимы следующие данные:
Сам PIN, который мы будем проверять
Проверочное значение PIN
Дополнительные данные проверки PIN

С PIN все достаточно просто. Как уже указано выше, открытое значние PIN мы получить не можем ни при каких условиях. Таким образом, нам остается только зашифрованный PIN блок. В дополнение к нему нам нужен ключ для его расшифровки. Назавем этот ключ PPK (PIN protection key, термин взят из документации на HSM фирмы SafeNet).

Далее необходимо определиться с проверочным значением PIN и дополнительными данными.

Первый вариант — это хранение проверочного значения на магнитной полосе карты после поля Service Code. Модифицированную версию ISO 7813 с указанием того, где хранится PVV, можно посмотреть здесь. По приведенному описанию формата треков стоит добавить, что под 5-и символьным значением PVV подразумевается следующая последовательность 1 символ PVKI и 4 символа самого PVV, а для PIN offset — значение PIN offset для PIN из 5 цифр. Если PIN имеет отличную от 5 цифр длину, то размер PIN offset, соответственно, изменится. Какие плюсы у этого метода. Безусловно — возможность проверять PIN для любого, кто будет иметь необходимые для проверки ключи. Здесь стоит заметить, что при запуске нового карточного подукта в платежную сеть, обычно, передаются ключи, на которых выпущена карта. Таким образом, при использовании данного метода возможность проверки PIN появляется как у самого эмитента карты, так и у платежной сети. К недостаткам такого метода можно отнести то, что данный вариант делает PIN карты статическим до тех пор, пока карта не будет перевыпущена.

Второй вариант — это хранение проверочного значения в некотором хранилище, обычно, БД системы, отвечающей за выполнение проверок при авторизации карты. В этом случае при проверке PIN необхоидмо извлечь проверочное значение из этого хранилища, а уже потом, выполнять проверку, используя это значение. Как следствие, при использовании данного метода, невозможно вполнять проверку PIN во внешней системе (в той же платежной системе) и она м.б. выполнена только в той системе, которая имеет доступ к хранилищу проверочных значений. Однако, такая система позволяет изменять PIN код карты без каких либо затрат на смену пластика (для чего это нужно, что при этом необходимо сделать и какие после этого м.б. проблемы, описывать не буду, т.к. это находится за рамками данной статьи).

Независимо от того, каким образом и кем (эмитент карты или платежная сеть) была получена вся необходимая информация, сама проверка PIN выполняется на HSM, который для выполнения проверки получает ключ PPK в защищенном виде, ключ проверки PIN в защищенном виде, зашифрованный PIN блок, проверочное значение PIN и дополнительные данные проверки, в ответ на что возвращается только результат проверки: верный PIN, неверный PIN, прочая ошибка. Т.е. в процессе проверки система, отвечающая за авторизацию, с самим открытым значением PIN кода никак не соприкасается.

Используемые материалы:
[1] Visa Payment Technology Standards Manual, лет 5 назад, на просторах интернета можно было найти версию данного документа за 2007 год, сейчас, при беглом происке, доступна только версия от 2004 года