EMC DPO: Как защитить свои товары от подделок

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

Знакомо? Что делать и кто виноват?
Доверие к производителю часов у вас начинает резко падать.
А разве виноват произоводитель часов, что его продукцию подделывают? Спорный вопрос, мне кажется. Так или иначе, очевидно, что контрафакт причиняет огромные репутационные потери и убытки легальным производителям.

Решением может быть использование продукта EMC DPO и блокчейна Emercoin.

Как это может работать:
Представим, вы приходите всё в тот же магазин дорогих часов, выбираете товар, но перед его покупкой видите на коробке QR-код с сопроводительной надписью что-то вроде «отсканируй меня, чтобы убедиться, что я не подделка». Вы сканируете QR-код, который отправляет вас на сайт производителя, где открывается, непосредственно, информация существует ли товар с таким серийным номером и был ли он ранее куплен кем-то другим:

d35d55bbf3194a15968115cd91e7f826.png

а, так же, краткое описание о товаре и его производителе:

9cc90711e97c48358f79ce351fa0e245.png

Так же, можно увидеть, что какой-то товар уже кто-то ранее купил и активировал (в этом случае, можно однозначно сделать вывод, что продаваемый товар в магазине либо уже был в употреблении, либо же подделка):

1204b6af70c0402eb2f5c69b2c6afee0.png

Итак, допустим, вы в магазине убедились, что товар не подделка и не был ранее в употреблении. Вы его приобретаете и приходите домой. Распаковываете и видите внутри коробки другой QR-код, скрытый за светонепроницаемой защитной пленкой с сопроводительной надписью что-то вроде «отсканируй меня для активации товара». Снимаете пленку, сканируете QR-код, нажимаете «Активировать товар»:

12fcfbae09a241f592bac26ec0547104.png

затем, вводите (по желанию) свое имя и отзыв к товару, а, так же, задаете пароль (с помощью которого вы позже сможете 1 раз изменить свой отзыв к товару):

219fc16347294c549fbd2f78379c5a9d.png

И, тогда, минут через 10, информация о покупке этого товара будет публично доступной как на сайте производителя, так и в блокчейне Emercoin, где его может просмотреть любой желающий:

{
  "name": "dpo:Your Company:DEMO-1001:0",
  "value": "Item=Name of your product\nDescription=The description of your product\nPhoto=http://www.blockchainengine.org/wp-content/uploads/2016/04/Smart4.png\nOTP=bb680a8bcae3e5be23f3c9ed4d3d0e97d42cebe561f53a5a7502e2d150a937fb\nOwner=Garrett\nSecret=3aff84a0afcd7201b112652b8692975bcfdeb0060de5efbdaeb16d806f62848d\nComment=Cool !\nUpdated=1",
  "txid": "ee1ed730e16c41c7a42b3b87bf5bd5936b2e69a6448f510e08dd70d40bf57c1e",
  "address": "ERGPQNKpmJNaXeaq6ZDYwgghQDMBQGVema",
  "expires_in": 255036,
  "expires_at": 471574,
  "time": 1488110346
}

Вы можете сказать: «Причем здесь блокчейн? Такое вполне можно сделать централизованно производителем товаров!». Да, действительно, можно. Но использование децентразизованного хранилища в виде блокчейна обеспечит полную прозрачность над действиями производителей. Так, у них не получится выпустить неучтенный «левый» товар — всё будет публично и открыто. Если для производителя важно быть открытым и честным — то это, однозначно, выбор в сторону решения EMC DPO на базе блокчейна Emercoin.

Развертывание EMC DPO на вашем сервере


В этом разделе мы рассмотрим как развернуть и настроить EMC DPO на вашем сервере с ОС Ubuntu 16.04 LTS (amd64). Но, так же, поддерживаются и другие ОС: Ubuntu 14.04 LTS (amd64), Debian 8 (amd64, armhf), RHEL/CentOS 7 (x86_64).

1. Установка службы Emercoind


Воспользуемся стандартными средствами для установки Emercoind:
apt-key adv --keyserver keyserver.ubuntu.com --recv B58C58F4
add-apt-repository 'deb http://download.emercoin.com/ubuntu xenial emercoin'
apt update && apt -y install emercoin

Убедимся, что emercoind установился, работает и начинает скачивать блокчейн:
emc getinfo

{
  "version": 60000,
  "protocolversion": 70002,
  "walletversion": 60000,
  "balance": 1.090000,
  "newmint": 0.000000,
  "stake": 0.000000,
  "blocks": 216541,
  "moneysupply": 39554119.651462,
  "timeoffset": 0,
  "connections": 8,
  "proxy": "",
  "ip": "0.0.0.0",
  "difficulty": 206196413.012576,
  "testnet": false,
  "keypoololdest": 1487850355,
  "keypoolsize": 501,
  "mintonly": false,
  "unlocked_until": 0,
  "paytxfee": 0.010000,
  "relayfee": 0.000100,
}

