Как скрыть ключи в приложении? - PullRequest
2 голосов
/ 01 января 2011

У меня есть клиент-серверное приложение C ++, где клиент и сервер - мой исполняемый файл. Каждый раз, когда устанавливается соединение между клиентом и сервером, я генерирую новый ключ шифрования для этого сеанса и хочу передать этот ключ сеанса и зашифровать этот ключ сеанса, используя статический ключ, который встроен как в клиент, так и в сервер.

Однако при запуске строк в моем исполняемом файле отображается статический ключ.

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

Ответы [ 3 ]

5 голосов
/ 01 января 2011

Его метод обмена ключами "гарантирует", что клиент действителен, а не самозванец.Просто безопасный обмен ключами с использованием DH не сделает этого.Чтобы получить ту же функциональность, ему необходимо внедрить систему PKI.SSL / TLS был создан для этой цели, которая под ним будет делать то, что ему нужно.

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

5 голосов
/ 01 января 2011

Существуют решения этой проблемы, которые не включают в себя попытки скрыть ключи (что, в общем, невозможно). Например, Обмен ключами Диффи-Хеллмана позволяет клиенту и серверу согласовать новый секретный ключ сеанса, даже не отправляя его по проводам.

0 голосов
/ 01 января 2011

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

Это «переполнение проблемы»,Я надеюсь, что вы видите, что вы не решите это таким образом.Создайте ключи для каждого компьютера (это делает ssh / sshd) и защитите их.Та же проблема, что и выше, действительно применима, потому что, если я получу этот ключ, он все еще в игре, но таким образом вы не жестко закодируете его в своем решении, что означает, что исправить скомпрометированный ключ намного проще.

...