文档章节

python 使用curve25519

leonard_tech
 leonard_tech
发布于 2017/08/31 21:46
字数 433
阅读 143
收藏 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
465
3
JDK 11 特性抢先看:5 月新增三个 JEP

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

oschina
05/16
0
0
PolarSSL 1.3.3 发布,SSL 加密库

轻量级SSL库PolarSSL发布1.3.3.2014-01-01。上个版本2013-11-07的1.3.2。遗留产品线1.2.10/1.1.8 越来越多重量级应用已支持PolarSSL如hiawatha,OpenVPN。 完全改进: Description Our partin...

fei
2014/01/07
841
1
OpenSSH 6.5 发布,新的加密和私钥格式

OpenSSH 6.5 发布了,包括全新加密方法和密钥类型,新的私钥格式等等。支持使用 elliptic-curveDiffie Hellman in Daniel Bernstein's Curve25519 的密钥交换。详细改进记录请看这里。 Open...

oschina
2014/01/31
2.8K
2
VS Code 安装与使用,Python 顶级 IDE 编程指南!

介绍 Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比...

Python新世界
07/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

iframe里弹出的层显示在整个网页上

通过在iframe页面添加js脚本,动态给父窗体创建一个div,然后设置让其显示在最顶层这样就可以了 在文件夹中创建两个文件,一个iframe页面,一个父页面index。

少年已不再年少
13分钟前
0
0
聊聊storm trident spout的_maxTransactionActive

序 本文主要研究一下storm trident spout的_maxTransactionActive MasterBatchCoordinator storm-core-1.2.2-sources.jar!/org/apache/storm/trident/topology/MasterBatchCoordinator.java ......

go4it
21分钟前
0
0
js时间函数getTime() 在苹果手机上返回NaN的问题

一、出现问题 var newStartDate = new Date('2017-08-30');var newStartTime = newStartDate.getTime(); 获取到的时间戳,在Android手机正常,在IPhone中返回NaN。 问题说明: 在苹果手机...

tianma3798
24分钟前
0
0
访问日志不记录静态文件、切割和静态元素过期时间

11月16日任务 11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间 11.22、 访问日志不记录静态文件 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录...

zgxlinux
30分钟前
0
0
爬虫教程」Python做一个简单爬虫,小白也能看懂的教程

俗话说“巧妇难为无米之炊”,除了传统的数据源,如历史年鉴,实验数据等,很难有更为简便快捷的方式获得数据,在目前互联网的飞速发展写,大量的数据可以通过网页直接采集,“网络爬虫”应运...

糖宝lsh
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部