C++ зашифровать текст с ключом, полученным через пакет? keyczar?
Я храню пароль клиента на своем устройстве, и бывают случаи, когда клиенты должны отправить свой пароль на сервер.
- Когда клиент подключается ко мне (серверу),
- Я даю ему ключ, который будет использоваться для шифрования.
- Я хочу, чтобы клиент отправил зашифрованный пароль по ключу.
- Сервер расшифрует пароль с помощью ключа (который был сохранен) и проверит пароль.
Даже если он не идеален, он звучит более безопасно, чем использование одного статического ключа, хранящегося на клиенте и сервере.
Звучит достаточно просто, и я смотрел на библиотеку шифрования C++ (crypto++), но выглядит слишком сложно.
Нашел там простой в использовании. Keyczar.
Но, похоже, не предлагает ту функциональность, которая мне нужна.
Keyczar, похоже, требует создать файл, который будет содержать ключ шифрования, и этот файл создается одним из их инструментов, что будет слишком хлопотно, чтобы сделать это на лету.
Если это может быть сделано в C++ или Keyczar(возможно, я упустил, что он может сделать)
пожалуйста, просветите меня, как.
Спасибо.
Платформа Linux/Mac.
2 ответа
Если вы отправляете ключ пользователю непосредственно перед тем, как пользователь использует его для шифрования своего пароля, вы также можете отправить пароль в открытом виде. (В любом случае, вы отправляете все данные, необходимые для восстановления пароля в виде открытого текста.)
Лучший способ - использовать TLS для шифрования всего диалога, используя незащищенный (чтобы избежать атаки воспроизведения) случайно сгенерированный сеансовый ключ.
Если вы действительно хотите проявить фантазию, вы можете использовать клиентские сертификаты x509 для аутентификации клиента - тогда вам вообще не понадобятся пароли на сервере. (Но вы все равно можете использовать пароль для хранения закрытого ключа, зашифрованного на устройствах.)
Если вам нравится идея, но не нравится TLS, потому что x509 чрезвычайно сложен, возможно, было бы проще интегрировать управление ssh- сессиями, используя ssh-ключи. С ключами ssh работать гораздо проще, чем с ключами x509, но их простота означает, что они не везде применимы.
Если обмен ключами не обеспечен, вы абсолютно ничего не получите (кроме уменьшенной атаки переигровки); возможно просто заглянуть в TLS/SSL с целью защиты транспорта