Как стать автором
Обновить

Разработка приложений для платёжных терминалов Ingenico

Уровень сложностиСложный
Время на прочтение35 мин
Количество просмотров19K
Всего голосов 85: ↑85 и ↓0+85
Комментарии55

Комментарии 55

Было бы интересно найти SDK для других терминалов (в частности, интересуют Ingenico Unicapt32, Lipman Nurit, NewPOS NEW8110), но пока что изыскания в данном направлении закончились ничем.

Нуриты это уже вообще древнее зло, их уж на рынке как лет 15-20 нет новых. Зачем они вам?

По поводу любых китайцев, типа New POS, рекомендую напрямую им написать, типа я разработчик, дайте СДК. Шансы есть, иногда и дают под NDA.

Просто у меня коллекция таких аппаратов, хочется попробовать запустить.

Насчёт NewPOS — у них некогда был публичный FTP. Но сейчас ссылки все померли. Я пробовал им писать, сказали, что всё можно взять у представителей компании в регионе (которые по первому требованию такого не присылают). Такие дела.
Хыхых. Archive.org, серьёзно? Столько искал, но на самом видном месте не нашёл…
Неплохо, неплохо! Надо скачать, попробовать собрать что-нибудь…

Ещё бы для 3020 найти, ну да ладно.

Архиворг вообще супер хреново индексируется, так-то там два шага от главной и попадаешь в огромный варезник в лучших традициях начала нулевых.


Но положил я его туда не очень давно, а заполучил ещё лет 9 назад с какого-то китайского сайта, где для скачивания нужно было залить три своих файла с кодом. Ну я и залил, очистку экрана спектрума на ассемблере тремя разными способами… Вот была бы тогда ChatGPT..! :-)

Не CodeForge, случаем, был?
Я там VeriFone eVo SDK свистнул, правда, без ключа подписи…
Потрясающий проект.

Когда-то пытался ковырять терминалы, но дальше сброса прошивки при вскрытии (глупый смех) у меня не пошло :).
Если не секрет, что за терминалы были?
Секретов нет, я просто не помню… Если фотографии тех времён попадутся на глаза, скину.

Замеченные неточности:

  • в MockUp режиме ничего не отключается. Этот режим отличается только тем, что криптографические ключи, используемые для подписи ПО, заранее известны.

  • Перевести в MockUp можно только "чистый" терминал, в который не был инсталлирован профиль разработчика ПО (ну или VAR, как он раньше назывался). Кроме заливки MockUp ОС надо еще правильно инициализировать криптопроцессор.

  • Ключи IngeTrust никогда не удаляются из терминала (ну кроме случая срабатывания защиты от вскрытия аппарата).

Для улучшения "обзорности" хорошо бы добавить описание криптопроцессора (что это и с чем его кушают). Это самая мякотка терминала - а про неё ни слова. Как и про крипто-схемы.

Увы, документации на это всё у меня исчезающе мало. Так бы был рад написать поподробнее. Но спасибо за комментарии.

Кстати, а почему тогда выпадет Unauthorized, если накатить ОС категории PROD на Mockup-терминал?

В поставке SDK есть несколько PDF, которые надо вдумчиво читать. Согласен, что изложенное в них можно понять только после трех... а то и четырех прочтений - такой там стиль изложения.

Unauthorized...
Дело в том, что терминалы Telium 1/2 персонализируются в два этапа: сначала прошивается профиль VAR (в нем есть криптоключ, которым потом проверяется подпись приложения), а потом инициализируется криптопроцессор (с помощью прошитого ранее ключа из профиля VAR). Получается, что в терминале есть два компонента, у которых должны быть одинаковые ключи для проверки подписи.

Когда на готовый PROD терминал накатывается MOCKUP прошивка, то получается конфликт - операционная система использует одну крипто-подпись, а криптографический процессор требует крипто-подпись от PROD. И при проверке этого у терминала сносит башню - вроде все должно быть одиннаковое, а оно разное.
При обратном движение - получаем такую же ситуацию: ОС стала PROD, а криптопроцессор остался MOCKUP. Результат тот же.

Сменить инициализацию криптопроцессора можно ТОЛЬКО с помощью KIT-а (номер не помню).

На самом деле MOCKUP - это профиль специального VAR, для разработчиков.

Правила очень простые:

  • PROD не трогать никогда. Если потрогали - то приложить к иконе (то есть к KIT-у)

  • MockUp терминал можно делать только из чистого терминала (без загруженного VAR профиля)

Интересно, однако.

MockUp терминал можно делать только из чистого терминала (без загруженного VAR профиля)

Получается, на уже инициализированном PROD-терминале запустить криптопроцессор в мокап-режиме не выйдет? А сменить профиль можно только при помощи KIT 43C?

В поставке SDK есть несколько PDF, которые надо вдумчиво читать.

А что за версия SDK, интересно? Просто у меня такого нет. Только *.CHM-файл справки с описанием некоторых функций, про VARы там ничего нет. Нарыть удалось только вот этот документ, но он по программированию, а не по персонализации. Или эти PDFки поставлялись просто вместе с SDK как часть пакета документации?

