Вопрос или проблема
Итак, в этом проекте я рассматриваю возможность шифрования бинарного файла.
Мой бинарный файл должен быть защищен каким-либо образом, чтобы мы могли быть уверены на другой стороне, что это мы его упаковали/зашифровали. Для этой простой задачи можно использовать что-то вроде заархивированного файла с паролем, но у этого есть очевидный недостаток: если вы извлечете пароль, то сможете создать свою собственную версию.
В моем случае у нас есть устройство в полевых условиях, которое должно получать бинарные блобы, которые зашифрованы, чтобы защитить их содержимое. Мы контролируем программное обеспечение на устройстве, так что у нас есть контроль над всей экосистемой.
Я изучал асимметричное шифрование, но это работает не тем образом, который мне нужен. Насколько я понимаю, это работает так: вы передаете свой открытый ключ, кто-то шифрует сообщение, используя ваш открытый ключ, чтобы вы могли расшифровать его с помощью своего закрытого ключа. Для моего случая это наоборот. Открытый ключ можно легко извлечь из закрытого ключа, поэтому иметь закрытый ключ на устройстве также не подходит.
Мы могли бы сделать простое шифрование и добавить подпись gpg, чтобы подтвердить, что мы к этому прикасались, но это потребует добавления еще одного файла.
Поэтому то, что я ищу, это система, в которой мы можем шифровать данные с использованием “закрытого” ключа, который другая сторона (наше устройство) затем сможет расшифровать с помощью открытого ключа.
Существует ли такая система, или мой подход совершенно неверен?
Асимметричное шифрование работает в оба направления. Вы можете зашифровать (или подписать) свой бинарный файл с помощью закрытого ключа. Это можно затем расшифровать с помощью открытого ключа, и это также подтверждает, что он был опубликован кем-то, кто знал закрытый ключ, т.е. вами.
Большинство систем уже имеют структуру для подписания и проверки бинарных файлов. Например, SignTool.exe или CodeSign.
Ответ или решение
Для решения вашей задачи по защите бинарных файлов с использованием асимметричной криптографии, стоит рассмотреть возможность применения криптографического подхода, который позволит подписывать и шифровать данные одновременно. Давайте разберем, как это можно реализовать шаг за шагом.
-
Ассиметричное шифрование и подпись:
Как вы правильно отметили, асимметричное шифрование обычно осуществляется путем шифрования данных с использованием открытого ключа, который может быть расшифрован только с помощью соответствующего закрытого ключа. Однако вы можете использовать эту технологию наоборот: для обеспечения подлинности вы можете "подписать" бинарный файл с использованием вашего закрытого ключа и затем передать его вместе с открытым ключом, чтобы ваше устройство могло подтвердить подлинность источника. -
Шифрование данных:
Если необходимо зашифровать бинарные данные, вы можете применить симметричное шифрование (например, AES) для шифрования самого бинарного файла. При этом вам нужно будет заранее обменяться симметричным ключом безопасным образом (например, с использованием асимметричного шифрования) или использовать ключ, известный только вашему устройству (если возможность такая имеется). -
Подпись:
После того как бинарный файл зашифрован, вы можете подписать его с помощью вашего закрытого ключа. Это создаст криптографическую подпись, которая будет подтверждать, что файл не был изменен и был создан вами. -
Обмен данными:
На вашем устройстве в поле вы можете получать зашифрованные данные и соответствующую криптографическую подпись. После этого вам нужно будет сначала проверить подпись с использованием вашего открытого ключа; если подпись действительна, это подтверждает, что файл был создан вами. -
Дешифровка:
После проверки подписи ваш модуль может приступить к расшифровке бинарного файла с использованием симметричного ключа, который, как вы помните, был ранее использован для его шифрования. Таким образом, даже если злоумышленник получит доступ к зашифрованному файлу, он не сможет его расшифровать без подходящего ключа и не сможет подделать подпись. -
Реализация:
Важно внедрить надежные протоколы для управления ключами и обмена сообщениями. Можно использовать библиотеки для работы с криптографией, такие как OpenSSL или другие. Обязательно протестируйте весь процесс, чтобы убедиться, что нет уязвимостей, и все работает так, как задумывалось.
В итоге, такая схема позволит вам безопасно передавать зашифрованные данные с соблюдением подлинности и целостности благодаря асимметричной криптографии.