Как зашифровать файл и скрыть пароль - PullRequest
0 голосов
/ 08 марта 2019

Наша компания занимается продажей автомобильных моторов.Если проданный мотор сломается, мы хотим, чтобы клиент (владелец этого мотора) запустил наше приложение, которое считывает данные с мотора и сохраняет их в файл.Моя работа состоит в том, чтобы написать это приложение.

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

Теперь проблема (под) становится в том, как хранить пароль для шифрования.Немного погуглив, сказал мне, что в принципе это невозможно сделать на 100% безопасным способом.Единственное, что можно использовать - это запутывание, например, криптография белого ящика.Что небезопасно, и у наших клиентов будет большая мотивация взломать его.

Так что теперь я застрял, пытаясь найти какое-то правильное решение.Интересно, могут ли гораздо более знающие люди из Stackoverflow посоветовать мне, как решить мою проблему.

Ответы [ 3 ]

1 голос
/ 08 марта 2019

Единственный безопасный способ добиться этого - генерировать и подписывать данные в доверенной среде. Приложение, работающее на клиентском ПК, обычно не работает в доверенной среде. Если вы можете доверять двигателю (я полагаю, он запускает какую-то прошивку, с которой вы можете общаться), двигатель должен сгенерировать и подписать файл, а ваше приложение должно просто передать его.

Кстати: не путайте шифрование с подписью. Если вы зашифруете файл, вы убедитесь, что никто другой не сможет его прочитать, но нет никаких гарантий против манипуляций. Если вы подписываете файл, вы защищаете его от манипуляций. Если вы хотите и то, и другое (защита от манипуляций и предотвращение несанкционированного чтения), вы должны зашифровать и подписать. Логика шифрования и подписания обратная: подпись выполняется с помощью закрытого ключа (проверка возможна для любого, кто имеет открытый ключ). Шифрование выполняется с помощью открытого ключа (его может прочитать только тот, кто имеет закрытый ключ). Это также показывает вашу проблему с доверием: для подписания вы должны предоставить закрытый (sic!) Ключ вашему клиенту. Вам нужны меры для предотвращения извлечения этого закрытого ключа. Это принципиально невозможно без специального оборудования.

Также: создайте отдельный закрытый ключ для каждого клиента / мотора. Даже со специальным оборудованием кто-то может извлечь этот ключ. Если он одинаков для всех двигателей, ваша безопасность нарушена для всех двигателей.

0 голосов
/ 08 марта 2019

Как уже упоминалось другими друзьями, вам понадобится асимметричное шифрование с двумя разными ключами для шифрования и дешифрования. Таким образом, AES как симметричная система шифрования не поможет. Термины «открытый» и «частный» являются субъективными, означая, что каждый1 может знать об открытом ключе, но нет1, за исключением того, что специальный человек знает частный ключ. Эти условия ИМХО не относятся к вашему делу; оба ключа являются частными в соответствии с вашим приложением. Я предпочитаю называть их ключами «сервер» и «клиент» для этого проекта, а сервер относится к обслуживающему персоналу, а клиент - это ЭБУ двигателя. Основная проблема, с которой вы сталкиваетесь, - это возможность раскрытия клиентского ключа путем загрузки микропрограммного обеспечения микроконтроллера / ПЛИС хакером. Предполагая соединение RS232 для загрузки или обновления прошивки [up / down], вы должны быть защищены от несанкционированного манипулирования прошивкой. Вам придется исследовать задачу изменения загрузчика прошивки для использования одноразового пароля для аутентификации через RS232 перед каждой передачей прошивки; Целью аутентификации является идентификация авторизованного агента юридического сопровождения. Поскольку манипулирование микропрограммой выполняется на заводе-изготовителе - с использованием прямого проводного соединения - нет риска атаки «человек посередине».

0 голосов
/ 08 марта 2019

Какие данные вы извлекаете из двигателя?
Порт OBD?
Фирменная?

Если вы не хотите, чтобы ваш код был легко изменен,
вы можете рассмотреть аппаратное обеспечение
https://www.google.com/search?q=encryption+ic&tbs=qdr:y

Для еще большей безопасности,
Я бы порекомендовал подход «человек посередине»;
они отправляют вам данные (по электронной почте и т. д.),
тогда у вас есть пакетный процесс,
на отдельном сервере / сети
сравнить данные.
Отзывы клиентов возвращаются таким же образом.
Клиент никогда не знает, в какой IP-сети все сохранено.

...