(Translated by https://www.hiragana.jp/)
GitHub - oneliey/simple-rsa
Skip to content

oneliey/simple-rsa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simple RSA

Based on lorca. Requires Chrome/Edge (Chromium >= 70) to be installed.

1. ほどじょ使用しよう说明

1.1 图形界面かいめん

simpleRSA

  • ひだり侧为 RSAみつ钥、消息しょうそくみつぶん、签名计算结果てき展示てんじ及输にゅう区域くいき
  • みぎ侧为 RSAみつ生成せいせいみつ和解わかいみつ,签名验证てき选项及操作そうさ区域くいき

1.2 こうのうかい

1.2.1 みつ生成せいせい
  1. 指定していみつ钥位すう,如64、512、1024、2048、4096
  2. 指定してい素数そすう个数,必须だい于2个, $ N = \prod{p_i}$
  3. 显示生成せいせいてきおおやけ钥 (N, E)、わたし钥 (D) かず组成わたし钥的素数そすう
1.2.2 みつあずかかいみつ
  1. 支持しじPKCS#1ちゅう两种标准 v1.5 v2.2 (OAEP) てきRSA みつ和解わかいみつ
  2. 选择 OAEP-Encode しき
    1. 支持しじ指定してい OAEP Label,以为むなし
    2. 支持しじ选择 Hash 函数かんすう
1.2.3 签名验证
  1. 支持しじPKCS#1ちゅう两种标准 v1.5 v2.2 (PSS) てきRSA 签名验证
  2. 选择 PSS-Encode しき
    1. 支持しじ选择 Hash 函数かんすう
    2. 支持しじ指定してい Salt 长度:0为自动选择;-1为同Hash函数かんすう大小だいしょうしょうどう
1.2.4 输入あずか输出

以在输入ちゅう,输入 消息しょうそくようらいみつ签名;みつぶん进行かいみつ;签名进行验证

ざい计算结果ちゅう,输出人性じんせい提示ていじみつ/かいみつ结果,签名验证结果

1.3 使用しよう说明及实れい

1.3.1 みつ生成せいせい
  1. 配置はいちみつ生成せいせい选项,线程加速かそくだま认为:2048,2个质すうてきみつ钥);
  2. てん生成せいせい按钮(ざい线程,1s以内いない生成せいせい4096みつ钥);
  3. 显示生成せいせいてきおおやけ钥(N, E)かずわたし钥(D),ひだりじゅう进制,みぎ侧为じゅうろく进制
  4. てん击右侧 Primes按钮,查看组成 N てき素数そすう以切换素すう进制表示ひょうじ

显示生成せいせいてきみつ

image-20211114232009150

展示てんじ组成 N てきもと数列すうれつひょう指定してい进制表示ひょうじ

image-20211114232039157

1.3.2 みつあずかかいみつ

  1. ざい Message 区域くいき输入需要じゅようみつてきしんいき/ざい Ciphertext(hex) 输入需要じゅようかいみつてきみつぶん
  2. 配置はいち选项:
    1. 选择【みつ/かいみつしき(编码方式ほうしき):v1.5 / v2.2 EME-OAEP
    2. 【v2.2 EME-OAEP】设置 OAEP-Label(だま认为そら
    3. 【v2.2 EME-OAEP】选择 Hash 函数かんすうだま认为SHA-256)
  3. てん击【Encrypt / Decrypt】按钮,结果显示ざい Result 区域くいき

EncryptOAEP: Null Label, SHA-256

encryptOAEP

DecryptOAEP

decryptOAEP