в MockUp режиме ничего не отключается. Этот режим отличается только тем, что криптографические ключи, используемые для подписи ПО, заранее известны.

А где хранятся эти ключи? В файле *.M40, генерируемом SAT в мокап-режиме, содержится всего лишь
; 
LCD.AGN

А в аналогичном пакете реальной прошивки вот что (фрагмент):
; SHA1 Checksum: 3c0f3c030554b42c7fed988060060dcaf9772805
; SDK 9.32.2.PatchH\Component\Barcode\Legacy\QR\8440960104.M40
; Component 8440960104.M40
; E07AB000
8440960104.LGN
; SDK 9.32.2.PatchH\Component\CLess\CLESS.M40
; Component CLESS.M40
; Contactless DLL
36550623.LGN
; SDK 9.32.2.PatchH\Component\DLL_ExtraGPRS\8445640119.M40
; Component 8445640119.M40
;
8445640119.LGN
; SDK 9.32.2.PatchH\Component\DLL_SSL\8443650405.M40
; Component 8443650405.M40
; SSL_NO_EC
8443650405.LGN
; SDK 9.32.2.PatchH\Component\Fonts\Standard\ISO5.m40
; Component ISO5.m40
; 00000000
8442190111.PGN
; SDK 9.32.2.PatchH\Component\Manager\iCT_LIBGR_EXPORT_PROD.m40
; Component iCT_LIBGR_EXPORT_PROD.m40
;TELIUM MANAGER EXPORT ICT PROD
;INGESTATE COMPATIBILITY T2

Получается, на уже инициализированном PROD-терминале запустить криптопроцессор в мокап-режиме не выйдет? А сменить профиль можно только при помощи KIT 43C?

Да, именно так.

А что за версия SDK, интересно?

Уже точно не помню. В комплекте было несколько PDF, причем копаться в них надо было самому. Потом французы начали перенос информации из этих PDF в CHM файлы. Сейчас, может и нет никаких PDF.

VAR - это сокращение от Value Added Reseller. То есть компания, которая будет продавать терминал с добавленной стоимостью (как правило ПО). В документации на SDK этого никогда и не было.

А где хранятся эти ключи?

Этот ключ выдается отдельным файлом :) и у каждого VAR он свой. Он загружается в терминал во время инициализации. Где уж там он храниться - не знаю.
И конечно, ключей VAR никогда не было в составе SDK.

То есть компания, которая будет продавать терминал с добавленной стоимостью (как правило ПО).

Как, к примеру, в этой стране это «Арком», который разрабатывает свой софт
Arcus и NewWay и попутно толкает терминалы?

Вот такой материал удалось нарыть. Это как раз про это всё?

Купил ради этой статьи терминал ict220, который ранее использовался (последние платежи датировались 18 годом) он спокойно перешел в mockup режим. Так что видимо еще зависит от банка, чье по было залито туда.

Банк тут не при чём. ПО в любом случае сносится. Персонализацию проводит представитель вендора, в нашей стране это Арком.

поправка, уже не Арком, а Ingenico Group.
Арком уже давно поглощена.

А когда это произошло?

в 2012

Теперь надо проверить функционирование крипто-процессора.
У меня очень большие сомнения, что хотя бы одна операция на нём сработает.

OK, есть глупый вопрос — если уж мы вскрыли терминал, то не дешевле ли посмотреть на то, какие ноги процессора там куда распаяны, и впихнуть ему свою прошивку, которая позволит работать с экраном и клавиатурой? Понятно что он уже не будет пригоден для финансовых операций, но как выносной пульт для поделок — вполне… Если камень внутри заблокирован насмерть — ну напаять вместо него пустой…
Можно, конечно. Процессор снять феном и контакты позвонить.
НЛО прилетело и опубликовало эту надпись здесь
Увы, демок нет. Всё же архитектура там крайне закрытая.

на какой-нибудь специальной версии Java (ее вроде как раз для такого изначально и делали)

Для смарт-карт делали. Но не для терминалов.
НЛО прилетело и опубликовало эту надпись здесь
Может, из-за необходимости работать с криптографией и кучей всякой проприетарной периферии?
Да и куча исходников под терминалы живут ещё с тех годов, когда эти аппараты работали на Z80 или MC68000. И, конечно, написано оно всё на C. У той же VeriFone хорошая совместимость по этой части, программы для более старых терминалов сравнительно легко переписывались на новые.

Для терминалов тоже делали. :) Были такие терминалы Jade корейской компании CyberNet. В них была своя java-подобная машина. Причём она крутилась на каких-то копеечных микроконтроллерах. Жутко глючная, долго не прожила, но позволила выйти на некоторые рынки. Следующие поколения уже использовали обычный голый Си.

Интересно. Но таких никогда не держал.

Для смарт-карт была вообще отдельная java card. А java-me была слишком ограничена, от собственно жавы она далека, как и жаваскрипт. В общем-то, хотели сделать унификацию, а получили еще один стандарт, который почти никто поддерживать не захотел. Уже в начале десятых годов полноценные java машины работали на платежных терминалах, одной из распространенных была ibm J9. Проблем с перифирией не было практически никаких - жава хорошо работала с библиотеками на С, которые за бутерброд в обед могли написать прожженные программисты прошлых поколений или студенты за ночь. Главное было не давать им работать творчески с памятью... Память терялась на скучной бизнес-логике куда и влезала жава, а драйвера были довольно стабильные.

