Python算法053RSA加密体系

RSA加密体系

 

过去的理论都太生硬了,今天咱们终于可以完成RSA加密体系的算法了!

此处有一份免责声明需查收:不要理所当然地认为我的代码就是安全的;不要认为任何来自非专家的密码系统就是安全的;别独自实现任何密码系统;别以任何的方式干扰你的密码系统安全性;我们做的这个系列适用于愉快地玩耍,因此发出这样一份免责声明。

我已经有了大素数、如何生成RSA密钥及如何使用它们的方法。

不过,咱们还需要一个强大的伪随机生成器。咱们将要用SHA-512。它是一个安全的散列函数,并且为了安全起见,它必须满足一些特殊的要求。如:必须是一个稳定的伪随机数生成器。

我的方法是受到在实践中应用的RSA OAEP的启发。

图片

设想一下,我有两个1024位素数,2048位模数,随机生成器和SHA-512,那么我可以传输多达192字节的消息.。

以下是步骤:

  • IV: 生成64字节的随机值块。
  • H1, H2, H3: 重复使用SHA-512生成64字节的均匀随机值块。
  • X192: 带有级联块H1|H2|H3的XOR明文消息。
  • X64: 在X192上使用SHA-512生成另一个64字节的均匀随机值块,并使用XORIV
  • 加密:RSA(X192|X64, public_key)。

此核心思想是原始消息的随机化使得加密不确定以及选择密文安全。最后的256字节消息X192X64是完全随机切分布均匀的。这是可以证明的,但咱们说好了今天不学数学。

在文章的最后将有两个小样展示出来,在这两个小样中,明文 0 都是被加密的,并且每一次都会产生不同的密文。

我的编码实现一定是安全的吗?我当然不能确定因为我没办法证明它,但是我肯定我不会将它应用在实际的加密系统中 :-)

 

from os import urandomfrom hashlib import sha512
def rsa_generate_keys():    return [        65537,        58967658369561163583995664151705537612631456941226585145001736155445085885436956133402962616775555500479429922140321605063456075222335023020218578571558003435174909963319619244821157746252197885628802071763470174413201522569356053296685834595362968800778468737693074613267684084217204017873750446802044584084498581219849973790017343888256411013653688556278788070745635045095995056877259642839730825907965544973672656542601570609068817838234644958846427643088478240335082249677864789882511592486797239674160452077169411971273434857626735582274817190984442183721945999865859466422472845277588368259261760233826535480137    ], [        32639742054323523661031580828650534544392003478949839063736255562124081596351847364013089886417596950354636310108218358259943735367279937975211699593540109138569129405212055903155962561652878992005591100527818545966603574053221236696683939389678915058929150433015761702105657992264877747720954135956649973789334911071168428227464085150820871588160770978551544646965210798269197906675922224772713666123225990305644372957419486169245295190574189157389340237417783311258488777336686103120891002317113842264416737708675921812070527474901946450952078789439410581693777829144977217172397092723130874770379072485175449578961,        58967658369561163583995664151705537612631456941226585145001736155445085885436956133402962616775555500479429922140321605063456075222335023020218578571558003435174909963319619244821157746252197885628802071763470174413201522569356053296685834595362968800778468737693074613267684084217204017873750446802044584084498581219849973790017343888256411013653688556278788070745635045095995056877259642839730825907965544973672656542601570609068817838234644958846427643088478240335082249677864789882511592486797239674160452077169411971273434857626735582274817190984442183721945999865859466422472845277588368259261760233826535480137    ]
def bxor(x, y):     return bytes(i ^ j for i, j in zip(x, y))
def rsa_encrypt(plaintext, public_key):    # iv[64] -> h1[64] -> h2[64] -> h3[64]    iv = urandom(64)    h1 = sha512(iv).digest()    h2 = sha512(h1).digest()    h3 = sha512(h2).digest()        # x[192] := pt[192] ^ (h1|h2|h3)[192]    pt = int.to_bytes(plaintext, 192, 'big')    x192 = bxor(pt, h1 + h2 + h3)        # x[64] := iv[64] ^ x[192->64]    h4 = sha512(x192).digest()    x64 = bxor(iv, h4)    # x[256] := x[192]|x[64]    x256 = int.from_bytes(x192 + x64, 'big')    # rsa    return pow(x256, *public_key)
def rsa_decrypt(ciphertext, secret_key):    # rsa    x256 = pow(ciphertext, *secret_key)        # x[192]|x[64] := x[256]    x256 = int.to_bytes(x256, 256, 'big')    x192, x64 = x256[:192], x256[192:]        # iv[64] := x[64] ^ x[192->64]    h4 = sha512(x192).digest()    iv = bxor(x64, h4)    # iv[64] -> h1[64] -> h2[64] -> h3[64]    h1 = sha512(iv).digest()    h2 = sha512(h1).digest()    h3 = sha512(h2).digest()        # pt[192] := x[192] ^ (h1|h2|h3)[192]    pt = bxor(x192, h1 + h2 + h3)        # plaintext    return int.from_bytes(pt, 'big')    public_key, secret_key = rsa_generate_keys()

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/89486.html

(0)
guozi's avatarguozi
上一篇 2024年6月4日 下午3:41
下一篇 2024年6月4日 下午3:45

相关推荐

  • steam社区被禁了怎么办,steam社区内容已被移除

    在某些情况下,黑客可以利用操作系统或浏览器中的漏洞使用户遭受网络攻击和DNS 劫持。因此,保持操作系统和浏览器更新将提高您的安全性并降低遭受攻击的风险。 6.使用VPN服务 如果以…

    行业资讯 2024年5月11日
    0
  • e绅士网址被墙

    5、失去娱乐渠道:对于一些用户来说,电子绅士网站被封就意味着失去了娱乐渠道。看漫画、玩游戏、参与社区互动是一些用户每天需要做的事情。未来,他们将需要寻找其他选择来满足他们的娱乐需求…

    行业资讯 2024年5月12日
    0
  • 服务器配置mysql

    服务器配置mysql,这是一个在网络安全加速行业中不可忽视的重要步骤。MySQL数据库是什么?为什么要在服务器上配置它?如何安装和配置MySQL以确保网络安全?这些问题都将在本文中…

    行业资讯 2024年4月17日
    0
  • 花生壳公司,花生壳erp

    3、多平台支持:花生壳贝瑞科技不仅支持Windows、Mac等主流操作系统,还可以在iOS、Android等移动平台上使用。用户可以从任何地方轻松地远程访问和管理它。 4、数据安全…

    行业资讯 2024年3月25日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注