@Ajex

Как защитить апдейтер программы от компроментации сервера?

Есть типичная задача, софт получает обновления с сервера обновлений. Сейчас все сделано просто - обновления загружаются по HTTP протоколу, запакованные ZIP-ом. Некоторые апдейты содержат исполняемые EXE/DLL файлы. Сейчас задумались, что в случае компроментации сервера обновлений , можно наделать бед всем нашим клиентам.
Каким образом правильно организовать работу апдейтера , чтобы он мог отличить свои апдейты от чужих?
Насколько я понимаю, здесь нужно или зашифровать файлы апдейта так, чтобы апдейтер мог их расшифровать неким ключом , при помощи которого нельзя обратно зашифровать другие данные, вытащив этот ключ из программы. Или использовать какую-то цифровую подпись, встраиваемую в файлы на сервере и проверяемые апдейтером.

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

Второй вариант можно првоернуть с использованием gpg , но нам бы хотелось обойтись без сторонних утилит.

Подскажите, как правильнее организовать весь процесс? Решение должно быть встраиваемым , без использования сторонних утилит. Заранее спасибо за помощь.
  • Вопрос задан
  • 2747 просмотров
Пригласить эксперта
Ответы на вопрос 4
gbg
@gbg Куратор тега Компьютерные сети
Любые ответы на любые вопросы
Восстановление одного из ключей пары по другому - задача, требующая для серьезных ключей (4096 бит и далее) колоссальных временных затрат.

На самом деле, вам нужно завести хороший публичный сертификат SSL и использовать SSL для передачи обновлений. Весь необходимый функционал реализован в SSL:
-Подтверждение того, что приложение соединилось с легитимным сайтом
-Защита от MiTM путем подмены сайта.
-Защита передаваемой информации.

В программу ничего встраивать не нужно, поэтому и украсть из нее какой-либо ключ будет невозможно.

В криптографии следует использовать сторонние утилиты, так как реализовать качественную защиту крайне сложно.
Ответ написан
@Ajex Автор вопроса
Вот нашел вроде бы такое решение:
Создаем подпись приватным ключом (на свой стороне) , заливаем signature MyFile.sign и MyFile.Dat
openssl dgst -sha256 -sign private_key.pem -out MyFile.sign MyFile.dat

Так (ну алгоритмически) првоеряет апдетйер
openssl dgst -sha256 -verify public_key.pem -signature MyFile.sign MyFile.dat

Приватный ключ хранится у нас, публичный зашивается в апдейтер. Таким образом злоумышленник даже проникнув на сервер обновлений не сможет подписать файлы, т.к. апдейтер не пропустит их.
Тут сходу решаются и остальные проблемы с подменой сервера , mitm и прочим.
Ответ написан
Комментировать
ifaustrue
@ifaustrue
Пишу интересное в теллеграмм канале @cooladmin
Вы защищаете передаваемые данные или сам сервер?
Если первое - переходите на SSL соединение и всё. На сервере https, на клиенте проверка серта средствами OS.

Если нужна защита сервера - то шифрование диска, вход по смарт -карте и тд.
Ответ написан
Matvey-Kuk
@Matvey-Kuk
Разработчик в Cisco, CA.
Просто подписывайте каждое обновление.

Публичный ключ лежит внутри программы, приватный только у главного программиста.

Хоть поломают разломают Ваши сервера, обновлялка когда увидит что обновление неправильно подписано, сразу отклонит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект