Хочу представить свою программу, реализующую отрицаемое шифрование данных.
Что такое отрицаемое шифрование?
Как сообщает википедия, отрицаемое шифрование — способ криптографического преобразования, в котором зашифровываются совместно два или более различных сообщения на двух или более различных ключах. Этот метод обеспечивает возможность правдоподобного отрицания наличия одного или группы сообщений как таковых.
В моём случае, пользователь создаёт криптоконтейнер определённого размера, в который может добавлять и из которого может удалять группы файлов, хранящихся в зашифрованном виде.
Определить, сколько в контейнере находится таких томов — невозможно, за счёт того что, файлы в зашифрованном виде неотличимы от шума.
Для чего это может быть нужно?
Такой метод хранения конфиденциальной информации повышает безопасность, в сравнении с просто шифрованием, так как каким бы надёждным ни был шифр, пароль всегда от можно выбить силой. В варианте с отрицаемым шифрованием, при угрозе физического воздействия, можно выдать несекретную часть зашифрованного сообщения, сославшись на то, что секретной информации у вас не было. Либо, как вариант, выдать только часть секретной информации.
За примером далеко ходить не надо — пару лет назад была новость, как к ютуберу, который делал обзоры на криптовалюты, вломились бандиты и заставили его перевести на их счета все его средства. Отвертеться он не мог — наличие у него биткоин-кошелька было очевидно. Хранить средства на нескольких кошельках, спрятанных в разных местах, было бы гораздо безопаснее.
Кроме того, криптоконтейнер FractalCrypt также можно передавать по флешке, отправлять по почте и т.д., от этого он нисколько не потеряет своих свойств.
Как это реализовано?
При создании криптоконтейнера, он заполняется случайными байтами. Когда пользователь создаёт первый слой (он же том) из набора указанных файлов и директорий, он записывается в начало контейнера, после чего контейнер полностью шифруется первым паролем. Таким образом, зная первый пароль, можно получить доступ и первому архиву и оставшейся части контейнера.
При создании второго слоя, он будет записываться именно в эту "оставшуюся" часть. Таким образом, для создания второго слоя, нужно знать пароль от первого, а для получения данных второго слоя, пароль и от первого, и от второго.
Если создать новый слой, не зная всех паролей, то он будет записан поверх уже зашифрованных данных.
Исходные коды, скриншоты, инструкции по сборке и технические подробности с картинками находятся по ссылке
https://github.com/zorggish/FractalCryptGUI