Задача: зашифровать файл для двух пользователей А и Б при наличии их открытых ключей. Корректна ли следующая схема?
- Генерю сессионный ключ
- Получаю ключи парной связи с пользователями А и Б
- Экспортирую сессионный ключ на ключе парной связи с А (получаю блобА)
- Экспортирую сессионный ключ на ключе парной связи с Б (получаю блобБ)
- Шифрую файл на сессионном ключе
- Передаю в канал связи блобА, блобБ и зашифрованный файл
- На приеме каждый пользователь определяет "свой" блоб и импортирует из него сессионный ключ.
Не снижает ли безопасность, что один сессионный ключ экспортируется на разных ключах парной связи? Возможна ли другая схема многоадресной шифрации?
Схема правильная. Она же используется при создании почтовых сообщений в формате S/MIME (PKCS#7). Пример шифрования находится в файле cryptenc.c в sample.zip на сервере. Только там для определения открытого ключа получателя используются сертификаты, а из них получается блоб открытого ключа.