Функциональные возможности CryptoAPI CNG и CMS - PullRequest
0 голосов
/ 06 июня 2018

У меня есть вопрос относительно Microsoft CNG, который заменяет Crypto API.Так как у меня есть проект / назначение, где мне нужно использовать CMS / PKCS # 7 с шифрованием RSA-OAEP и сигнатурами RSASSA-PSS.

Но я не совсем понимаю, включает ли в себя CNG (не унаследованная поддержка CryptoAPI)Функциональность CMS или нет.В списке функций четко указано, что такие протоколы, как CMS, поддерживаются (https://msdn.microsoft.com/de-de/library/windows/desktop/bb204775(v=vs.85).aspx), но я могу найти только методы, относящиеся к CryptoAPI, которые имеют дело с сообщениями PKCS # 7 / CMS:

Пока чтоЯ нашел только Crypto API «Функции сообщений низкого уровня» и «Упрощенные функции сообщений» (https://msdn.microsoft.com/en-us/library/windows/desktop/aa380252(v=vs.85).aspx)

Не могли бы вы указать, доступен ли CMS только через вышеупомянутый CryptoAPI или существуеткакой новый метод CNG я пропустил?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Расслоение противоположно тому, что вы просили.CNG предоставляет криптографические примитивы (он понимает RSA).API Win32 CryptMsg * понимают CMS.

Если вы используете Win32 напрямую, вы можете использовать ключи CNG или CAPI с CryptMsg *.Например, чтобы расшифровать сообщение, вы должны позвонить CryptMsgControl(msg, 0, CMSG_CONTROL_DECRYPT, &para).Параметр для CMSG_CONTROL_DECRYPT является CMSG_CONTROL_DECRYPT_PARA , который имеет поле объединения для HCRYPTPROV (CAPI) или NCRYPT_KEY_HANDLE (CNG).

.NET встроено *Классы 1012 * и SignedCms должны иметь возможность дешифровать и проверять RSA-OAEP и RSA-PSS соответственно.Но так как они оба используют OID алгоритма ключа сертификата для определения того, как создать сообщение (схема, которая работала отлично, до тех пор, пока это не так), они могут создавать только шифрованный текст и подписи, совместимые с PKCS # 1 v1.5.

0 голосов
/ 06 июня 2018

Нет, Cryptographic Next Generation API - это API сравнительно низкого уровня, который не содержит высокоуровневые протоколы, такие как CMS (PKCS # 7 - это стандарт, определяющий CMS).

CMS упоминается в длиннойСписок протоколов, которые он поддерживает:

Одним из ключевых ценностных предложений КПГ является криптографическая ловкость, которую иногда называют криптографическим агностицизмом.Однако для того, чтобы сделать эту возможность ценной, требовалось преобразование реализации протоколов, таких как протокол Secure Sockets Layer (SSL) или безопасность транспортного уровня (TLS), CMS (S / MIME), IPsec, Kerberos и т. Д., В CNG.На уровне CNG необходимо было обеспечить подстановку и обнаруживаемость для всех типов алгоритмов (симметричные, асимметричные, хеш-функции), генерации случайных чисел и других вспомогательных функций.Изменения на уровне протокола более значительны, потому что во многих случаях API-интерфейсам протоколов требовалось добавить выбор алгоритма и другие параметры гибкости, которые ранее не существовали.

Так что здесь говорится о гибкости библиотеки CNGтак что реализация протоколов более высокого уровня может использовать API CNG.Так, например, речь идет о преобразовании реализации CMS поверх старого CryptoAPI в реализацию, использующую API .NET CNG.

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


Результат преобразования / переноса, конечно, можно найти здесь , который- довольно глупо - объединяет все функциональные возможности стандартов PKCS в одном пространстве имен.Вероятно, вас в основном интересуют классы EnvelopedCMS (для шифрования) и SignedCMS и все, что их окружает.

...