3

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

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

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

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

Cheers, Christian

ответ

4

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

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

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

+0

В то же время я реализовал CMS с использованием OpenSSL. Он работает как чары. –

+0

Вот документация 'openssl cms': http://www.openssl.org/docs/apps/cms.html. Пример кода в Java с BouncyCastle: http://security.stackexchange.com/questions/1453/whats-the-standard-way-to-encrypt-a-file-with-a-public-key-in-java –