Дожидаемся, пока блокчейн скачается.
Отправляем на кошелек некоторое количество монет (из расчета, примерно, 0.12 EMC на одну операцию по созданию/обновлению инфо в блокчейне).
Создать новый адрес кошелька можно командой:
emc getnewaddress

2. Создание NVS записей


Необходимо создать записи в NVS блокчейна для производителя (вендора) и, непосредственно, для товаров (отдельная запись для каждой единицы товара).

2.1. Создание главной записи вендора


Определим начальные сведения. Пусть:
  • Производитель (вендор) называется «Your Company»
  • Логотип вендора находится по ссылке: http://emercoin.com/images/main-logo.png
  • Также, мы хотим создать дополнительное поле «Description» и поместить в него сведения: «The description of your Company»
  • Запись будет активной в течение 730 дней

Тогда, такую запись можно создать следующей командой:
emc name_new "dpo:Your Company" "Name=Your Company
Description=The description of your Company
Logo=http://emercoin.com/images/main-logo.png" 730

После выполнения этой команды, получаем код Transaction ID, если всё прошло успешно.
Дожидаемся попадания этой записи в блокчейн. Для этого, выполняем команду:
emc name_show "dpo:Your Company"

после попадания в блокчейн, мы должны увидеть что-то подобное:
{
  "name": "dpo:Your Company",
  "value": "Name=Your Company\nDescription=The description of your Company\nLogo=http://emercoin.com/images/main-logo.png",
  "txid": "b11384b162e2d3d2900d10e942c6ae3aa8bca94801dc119677685d68d35c9712",
  "address": "ERGPQNKpmJNaXeaq6ZDYwgghQDMBQGVema",
  "expires_in": 127749,
  "expires_at": 343616,
  "time": 1487856529
}

запоминаем значение поля «address» — это будет основным адресом, от имени которого должны будут созданы все последующие записи продуктов.

Дополнительно, мы должны придумать «соль» паролей пользователей, чтобы осложнить задачу злоумышленникам по перебору паролей — произвольный набор символов. Пусть для примера он будет »johNah2koosie3iG».

2.2. Создание записей продуктов


Определим начальные сведения. Пусть:
  • Товар называется «Name of your product»
  • Фото товара находится по ссылке: http://www.blockchainengine.org/wp-content/uploads/2016/04/Smart4.png
  • Также, мы хотим создать дополнительное поле «Description» и поместить в него сведения: «The description of your product»
  • Для начала, мы хотим создать 100 серийных номеров товара: от SN-55001 до SN-55100
  • Записи каждого товара будут активными в течение 730 дней

Тогда, такие записи можно создать при помощи исполнения следующего скрипта (предварительно установив php-cli и pwgen):
#!/bin/bash
# Source: https://github.com/snvakula/svtools/blob/master/emcdpo-genbulk.sh

URL="http://emcdpo.info/dpo"
SALT="johNah2koosie3iG"
ADDRESS="ERGPQNKpmJNaXeaq6ZDYwgghQDMBQGVema"
VENDOR="Your Company"

ITEM="Name of your product"
PHOTO="http://www.blockchainengine.org/wp-content/uploads/2016/04/Smart4.png"
OTHERS="Description=The description of your product"
PREFIX="SN-"
FIRST=55001
LAST=55100
DAYS=730

while [ $FIRST -le $LAST ]; do
  echo "Creating serial $PREFIX$FIRST:"
  SECRET=$(pwgen 8 1)
  OTP=$(php -r "echo(hash('sha256', md5('$SECRET'.'$SALT')));")
  echo " * SECRET: $SECRET"
  echo " * OTP: $OTP"
  echo " * Public URL: $URL/key/$PREFIX$FIRST"
  echo " * Private URL: $URL/key/$PREFIX$FIRST?otp=$SECRET"

  COUNT=0
  while emc name_show "dpo:$VENDOR:$PREFIX$FIRST:$COUNT" >/dev/null 2>&1
  do
    let COUNT=COUNT+1
  done
  echo " * NVS Record: dpo:$VENDOR:$PREFIX$FIRST:$COUNT"

  VALUE="Item=$ITEM\nPhoto=$PHOTO\n$OTHERS\nOTP=$OTP"
  VALUE=$(echo -e "$VALUE")
  echo -n " * Transaction ID: "
  emc name_new "dpo:$VENDOR:$PREFIX$FIRST:$COUNT" "$VALUE" $DAYS $ADDRESS

  echo
  let FIRST=FIRST+1
done

где URL — веб-адрес развертывания EMC DPO.

Результатом исполнения этого скрипта станут создание NVS записей (если вы сделали всё правильно) с выводом данных в консоль вида:

