图解PKCS#1(合)
0. 版本更新说明
版本更新情况简要说明:
- V2.2:主要是增加了三个杂凑函数:SHA-224、SHA-512/224、SHA-512/256。
3. 密钥
公钥
(n, e)
私钥
(n, d)
或者(p, q, dP, dQ, qInv),
- dP=d mod p-1,
- dQ=d mod q-1,【即e · dP = 1 mod p–1,e · dQ = 1 mod q–1】
- q* qInv=1 mod p
注解:
dP, dQ,的出现是为了用CRT求 Cd mod n
因为dP=d mod p-1,dQ=d mod q-1,→ CdP=Cd mod p,CdQ=Cd mod q
所以计算Cd mod n改为计算同余式组 x=CdP mod p,x=CdQ mod q,计算出的x即为Cd mod n
4. 数据类型转化
I2OSP 整数→字符串 (Integer → Octet-String),字符串采用大端表示
OS2IP 字符串→整数 (Octet-String → Integer),字符串采用大端表示
5. 密码算法
5.1 加密解密
5.1.1 加密解密——加密RSAEP
c = me mod n.
5.1.2 加密解密——解密RSADP
- 若私钥为(n, d)
m = cd mod n.
- 若私钥为 (p, q, dP, dQ, qInv)
m1 = cdP mod p.
m2 = cdQ mod q.
h = qInv * (m1 – m2) mod p.
m = m2 + h q.
(其中q*qInv = 1 (mod p))
5.2签名验证
5.2.1 签名验证——签名RSASP1
- 若私钥为(n, d)
s = md mod n.
- 若私钥为(p, q, dP, dQ, qInv))
s1 = mdP mod p.
s2 = mdQ mod q.
h = qInv * (s1–s2 ) mod p.
s = s2 + h q.
5.2.2 签名验证——验证RSAVP1
m = se mod n
7&8&9. 加密/签名/编码方案
*.*四种方案
表1加密/签名/编码方案
两种加密方案 |
编码方案 |
加解密 |
备注 |
RSAES-OAEP |
EME-OAEP |
RSAEP/RSADP |
推荐使用 |
RSAESPKCS1-v1_5 |
EME-PKCS-v1_5 |
RSAEP/RSADP |
兼容老版本用 |
两种签名方案 |
编码方案 |
加解密 |
备注 |
RSASSA-PSS |
EMSA-PSS |
RSASP1/RSAVP1 |
推荐使用 |
RSASSA-PKCS1-v1_5 |
EMSAPKCS1-v1_5 |
RSASP1/RSAVP1 |
兼容老版本用 |
7.1.1&7.1.2 EME-OAEP编码方案
EME-OAEP-encode(§7.1.1, 见图1)
输入:M 消息;L可选的标签
输出:EM 编码后的消息
EME-OAEP-decode(§7.1.2,见图1)
输入:EM 编码后的消息;L可选的标签
输出:M 消息
图1 EME-OAEP编解码方案
7.2.1&7.2.2 EME-PKCS-v1_5编码方案
EME-PKCS-v1_5-encode(§7.2.1, 见图2)
输入:M 消息
输出:EM 编码后的消息
EME-PKCS-v1_5-decode(§7.2.2, 见图2)
输入:EM 编码后的消息
输出:M 消息
图2 EME-PKCS-v1_5编解码方案
9.1.1&9.1.2 EMSA-PSS编码方案
EMSA-PSS-ENCODE:(§9.1.1,见图3)
输入: M 消息;
emBits 整数OS2IP (EM) 的最大比特长度,>= 8hLen + 8sLen + 9
(sLen为salt的字节长度)
输出: EM 编码后的消息,字节长度为
EMSA-PSS-VERIFY:(§9.1.2,见图3)
输入: M 消息;
EM 编码后的消息,字节长度为;
emBits 整数OS2IP (EM) 的最大比特长度,>= 8hLen + 8sLen + 9
(sLen为salt的字节长度)
输出:“一致”或者“不一致”
图3 EMSA-PSS编解码方案
9.2 EMSA-PKCS1-V1_5编码方案
EMSA-PKCS1-V1_5-ENCODE:(§9.2,见图4)
输入: M 消息;
emLen 期望的编码消息EM的字节长度
输出: EM 编码后的消息,字节长度为emLen
注:EMSA-PKCS1-V1_5只有EMSA-PKCS1-V1_5-ENCODE 没有DECODE。
图4 EMSA-PKCS1-V1_5编解码方案
7.1 RSAES-OAEP加解密方案
采用EME-OAEP编码方案 + RSAEP/RSADP加解密
此方案中存在可选的标签L
RSAES-OAEP-ENCRYPT ((n, e), M, L)(§7.1.1,见图5)
输入
- (n, e) RSA公钥 (记k为模数n的字节长)
- M 消息,字节长度为mLen, mLen £ k – 2hLen – 2
- L 可选的标签,没有时设为空串
输出
- C 密文,字节长度为k,或者错误信息
RSAES-OAEP-DECRYPT (K, C, L) (§7.1.2,见图5)
输入
- K RSA 私钥 (记k为模数n的字节长)
- C 密文,字节长度为k
- L 可选的标签,没有时设为空串
输出
- M 消息,字节长度为mLen, mLen £ k – 2hLen – 2,或者错误信息
图5 加解密方案的流程
RSAES-OAEP采用EME-OAEP的encode/decode
RSAESPKCS1-v1_5采用EME-PKCS-v1_5的encode/decode
7.2 RSAESPKCS1-v1_5加解密方案
采用EME-PKCS-v1_5编码方案 + RSAEP/RSADP加解密
此方案中没有可选的标签L
RSAES-PKCS1-V1_5-ENCRYPT ((n, e), M) (见图5)
整体流程同RSAES-OAEP-ENCRYPT ((n, e), M, L),仅有的差别在于:
- 没有可选的标签L
- 编码方案用EME-PKCS-v1_5-encode代替EME-OAEP-encode
RSAES-PKCS1-V1_5-DECRYPT (K, C) (见图5)
整体流程同RSAES-OAEP-DECRYPT (K, C, L),仅有的差别在于:
- 没有可选的标签L
- 编码方案用EME-PKCS-v1_5-decode代替EME-OAEP-decode
8.1 RSASSA-PSS签名验签方案
采用EMSA-PSS编码方案 + RSASP/RSAVP签名验签
整个签名/验签流程与加解密流程非常相似。
RSASSA-PSS-SIGN (K, M) (§8.1.1,见图6)
输入
- K RSA 私钥 (记k为模数n的字节长)
- M 消息,字节长度需满足杂凑函数的输出限制
输出
- S 签名,字节长度为k或者错误信息
RSASSA-PSS-VERIFY ((n, e), M, S) (§8.1.2,见图6)
输入
- (n, e) RSA 公钥 (记k为模数n的字节长)
- M 消息,字节长度需满足杂凑函数的输出限制
- S 签名,字节长度为k或者错误信息
输出
- “有效签名”或“无效签名”
图6 签名验签的流程
8.2 RSASSA-PKCS1-v1_5签名验签方案
采用EMSA-PKCS1-V1_5编码方案 + RSASP/RSAVP签名验签
整个签名/验签流程与加解密流程非常相似。
RSASSA-PKCS1-V1_5-SIGN (K, M) (§8.2.1,见图6)
整体流程同RSASSA-PSS-SIGN (K, M),仅有的差别在于:
- 编码方式不同,用EMSA-PKCS1-v1_5-encode代替EMSA-PSS-encode
RSASSA-PKCS1-V1_5-VERIFY ((n, e), M, S) (§8.2.1,见图6)
整体流程同RSASSA- PSS-VERIFY (K, M),仅有的差别在于:
- 编码方式不同,用EMSA-PKCS1-v1_5-encode代替EMSA-PSS-verify
- 输出比较有微小差异:RSASSA-PSS-VERIFY在EMSA-PSS-verify中输出比较结果;PKCS1-V1_5中EMSA-PKCS1-v1_5-encode输出的EM和I2OSP(m)得到的EM比较得出结果。
A. ASN.1编码
For the nine hash functions mentioned in Appendix B.1, the DER encoding T of the DigestInfo value is equal to the following:
MD2: (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 02 05 00 04 10 || H.
MD5: (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 05 05 00 04 10 || H.
SHA-1: (0x)30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 || H.
SHA-224: (0x)30 2d 30 0d 06 09 60 86 48 01 65 03 04 02 04 05 00 04 1c || H.
SHA-256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 || H.
SHA-384: (0x)30 41 30 0d 06 09 60 86 48 01 65 03 04 02 02 05 00 04 30 || H.
SHA-512: (0x)30 51 30 0d 06 09 60 86 48 01 65 03 04 02 03 05 00 04 40 || H.
SHA-512/224: (0x)30 2d 30 0d 06 09 60 86 48 01 65 03 04 02 05 05 00 04 1c || H.
SHA-512/256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 06 05 00 04 20 || H.
B. MGF
Mask generation functions MGF1,参见B.2
图7 MGF流程图
图解PKCS#1(合)相关推荐
- 图解敏捷性能合弄结构APH之:valuing合弄
图一:valuing合弄的目的与性能等级 图二:valuing合弄的活动 各种敏捷方法的原则参见博客:https://blog.csdn.net/dylanren/article/details/87 ...
- 图解PKCS#1——第五部分 附录Mask generation functions MGF1
A. ASN.1编码 For the nine hash functions mentioned in Appendix B.1, the DER encoding T of the DigestIn ...
- 图解PKCS#1——第四部分 签名验签方案
8.1 RSASSA-PSS签名验签方案 采用EMSA-PSS编码方案 + RSASP/RSAVP签名验签 整个签名/验签流程与加解密流程非常相似. RSASSA-PSS-SIGN (K, M) (§ ...
- git rebase 变基
概念 变基(Rebase)也是合代码的一种手段. 变基与合并(Merge)不同的是,他可以修改历史,使用rebase来代替merge合代码的话,得到的历史记录是一条直线提交历史,无分叉,很漂亮. 然而 ...
- 电脑主板线路连接图解_电工速学手册:306页现场电工全能图解,实用技术精选大合集!...
电工是建筑施工现场中不可或缺的工种之一,其工作职责和专业技术要求也比较高,工作时还要时刻注意自身的安全,所以对其监管也非常严格,对此电工要时刻提升自己的技术,这样才能在工作中如鱼得水. 这份现场电工全 ...
- 双离合档把上按钮作用_双离合怎么换挡图解,7速双离合档位示意图
7速双离合变速器是自动变速器的一种,车型是没有离合踏板的,驾驶过程中需要换挡时和普通的自动挡的汽车换挡是差不多一样.一般双离合变速器的档位分为P.R.N.D或者D+.S或者S+. D和S的" ...
- 图解APH之engaging合弄
图一:Engaging合弄的目的与性能等级 图二:Engaging合弄的活动 图三:Engaging合弄使用的敏捷仪式与技术
- 《图解高等数学 - 下》 1~15合集
(转)http://k.sina.com.cn/article_6479842361_1823a8c3900100cgja.html
- (二)深入浅出图解Git,入门到精通(保姆级教程)
上一篇原创写了图解Git的第一篇,个人感觉还是可以,比较基础的那种,有兴趣的可以看一看[],这一篇我们继续图解Git,上一篇基本就是基础,这一篇算是进阶. 分支管理 Git中比较最重要的一点就是分支的 ...
最新文章
- 解决 echarts柱状图x轴数据隔一个显示
- [RHEL] RHEL7.0 下 Postfix + Dovecot 实现邮件发送
- php in方法,PHP函数in_array()使用详解
- Leetcode-184. 部门工资最高的员工
- 563. 二叉树的坡度
- SAP Hybris Commerce installer目录下的build.gradle
- 利用matlab提取中心线
- mysql 导出dmp文件_一文带你了解MySQL主从复制(Master-Slave)
- JAVA:数组,排序,查找4
- JavaScript split() 方法
- 脉冲神经网络的开发公司AI-CTX
- django数据库错误相关问题
- 【译】45种Javascript技巧大全
- 一个完整的计算器c语言源代码,分享一个C语言的计算器源代码
- word中将空格替换为_如何在Microsoft Word中将双空格更改为单空格
- Everedit软件下载、安装和运行(免注册)
- 3dmax捕捉的基本操作2
- 学成在线 第9天 讲义-课程预览 Eureka Feign 四
- maven打包war包
- c语言 如果 n 是素数,且 n+2 也是素数,则称为孪生素数.,算法竞赛入门经典: 第四章 函数与递归 4.3孪生素数...
热门文章
- python客户端软件开发_妙小程python客户端
- 二阶边值问题的数值解matlab,《二阶常微分方程边值问题的数值解法》-毕业论文.doc...
- 优化方法之黄金分割法(Python实现)
- 开源 | 携程机票BDD UI Testing框架 - Flybirds
- css文本高亮显示,CSS3:高亮文本选中颜色
- java 填充字符串_Java字符串右补齐——String.format
- 占书明:电脑只能上扣扣QQ和微信,无法打开网页,解决办法!
- 笔记本连不上苹果手机热点怎么回事
- bboss ioc快速入门教程
- c语言省二级编程证书,c语言二级考试