newhope后量子密钥交换算法的实验实现

PyNewHope的Python项目详细描述


新希望

pynewhope是alkim、ducas、poppelmann和schwabe提出的newhope量子安全密钥交换加密方案的实验性(不稳定)python实现:https://eprint.iacr.org/2015/1092

newhope使用基于晶格的加密技术,更精确地说是环lwe(有错误的环学习),它被设计成抗量子的。

这个python实现基于并复制了liboqs存储库中可用的参考c实现的大部分功能:https://github.com/open-quantum-safe/liboqs/tree/master/src/kex_rlwe_newhope

这个实现被设计为在python应用程序中本地使用,而不需要包装器或将c实现合并到生产软件中的其他方法。测试工具在test_newhope.py中提供,文档作为代码注释提供。代码应该是可读的和可用的。

仅用于教育目的!避免在实际项目中使用此代码。

这项工作是作为硕士学位论文提交给纽约大学库兰特数学科学研究所计算机科学系的高级实验室。它应该被认为是开源的,可以自由使用和修改。

必须安装Python3.6才能使此实现正常工作,因为它依赖于hashlib.shake_128(),而该版本仅在3.6及更高版本中可用。

从pypi安装说明:

这个库在pypi存储库中可用(由Svetlin Nakov打包)。要安装它,请使用以下命令:

pip install pynewhope

示例用法:

frompynewhopeimportnewhope# Step 1: Alice generates random keys and her public msg to BobalicePrivKey,aliceMsg=newhope.keygen()print("Alice sends to Bob her public message:",aliceMsg)# Step 2: Bob receives the msg from Alice and responds to Alice with a msgbobSharedKey,bobMsg=newhope.sharedB(aliceMsg)print("\nBob sends to Alice his public message:",bobMsg)print("\nBob's shared key:",bobSharedKey)# Step 3: Alice receives the msg from Bob and generates her shared secretaliceSharedKey=newhope.sharedA(bobMsg,alicePrivKey)print("\nAlice's shared key:",aliceSharedKey)ifaliceSharedKey==bobSharedKey:print("\nSuccessful key exchange! Keys match.")else:print("\nError! Keys do not match.")

样本输出:

Alice sends to Bob her public message: ([1328, 8117, 8737, 6265, 8128, 12924, 3390, 12041, 4568, 7602, 2673, 7517, 2410, 1291, 2125, 2789, 11486, 1568, 12043, 9209, 6681, 9858, 5936, ..., 1021, 2113, 8424, 8501, 3442, 4238, 9503, 4625, 11250, 11609], b"\r\x8c\x89\xd0\xa0\x06gc8\xd2%:\xb0Z'\x9c\x8cs\xf9\xf8\xe7\x9f\x84T\xb73\x85w\xcc\xe5\xb5\xe1")

Bob sends to Alice his public message: ([2, 0, 3, 1, 0, 3, 0, 3, 0, 1, 0, 1, 0, 0, 1, 1, 1, 3, 0, 2, 0, 2, 2, 1, 1, 3, 2, 3, 3, 3, 3, 1, 3, 1, 0, 1, 2, 0, 1, 1, 3, 3, 2, 1, 1, 2, 0, 3, 3, 2, 1, 1, 1, 0, 2, 3, 1, ..., 3, 3, 2, 2, 0, 1], [9328, 8906, 2517, 6830, 4517, 2142, 8296, 938, 3333, 10585, 12196, 11496, 3726, 12462, 10271, 4871, 4499, 2899, 11284, 8994, 4732, 7381, 2950, 8675, 4349, 2534, 2161, ..., 6591, 6369, 8664, 5182, 10856, 4314, 7919, 3651, 2352, 4103, 6035, 3990])

Bob's shared key: [92, 122, 75, 33, 239, 164, 84, 241, 245, 204, 106, 197, 142, 230, 28, 189, 54, 112, 190, 124, 176, 66, 129, 69, 108, 66, 110, 42, 115, 70, 17, 107]

Alice's shared key: [92, 122, 75, 33, 239, 164, 84, 241, 245, 204, 106, 197, 142, 230, 28, 189, 54, 112, 190, 124, 176, 66, 129, 69, 108, 66, 110, 42, 115, 70, 17, 107]

Successful key exchange! Keys match.

从输出中可以看到,alice的公共消息由一系列多项式系数+一个随机种子(字节序列)组成。bob的公共消息由两个多项式系数序列组成。由alice和bob共享密钥得到的密钥也由一系列多项式系数组成。

有关在Mac/Linux上克隆和测试Pynewhope的说明:

安装了Python3.6和Git后,打开一个终端并输入以下命令:

git clone https://github.com/nakov/PyNewHope

cd PyNewHope

python3.6 test_newhope.py

在windows上克隆和测试pynewhope的说明:

首先确保安装了Python3.6。

使用“克隆或下载”按钮从https://github.com/nakov/PyNewHope将pynewhope作为zip文件下载。

将pynewhope解压到python路径中的目录中。

打开一个python shell并输入以下命令:

import test_newhope

test_newhope

贡献者:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么数组中的空格(“”)有错误?   java我需要一个正则表达式,它只接受一个字符串(只有字母和数字),在开头和结尾允许有空格,但不能在两者之间?   更改列表视图适配器后禁用java Fast scoll   java JTable在使用DefaultTableModel插入后未刷新   java这是在JavaFX中切换场景的正确方法吗?   java如何在GWT中清除根面板?   java如何正确使用加载数组和保存数组方法?   使用JavaMail API在电子邮件中单击链接   交互式Java程序   JavaSpring、Morphia和DataAccessException实现   JAVA试图用randoop生成单元测试的lang.IllegalStateException   Android上的javanio性能   java为列表添加值初始化列表大小   swing Java图形不在底部和右侧绘制   java如何调用scanDouble()方法?   java Android截击无连接错误   java正则表达式和AwkFilenameFilter   Asm api版本定义中的java按位OR运算符