Pull to refresh

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

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

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

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

Как это может работать:

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



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



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



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



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



И, тогда, минут через 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
<Directory /var/www/emcdpo/engine/web>
    Options -MultiViews
    RewriteEngine On
    RewriteBase /dpo
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
</Directory>

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

a2ensite emcdpo
systemctl restart apache2

Теперь EMC DPO доступен по адресу: http://YOURHOSTNAME/dpo и готов к использованию.
Tags:
Hubs:
Total votes 9: ↑7 and ↓2 +5
Views 5K
Comments Comments 90