Структура System.Security.Cryptography.RSAParameters
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Структура RSAParameters представляет стандартные параметры для алгоритма RSA.
Класс RSA предоставляет ExportParameters метод, позволяющий получить необработанный ключ RSA в виде RSAParameters структуры.
Чтобы понять содержимое этой структуры, он помогает узнать, как RSA работает алгоритм. В следующем разделе описывается краткое описание алгоритма.
Алгоритм RSA
Чтобы создать пару ключей, сначала создайте два больших простых числа с именем p и q. Эти числа умножаются, и результат называется n. Поскольку p и q являются простыми числами, единственными факторами n являются 1, p, q и n.
Если рассматривать только числа, которые меньше n, количество чисел, которые относительно простые к n, то есть не имеют факторов общего с n, равно (p - 1)(q - 1).
Теперь вы выбираете число e, которое относительно просто для вычисляемого значения. Открытый ключ теперь представлен как {e, n}.
Чтобы создать закрытый ключ, необходимо вычислить d, что является числом, таким как мод (d)(e) (p - 1)(q - 1) = 1. В соответствии с алгоритмом Euclidean закрытый ключ теперь {d, n}.
Шифрование открытого текста m в шифртекстов c определяется как c = (m ^ e) mod n. Затем расшифровка будет определена как m = (c ^ d) mod n.
Сводка полей
Раздел A.1.2 PKCS #1: RSA Cryptography Standard определяет формат закрытых ключей RSA.
В следующей RSAParameters таблице перечислены поля структуры. Третий столбец предоставляет соответствующее поле в разделе A.1.2 PKCS #1: RSA Cryptography Standard.
ПолеRSAParameters | Содержит | Соответствующее поле PKCS #1 |
---|---|---|
D | d, частный экспонент | private Exponent |
DP | d mod (p - 1) | экспонент1 |
DQ | d mod (q - 1) | экспонент2 |
Exponent | e, общедоступная экспонента | public Exponent |
InverseQ | (InverseQ) (q) = 1 мод p | Коэффициент |
Modulus | n | остаток от деления |
P | п | prime1 |
Q | к | prime2 |
Безопасность RSA является производным от того факта, что, учитывая открытый ключ { e, n }, вычислительно невозможно вычислить d, либо напрямую, либо путем факторинга n в p и q. Поэтому любая часть ключа, связанная с d, p или q, должна храниться в секрете. Если вы звоните ExportParameters и запрашиваете только информацию открытого ключа, то именно поэтому вы получите только Exponent и Modulus. Другие поля доступны только в том случае, если у вас есть доступ к закрытому ключу, и вы запрашиваете его.
RSAParameters не шифруется каким-либо образом, поэтому при использовании его с информацией о закрытом ключе необходимо быть осторожным. Все члены RSAParameters сериализуются. Если любой пользователь может получить или перехватить параметры закрытого ключа, ключ и все данные, зашифрованные или подписанные с ним, скомпрометированы.