Рейтинг:0

Является ли обмен ключами аутентифицированным и конфиденциальным?

флаг in

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

Обмен сообщениями полностью зашифрован с помощью AES-OCB. Сеансовый ключ обменивается следующим образом:

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

Клиент генерирует 128-битный сеансовый ключ и шифрует его открытым ключом сервера. Клиент отправляет на сервер: зашифрованный сессионный ключ, свой публичный ключ, подпись RSASSA-PSS (sha256) сессионного ключа.

Сервер проверяет личность клиента с помощью собственного файла know_host. Он расшифровывает сеансовый ключ. Он сверяет подпись сеансового ключа с открытым ключом клиента.

Обе стороны аутентифицированы и имеют сеансовый ключ, начинается нормальная связь.

Рейтинг:1
флаг kr
  1. Ваша схема имеет нет прямой секретности. Если злоумышленник когда-нибудь получит закрытый ключ сервера, все прошлые сеансы могут быть расшифрованы: сеансовые ключи могут быть расшифрованы, и, следовательно, соответствующие сеансы могут быть расшифрованы. Смотрите подробности здесь.

  2. Ваша схема склонна к повторить атаку. Если злоумышленник перехватывает трафик и знает значение той или иной части зашифрованных данных, то злоумышленник может повторно отправить эти данные. Если это делается в рамках одного сеанса, то все равно используется тот же ключ шифрования, и будет невозможно определить, действительно ли сообщение было отправлено другой стороной или оно было отправлено злоумышленником. В зависимости от семантики сообщения, это может быть опасно. Смотрите подробности здесь.

SAI Peregrinus avatar
флаг si
Также не указан метод, который клиент использует для шифрования сеансового ключа. Если это RSAES-OAEP, все в порядке, но почти все остальное будет иметь некоторые предостережения или будет совершенно небезопасным. И, возможно, лучше использовать RSA-KEM или ECDH для создания общего секрета, а не шифровать и отправлять его.
флаг kr
@SAIPeregrinus: Конечно. И SSH-туннель или TLS были бы лучше, чем самодельный протокол.
SAI Peregrinus avatar
флаг si
Согласовано. Или, по крайней мере, протокол Noise, если SSH или TLS (или Wireguard) по какой-либо причине не работают.
флаг in
Для шифрования сеансового ключа я использую RSAES-OAEP. Если я использую ECDH для обмена сеансовыми ключами, будет ли решена проблема «отсутствия прямой секретности»?
флаг kr
@Laurent57: Не совсем так. Это должен быть ECDHE, эфемерный ECDH. Тогда у вас будет прямая секретность.
флаг in
Спасибо за полезные ответы, я ценю ваши отзывы.

Ответить или комментировать

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