RSA - Как проверить информацию с открытым ключом? - PullRequest
1 голос
/ 10 декабря 2011

Я шифрую и дешифрую данные, используя RSACryptoServiceProvider в C #, и когда я генерирую новую пару ключей, я возвращаю закрытый ключ вызывающей стороне метода, а затем сохраняю открытый ключ в самодельном PKI (просто словарь сkeyBlob и уникальный идентификатор).

Моя проблема заключается в следующем: поскольку мне нужно хранить открытый ключ, я не хочу случайно хранить закрытый ключ в PKI.Однако, поскольку мне также нужно записать закрытый ключ в файл, я работаю с байтовыми массивами, экспортированными с помощью метода ExportCspBlob.

Мой вопрос:
Как убедиться, проверивbyte[] что я анализирую в своем методе StoreKey, что он на самом деле является открытым ключом и не содержит информации о секретном ключе?

Для пояснения приведен соответствующий код:

public static bool StoreKey(byte[] publicKeyParameters, string uniqueIdentifier)
{
    bool success = false;
    if (!keyCollection.ContainsKey(uniqueIdentifier))
    {
        if (!keyCollection.ContainsValue(publicKeyParameters))
        {
            keyCollection.Add(uniqueIdentifier, publicKeyParameters);
            success = true;
        }
    }
    return success;
}

И метод GenerateKeys:

public static byte[] GenerateKeys(string uniqueIdentifier)
{
    byte[] privateKeyBlob;

    using (var rsa = new RSACryptoServiceProvider(4096))
    {
        try
        {
            byte[] publicKey = rsa.ExportCspBlob(false);

            privateKeyBlob = rsa.ExportCspBlob(true);

            PublicKeyInfrastructure.StoreKey(publicKey, uniqueIdentifier);
        }
        finally
        {
            //// Clear the RSA key container, deleting generated keys.
            rsa.PersistKeyInCsp = false;
        }
    }
    return privateKeyBlob;
}

Поскольку я работаю над двумя разными классами, я хотел бы воздержаться от инициализации RSACryptoServiceProvider в моей PKI, просто для импорта ключа ипроверьте это.Это возможно?

1 Ответ

1 голос
/ 10 декабря 2011

Согласно MSDN, вывод ExportCspBlob совместим с CAPI, и согласно документации для CAPI BLOBHEADER первый байт представляет тип ключа. В частности, если первый байт равен 0x07, это закрытый ключ, а 0x06 - открытый ключ.

...