1.3.3 签名あずか验证

  1. ざい Message 区域くいき输入需要じゅよう签名てきしんいき/ざい Signature(hex) 输入需要じゅよう验证てき签名;
  2. 配置はいち选项:
    1. 选择【签名/验证】しき(编码方式ほうしき):v1.5 / v2.2 EMSA-PSS
    2. 【v2.2 EMSA-PSS】选择 Hash 函数かんすうだま认为SHA-256)
    3. 【v2.2 EMSA-PSS】设置 Salt 长度(だま认为 0,指定してい
  3. てん击【Sign / Verify】按钮,结果显示ざい Result 区域くいき

SignPSS: SHA-512, Auto Salt Length

signPSS

VerifyPSS

verifyPSS

2. 算法さんぽう/实现あきらてん

2.1 性能せいのう评价

测试平台ひらだい Apple M1@ 3.2 GHz (8 cores) 8GB, go1.17.2 darwin/arm64

2.1.1 素数そすう判定はんてい

使用しよう Miller-Rabin 算法さんぽう さがせ测 20 判断はんだん指定していすうてき素数そすう

Bits 128 512 1024 2048
Time/Op 0.15 ms 1.99 ms 9.40 ms 59.5 ms
2.1.2 みつ生成せいせい

2个素すう组成,指定していみつ钥长生成せいせい。2048及以しょう于 0.1s。

Bits(2p) 512 1024 2048 2048(3P)
Time/Op 2.89 ms 15.57 ms 119.5 ms 57.13ms

4096みつ指定してい素数そすう数量すうりょうみつ生成せいせい线程加速かそくきさき4096しょう于1s

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
2.1.3 RSAこうみつ/验证

共同きょうどうみついち个 4100bit てき数字すうじ

BIts 512 1024 2048 4096
Times/Op 14.50 ms 25.87 ms 37.48 ms 107.20 ms
2.1.4 RSAわたしかいみつ/签名
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

2.2 算法さんぽう/实现あきらてん

2.2.1 そこ层运さん
  1. 乘法じょうほうぎゃくもと:实现 扩展Euclidean 算法さんぽう利用りよう其求かい乘法じょうほうぎゃくもと
  2. 幂运さん:实现快速かいそく幂算ほう,复杂$O(\log_2{E})$ 乘法じょうほう运算
  3. 素数そすう判定はんていあずか生成せいせい
    1. 实现 指定していすう素数そすう生成せいせい,实现 Miller-Rabin 算法さんぽう快速かいそく判定はんてい素数そすう
    2. 使用しよう线程加速かそく素数そすうてき生成せいせい使つかいとくざい1sない生成せいせい4096みつ
2.2.2 RSA もと
  1. おおやけ钥和わたし生成せいせい:实现りょう指定してい素数そすう个数てきみつ生成せいせい

    RSA Private Key 表示ひょうじ:

    • (p, q, dP, dQ, qInv)
    • (r_i, d_i, t_i), i = 3, ..., u
  2. みつ RSAEP :$c = m^e \bmod N$

  3. かいみつ RSADP $:m= c^d \bmod N$

    1. 利用りよう CRT 算法さんぽう加速かそくわたし钥解みつ

    2. 提供ていきょう 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 简洁友好ゆうこうてき界面かいめん

响应ぬのきょくしんいき丰富;快速かいそく稳定、またが平台ひらだい交互こうご友好ゆうこう人性じんせい提示ていじ

image-20211106170359508

image-20211106170140090

2.2.4 かん备的单元及性能せいのう测试

对实现的方法ほうほう进行较为かんせいてき单元测试;

对有性能せいのう要求ようきゅうてき方法ほうほう进行性能せいのう测试验证性能せいのう结果,部分ぶぶん结果详见 2.1 ;

部分ぶぶん参考さんこう golang 标准库 crypto/rsa@go1.17 ちゅうてき测试ぶんけん

image-20211115115734171

2.3 符合ふごう PKCS#1 标准

PKCS#1 これ Public-Key Cryptography Standards (PKCS) なかてきだいいち个标じゅん。其中てい义了几种 Schemes: しょうみつ码原语かず其他わざ术相结合らい实现特定とくていてき安全あんぜん标。

最新さいしんてき版本はんぽん为v2.2,广泛使用しようてき版本はんぽんv1.5。现在应使用しようv2.2ちゅうてい义的 Schemes,为了けんようせいざいこう使用しようv1.5标准

EncyptPKCS1v15 & DecryptPKCS1v15

实现りょう RSAES-PKCS1-v1_5使用しよう EME-PKCS1-v1_5 はた消息しょうそく M 编码为 EM,对EM使用しようみつ码元语进ぎょういち操作そうさ

EM = 0x00 || 0x02 || PS (random) || 0x00 || M

VerifyPKCSv15 & SignPKCSv15

实现りょう RSASSA-PKCS1-v1_5使用しよう EMSA-PKCS1-v1_5 编码

EM = 0x00 || 0x01 || PS (0xff) || 0x00 || T (digestFuncID||digest)

あずかv1.5不同ふどう处在于:

ざいみつ和解わかいみつEncrypt & Decrypt)实现りょう RSAES-OAEP使用しようりょうEME-OAEP 编码方式ほうしき使つかい得能とくのう有效ゆうこうぼう范 CCA (Chosen Ciphertext Attack) かず CPA,并达いた以下いか两个标:

  • はた确定せい(deterministic)みつ方案ほうあん(traditional RSA)转换为概りつ(probabilistic)方案ほうあん
  • よし于 OAEP 编码使用しよう trapdoor one-way permutation $f$ らい对明ぶん进行编码,らい确保おさむ击者无法恢复明文めいぶんてき任意にんい部分ぶぶん,从而防止ぼうし对密ぶんてき部分ぶぶんやぶかい

