Я пытаюсь создать систему, которая шифрует файлы (аудио) и сохраняет их на диске, чтобы только мои клиенты (апплет) расшифровывали и воспроизводили их. Поэтому я решил использовать AES-шифр для массового шифрования и хранить ключи в базе данных. Моя проблема - безопасно передавать секретный ключ.
В современных системах используется SSL для передачи ключей и данных, которые не хранятся загадочно. В дизайне SSL/TLS ключ сеанса создается двумя способами;
Первый клиент-клиент создает ключ и шифрует его открытый ключ сервера (сертификат). Второй вариант является более безопасным, и становится все более важным после обнаружения heartbleed ошибки безопасности. В этой опции ключ создается клиентом и сервером с (EC) соглашением ключа DHE для каждой сессии.
Когда дело доходит до моего случая, есть два варианта.
Первый случай;
Второй случай;
Какой вариант подходит для моего сценария? Каковы плюсы и минусы каждого случая?
Спасибо за ответы.
Оба решения уязвимы для активного злоумышленника, в положении "человек в середине", потому что обмен ключами не аутентифицирован. Эта проблема решается в протоколе SSL/TLS с использованием PKI X.509. Это также можно решить, предоставив вашему клиенту предварительное знание открытого ключа сервера, например. При этом, между двумя вашими вариантами, переходите к (EC) DHE, потому что генерация нового ключа DH из предварительно вычисленной группы DH (также известной как параметры DH) выполняется быстро, тогда как генерация нового ключа RSA происходит очень медленно.