Защита от копирования флешки

Приветствую.

Есть интересный практический вопрос…
Как защитить флешку от простого физического копирования?
Точнее не флешку, а самописные программы?
Сделал проект, хочу передать на тесты заказчику… Но хотелось бы защититься…

Что посоветуете?

Тоже очень интересует такой момент.
Тем не менее, флешку вряд ли удастся защитить от копирования. Другое дело - организовать привязку самописного ПО к контроллеру или самой флешке.

По-моему никак… :slight_smile:
Либо делать привязку к устройству в своём ПО.

Евгений, а у WB есть какой-то аппаратный уникальный идентификатор? Который не меняется и привязывает процессорный модуль, например?

есть /var/lib/wirenboard/serial.conf

он генерируется из MAC Wi-Fi, если его нет, то из IMEI GSM-модема.
У процессорного модуля уникального идентификатора нет, но его можно туда залить (один раз) с помощью bitburner.

Прочитал с чего всё началось, поэтому более развёрнуто про OTP:

В процессоре есть т.н. OTP-зона - область памяти, которую можно записать только один раз. Записывается она с помощью USB-кабеля и программы BitBurner (надо снимать процессорный модуль с WB), читать на WB её после этого можно программно.

Кусок этой памяти - это место для уникального идентификатора. Мы его не записываем при производстве, т.к. это лишний этап, но вы это можете делать сами, или заказать у нас.

Есть ещё более интересная в контексте привязки софта функция: в эту OTP-память можно залить AES-ключ. После этого этот ключ нельзя никак оттуда прочитать, но процессор может шифровать и расшифровывать данные этим ключом.
Вы например можете сделать программу, которая расшифровывает свой кусок на лету перед выполнением. Можно расшифровывать отдельные функции перед вызовом и выгружать из памяти после использования. Теоретически можно будет снять дамп памяти на выполняющейся программе и из его кусочков собрать рабочую программу, но это уже сильно сложно.

можно поподробнее про использование OTP-памяти?
что конркретно снять
куда подключиться
чем подключиться
что и как записать
как потом читать…

Снять процессорную плату (wb-imx233-core). Сделать USB-кабель, подключить 5V, GND и USB к процессорной плате по распиновке, воткнуть в компьютер.

Прошивать вот этим: https://www.olimex.com/Products/OLinuXino/iMX233/_resources/BitBurner.v1.0.4.6.zip

Читать про это всё http://cache.freescale.com/files/dsp/doc/ref_manual/IMX23RM.pdf

Из Linux для чтения нужен спец. драйвер, он по-моему есть сейчас только в виде патча: http://comments.gmane.org/gmane.linux.ports.arm.kernel/249945 . Или через прямой доступ к памяти (/dev/mem), в сответствии с reference manual (см. выше).

Это всё не просто, более того, сами мы никогда ни OTP, ни AES не пользовались. За деньги можем вам это всё сделать, но больше сейчас помочь я ничем не смогу.

Вот нашел демо которое работает с AES шифрованием https://fadishei.wordpress.com/2013/03/20/know-the-hardware-crypto-engine-of-imx23-arm9-platform-better/
Там более подробно описано + исходник. Сам не тестировал.
Евгений, можно информацию из данной ветки в wiki? Думаю многим она будет полезна.
Особенно для кастомизаторов: приобретают партию у Вас, заливают свои ключи + встраивают в своё ПО шифрование и дешифрование.

В статье речь идёт про доисторическое ядро от Freescale, а у нас mainline.

В mainline недавно прислали код: http://lxr.free-electrons.com/source/drivers/crypto/mxs-dcp.c , его надо портировать в наше ядро (3.13). Это обычно несложно.

Интерфейс работы возможно будет не такой как в статье.

В вики добавил.

кстати ошибка…
у меня борд с wifi & gsm, однако /var/lib/wirenboard/serial.conf содержит mac от ethernet eth0 адаптера…

Наоборот, на ethernet при загрузке ставится мак из /var/lib/wirenboard/serial.conf .
Аппаратного у ethernet-чипа нет.

тогда надо вики поправить… http://contactless.ru/wiki/index.php/Уникальные_идентификаторы
и что будет если не будет wifi модуля, а будет gsm?
что окажется в serial.conf и какой мак будет у eth0?

https://github.com/contactless/wirenboard/blob/master/utils/board/wb-gen-serial

краткое содержание: в файле и на eth0 окажется MAC, состоящий из фиксированного префикса и куска IMEI GSM-модема.