Based on lorca. Requires Chrome/Edge (Chromium >= 70) to be installed.
左 侧为 RSA密 钥、消息 、密 文 、签名和 计算结果的 展示 及输入 区域 右 侧为 RSA密 钥生成 ,加 密 和解 密 ,签名和 验证的 选项及操作 区域
指定 密 钥位数 ,如64、512、1024、2048、4096指定 素数 个数,必须大 于2个, $ N = \prod{p_i}$- 显示
生成 的 公 钥 (N, E)、私 钥 (D)和 组成私 钥的素数
支持 PKCS#1中 两种标准 v1.5和 v2.2 (OAEP)的 RSA加 密 和解 密 - 选择 OAEP-Encode
模 式 时支持 指定 OAEP Label,可 以为空 支持 选择 Hash函数
支持 PKCS#1中 两种标准 v1.5和 v2.2 (PSS)的 RSA 签名和 验证- 选择 PSS-Encode
模 式 时支持 选择 Hash函数 支持 指定 Salt 长度:0为自动选择;-1为同Hash函数 大小 相 同
配置 密 钥生成 选项,多 线程加速 (默 认为:2048位 ,2个质数 的 密 钥);点 击生成 按钮(在 多 线程下 ,1s以内 生成 4096位 密 钥);- 显示
生成 的 公 钥(N, E)和 私 钥(D),左 侧十 进制,右 侧为十 六 进制 点 击右侧 Primes按钮,可 查看组成 N的 素数 。可 以切换素数 进制表示
显示
1.3.2
在 Message区域 输入需要 加 密 的 信 息 /在 Ciphertext(hex) 输入需要 解 密 的 密 文 ;配置 选项:- 选择【
加 密 /解 密 】模 式 (编码方式 ):v1.5 / v2.2 EME-OAEP - 【v2.2 EME-OAEP】设置 OAEP-Label(
默 认为空 ) - 【v2.2 EME-OAEP】选择 Hash
函数 (默 认为SHA-256)
- 选择【
点 击【Encrypt / Decrypt】按钮,结果显示在 Result区域
EncryptOAEP: Null Label, SHA-256
DecryptOAEP
1.3.3 签名
在 Message区域 输入需要 签名的 信 息 /在 Signature(hex) 输入需要 验证的 签名;配置 选项:- 选择【签名/验证】
模 式 (编码方式 ):v1.5 / v2.2 EMSA-PSS - 【v2.2 EMSA-PSS】选择 Hash
函数 (默 认为SHA-256) - 【v2.2 EMSA-PSS】设置 Salt 长度(
默 认为 0,自 动指定 )
- 选择【签名/验证】
点 击【Sign / Verify】按钮,结果显示在 Result区域
SignPSS: SHA-512, Auto Salt Length
VerifyPSS
测试
Bits | 128 | 512 | 1024 | 2048 |
---|---|---|---|---|
Time/Op | 0.15 ms | 1.99 ms | 9.40 ms | 59.5 ms |
2个素
Bits(2p) | 512 | 1024 | 2048 | 2048(3P) |
---|---|---|---|---|
Time/Op | 2.89 ms | 15.57 ms | 119.5 ms | 57.13ms |
4096
Nprime | 2 | 3 | 4 | 5 |
---|---|---|---|---|
Single | 1,457.5ms | 570.3ms | 529.5ms | 441.4ms |
Parallel | 596.57 ms | 297.9ms | 291.8ms | 392.2ms |
BIts | 512 | 1024 | 2048 | 4096 |
---|---|---|---|---|
Times/Op | 14.50 ms | 25.87 ms | 37.48 ms | 107.20 ms |
P/MODE | No-CRT | 2-CRT | 3-CRT | 4-CRT |
---|---|---|---|---|
2048 bit | 2,699 ms/op | 859.7 ms/op | 430.3 ms/op | 383.7 ms/op |
4096 bit | 21,466 ms/op | 5,517.9 ms/op | 2,677.5 ms/op | 1,732.8 ms/op |
乘法 逆 元 :实现 扩展Euclidean算法 ,利用 其求解 乘法 逆 元 - 幂运
算 :实现快速 幂算法 ,复杂度 为$O(\log_2{E})$ 次 乘法 运算 素数 判定 与 生成 :- 实现
指定 位 数 素数 生成 ,实现 Miller-Rabin算法 快速 判定 素数 使用 多 线程加速 素数 的 生成 ,使 得 在 1s内 生成 4096位 密 钥
- 实现
-
公 钥和私 钥生成 :实现了 指定 素数 个数的 密 钥生成 RSA Private Key
表示 :(p, q, dP, dQ, qInv)
(r_i, d_i, t_i), i = 3, ..., u
-
加 密 RSAEP :$c = m^e \bmod N$ -
解 密 RSADP$:m= c^d \bmod N$ -
利用 CRT算法 加速 私 钥解密 -
提供 Blinding(盲 签名)选项:在 计算$m = c^d \pmod n$ 之 前 ,令 $c' = c*r^e$计算 $(c')^d = (cr^e)^d = c^dr^{ed} \equiv c^d*r \pmod n $
$m = (c')^d * r^{-1} \equiv c^d * r * r^{-1} \equiv c^d \pmod n$
-
2.2.3 简洁
响应
2.2.4
对实现的
对有
此
PKCS#1
2.3.1 PKCS#1 v1.5 (rfc2313)
实现EME-PKCS1-v1_5
M
编码为 EM
,对EM
EM = 0x00 || 0x02 || PS (random) || 0x00 || M
实现EMSA-PKCS1-v1_5
编码
EM = 0x00 || 0x01 || PS (0xff) || 0x00 || T (digestFuncID||digest)
2.3.2 PKCS#2 v2.2 (rfc8017)
Encrypt
& Decrypt
)实现EME-OAEP
编码
将 确定性 (deterministic)加 密 方案 (traditional RSA)转换为概率 (probabilistic)方案 由 于 OAEP 编码使用 trapdoor one-way permutation$f$ 来 对明文 进行编码,来 确保攻 击者无法恢复明文 的 任意 部分 ,从而防止 对密文 的 部分 破 解
Sign
& Verify
)实现EMSA-PSS
编码EMSA-PKCS1-v1_5
通 过Salt
可 提供 “tighter”的 安全 证明,来 进一 步 提 高 安全 性
RSAES-OAEP, Optimal Asymmetric Encryption Padding (OAEP)
加 密 时使用 Hash
、MGF
函数 ,对消息 M
和 可 选的Label
进行EME-OAEP
编码,得 到 EM
,对EM
使用 RSA加 密 元 语进行 加 密 ;解 密 时使用 RSA解 密 元 语进行 解 密 得 到 EM
,使用 Hash
、MGF
函数 和 Label
对其进行EME-OAEP
解 码,得 到 消息 M
。
MFG
MGF1(mgfSeed, maskLen, Hash)
- Check
maskLen
> 2^32 - For
counter
from$0$ to$\lceil \mathrm{skLen} / \mathrm{hLen}\rceil -1$ do:- Convert
counter
to 4 oct string:C = I2OSP(counter, 4)
- Concatenate:
T = T || Hash(mgfSeed || C)
- Convert
- Output
T[maskLen:]
EME-OAEP
编码结构及流
EME-OAEP
编码Hash
、MGF
Label
lHash = Hash(Label)
- Generate zero padding string
PS
,Len(PS) = k - mLen - 2hLen - 2
DB = lHash || PS || 0x01 || M
,len(DB) = k - hLen - 1
- Generate a random
seed
,len(seed) = hLen
dbMask = MGF(seed, k - hLen - 1)
maskedDB = DB XOR dbMask
seedMask = MGF(maskedDB, hLen)
maskedSeed = seed XOR seedMask
EM = 0x00 || maskedSeed || maskedDB
RSASSA-PSS, Probabilistic Signature Scheme
加 密 时使用 Hash
、MGF
函数 ,对消息 M
和 可 选的Label
进行EME-OAEP
编码,得 到 EM
,对EM
使用 RSA加 密 元 语进行 加 密 ;解 密 时使用 RSA解 密 元 语进行 解 密 得 到 EM
,使用 Hash
、MGF
函数 和 Label
对其进行EME-OAEP
解 码,得 到 消息 M
。
EMSA-PSS
编码结构及流
EMSA-PSS
编码Hash
、MGF
Salt
sLen
mHash = Hsah(M)
- Check
emLen >= hLen + sLen + 2
- Generate random
salt
,Len(salt)=sLen
M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt
H = Hash(M')
- Generate zero string
PS
,Len(PS) = emLen - sLen - hLen - 2
DB = PS || 0x01 || salt
,Len(DB) = emLen - hLen - 1
dbMask = MGF(H, emLen - hLen - 1)
maskedDB = DB \xor dbMask
- Set leftmost
8emLen - emBits
bits ofmaskedDB[0]
to zero EM = maskedDB || H || 0xbc