如何在纯文本上执行OAEP填充

时间:2018-01-06 12:41:54

标签: python rsa pkcs#1

我正在通过重建来研究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填充?

谢谢!

1 个答案:

答案 0 :(得分:1)

OAEP填充算法在https://tools.ietf.org/html/rfc3447#section-7.1.1描述。

选项:

  • 您对Hash的选择似乎是SHA-1。
  • MGF-1确实是MGF的唯一选择,所以我们也可以假设它。

输入:

  • 您拥有RSA密钥n值,但不是e(但如果您正在编写与加密分开的填充,则您不需要e
  • 你有M(某些字节编码为" Hello World")
  • 您有L =(空字符串)。

变量:

  • 您有k(mod_size_bytes)
  • 您有mLen(message_length)
  • 您有lHash(哈希)
  • 您遗失了PSseeddbMaskmaskedDBseedMaskmaskedSeedEM

如果您正在编写自己的OAEP padder,那么您将实施7.1.1第2部分。在您的实现中使用与规范相同的名称通常可以更好地检测错误。