Что делает RSACryptoServiceProvider под капотом при шифровании с использованием RSA? - PullRequest
0 голосов
/ 01 октября 2019

Когда я углубляюсь в исходный код .Net, я не могу найти код, который фактически выполняется, когда вызывается rsa.Encrypt, возможно, он запускает код в DLL, потому что я не могу найти, где метод переопределен

Пожалуйста, вы можете указать мне исходный код функции rsa.Encrypt или объяснить, что здесь делается для шифрования массива байтов (сохраняя каждое значение 0> 255)

Я пытался углубиться в. чистый исходный код

https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/rsa.cs

Я попытался войти в код для его отладки (он просто пропускается, не заходя)

Я пытался понятькак RSA может шифровать числа, сохраняя их внутри целочисленного кольца (т. е. 0> 255)

    public byte[] Encrypt(string publicKeyXML, string dataToEncript)
    {
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        rsa.FromXmlString(publicKeyXML);
        return rsa.Encrypt(ASCIIEncoding.ASCII.GetBytes(dataToEncript), true);
    }

Я ожидаю, что источник .net будет доступен для просмотра исходного кода переопределенной функции

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

RSACryptoServiceProvider.Encrypt просто вызывает Windows CryptEncrypt, поэтому вы все равно не найдете свой ответ.

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

32-разрядное целочисленное значение 253 плюс 32-разрядное целочисленное значение 5 создает 32-разрядное значение 258, но на уровне байтов{ FD, 00, 00, 00 } + { 05, 00, 00, 00 } = { 02, 01, 00, 00 } (младший порядковый гекс). Операция имеет больше смысла на уровне числа или на уровне битов, чем на уровне байтов ... но сложение все же имеет смысл на уровне байтов.

Если вы действительно хотите понять, что происходит, вы можетешаг BigInteger.ModPow, который является управляемой реализацией основной операции, связанной с RSA. Назначение типа BigInteger - работать с числами без ограничения пространства на 32 или 64 бита.

0 голосов
/ 02 октября 2019

Документация для RSACryptoServiceProvider четко перечисляет RSA с дополнением OAEP, как указано в PKCS # 1 v2 с последней версией PKCS # 1 v2.2 (ссылка на спецификацию OAEP в этой более поздней версии). Однако в нем не указана хеш-функция, используемая для MGF1, но вы можете быть уверены, что это функция SHA-1 по умолчанию (которая в данном случае не является прямой проблемой безопасности). Поэтому я не совсем уверен, почему вы пытаетесь прочитать исходный код, если алгоритм хорошо определен стандартом.

...