Как безопасно отправить RSA::PublicKey другому пользователю через сокет?
Да, вы можете отправить его в виде обычного текста, если конфиденциальность вас не беспокоит. Человек, получающий его, должен будет аутентифицировать открытый ключ, то есть ему нужно будет убедиться, что это ваш подлинный ключ, а не ключ самозванца.
Аутентификация открытого ключа — это проблема распределения ключей, и это очень сложная проблема в криптографии. Если бы проблема с распределением ключей была решена, многие проблемы с конфиденциальностью исчезли бы.
Есть два способа решить проблему распределения ключей: корень доверия и сеть доверия. Корень доверия используется в PKI с публичными и частными центрами сертификации; в то время как сеть доверия используется PGP и ее друзьями.
Распространение ключей «решается» с разной степенью успеха в Интернете с помощью PKI и общедоступных центров сертификации. См., например, RFC 5280, Internet X.509 Сертификат инфраструктуры открытых ключей и список отзыва сертификатов (CRL ) Профиль, как это должно работать; и см. статью Питера Гутманна Техническая безопасность о том, как это не удается на практике (иногда впечатляющим образом).
Для одноранговых приложений, которые не используют «корень доверия» или PKI, последняя тенденция заключается в том, чтобы (1) использовать Short Authentication String (SAS) с начальным сообщением и (2) привязать все последующие сеансы к прошлым сеансам (по сути, формируя цепочку из первого сессия). Во время исходного сообщения получатель проверяет ключ открытого ключа от отправителя с помощью голоса, считывая небольшой дайджест, например отпечаток открытого ключа (голос — отличный механизм аутентификации).
Если ваше одноранговое приложение не может использовать SAS для проверки открытого ключа, вам следует использовать стратегию доверия при первом использовании (TOFU) и практиковать непрерывность ключей. Гутман подробно описывает стратегии диверсификации безопасности в своей книге Техническая безопасность.
экспортировать ключ в ByteQueue и отправить массив байтов
Это всего лишь детализация уровня презентации. Вы можете закодировать его любым удобным для вас способом, в том числе необработанным, шестнадцатеричным, Base32 или Base64. Настоящая угроза заключается в том, чтобы убедиться, что ваш одноранговый узел получил отправленный вами открытый ключ (как указано ntoskrnl).
Также обратите внимание, что конфиденциальность может вызывать беспокойство, как у людей, которые являются диссидентами в угнетенной стране. Диссиденты и репрессивные режимы — не единственный вариант использования, и это может быть проблемой для сертификации и аккредитации (C&A ) тоже.
Однажды я провалил проверку в Федеральном органе США, потому что слил адрес электронной почты. В этом случае адрес электронной почты был в сертификате пользователя вместе с ключом. (Все, что делает сертификат, это привязывает открытый ключ к личности через подпись «авторитета» над обоими).
person
jww
schedule
10.01.2014