文档章节

python 使用curve25519

leonard_tech
 leonard_tech
发布于 2017/08/31 21:46
字数 433
阅读 178
收藏 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%

© 著作权归作者所有

共有 人打赏支持
leonard_tech
粉丝 2
博文 16
码字总数 3160
作品 0
海淀
高级程序员
私信 提问
改进安全,Firefox 57 将引入新的密钥协商算法实现

近日,Mozilla 安全博客宣布,它正与 INRIA 和 Project Everest 合作,在浏览器中整合 HACL* 加密算法库组件。双方合作的第一个成果是 Curve25519 密钥协商算法的实现 (RFC7748)。 该实现已经...

局长
2017/09/16
476
3
2017 年 Python 使用情况报告,你用 2.x 还是 3.x?

纵观各大编程语言在 2017 年的发展情况,我们会发现 Python 的发展速度非常快。Semaphore 社区调查了 Python 在 Semaphore 的托管 CI 服务中构建应用程序的使用情况。 去年的调查结果显示,有...

达尔文
2017/10/20
5.7K
31
python2与python3共存的解决方案

作者:匿名用户 链接:https://www.zhihu.com/question/21653286/answer/95532074 来源:知乎 想学习Python3,但是暂时又离不开Python2。在Windows上如何让它们共存呢?目前国内网站经常会让...

USTC_HCH
2018/06/26
0
0
ubuntu下Python的安装和使用

4.1 Python的安装 ubuntu下可以很方便的使用apt-get来安装软件,这里我们安装 Python 2.7/3.2(因为Python2和Python3区别很大)。安装步骤如下(下面的命令安装了两种)。 4.1.1 安装Python发...

JungleKing
2018/05/16
0
0
JDK 11 特性抢先看:5 月新增三个 JEP

一周前(2018年5月7日),JDK11 新增了三个 JEP 。在 jdk-dev 邮件列表中出现了三封邮件,Mark Reinhold 发表了以下公告: JDK 11 实现了 JEP:324:关于 Curve25519 和 Curve448 的重要协议...

oschina
2018/05/16
3.2K
5

没有更多内容

加载失败,请刷新页面

加载更多

牛津词典 2018 年度词汇 ——「有毒」!

简评:本文并没有「标题党」,牛津词典公布的 2018 年度词汇就是 Toxic. 意为「有毒的」。 2018 was toxic. Toxic 这个词是什么意思呢? 牛津词典(Oxford Dictionaries)在 Word of the Da...

极光推送
9分钟前
0
0
浅谈Service Mesh体系中的Envoy

https://blog.csdn.net/yunqiinsight/article/details/81019255

易野
17分钟前
0
0
嵌入式应用选择合适的微控制器

准备所需硬件接口列表 使用微控制器的基本硬件框图,准备一份微控制器需要支持的所有外设接口的列表。微控制器中有两种常见的接口类型需要列出。第一种是通信接口,这些是外围设备,如USB,S...

linuxCool
25分钟前
2
0
Group by使用

概述 GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。 GROUP BY必须得配合...

小橙子的曼曼
36分钟前
3
0
机械臂写中文

Make Me a Hanzi https://www.skishore.me/makemeahanzi/ 使用uArm Swift Pro机械臂写中文-毛笔字 https://github.com/makelove/Robot_Arm_Write_Chinese...

itfanr
48分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部