我正在通过重建来研究RSA密码系统。我知道填充对于密码的安全性是必不可少的,因此我选择了PKCS1 OAEP填充,因为它是填充消息最安全的方法之一。我找不到从我的研究中执行OAEP填充的确切简单易懂的来源。
>>> message = "Hello World"
>>> message_length = len(message) # value: 11
>>> hash = sha1("").hexdigest() # value: "da39a3ee5e6b4b0d3255bfef95601890afd80709"
>>> hash_length = len(hash) # value: 40
>>> mod_size = (66707621741034658424514206418677753964865266688022969048429208771289785288847727334295743540860932900769628607474618294659295004562698532947535801821428015940719336654123007538255459184765551631213180128939808032261346408111382837800099426844454970753309552867519518744723276317986718923680385211621637413963).bit_length() # size of public modulus (value: 1023)
>>> mod_size_bytes = -(-mod_size//8) # size of public modulus in bytes, using ceil division
从研究中我发现上述数据对于执行PKCS1 OAEP填充是必要的,但我不知道如何正确使用它。
代码中是否定义了所有必要的变量?如果是这样,如何利用这些变量来执行OAEP填充?
谢谢!
答案 0 :(得分:1)
OAEP填充算法在https://tools.ietf.org/html/rfc3447#section-7.1.1描述。
选项:
输入:
n
值,但不是e
(但如果您正在编写与加密分开的填充,则您不需要e
) M
(某些字节编码为" Hello World")L
=(空字符串)。变量:
k
(mod_size_bytes)mLen
(message_length)lHash
(哈希)PS
,seed
,dbMask
,maskedDB
,seedMask
,maskedSeed
和EM
如果您正在编写自己的OAEP padder,那么您将实施7.1.1第2部分。在您的实现中使用与规范相同的名称通常可以更好地检测错误。