ざい签名验证(Sign & Verify)实现りょう RSASSA-PSS使用しようりょう EMSA-PSS 编码方式ほうしきのう生成せいせい确定せい签名(EMSA-PKCS1-v1_5 确定性的せいてき

  • つうSalt 提供ていきょう“tighter”てき安全あんぜん证明,らいいちひさげだか安全あんぜんせい
EncryptOAEP & DecryptOAEP

RSAES-OAEP, Optimal Asymmetric Encryption Padding (OAEP)

  • みつ使用しよう HashMGF 函数かんすう,对消いき M かず 选的 Label 进行 EME-OAEP 编码,とくいた EM,对 EM 使用しよう RSAみつもと语进ぎょうみつ
  • かいみつ使用しよう RSAかいみつもと语进ぎょうかいみついた EM使用しようHashMGF 函数かんすう Label 对其进行 EME-OAEP かい码,とくいた消息しょうそく M

MFG Mask Generation Function。实现りょうもと于Hash函数かんすうてき MGF1(mgfSeed, maskLen, Hash)

image-20211106194310474

  1. Check maskLen > 2^32
  2. For counter from $0$ to $\lceil \mathrm{skLen} / \mathrm{hLen}\rceil -1$ do:
    1. Convert counter to 4 oct string: C = I2OSP(counter, 4)
    2. Concatenate: T = T || Hash(mgfSeed || C)
  3. Output T[maskLen:]

EME-OAEP 编码结构及流ほど如下图所しめせ

EME-OAEP

EME-OAEP 编码てき配置はいち选项ゆう HashMGF Label

  1. lHash = Hash(Label)
  2. Generate zero padding string PS, Len(PS) = k - mLen - 2hLen - 2
  3. DB = lHash || PS || 0x01 || M, len(DB) = k - hLen - 1
  4. Generate a random seed, len(seed) = hLen
  5. dbMask = MGF(seed, k - hLen - 1)
  6. maskedDB = DB XOR dbMask
  7. seedMask = MGF(maskedDB, hLen)
  8. maskedSeed = seed XOR seedMask
  9. EM = 0x00 || maskedSeed || maskedDB
SignPSS & VerifyPSS

RSASSA-PSS, Probabilistic Signature Scheme

  • みつ使用しよう HashMGF 函数かんすう,对消いき M かず 选的 Label 进行 EME-OAEP 编码,とくいた EM,对 EM 使用しよう RSAみつもと语进ぎょうみつ
  • かいみつ使用しよう RSAかいみつもと语进ぎょうかいみついた EM使用しようHashMGF 函数かんすう Label 对其进行 EME-OAEP かい码,とくいた消息しょうそく M

EMSA-PSS 编码结构及流ほど如下图所しめせ

EMSA-PSS

EMSA-PSS 编码てき配置はいち选项ゆう HashMGF Saltてき长度 sLen

  1. mHash = Hsah(M)
  2. Check emLen >= hLen + sLen + 2
  3. Generate random salt, Len(salt)=sLen
  4. M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt
  5. H = Hash(M')
  6. Generate zero string PS, Len(PS) = emLen - sLen - hLen - 2
  7. DB = PS || 0x01 || salt, Len(DB) = emLen - hLen - 1
  8. dbMask = MGF(H, emLen - hLen - 1)
  9. maskedDB = DB \xor dbMask
  10. Set leftmost 8emLen - emBits bits of maskedDB[0] to zero
  11. EM = maskedDB || H || 0xbc

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published