编程技术记录

世界你好!

RSA加密算法是一种非对称加密算法. 对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。

密钥

RSA为非对称加密算法,密钥分为私钥和公钥。
其中,公钥可以由私钥导出(意思就是,拥有私钥,也就拥有了公钥),而公钥不能导出私钥。

密钥存储格式

比较常用的格式有ASN1.DER 和 PEM

  • ASN1.DER 是公钥或者私钥的采用ASN1.DER方式序列化,其结果是一串二进制数据
  • PEM 为Base64格式的文本,主要内容为ASN1.DER数据的Base64表达。另外,PEM允许使用指定的对称加密算法将加密,如DES等。
PEM格式的样例,中间的Base64文本其实就是ASN1.DER的Base64表示

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA04KNnZEBO3Ajk+nI4x/VKdoL
F+yNv/KI0wCNF1J9do8Ra+MXUdDr+Nbehf6JYLuwHfur2mhw0gTT9lTLM2mD0qHo
rbMs/XtSbXc9eP3xwJ/hU0V76LqtKw+y7GSgJ9XiyWS848DO2fV7uHdpwgRWCfHu
R8fcUO0SrOHLj5g1HwIDAQAB
-----END PUBLIC KEY-----

密钥长度

密钥长度越长,安全性越好,加密解密所需时间越长。
RSA长度有512、1024 、 2048 、 4096,一般使用时的最低长度为1024。

参考文章,密钥长度增长一倍,公钥操作所需时间增加约 4 倍,私钥操作所需时间增加约 8 倍,公私钥生成时间约增长 16 倍。

加密与解密

RSA的加密密钥可以是公钥、也可以是私钥;解密亦然。

  • 公钥加密,私钥解密
  • 私钥加密,公钥解密

块加密与补全模式

RSA也是一种分块加密算法,单次加密长度的上限时密钥长度,而当RSA使用PKCS1 补全模式时, padding 占用了 11 个字节,因此单次计算块长度约束
待加密的字节数不能超过密钥的比特长度值除以 8 再减去 11

例如,密钥长度是1024比特,那么单次块最大长度
(1024 / 8 -11) = 117 字节

签名与验签

对于非对称加密算法来说,除了常规的加解密外,还可以用来签名与验签。

  • 签名用私钥
  • 验签用公钥

另外,就RSA来讲,签名的摘要算法可以使用MD5SHA1SHA2系列(如SHA256)

发表回复

© Beli. All Rights Reserved.