python 使用curve25519
博客专区 > Xjs_ts 的博客 > 博客详情
python 使用curve25519
Xjs_ts 发表于5个月前
python 使用curve25519
  • 发表于 5个月前
  • 阅读 38
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

解释:

密码学中Curve25519是一个椭圆曲线,提供128位的安全性,并设计用于椭圆曲线Diffie-Hellman(ECDH)密钥协商方案。它是最快的ECC曲线之一,并没有被任何已知的专利所涵盖。[1]所述的参考实现公共领域软件[2]

原来的Curve25519论文将其定义为Diffie-Hellman(DH)功能。丹尼尔·伯恩斯坦(Daniel J. Bernstein)曾经提出使用Curve25519的名称作为基础曲线,而名称为X25519为DH功能。

数学性质

所使用的曲线是由素数2 255 - 19定义的素数场的二次扩展上的y 2 = x 3 + 486662 x 2 + x,蒙哥马利曲线,并且使用基点x = 9。协议使用压缩椭圆点(只有X坐标),因此它允许仅使用XZ坐标有效地使用Montgomery梯子进行ECDH[4]

Curve25519的构建使得它避免了许多潜在的实施陷阱。[5]通过设计,它免受定时攻击,它接受任何32字节的字符串作为有效的公钥,不需要验证。

曲线与Ed25519签名方案中使用的扭曲爱德华兹曲线是双重等价的[6]

首先安装

pip install donna25519

 

 

代码:

In [116]:

import random
# help(random.randrange)
import binascii
import donna25519 as curve25519

In [121]:

bobs_private=curve25519.PrivateKey()
bobs_public=bobs_private.get_public()
print("BOb's Private Key:",binascii.hexlify(bobs_private.private))
print("BOb's Public Key:",binascii.hexlify(bobs_public.public))
BOb's Private Key: b'180b6a7274b2797688d7d7d6e982ad13c49923ba6d52f8ecd93a9a1b2ba60a76'
BOb's Public Key: b'f43ae3b47138a406ac72ce599cb5f25e1714922a966861d97775843956dfcd26'

In [122]:

Alis_private=curve25519.PrivateKey()
Alis_public=Alis_private.get_public()
print("Alis's Private Key:",binascii.hexlify(Alis_private.private))
print("Alis's Public Key:",binascii.hexlify(Alis_public.public))
Alis's Private Key: b'f8f699f118a912df27cefad42b247fceb4b11e0b5f77471ebfd67308cf1b5e64'
Alis's Public Key: b'cff4d3898bcd945b45391ff79d139064777f3117f732eb26b22a2cc73261ab0f'

In [123]:

# Alis pub --> bob
bobs_sharekey=bobs_private.do_exchange(Alis_public)
# Bobs pub -->Alis
alis_sharekey=Alis_private.do_exchange(bobs_public)

print("Bob's Share Key:",binascii.hexlify(bobs_sharekey))
print("Alis's Share Key:",binascii.hexlify(alis_sharekey))
Bob's Share Key: b'0457f7dcdbaeb6bc2aa843a431a2117ad0b38568d1c1e3c1adac88da7008ca48'
Alis's Share Key: b'0457f7dcdbaeb6bc2aa843a431a2117ad0b38568d1c1e3c1adac88da7008ca48'

In [124]:

if bobs_sharekey == alis_sharekey:
    print("ShareKey SAME 100%")
else:
    print("ShareKey Diff")
ShareKey SAME 100%
标签: Python curve25519
共有 人打赏支持
粉丝 1
博文 11
码字总数 3100
×
Xjs_ts
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: