2016-07-18 5 views
3

Я пытаюсь подписать строку с ключом PKCS # 8, используя SHA-256 с RSA.Какая RSASignaturePadding используется с ключом PKCS # 8?

Для метода RSACng.SignData() требуется RSASignaturePadding, из которых следующие параметры: Pkcs1 и Pss. Я не могу найти ничего определенного, чтобы сказать мне, что будет использоваться для PKCS # 8.

// Decode Token (token is Base64 & PKCS8 encoded) 
    byte[] decodedKey = Convert.FromBase64String(myBase64String); 
    CngKey key = CngKey.Import(decodedKey, CngKeyBlobFormat.Pkcs8PrivateBlob); 

    // Build signature 
    string signature = "123abc"; 

    byte[] bytes = Encoding.UTF8.GetBytes(signature); 

    // Sign signature using key & SHA256 w RSA 
    var unsigned = new RSACng(key); 
    byte[] data = unsigned.SignData(bytes, HashAlgorithmName.SHA256, <??????>); 

Криптография для меня все нова, поэтому, если мой подход ушел, пожалуйста, дайте мне знать.

+1

Ваш подход не кажется мне «выключенным», но вы должны выбрать лучшие имена для своих переменных. –

+0

проверьте здесь [введите ссылку здесь] (http://stackoverflow.com/questions/37531044/how-do-i-decode-a-base64-pcks-8-представление-of-a-private-key-in- нетто/40429478 # 40429478) –

ответ

3

PKCS # 8 описывает способ кодирования/декодирования закрытых ключей. Если этот ключ является RSA-ключом, то этот ключ действительно может использоваться для генерации сигнатур RSA.

Прокладка не требует каких-либо конкретных свойств ключа. Он просто требует размера ключа в качестве входного сигнала, который для RSA - идентичен размеру модуля (как беззнаковое число, в битах).

Модульное возведение в степень, которое следует, всегда одинаково для поколения подписи RSA. Он повышает значение хэш-значения с закрытым показателем. Таким образом, вы можете выбрать, какое дополнение вы хотите использовать для своего конкретного протокола.

Если вы не хотите указывать протокол, вы можете взглянуть на CMS (Синтаксис криптографического сообщения) - ранее известный как PKCS # 7.


В случае RSA с PKCS # 1 v1.5 обивки обивки детерминирован, что делает целое поколение подписи RSA детерминированным. В случае PSS это не детерминированная операция, т. Е. Используется генератор случайных чисел. Новый PSS имеет лучшее доказательство безопасности, чем PKCS # 1 v1.5, но PKCS # 1.5 не был сломан.