EMC DPO: Как защитить свои товары от подделок
Знакомо? Что делать и кто виноват?
Доверие к производителю часов у вас начинает резко падать.
А разве виноват произоводитель часов, что его продукцию подделывают? Спорный вопрос, мне кажется. Так или иначе, очевидно, что контрафакт причиняет огромные репутационные потери и убытки легальным производителям.
Решением может быть использование продукта 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
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, операция «внесения в историю» потребует куда меньше установок ПО и возни в целом.
Один существенный вопрос останется: как добиться того, чтобы покупатель обязательно зарегистрировал вновь купленный товар (не очень важно пока, в чём именно)? Иначе вся затея слегка теряет смысл.