Многие из нас хоть раз читали, как происходит обработка банковских операций. И все мы знаем, что незашифрованный PIN не уходит никуда дальше пин-пада. А вот о том, как именно это реализовано, информации традиционно маловато.
Итак, в ходе данной статьи поговорим о пин-падах. Узнаем, как они устроены, какой защитой обладают. На примере реального девайса рассмотрим управление им. Как обычно, будет много интересного.
❯ Суть такова
В комментариях к моему посту про магнитные карты многие заинтересовались именно процессом обработки транзакций. Так что решил написать и про это, тем более, что тема работы подобных устройств меня интересовала давно.
POS-terminal'ы наподобие VeriFone Tranz или VeriFone OMNI давным-давно ушли в историю. Абсолютное большинство платёжных терминалов ныне оснащается устройством для ввода и шифрования ПИН (в большинстве случаев он вообще встроенный).
Итак, пин-пад (PIN Entry Device) представляет собой устройство, имеющее защищённое хранилище ключей (как это реализовано, поговорим чуть позже), позволяющее пользователю ввести ПИН и вернуть его зашифрованное значение. Для использования в банковской сфере они проходят сертификацию PCI PED (Payment Card Industry PIN Entry Device). Пин-пад может быть как внешним, выполненным в виде отдельного устройства, так и встроенным, реализованным схемотехникой терминала.
Отдельно идут так называемые интеллектуальные пин-пады, представляющие собой практически полноценные POS-terminal'ы, адаптированные для управления с кассового компьютера.
❯ Обзор оборудования
В качестве основной железки, что будет фигурировать в этой статье, был взят VeriFone PINpad 1000SE (он же просто PP1000SE). Модель достаточно старая, после вывода из эксплуатации терминалов без поддержки бесконтактной оплаты (CTLS) встречается чуть реже, чем нигде, хотя в лучшие времена стояли практически повсеместно. Почему именно он? Всё дело в том, что платёжные терминалы и банковская сфера в принципе — весьма закрытая область. И найти какой-либо софт, документацию, а уж тем более средства разработки крайне проблематично. Чего не скажешь о нашем девайсе, нужная информация для которого отыскалась без каких-либо проблем.
Собственно, вот так он выглядит. Думаю, многие из вас его даже вспомнят. На передней панели у него дисплей (графический, но используется только в текстовом режиме, причём вмещается на дисплей всего восемь символов), кнопки для ввода ПИН, отмены, корректировки и подтверждения, а также
С обратной стороны наклейка с названием модели, резиновые ножки, отверстие пищалки, а также закладная для крепления на стойку. Ну и разъём типа 4P4C для подключения кабеля.
Распиновка этого разъёма приведена в документации. Она здесь вот такая.
Разбираем. Электроника закрыта защитной пластиной. Также видна давно сдохшая батарейка типа CR2450. Её надо заменить на новую, иначе при подаче питания пин-пад не будет подавать никаких признаков жизни.
Снимем защитную пластину. Отчётливо видны некий проприетарный чип, парочка микросхем от ST и Cypress, немножко дискретной логики. Этим самым проприетарным чипом выступает либо что-то заказное, либо микросхемы общего назначения, на которые вместо обычной ещё на заводе нанесена маркировка компании. В старых экземплярах таких компонентов не было, чаще всего использовались Z80/MC68000 с соответствующей обвязкой.
Сами ключи обычно хранятся в SRAM, так что при разряде батарейки они тоже исчезнут вместе со всеми параметрами.
Открутим плату. Дисплей графический, без маркировки. Отодрать его от пластмассового крепления у меня не вышло, побоялся его сломать.
❯ Методы защиты
Итак, как мы помним, пин-пад должен обладать защищённым хранилищем ключей. В частности, это значит, что при попытке получения доступа ключи будут необратимо стёрты. Для этого используются специальные механизмы защиты от вскрытия (anti-tampering systems). Помимо систем контроля используются и различные конструктивные решения, усложняющие неразрушающую разборку устройства или вообще делающие её невозможной. Продемонстрируем, как они выглядят.
Рассмотрим ту самую пластину, закрывающую электронику. Это не просто кусок текстолита. Внутри него по всей его площади проходит тоненькая дорожка-змейка. При попытке просверлить или проковырять в ней отверстие цепь разомкнётся, и контур безопасности окажется разорван. Пластина соединена с платой при помощи кусочков анизотропной резины, аналогичной той, что используется для подключения к контактам на плате сегментных ЖКИ.
Помимо пластин существуют и рамки. обеспечивающие контроль связанности между собой двух плат. Вот для примера такая рамка в пин-паде VeriFone SC5000. По её периметру наклеен шлейфик, подключённый к плате при помощи всё той же резинки. Также контролируется и плотность прижатия плат — для этого стоит ещё один кусочек контактной резины, соединяющий непосредственно платы.
А вот ещё один пин-пад, Ingenico 3050. Отчётливо виден приклеенный на обратной стороне крышки шлейф с той самой дорожкой-змейкой.
Ну и не стоит забывать про банальные концевики. Здесь они представлены в виде резиновых кнопок, прижимаемых частями корпуса. Одна из них находится прямо среди защитной пластины, ещё четыре — со стороны клавиатуры. Тут тоже всё не так просто: вокруг каждой площадки есть ещё и кольцевой контакт, соединённый с землёй (обратите внимание, что обычные кнопки таким не оснащены). Если злоумышленник попытается подсунуть фольгу или впрыснуть токопроводящую жидкость, контур безопасности окажется закорочен на землю, что, разумеется, будет немедленно воспринято как взлом.
В старых пин-падах для этих целей использовались тактовые кнопки и микропереключатели.
К методам защиты также относится и заливка смолой. Ныне в POS-terminal'ах такое встречается редко, а вот клавиатуры банкоматов всё также частенько заливают. Иногда вместо полной упаковки устройства в единый монолит из эпоксидки её просто наливают сверху на плату (по форме или просто каплей), защищая отдельные её участки.
Вернёмся к нашему Ingenico 3050. Поверх материнской платы припаяна ещё одна вверх ногами, на которой и находятся управляющие чипы. Из-за такой конструкции демонтировать этот узел без отрыва дорожек или перегрева микросхем не так-то просто, особенно с учётом того, что помимо пайки он ещё и приклеен.
А вот POS-terminal Ingenico 5100. У него процессор и его обвязка находятся внутри единого монолита из смолы. Наружу торчат только контакты для подключения.
Пин-пад от банкомата. Тут используется комбинированная защита — плата, помещённая в контур безопасности, залитая поверх смолой.
Более новый пин-пад, EPPV6. Отчётливо видны отсеки в корпусе, залитые смолой, а заодно и отверстие, куда она заливалась. Заклеенное наклейкой „Kill EPP“ отверстие — кнопка самоуничтожения (при нажатии ключи стираются, а устройство блокируется), нажимаемая при выводе экземпляра из эксплуатации.
Помимо аппаратных существуют и программные методы защиты: защищённые загрузчики, шифрованные прошивки, подписывание ПО.
❯ Первое включение
Итак, батарейку припаяли, можно пробовать подключать. Для удобства я спаял переходник, к которому пин-пад подключается при помощи обычного витого кабеля с разъёмами 4P4C на концах от трубки стационарного телефона.
Подаём питание. Пин-пад должен будет пискнуть и написать нечто вроде „Tampered device“ (ну, или не написать, если батарейка дожила до наших дней и вам не пришлось её менять). Жмём несколько раз „Cancel“ и попадаем в рабочий режим. Если туда загружена какая-нибудь строка, он выведет её, если же нет, то на экране появится бегущая стрелка.
Нажмём комбинацию клавиш „Cancel“+»2", наберём пароль 844747746 и попадём в сервисное меню. Список пунктов там такой:
- P.C MEM TST — тест NVRAM (с её полным стиранием)
- INIT MKEY RAM — удаление ключей
- LANGUAGES — ну, это ясно, что такое
- DSP ALL MSG — режим отображения сообщений
- SET BAUD RATE — скорость порта
- SET KEY MGT — режим организации ключей
- SET PP MODE — режим работы пин-пада (Nurit/VeriFone)
- OS ACCESS — выход в Nurit OS (NOS)
Выбирать нужно нажатием цифровой клавиши с соответствующим номером.
Также есть комбинация «Cancel»+«3» с паролем 83746, но ничего интересного для нас там нет.
❯ Что с экраном?
Вы спросите: а почему же графический экран используется столь нерационально? Не лучше ли было разработчикам поставить сегментный дисплей?
Всё очень просто. Существовала ещё и «узкая» версия PP1000SE, более старая. Там стоит сегментный экран, а также отсутствуют два последних пунктам меню. В лучшие времена VeriFone приобрела израильскую компанию Lipman Electronics Engineering, выпускавшую терминалы Nurit. Соответственно, часть её наработок и была использована в PP1000SE второй версии. А ради совместимости с первой и были введены подобные меры.
«Широкий» PP1000SE можно переключить в режим Nurit (если что, для выхода оттуда надо нажать сначала на среднюю фиолетовую кнопку, а затем на «2», пароль тот же самый), на нём же можно выйти в Nurit OS, выбрав последний пункт меню, после чего зажав клавиши «3»+«5»+«7».
А вот антикварный пин-пад PP1000+. По системе команд он аналогичен PP1000SE. Внутри, кстати, как раз видна смола.
❯ Управляющие пакеты
PP1000SE управляется пакетами данных. Началом служит символ «SI» или «STX», концом — «SO» или «ETX». Какой из двух выбрать, указано в таблице формата каждого пакета в мануале.
После пакета данных идёт контрольное значение — последовательный XOR всех байт пакета, за исключением начального.
uint8_t BCC(string data) {
uint8_t temp = data[1];
for(int i = 2; i < data.length(); i++) temp ^= data[i];
return temp;
}
Если контрольная сумма соответствует, пин-пад присылает в ответ байт «ACK», если нет — «NAK». После трёх несоответствий подряд отправляется «EOT».
Также стоит отметить параметры порта — 7 data bits, even parity. Скорость задаётся в том самом меню.
❯ Выводим текст на экран
На примере вывода текста рассмотрим отправку пакета.
void showString(string s) {
uint8_t data = 0;
string input = "";
input += STX;
input += "Z2";
input += 0x1A;
input += s;
input += ETX;
input += BCC(input);
WriteStringCOM(input);
while(!ReadCOM(data));;
if(data != 0x06) cout << "error" << endl;
else cout << "success";
}
Итак, для вывода текста служит пакет типа Z2. Вначале к строке добавляется символ «STX» (для удобства коды всех этих символов я указал в начале программы через define), потом, код пакета «Z2», далее символ «SUB», служащий для очистки экрана, сама строка для вывода, символ «ETX». Рассчитывается и также добавляется контрольное число.
Итак, пробуем:
#include <iostream>
#include <windows.h>
using namespace std;
#define STX 0x02
#define ETX 0x03
#define SI 0x0F
#define SO 0x0E
#define ACK 0x06
#define EOT 0x04
#define NAK 0x15
HANDLE hSerial;
uint8_t openPort(int portNumber) {
char sPortName[10];
sprintf (sPortName, "COM%i", portNumber);
hSerial = ::CreateFile(sPortName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
DCB dcbSerialParams = { 0 };
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if(!GetCommState(hSerial, &dcbSerialParams)){
cout << "getting state error\n";
exit(0);
}
dcbSerialParams.BaudRate = CBR_1200;
dcbSerialParams.ByteSize = 7;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = EVENPARITY;
if(!SetCommState(hSerial, &dcbSerialParams)){
cout << "error setting serial port state\n";
exit(0);
}
cout << "Opened port: " << sPortName << endl;
return 1;
}
uint8_t ReadCOM(uint8_t & sReceivedByte) {
DWORD iSize;
ReadFile(hSerial, &sReceivedByte, 1, &iSize, 0); // получаем 1 байт
return iSize;
}
DWORD WriteCOM(uint8_t data) {
DWORD dwBytesWritten; // тут будет количество собственно переданных байт
DWORD dwSize = 1;
WriteFile(hSerial, &data, dwSize, &dwBytesWritten, NULL);
return dwBytesWritten;
}
void WriteStringCOM(string data) {
for(int i = 0; i < data.length(); i++) WriteCOM(data[i]);
}
uint8_t BCC(string data) {
char temp = data[1];
for(int i = 2; i < data.length(); i++) temp ^= data[i];
return temp;
}
void showString(string s) {
uint8_t data = 0;
string input = "";
input += STX;
input += "Z2";
input += 0x1A;
input += s;
input += ETX;
input += BCC(input);
WriteStringCOM(input);
while(!ReadCOM(data));;
if(data != 0x06) cout << "error" << endl;
else cout << "success";
}
int main()
{
openPort(4);
showString("HABR.COM");
return 0;
}
Запускаем, и, если всё было подключено правильно, на дисплее должно будет появиться примерно следующее:
Разумеется, на «узком» пин-паде это тоже работает:
❯ Ключи
Ну что же, время перейти к самому главному — к тому, как именно производится шифрование. В большинстве пин-падов используется алгоритм 3DES. Ранее использовался простой DES, но ныне его почти нигде не встретишь.
Итак, в терминальном ПО можно встретить в основном три вида ключей: PIN, MAC и KLK. Первый из этого списка — ключ непосредственно для шифрования PIN. Второй — ключ Message Authentication Code, позволяющий отслеживать подлинность отправляемых пакетов данных. Третий — Key Loading Key, ключ для загрузки ключей, позволяющий для большей безопасности загружать уже зашифрованные ключи. Из всех трёх нам больше всего интересен ключ PIN.
❯ Организация ключей
Существует два метода работы с ключами — Master/Session и DUKPT. В настоящее время используется преимущественно второй вариант.
Master/Session — уже достаточно старый метод. Принцип его работы такой: внутри пин-пада в защищённом хранилище находится мастер-ключ. Терминал содержит в своей памяти рабочий (сессионный) ключ, зашифрованный мастер-ключом. При необходимости что-либо зашифровать, терминал отправляет пин-паду этот рабочий ключ, где он расшифровывается мастер-ключом. Назад возвращается зашифрованный блок данных. При этом ни мастер-ключ, ни расшифрованный рабочий не покидают пределов пин-пада.
DUKPT — более совершенный вариант. Суть его в том, что, при помощи BDK (Base Derivation Key) генерируются IPEK (Initial PIN Encryption Key) и KSN (Key Serial Number), которые и загружаются в пин-пад. На базе IPEK выпускаются ключи, уже используемые в процессе шифрования.
При каждой операции шифрования KSN увеличивается на единицу, а пин-пад возвращает зашифрованный блок данных и новое значение KSN.
В данном примере рассмотрим метод Master/Session как наиболее простой в реализации.
❯ Загружаем ключ
Итак, для загрузки ключей в пин-пад существует пакет «02». Далее требуется указать номер ячейки, куда будет загружен ключ, и, собственно, сам ключ.
void setMKEY() {
string input = "";
uint8_t data = 0;
input += SI;
input += "02";
input += "0";
input += "0123456789ABCDEF";
input += SO;
input += BCC(input);
WriteStringCOM(input);
for(int i = 0; i < 6; i++) {
while(!ReadCOM(data));;
printf("%02X ",data);
}
WriteCOM(0x06);
while(!ReadCOM(data));;
printf("%02X ",data);
}
Для примера я загружу туда ключ 0123456789ABCDEF. Этот пакет несколько отличается по формату: после ответа пин-пада надо отправить «ACK», иначе ключ забит не будет.
После загрузки ключа также пропадёт сообщение «Tampered device».
❯ PIN-block
Разумеется, пин-пад шифрует не просто PIN, а PIN-block — специальный пакет данных. Чаще всего используют ISO 9564 Format 0, являющийся результатом операции XOR данных PAN и PIN.
❯ Запрашиваем PIN
Ну что, время попробовать прочитать PIN.
Для начала подготовим входные данные. PAN возьмём всё тот же, что был в посте про магнитные карты — 4034351574462072. Рабочим ключом пусть будет 0123456789012345. Зашифруем его с помощью ранее заданного мастер-ключа, получив при этом значение 59216EC9E36F8EF8.
ПИНом будет банальный 1234. На основе PAN и PIN рассчитаем PIN-block: 041277AEA8BB9DF8.
Пишем очередную прогу. Вначале необходимо выбрать мастер-ключ, для чего отправляем пакет с кодом 08. После отправки запроса на ввод пин-пад запрашивает PIN, после чего отправляет зашифрованный PIN-block. В это время на дисплее крутятся надписи «PROCESSING» и «PIN PAD», которые будут оставаться там до нажатия кнопки «Cancel» или прихода нового пакета. После получения PIN-block отправим пакет «Indicate host done» (с кодом Q2), который выведет на экран пин-пада сообщение «Thank you».
Функции в итоге получились вот такие:
void selectMKEY() {
string input = "";
input += SI;
input += "08";
input += "0"; //номер ячейки ключа
input += SO;
input += BCC(input);
WriteStringCOM(input);
}
void requestPINEntry() {
uint8_t data = 0;
string input = "";
input += STX;
input += "70";
input += 0x2E;
input += "4034351574462072"; //PAN
input += 0x1C;
input += "59216EC9E36F8EF8"; //рабочий ключ
input += "9.99"; //сумма к оплате для отображения на дисплее
input += ETX;
input += BCC(input);
WriteStringCOM(input);
for(int i = 0; i < 11; i++) {
while(!ReadCOM(data));;
printf("%02X ",data);
}
for(int i = 0; i < 16; i++) {
while(!ReadCOM(data));;
cout << data; //вывод самого PIN-block
}
cout << ' ';
for(int i = 0; i < 2; i++) {
while(!ReadCOM(data));;
printf("%02X ",data);
}
WriteCOM(0x06);
Sleep(1000);
indicateHostDone();
}
void indicateHostDone() {
string input = "";
input += STX;
input += "Q2";
input += ETX;
input += BCC(input);
WriteStringCOM(input);
}
Запускаем. Вводим наш ПИН — 1234. Пин-пад в ответ присылает нам PIN-block 5DCB16E4555C6B1A. Расшифровываем его с помощью нашего незашифрованного рабочего ключа и получаем наше расчётное значение 041277AEA8BB9DF8.
Оно живое, оно работает!
❯ Немного о Contactless
Также мне довелось раздобыть PP1000SE CTLS. От обычного он отличается слотом для SAM-модуля и наличием бесконтактного считывателя. Увы, никаких команд касательно считывания карты найти мне так и не удалось…
А вот и такой экземпляр в работе, фото сделано в Греции летом две тысячи двадцать первого года:
❯ Так что в итоге?
Вот мы и рассмотрели ещё одну составляющую обработки пластиковых карт. Попутно продемонстрировали, как запустить такие устройства в «лабораторных» условиях.
Определённо уверен, что все эти материалы кому-нибудь понравятся, тем более, что такого описания подобного оборудования почти никто не делал.
Ссылки
- Payment Card Tools
- PP1000SE Reference and Programmers Guide
- Как расшифровать данные магнитной дорожки с использованием DUKPT
Комментарии (51)
Z2K
10.12.2022 13:28-9С повсеместым использованием онлайн платежей вся эта аппаратная лабуда канет в лету. И в рознице все эти пос-терминалы, и т.д. Уже полно сервисов приема платежей через программый интерфейс на смартфоне. Просто человеческая инерционность не позволяет внедрить новые технологии оперативно. Само слово "внедрить" что собой представляет - оно предполагает сопротивление изменению состояния. Но это случится. А сколько труда, знаний, денег вложено в этот сегмент. И снова в утиль, как паровозы. Но что поделать время пентиум прошло. :(
Sunrise55g
10.12.2022 15:13+5По-моему, должна остаться только наличка и блокчейн-валюты. Которые невозможно ни отнять, ни отследить, ни адресно заблокировать конкретного человека. А современная банковская система себя полностью дискредитировала, потому что в ней Ваши деньги на самом деле не Ваши - Вам только позволяют ими иногда пользоваться.
pavel_raskin
10.12.2022 15:29+10Я бы тогда и наличке не сильно доверял. Достаточно вспомнить всякие реформы/замены денежных знаков, или, например, историю с красными печатями на долларах.
staticmain
10.12.2022 16:49+11А что, можно доверять крипте? Которая за день теряет 40% стоимости, обменные биржи просто закрываются а держатели бегут в неизвестном направлении с чемоданами денег.
ktod
10.12.2022 19:39+4Я, например, отлично помню, как рубль терял "40% за день", а то и поболее 40%. И не один такой день помню.
pavel_raskin
10.12.2022 20:21В том виде в каком они есть сейчас я с Вами полностью согласен. Ценна не конкретная цифровая денежная единица, а возможность распределённости и независимости, при которых ни у кого не должно быть абсолютного влияния на систему "валюты". Подобное свойство было (есть?) у золота, но физический эквивалент ценности в век цифровых технологий, мягко говоря, не очень удобен. Ну а что до закрывающихся бирж, то передайте привет Лёне Голубкову :)
0x131315
11.12.2022 17:36+2Не, материальные эквиваленты это пройденный этап. Сами по себе они ограничивают экономику, тормозят развитие, и порождают серьезные риски. Но и бесконтрольные пузыри тоже такое себе, это чистый узаконенный грабеж. Нужно что-то промежуточное, что-то, что косвенно зависит от материальных благ, т.к. в конце концов на эти блага оно и будет обмениваться простыми людьми, и в тоже время в некоторой степени резиновое, чтобы не сдерживать развитие.
В идеале конечно было бы здорово вывести некий промежуточный индекс, который учитывает стоимость всего материального, на что можно обменять валюту: топливо, металлы, хлеб в конце концов. А к нему уже и привязывать валюту с неким динамическим коэффициентом, чтобы была возможность, когда требуется, корректировать объем обменов внутри экономики. Но толку от универсальной системы немного, если ее будут использовать для спекуляций. А ее будут использовать - соблазн слишком велик, чтобы удержаться. И в итоге опять все придет к пузырям. Гордиев узел.
Цифровая валюта хотя бы показала важное преимущество в текущей ситуации: она не подконтрольна, и позволяет обмен p2p в обход любых ограничений. Толку от фантиков, которые по желанию левой пятки какого-либо чиновника, превращаются в простую бумагу, просто нет. В таких ситуациях остаётся только бартер, ну а сейчас еще и цифровой бартер стал доступен. Это ломает границы: простой обыватель всегда может выменять цифровую валюту, и что-то купить на другом конце шарика, а продавец в свою очередь обменяет эту цифровую валюту на что-то нужное ему уже у другого человека. В этом плане мгновенный курс цифровой валюты потребителю не особо важен, т.к. вся сделка проходит за короткое время, и курс не успевает существенно поменяться, но какие-то риски конечно все равно остаются.
PuerteMuerte
11.12.2022 19:11+2Цифровая валюта хотя бы показала важное преимущество в текущей ситуации: она не подконтрольна, и позволяет обмен p2p в обход любых ограничений
Справедливости ради, этим преимуществом она не обладает в полной мере. Вы можете делать обмен p2p в обход любых ограничений только потому, что чиновники это вам ещё пока не запретили. Как только соответствующая пятка у кого-то зачешется, вы-то перебрасывать цифирьки между счетами по-прежнему сможете, а вот менять их на какие-то материальные блага - уже нет. И толку вам будет от тех цифирек?
inkelyad
11.12.2022 19:31+1а вот менять их на какие-то материальные блага - уже нет.
Самое главное - ими нельзя будет (собственно, и сейчас нельзя, потому это и не деньги/валюта) заплатить налоги.
Tarakanator
12.12.2022 12:32+1А какое отношение имеет надёжность обменной биржи к надёжности крипты?
А то логика примерно такая: я сделал вклад в банк, банк прогорел, следовательно *** ненадёжная валюта.PuerteMuerte
12.12.2022 12:48Как ни странно, непосредственное - прогорание очередного банка, как правило, не приводит к обвалу курса доллара.
skozharinov
12.12.2022 13:07+1Если прогорит J.P. Morgan, скорее всего, приведёт.
PuerteMuerte
12.12.2022 15:11Ну вон прогорел Lehman Brothers в своё время, практически такой же по размеру. Курс доллара не рухнул.
PuerteMuerte
10.12.2022 17:59+8Достаточно вспомнить всякие реформы/замены денежных знаков
По-моему, за десятилетие существования крипты там финансовых катастроф глобального масштаба было чуть ли не больше, чем с долларом с начала ХХ века.
pavel_raskin
10.12.2022 20:25+1С любой молодой технологией на начальном этапе есть риски. Ну и "катастрофы" устраивали и продолжают устраивать спекулянты всех мастей, причём тут криптовалюты сами по себе?
PuerteMuerte
11.12.2022 01:03+2Последняя катастрофа произошла совсем недавно. Но я не могу назвать криптовалюты "молодой технологией". В мире ИТ и финтеха десять лет - это достаточный возраст для зрелости.
продолжают устраивать спекулянты всех мастей, причём тут криптовалюты сами по себе?
Как минимум в том, что криптовалюты позволяют спекулянтам всех мастей это делать. В традиционном трейдинге от опасных крупных спекуляций, шатающих рынок, давно выработаны механизмы защиты. В криптовалютном мире отсутствие регулирования заявляется как чуть ли не главное его преимущество. Но при этом забывается упомянуть, что это ещё и главный недостаток, спасающий пользователя от нехороших действий государства, одновременно делая его беззащитным от нехороших действий крупных частных игроков рынка, которые по своей сути куда более опасны, чем любые государства.
pavel_raskin
11.12.2022 10:38Наличные валюты тоже можно у спекулянтов и мошенников всех мастей менять/покупать/переводить, и что? Да, это пытаются регулировать, но до сих пор есть наивные люди, которые несут им свои сбережения и всё теряют. Нужно перестать доверять налу/безналу на этом фоне?
PuerteMuerte
11.12.2022 16:34+1Давайте не будем ставить в один ряд систему, в которой опасность несут лишь граничные криминальные случаи, и систему, в которой царит анархия by design :) Думаю, вполне очевидно, что в первом случае у вас есть риск потерять свои деньги только при пренебрежении общими правилами безопасности, а во втором случае у вас есть риск потерять деньги просто так, при любой покупке. Потому что механизма контроля выполнения сделки нет, гарантов сделки нет, механизмов возврата нет, продавцы анонимны, а все разговоры про арбитров/смартконтракты, которые якобы решают эти проблемы - досужая болтовня, потому что за семь лет существования потенциальной возможности это никак не реализовано на практике, кроме единичных экспериментов, и так оно там и останется в обозримом будущем.
И вишенка на торте - ценность денег на вашем криптокошельке определяется не монетарной политикой национального банка вашей страны, задача которого состоит в поддержке оптимального курса для экономики, а группой крупных биржевых игроков, задача которых состоит исключительно в зарабатывании денег, а зарабатывать его можно и на медвежьем тренде.
0x131315
11.12.2022 17:48Но зато это хоть какая-то свободная альтернатива финансовой системе, причем доступная каждому - в этом и есть ее ценность. А что касается гарантий - их нет, все исключительно на доверии и репутации. И так тоже можно жить. На самом деле это мало чем отличается от положения в традиционной финансовой системе - там тоже в основном доверие и репутация, договора особо ничего не решают, практика показывает что про них легко забывают при любом удобном поводе.
Когда традиционная финансовая система не способна удовлетворить твои потребности из-за своих заскорузлых ограничений, или из-за того что трещит по швам, как сейчас, тогда и обращаются к альтернативам. И ценно то, что эти альтернативы вообще существуют. Потому что в ином случае пришлось бы возить наличку/товары, что довольно непростое предприятие. Всего 20 лет назад альтернатив особо и не было.
Естественно текущие цифровые валюты скорее proof of concept, у них много детских болезней, и не смотря на это они уже работают и приносят пользу людям. Им на смену рано или поздно должно прийти что-то более удобное, с учётом всего того опыта, который нарабатывается сейчас.
PuerteMuerte
11.12.2022 19:14+1Но зато это хоть какая-то свободная альтернатива финансовой системе, причем доступная каждому - в этом и есть ее ценность.
Согласен, как альтернативное решение - почему бы и нет.
А что касается гарантий - их нет, все исключительно на доверии и репутации. И так тоже можно жить.
Мировой опыт торговли ценными активами показывает, что так жить можно, но не слишком долго. Все эти регуляторные механизмы в традиционном трейдинге, они возникли не по чьей-то блажи, или как желание государства подмять под себя торговлю. Их раньше не было, а появлялись они постепенно как средства защиты от тех или иных реализовавшихся рисков/проблем/кризисов. У крипты, если она как-то будет развиваться и популяризоваться по своему изначальному назначению как платежное средство, а не как дутый ценный актив для спекуляций, появятся такие же в обозримом будущем, и станет она ещё одной платёжной системой.
achekalin
11.12.2022 02:53+2Бывает, что все счета человека наложка заблокирует (а какие у человека счета есть - они таки знают), а банки заблокируют их как получится (та же Альфа блочит сразу, но и разблокирует сразу как их наложки приходит отмашка, а, напр., Банк Санкт-Петербург - блочит не сразу, а разблокирует вообще после того, как юзер справку от наложки руками/ногами принесет, потому что не осилили настроить ЭДО с надожкой!!!) - и сразу понимаешь, что деньги должны как-то в оффлайне быть, хотя бы частично.
Крипта, конечно, тоже метод, но у него свои, уникальные, риски.
nixtonixto
11.12.2022 09:13+1Я бы тогда и наличке не сильно доверял. Достаточно вспомнить всякие реформы/замены денежных знаков
В случае такой реформы ваши безналичные деньги сгорели — как вклады СССР, потому что у вас даже доступа к ним «временно» не будет. В отличие от налички, которую можно попытаться спасти, скупая не успевшие подорожать товары, или обменивая на валюту, которая уже дороже, чем вчера, но ещё дешевле, чем завтра.pavel_raskin
11.12.2022 10:30Сегодня вам объявили, что со вчера бумажки "вот с такими портретами" больше не действуют. Попробуйте купить на них что-нибудь, или обменять на правильные бумажки :) Так что всё в золотые слитки!
nixtonixto
11.12.2022 10:45Белорусы предпочитают зелёные бумажки — они и через 50 лет будут законным платёжным средством. Золото слишком волатильно и у него слишком большой спред, чтобы было выгодно хранить в нём сбережения.
alexxz
12.12.2022 10:23А что за история с красными печатями? Гугл мне не подсказал 8-/
pavel_raskin
12.12.2022 10:59Простите, я допустил неточность про красные печати. Речь о гавайской модификации долларов во время второй мировой: https://ru.wikipedia.org/wiki/Гавайская_надпечатка_на_долларах_США
geher
10.12.2022 16:48+4По-моему, должна остаться только наличка и блокчейн-валюты. Которые
невозможно ни отнять, ни отследить, ни адресно заблокировать конкретного
человека.Блокчейн валюты очень даже можно отнять. Вы заплатили - и ваши деньги ушли. А то, за что заплатили, не пришло. И нет возможности доказать, что не верблюд. наличие арбитража либо позволяет отследить, либо упирается в доверие к арбитру, который тоже может уйти в закат с товаром и деньгами.
С отслеживанием тоже не все так просто. Если покупается физический товар, то отследить можно по факту получения товара. Если получаете зарплату не за удаленку, то отследить можно через работодателя.
А в системе, где большинство пользуется не непосредственно кошельком, а биржами, отличие пока явно не в пользу блокчейн валют.
Опять же, я полагаю, вы имели ввиду децентрализованные блокчейн валюты? В противном случае, блокчейн валюта, выпущенная каким-нибудь банком, не будет принципиально отличаться от обычных денег. Просто эти деньги будут еще и с блокчейном.
0x131315
11.12.2022 18:09Ну это мало чем отличается от того же али - там есть некий арбитраж, но он ничего не гарантирует. Любая сделка - риск: даже если продавец честно отправил товар, нет никаких гарантий что покупатель его вообще получит, в любом звене цепочки поставки товар может исчезнуть или превратиться в кирпич, в прямом и переносном смысле. И ничего, люди вполне себе успешно закупаются, потому что риски снижает система репутации и отзывов. Люди советуют друг другу проверенных продавцов, особенно за пределами площадки, на форумах, в чатиках, работает сарафанное радио. Перед покупкой изучают отзывы как о продавце, так и о товаре. Все это позволяет отсеять большинство мошенников.
Но если действует фактор срочности, приходится повышать ставки и брать непроверенное. Иногда и неудачно. И судя по отзывам, арбитраж тут в пользу покупателя выступает далеко не всегда, т.е. кто-то в любом случае теряет деньги.
Но если есть лишние деньги и хочется гарантий - тогда идешь к местному дилеру, где можно пощупать товар руками и убедиться что платишь не за кирпич. И даже в этом случае люди теряют деньги, не смотря на железные гарантии и белую сделку - им просто пишут что есть механические повреждения, и снимают с гарантии, и попробуй докажи что не верблюд. При своих не остаётся никто: даже если ты очень осторожен и хорошо подкован, как минимум время и нервы потратить придется, отстаивая свою правоту, а это порой обходится дороже потерь.
Так что все эти гарантии эфемерны: они снижают риски, но не исключают их, и в случае проблем свое получить возможно не всегда, и это очень непросто. Ровно тоже самое делает система репутации и отзывов в социальной среде, только в случае проблем свое получить вообще нет шансов.
geher
11.12.2022 21:55Так вопрос как раз в том, что современные децентрализованные криптовалюты решают только часть проблем существующих платежных систем (точнее даже одну - возможность осуществления платежа анонимно и без ограничений), создавая взамен много новых проблем. А попытка решить эти проблемы сводят на нет все преимущества. Собственно основные современные криптовалюты и современная государственно-банковская система - это два полюса: анонимность и бесправие с одной стороны и какой-никакой но вполне приличный арбитраж со всей властью арбитра над системой и ее пользователями с другой.
Арбитраж на Али -это промежуточный вариант с минимальными правами арбитра и соответствующим качеством.
PuerteMuerte
10.12.2022 18:02+3А современная банковская система себя полностью дискредитировала, потому что в ней Ваши деньги на самом деле не Ваши
Ну так банковская система распоряжается нашими деньгами не потому, что это какая-то обязаловка (в подавляющем большинстве случаев), а потому что нам удобнее делегировать техническое обслуживание наших платежей третьей стороне, и мы сами туда наши деньги заносим. Да, она не предоставляет 100% уровень защиты наших денег, но предоставляет, грубо говоря, 99.99% уровень защиты, который достаточен для подавляющего большинства пользователей.
skozharinov
11.12.2022 02:56не потому, что это какая-то обязаловка
Полно стран, где заплатить больше N тысяч валюты наличными нельзяPuerteMuerte
11.12.2022 03:23+1Да, я тоже в такой стране живу. Покупая квартиру, пришёл в банк, положил наличные деньги, перевёт покупателю, он через 5 минут забрал эти деньги, пожали руки и разошлись. Это не навязывание банковской системы, а контроль крупных доходов со стороны государства, который оно делегировало тем, кто этим умеет заниматься.
skozharinov
11.12.2022 03:53+3К банковской системе и AML с прочими контролями в частности было бы гораздо меньше претензий, если бы критерии их применимости были чётко описаны, на время разбирательств при срабатывании банк обеспечивал клиенту возможность пользоваться деньгами, а за ошибочные блокировки давал компенсацию в размере единиц процентов от годового оборота. Ну или просто не кошмарили клиентов KYC/AML и не сливали банковскую тайну любому желающему, включая государство, по первому запросу / без запросов вообще.
inkelyad
10.12.2022 16:08+5Наоборот, лучше бы вся эта аппаратная лабуда была в руках каждого человека. Ибо вставлять незаметных троянов в смартфон гораздо удобнее, чем в специально придуманное , узко специализированное, залитое в эпоксидку устройство, с со всех сторон обнюханным (и возможно, даже доказанным) софтом.
Вот то что это все такое закрытое и проприетарное - это надо исправлять.MaFrance351 Автор
10.12.2022 17:16+7IDTech, что выпускает интегрируемые бесконтактные считыватели (для торговых автоматов, банкоматов, транспортных валидаторов) и ряд другого оборудования (mPOS-terminal'ы, пин-пады, считыватели смарт-карт) в этом плане весьма преуспел. Всю документацию (включая формат пакетов данных, распиновку разъёмов...) и SDK без регистрации можно скачать на официальном сайте. Уже на шаг дальше от проприетарности...
grishkaa
11.12.2022 22:09+2Вот кстати. Про то, что пинпады и терминалы имеют кучу средств защиты, я и так знал, но посмотреть на практическую реализацию любопытно. Казалось бы, из этого следует очевидный вывод, что такие устройства должны делать одну вещь и делать её хорошо, с целью уменьшения attack surface. Устройства в статье и правда такие. Но — я уже несколько раз видел, правда в других странах, терминалы без физических кнопок, с сенсорным экраном и андроидом на нём. Пин-код вводится на этом же экране. Как? Неужели андроид достаточно безопасен, чтобы использовать его для таких целей? А, и в некоторых случаях этот терминал ещё и выполняет функцию кассового аппарата, т.е. в него забивают твои покупки и он печатает чек, даже когда платишь наличными.
MaFrance351 Автор
11.12.2022 22:22+2Да, бывают такие. PAX серии A, например, или Square Terminal. В Казахстане такие повсеместно (например, в Алма-Ате даже обычный VX520 уже не так часто можно встретить) стоят, местный Halyk Bank их обслуживает. Вроде даже та же VeriFone освоила выпуск таких POS-terminal'ов.
Но ведроид в процессе ввода и шифрования ПИН там не участвует. Внутри аппарата находится отдельный аппаратный криптографический модуль, который и обеспечивает все эти операции. Приложение просто производит запуск, этот блок перехватывает управление, а потом через системные вызовы передаёт результат. То есть ОС Android непосредственного доступа к этому всему не имеет.
Вот поподробнее про это всё:
grishkaa
12.12.2022 01:09+1Интересная деталь, что контроллер сенсорного экрана стоит в защищённой части. Получается, что во время ввода пин-кода андроид просто рисует кнопки на экране в нужных местах, а сами нажатия не обрабатывает.
LuigiVampa
13.12.2022 10:57Спасибо за статью. Очень доступно и интересно описано, часто этого очень не хватает технологиям связанным с проведением платежей.
Кстати, доводилось работать в компании, где я участвовал в написании софта для POS-терминалов, столбиков самообслуживания. Разумеется, там необходимо было организовать приём платежей по картам, поэтому компания закупала это оборудование и устанавливала его в наши столбики. Так вот пинпады (которые большие, как на банкоматах) нам присылали зажатыми с двух сторон толстыми скрепками для офисных документов, и говорили, что эти пинпады необходимо именно так хранить и транспортировать, а скрепки можно снять только непосредственно перед установкой и фиксацией в корпусе POS-терминала. Если физически открыть корпус такого пинпада, то сработает защита и ключи прописанные внутри затрутся, придётся везти пинпад на перепрошивку. Интересно, как это работает?
dlinyj
Очень интересно!!! Обычно вся эта тема покрыта тайной, а оказывается всё просто. Система защиты со сбросом sram достаточно типовая, но мне кажется легко обойти.
MaFrance351 Автор
По идее, да. Память же после отключения питания не теряет данные мгновенно. Возможно, что-то на базе этого можно придумать. Да и заливка смолой тоже не панацея, злоумышленник, разломав один "подопытный" экземпляр, уже будет иметь представление, где примерно ковырять. Кстати, насчёт EPP в банкоматах, слышал, что по нынешним стандартам их следует уничтожить, даже если они были просто откручены от корпуса.
Что-то вспомнился фрагмент из какого-то репортажа нулевых годов: "Например, производители. POS-terminal'ов устраивают микровзрыв, если кто-то пытается получить доступ к данным" (да, примерно в таком духе было написано. Но оригинал я не нашёл).
DmitriyN
Статическая во всех практических смыслах именно что теряет.
AndriAnoBoTS
скорость потери данных зависит от температуры. при понижении температуры время хранения заметно увеличивается. если не ошибаюсь при криогенных температурах (жидкий азот) измеряется минутами.
DmitriyN
Это верно только для динамической памяти. Статическая при потере питания ничего не хранит.
PuerteMuerte
Статическая память статической памяти рознь. Если классическая, на триггере на мосфетах, то не хранит. Но сейчас зоопарк их видов, под статической памятью вполне себе может скрываться динамическая с внутренней схемой дешифратора адреса и регенерации.
AndriAnoBoTS
https://en.m.wikipedia.org/wiki/Cold_boot_attack
По четвертой ссылке посмотрите
nixtonixto
Tamper работает иначе (объясню на примере STM32). По прерыванию от повреждения шлейфа сам контроллер стирает всю информацию, хранящуюся в запитанной от батарейки ОЗУ. Происходит это за микросекунды, поэтому обойти можно только механически — замыкая перемычками все разрываемые шлейфы, что не всегда осуществимо.
Про «микровзрыв» — наверное, это был некорректный перевод слова Flash — то есть при попытке вскрытия затирается флеш-память и устройство превращается в тыкву.
MaFrance351 Автор
Насчёт Flash — такое было у Hypercom. При включении, если обнаруживалось, что содержимое SRAM некорректно, Flash стиралась, а на экране появлялось «Security violation detected — Terminal will restart!».
SADKO
Можно, но зачем? Смысл-то просто в создании конфиденциального канала передачи.
Что-б нельзя было пин словить радиоприёмником. И это правильно.
...а в ход шли накладушки, камеры, микрофоны и чёрт знает что
dlinyj
Тут интересен факт обхода защиты, а не для чего.