Как скрыть ключи в приложении?
-
14-10-2019 - |
Вопрос
У меня есть клиент-серверное приложение на C ++, где клиент и сервер являются моим исполняемым файлом.Каждый раз, когда устанавливается соединение между клиентом и сервером, я генерирую новый ключ шифрования для этого сеанса, и я хочу передать этот ключ сеанса и зашифровать этот ключ сеанса с помощью статического ключа, который встроен как в клиент, так и в сервер.
Однако запуск строк в моем исполняемом файле показывает статический ключ.
Как я могу скрыть встроенный статический ключ в моем клиентском и серверном приложении, чтобы их было нелегко извлечь и, таким образом, позволить кому-либо расшифровать мой сеансовый ключ?
Решение
Его метод обмена ключами "гарантирует", что клиент действителен, а не самозванец.Простой безопасный обмен ключами с помощью D-H этого не сделает.Чтобы получить ту же функциональность, ему нужно будет внедрить систему PKI.Для этой цели был создан SSL / TLS, который под ним будет делать то, что ему нужно.
Вам нужно будет создать центр сертификации для вашего сервера и подписать сертификаты клиентов, чтобы убедиться, что они те, за кого себя выдают.
Другие советы
Существуют решения этой проблемы, которые не включают попытки скрыть ключи (которые, как правило, невозможно). Например, Диффи-Хеллман Обмен ключом Позволяет клиенту и серверу договориться о новой клавише секретного сеанса, не отправляя его через проволоку.
Таким образом, вы планируете скрыть свой секрет (ключ в исполняемом файле) с особенно трудным для отмены метода, который может быть отменен только в том случае, если вы знаете секрет метода, который вам также необходимо скрыть с новым Super Secret Method Это может быть отменено, только если вы знаете секрет этого метода, который нам нужно скрыть с другим секретным методом, требующим другого секрета, который нам нужно скрыть ...
Это «переполнение проблемы». Я надеюсь, что вы увидите, что не решите это так. Создайте клавиши на компьютер (SSH/SSHD делает это) и защитите их. Та же самая проблема на самом деле применяется, потому что, если я получаю этот ключ, он все еще встал на игру, но таким образом вы не придаете его жесткому решению, что означает, что исправление скомпрометированного ключа намного проще.