А теперь есть и аппараты на полноценном ведроиде, где на Java реализована и работа с шифрованием, пин-падом и этим всем.

Если кому-то интересно, могу написать про разработку под Verifone ?

Можно, конечно. Я определённо такое оценю.
С ними тоже доводилось дело иметь. Но софт не могу дать.
Кстати, а про какую их платформу хотите написать? Tranz/Omni/Verix-3/Verix V/Verix eVo/Engage?

Я участвовал в разработке ADK и EOS слоев под VerixV, ADK и платформы под V/OS1 (Trident), ADK и платформы под V/OS2 (Raptor, он же Engage в коммерческих материалах) и платформы VAOS (Android based).

Интересно будет про это почитать.

Очень интересные материалы в статье, с удовольствием прочла . Сейчас работаю во французской компании Preludd . Платёжные системы . И наш основной клиент - Ingenico монополист-производитель платёжных терминалов во Франции. Переведу статью коллегам на французский , если автор не возражает ( авторство укажу ).

С учётом того, что я сам хорошо знаю французский, буду только рад потом прочитать, что у вас получится.

Здорово , постараюсь вас не разочаровать

Не слышал про Preludd, а что за компания и чем занимается?

Это платформа сервис ( PasS) по обработке платежей в облаках Амазона , Preludd Payement System. Офис в Тулузе.

Круто. Прям ностальгия нахлынула, как софт под эти ingenico будучи студентом писал.

Тогда новое поколение 32битных Ingenico типа 5100 был прорыв. В предыдущем нужно было память по 32k страницы вручную переключать, а тут пиши как хочешь, не экономя каждый байт.

И быстрее они были, помню операция rsa подписи почти без задержки впечатлила.

Интересно.
Насколько я помню, старые терминалы Ingenico (ещё до Unicapt32) работали на процессоре 186.

Помню, begoon в своём посте про OMNI-395 упоминал, что на тот момент Ingenico в удобстве разработки сильно отставали.

Про процессор я не помню, но может и 186, или 8088, явно младше 286. Про OMNI не скажу, но на Ingenico основным средством отладки у меня была печать на чеке. В теории была возможность запускать эмулятор и делать полноценную отладку на компьютере, но после пары случаев с различным поведением в эмуляторе и железе, все эти попытки прекращались.

И с документацией был швах. Мне вместо нее дали контакты индуса из Парижа, которого я сильно доставал своим ужасным английским первое время.

Еще одна фишка, которая появилась в 32битных igenico - это удобная закладка кассовой ленты. Катушку можно было просто положить и закрыть, а в предыдуших нужно было в щель бумагу просовывать и прокручивать валик.

а в предыдуших нужно было в щель бумагу просовывать и прокручивать валик.

На Nurit'ах точно так же было.

больше десяти лет назад писал софт (с нуля и до прода) для терминалов в финке (белые квадратики). Писалось все на чистой Java 5 с вменяемым SDK. И стандартная жавовая многопоточность была, и ввод-вывод с файлами и сетью, только GUI был не стандартной библиотеки ну и всякие подписи транзакций с взаимодействием с contactless и проверкой чипов в SDK вендора. Писали в IntelliJ Idea и с junit тестами на локальных машинах. Вроде даже дебажить можно было на терминале, но не уверен. Рядом сидели С-шники с VeriFone и плакали. Мы выкатывали фичи с такой скоростью, что эти терминалы поставили везде и старые выкинули, оставив только, наверное, в метро да в полиции. Ну, пару лет спустя верифон компанию и купил - меня там уже не было... Так что все эти ужасы разработки инжеников и верифонов - мазохизм и жадность владельцев бизнеса.

А что за терминалы были? Какой модели?

Терминалы YOMANI, сейчас они YOMANI VeriFone, а тогда делали их, вроде, датчане. Конкретную модель не помню, у нас были первые модели без contactless, а модели с contactless прикручивали уже после релиза на рынок. До этого была у них (производителей) линейка Xenta, где был свой форк Java 1.3, если помню правильно - там SDK был поуродливее, но и было это лет на пять-семь раньше. Их и сейчас можно встретить иногда (широкое распространиение получили в Нидерландах) - тоже кубик, только более икея-дизайн и число-цифровой дисплей.

Что-то типа такого?

ага, оно.

О как.
Вообще, VeriFone много компаний поглотила. Hypercom, Lipman, Dione сходу вспоминаются…

Вот бы пин-пады типа Ingenico ipp220 научиться использовать...

Цель какая? Просто научиться или использовать в реальном проекте?

Для личных целей: использовать корпус, экран и клавиатуру в электронных "поделках".

Это будет возможно только если полностью поменять начинку (в смысле проца).

Подключить это по USB не удастся. Для общения с хостом там используется криптография на основе RSA, а сертификат свой прописать не удастся.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий