Всем доброго дня!
После прочтения нескольких статей на хабре о пластиковых картах, POS терминалах и сопутствующих вещах, мне показалось, что эта тема довольно интересна сообществу. В данной небольшой публикации я хочу окончательно разобрать тему ввода PIN–кода на POS терминалах и ответить, наконец, в меру своих знаний, на вопрос: почему же в одних случаях требуется ввод PIN, а в других — нет?
Если тема будет так же интересна сообществу – то в будущем вас ждут еще несколько статей о принципах работывсей этой кухни, всего, что связано с POS-терминальным обрудованием, процессинговыми центрами и пластиковыми картами.
Но для начала предисловие.
Так уж вышло, что работаю я в одном из банков нашей страны. Занимаюсь, собственно, настройкой POS терминалов «с нуля» и до, собственно, ввода в эксплуатацию.
Это моя первая статья, так что заранее прошу прощения за некую сумбурность, равно как и за то, что, возможно, что-либо упущу, ибо все подробности уместить в рамки статьи невозможно.
В первую очередь необходимо будет упомянуть о TMS (Terminal Management Server\Station). Вкратце — это компьютер, на котором работает некоторая программа — центр конфигурирования всех POS терминалов. Именно там создаются так называемые «файлы конфигураций приложения», то есть то, что заливается в POS и характеризует его работу.
В TMS задаются все параметры работы POS, как очень значительные (к примеру, список платежных систем, с которыми работает POS, настройки этих систем, CVM листы, action-коды терминала), так и незначительные (таких, как порядок расположения пунктов меню на экране терминала, или же дизайн чеков).
На выходе в итоге появляется специально упакованный файл, который «понимает» терминал. Этот файл и заливается в терминал.
Теперь о сути: спрашивать или не спрашивать PIN (в случае EMV карты):
На EMV-микросхему карты на этапе загрузки приложения заливается так называемый CVM-лист (CVM – Cardholder Verification Method). Также его можно менять во время транзакции специальным эмитентским скриптом, направляемым с процессингового центра, но эти тонкости я позволю себе отпустить.
Каждый банк-эмитент выбирает CVM-лист исходя из своих требований. Вот пример классического CVM-листа:
4403410342031E031F02
Расшифровка выглядит так:
![](https://habrastorage.org/r/w1560/files/5db/63e/94d/5db63e94db7242ac934b80e0f9529316.png)
И читается слева направо (заранее прошу прощения за корявую схему от мастера пайнта минус 92 левела):
![](https://habrastorage.org/r/w1560/files/0fa/e6f/c67/0fae6fc6740a4992be48f7834e5fe4bb.png)
На самом терминале тоже есть свой, терминальный CVM-лист. Он задается в TMS на этапе составления конфигурационных файлов, которые заливаются в POS. Его настраивает банк – эквайрер, опять же, согласно своим запросам.
Работает же всё весьма просто: во время транзакции два CVM-листа (карты и терминала) сравниваются. Срабатывают только те методы проверки, которые совпадают в обоих листах (по сути выполняется проверка пересечения CVM-листов). Остальные методы отбрасываются!
То есть в данном примере алгоритм таков:
Спросить криптованный PIN (предварительно проверив, есть ли в CVM-листе терминала такой метод), если юзер отказывается (это то самое нажатие красной кнопки на PIN-клавиатуре) – запросить оффлайновый открытый PIN (а отказаться он имеет право – см. картинку), если снова отказывается – запросить онлайн-PIN (проверяется не картой, а хостом), если снова отказался — запросить подпись (от нее уже отказаться нельзя — снова см. картинку). Если же в CVM-листе терминала нет проверки по подписи – метод пропускается (это НЕ приравнивается к отказу!) и используется метод «No CVM» с условием «If not unattended cash and not manual cash and not purchase» (но обычно он мало где используется). Если же и этого метода в CVM-листе терминала нет – то проверка не проходит и транзакция отклоняется.
Естественно, число различных вариаций CVM-листов карт и терминалов — и уж тем более их сочетаний — весьма велико. Так что теперь, думаю, всем стало более ясно, почему карта в устройстве запрашивает PIN, а в другом устройстве та же самая карта просит подпись. И почему другая карта исправно работает с запросом PIN в том же устройстве, а карта, что работает в третьем – тут вообще отказывается работать. Так же надеюсь, что после прочтения данной статьи тема запроса PIN-кодов при оплате с карты стала более понятна и прозрачна и удивляться в магазинах по этому поводу больше не придется.
Всем спасибо за проявленное внимание!
После прочтения нескольких статей на хабре о пластиковых картах, POS терминалах и сопутствующих вещах, мне показалось, что эта тема довольно интересна сообществу. В данной небольшой публикации я хочу окончательно разобрать тему ввода PIN–кода на POS терминалах и ответить, наконец, в меру своих знаний, на вопрос: почему же в одних случаях требуется ввод PIN, а в других — нет?
Если тема будет так же интересна сообществу – то в будущем вас ждут еще несколько статей о принципах работы
Но для начала предисловие.
Так уж вышло, что работаю я в одном из банков нашей страны. Занимаюсь, собственно, настройкой POS терминалов «с нуля» и до, собственно, ввода в эксплуатацию.
Это моя первая статья, так что заранее прошу прощения за некую сумбурность, равно как и за то, что, возможно, что-либо упущу, ибо все подробности уместить в рамки статьи невозможно.
В первую очередь необходимо будет упомянуть о TMS (Terminal Management Server\Station). Вкратце — это компьютер, на котором работает некоторая программа — центр конфигурирования всех POS терминалов. Именно там создаются так называемые «файлы конфигураций приложения», то есть то, что заливается в POS и характеризует его работу.
В TMS задаются все параметры работы POS, как очень значительные (к примеру, список платежных систем, с которыми работает POS, настройки этих систем, CVM листы, action-коды терминала), так и незначительные (таких, как порядок расположения пунктов меню на экране терминала, или же дизайн чеков).
На выходе в итоге появляется специально упакованный файл, который «понимает» терминал. Этот файл и заливается в терминал.
Теперь о сути: спрашивать или не спрашивать PIN (в случае EMV карты):
На EMV-микросхему карты на этапе загрузки приложения заливается так называемый CVM-лист (CVM – Cardholder Verification Method). Также его можно менять во время транзакции специальным эмитентским скриптом, направляемым с процессингового центра, но эти тонкости я позволю себе отпустить.
Каждый банк-эмитент выбирает CVM-лист исходя из своих требований. Вот пример классического CVM-листа:
4403410342031E031F02
Расшифровка выглядит так:
![](https://habrastorage.org/files/5db/63e/94d/5db63e94db7242ac934b80e0f9529316.png)
И читается слева направо (заранее прошу прощения за корявую схему от мастера пайнта минус 92 левела):
![](https://habrastorage.org/files/0fa/e6f/c67/0fae6fc6740a4992be48f7834e5fe4bb.png)
На самом терминале тоже есть свой, терминальный CVM-лист. Он задается в TMS на этапе составления конфигурационных файлов, которые заливаются в POS. Его настраивает банк – эквайрер, опять же, согласно своим запросам.
Работает же всё весьма просто: во время транзакции два CVM-листа (карты и терминала) сравниваются. Срабатывают только те методы проверки, которые совпадают в обоих листах (по сути выполняется проверка пересечения CVM-листов). Остальные методы отбрасываются!
То есть в данном примере алгоритм таков:
Спросить криптованный PIN (предварительно проверив, есть ли в CVM-листе терминала такой метод), если юзер отказывается (это то самое нажатие красной кнопки на PIN-клавиатуре) – запросить оффлайновый открытый PIN (а отказаться он имеет право – см. картинку), если снова отказывается – запросить онлайн-PIN (проверяется не картой, а хостом), если снова отказался — запросить подпись (от нее уже отказаться нельзя — снова см. картинку). Если же в CVM-листе терминала нет проверки по подписи – метод пропускается (это НЕ приравнивается к отказу!) и используется метод «No CVM» с условием «If not unattended cash and not manual cash and not purchase» (но обычно он мало где используется). Если же и этого метода в CVM-листе терминала нет – то проверка не проходит и транзакция отклоняется.
Естественно, число различных вариаций CVM-листов карт и терминалов — и уж тем более их сочетаний — весьма велико. Так что теперь, думаю, всем стало более ясно, почему карта в устройстве запрашивает PIN, а в другом устройстве та же самая карта просит подпись. И почему другая карта исправно работает с запросом PIN в том же устройстве, а карта, что работает в третьем – тут вообще отказывается работать. Так же надеюсь, что после прочтения данной статьи тема запроса PIN-кодов при оплате с карты стала более понятна и прозрачна и удивляться в магазинах по этому поводу больше не придется.
Всем спасибо за проявленное внимание!