Следует ли использовать синтаксис криптографических сообщений (CMS) для этой задачи?

StackOverflow https://stackoverflow.com/questions/950662

Вопрос

У меня есть задача передавать небольшие двоичные сообщения (длиной 1 или 2 КБ) между настольным приложением и мобильными устройствами.Сообщения должны быть зашифрованы асимметрично (например, RSA).Из того, что я узнал, для такого рода задач следует использовать гибридную криптосистему:

  1. Сгенерировать случайный симметричный ключ
  2. Зашифровать простой текст с помощью симметричного ключа (например, с использованием AES)
  3. Зашифровать симметричный ключ открытым ключом
  4. Передача зашифрованного текста и зашифрованного симметричного ключа.

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

Кто-нибудь может сказать, стоит ли использовать стандарт CMS для поставленной задачи?Достаточно ли поддержки CMS OpenSSL для моих нужд?

Приветствую, Кристиан

Это было полезно?

Решение

CMS определенно поддерживает нужную вам последовательность операций.С другой стороны, как сам формат CMS, так и API OpenSSL для него довольно сложны.

Одна небольшая проблема заключается в том, что CMS в основном работает с сертификатами X.509, а не с открытыми ключами.Вы можете справиться с этим в своей системе, либо фактически развернув PKI, либо просто используя самозаверяющие сертификаты (которые по сути эквивалентны передаче голых ключей RSA, но имеют то преимущество, что являются универсальным форматом для привязки ключа и метаданных). что иногда бывает весьма полезно иметь).

OpenSSL практически не имеет документации по CMS API;лучшая ссылка на него, которую я смог найти, — это cms.c в каталоге apps/ дистрибутива исходного кода OpenSSL;код структурирован как одна основная функция из 1000 строк, что немного беспокоит, но он выполняет шифрование с помощью открытого ключа, поэтому вы, вероятно, можете использовать его в качестве руководства.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top