标签:
若要生成密钥对,可以从创建名为 p 和 q 的两个大的质数开始。 这两个数相乘,结果称为 n。 因为 p 和 q 都是质数,所以 n 的全部因数为 1、 p、 q 和 n。
如果仅考虑小于 n 的数,则与 n 为互质数(即与 n 没有公因数)的数的个数等于 (p - 1)(q - 1)。
现在,选择一个数 e,它与计算的值为互质数。 则公钥表示为 {e, n}。
若要创建私钥,则必须计算 d,它是满足 (d)(e) mod n = 1 的一个数。 根据 Euclidean 算法,私钥为 {d, n}。
纯文本 m 到密码文本 c 的加密定义为 c = (m ^ e) mod n。 解密则定义为 m = (c ^ d) mod n。
RSAParameters 字段 |
Contains |
对应的 PKCS #1 字段 |
---|---|---|
d,私钥指数 |
privateExponent |
|
d mod (p - 1) |
exponent1 |
|
d mod (q - 1) |
exponent2 |
|
e,公钥指数 |
publicExponent |
|
(InverseQ)(q) = 1 mod p |
coefficient |
|
n |
modulus |
|
p |
prime1 |
|
q |
prime2 |
RSA 的安全性基于这样的事实,给定公钥 { e, n },无论是直接计算还是通过将 n 因式分解为 p 和 q,要计算出 d 都是不可行的。 因此,与 d、 p 或 q 相关的任何密钥部分都必须保密。 如果您调用
ExportParameters 并且仅请求公钥信息,这就是您将仅收到 Exponent 和 Modulus 的原因。 仅当您具有对私钥的访问权限并且请求私钥时,其他字段才可用。
RSAParameters 不以任何方式加密,因此将它与私钥信息一起使用时应谨慎。 实际上,包含私钥信息的任何字段都不可序列化。如果尝试通过远程调用或通过使用序列化程序之一来序列化 RSAParameters 结构,将仅接收到公钥信息。 如果希望传递私钥信息,则必须手动发送该数据。在任何情况下,如果任何人能够获知这些参数,您传送的密钥将毫无用处。
标签:
原文地址:http://www.cnblogs.com/gameshan/p/4800612.html