Creating serial SN-55001:
* SECRET: maifeB32
* OTP: bb680a8bcae3e5be23f3c9ed4d3d0e97d42cebe561f53a5a7502e2d150a937fb
* Public URL: http://emcdpo.info/dpo/key/SN-55001
* Private URL: http://emcdpo.info/dpo/key/SN-55001?otp=maifeB32
* NVS Record: dpo:Your Company:SN-55001:0
* Transaction ID: 7e1c5a131887a08971225790047bf9e8asq3ca5f947beb9ba0ced6541931939f

Сохраняем Public URL и Private URL для каждого отдельного серийного номера, делаем из них QR-коды и размещаем их: один на внешней стороне коробки, а второй, соответственно, — внутри коробки под защитной пленкой.

3. Развертывание веб-приложения EMC DPO


Устанавливаем зависимости и активируем нужные модули:
apt install curl git apache2 libapache2-mod-php php-xml
a2enmod rewrite

Клонируем git-репозитарий в /var/www:
cd /var/www
git clone https://github.com/Emercoin/emcdpo

Устанавливаем composer и его компоненты:
cd /var/www/emcdpo/engine
curl -sS https://getcomposer.org/installer | php
php composer.phar install --prefer-dist

Назначаем владельцем папки emcdpo пользователя www-data (или любого другого, из-под которого веб-сервер будет исполнять код):
chown -R www-data:www-data /var/www/emcdpo/engine

Прописываем наши параметры в файл /var/www/emcdpo/engine/src/settings.php:
// General Settings
CONST DPO_VENDOR = 'Your Company';
CONST SALT = 'johNah2koosie3iG';
CONST NVS_DAYS = 730;
CONST ALLOWED_UPDATES = 2;
CONST SEARCH_DEPTH = 10;

// Emercoin RPC Settings
CONST RPC_TYPE = "https";
CONST RPC_USERNAME = "emccoinrpc";
CONST RPC_PASSWORD = "RahRoh6ca8chaf6naji9dfaazaeghaidiLooyePi4aeQuah9lai4Eij5gotoocha";
CONST RPC_HOST = "localhost";
CONST RPC_PORT = '6662';

Учетные данные для подключения к Emercoin RPC можно посмотреть в файле /etc/emercoin/emercoin.conf

Далее, настраиваем веб-сервер. Для этого, создаем конфигурационный файл Apache /etc/apache2/sites-available/emcdpo.conf, пример которого:

Alias /dpo /var/www/emcdpo/engine/web

    Options -MultiViews
    RewriteEngine On
    RewriteBase /dpo
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]

Активируем конфигурацию и перезапускаем Apache:
a2ensite emcdpo
systemctl restart apache2

Теперь EMC DPO доступен по адресу: http://YOURHOSTNAME/dpo и готов к использованию.

Комментарии (7)

  • 27 февраля 2017 в 23:09

    0

    Я понял, что установить этот блокчейн очень просто. Но как защитить товар от подделки — нет.
    Например:


    Тогда, такую запись можно создать следующей командой:

    а можно несколько? А если да, то чьей верить? А если нельзя, то почему нельзя?

    • 28 февраля 2017 в 00:05

      0

      Запись о вендоре может быть только одна на каждый сайт. Она прописывается в конфиг сайта в settings.php — ей и будет верить сайт. А товаров может быть сколько угодно.
      • 28 февраля 2017 в 00:12

        0

        А что мешает широкоизвестному дядюшке Ляо с Малой Арнаутской сделать себе сайт с settings.php, в котором прописан красивый dpo? То есть я хочу сказать, что я не могу понять, где в этой схеме моя уверенность в подлинности товара? Много букв про установку какого-то софта. И мало слов на тему, задекларированной в заголовке.

        • 28 февраля 2017 в 00:53

          0

          Идея в том, чтобы компания-производитель разместила emcdpo в своей доменной зоне и объявила какой записи о вендоре верить. Тогда, попав на сайт, скажем, dpo.rolex.com, ни у кого не возникнет сомнений, что это именно Rolex. А зная корневую NVS запись вендора, можно получить информацию об изделиях напрямую из блокчейна в сыром виде. Причем, обо всех изделиях сразу, если угодно.
          • 28 февраля 2017 в 01:08

            0

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

  • 28 февраля 2017 в 07:29

    0

    Это в каждую коробку вкладывать индивидуально напечатанный QR код, да ещё и печатать другой на коробке? Может для часов за $3000 это и оправдано, но что-то сомнительно чтобы даже производителям телефонов это было выгодно.
  • 28 февраля 2017 в 07:51

    0

    Понятно, что при наличии уникального идентификатора товара и достаточно распространённого блокчейна подобный «электронный нотариат» может быть эффективным способом распознавания подделок и т.п.

    При использовании «нотариального» сервиса, у которого уже есть достаточно высокоуровневый API, например Proof of Existence, операция «внесения в историю» потребует куда меньше установок ПО и возни в целом.

    Один существенный вопрос останется: как добиться того, чтобы покупатель обязательно зарегистрировал вновь купленный товар (не очень важно пока, в чём именно)? Иначе вся затея слегка теряет смысл.

© Habrahabr.ru