Curve25519加密算法

1. Curve25519简介

Curve25519 是目前最高水平的 Diffie-Hellman函数,适用于广泛的场景,由Daniel J. Bernstein教授设计。在密码学中,Curve25519是一个椭圆曲线提供128位安全性,设计用于椭圆曲线Diffie-Hellman(ECDH)密钥协商方案。它是最快的ECC曲线之一,并未被任何已知专利所涵盖。

给定一个用户的32字节密钥,curve25519计算该用户的32字节公钥。给定该用户的32字节密钥和另一个用户的32字节公钥,curve25519计算一个32字节的共享密钥提供给这两个用户使用。然后可以使用这个秘密对两个用户进行身份验证和信息加密。

2. 下载及编译Curve25519

curve25519库以非常高的速度计算curve25519函数。该库应用领域广泛。您可以并且应该将它应用在自己的程序中,而不是链接到共享库;编译后的代码大约为16KB,这取决于CPU。

下载及编译

  1. 下载
wget http://cr.yp.to/ecdh/curve25519-20050915.tar.gz
gunzip < curve25519-20050915.tar.gz | tar -xf -
  1. 编译
cd curve25519-20050915
env CC='gcc -O2' make
cp `cat FILES.lib` yourproject/
cat Makefile.lib >> yourproject/Makefile

3.使用Curve25519

对于将使用curve25519的任何C程序,修改该程序以包含curve25519.h;同时修改makefile以将该程序与curve25519.a链接,并声明该程序依赖于curve25519.a和curve25519.h。

  1. 计算密钥

在程序内部,要生成一个32字节的curve25519密钥,首先从一个加密安全源 :mysecret[0], mysecret[1], …, mysecret[31], 生成一个秘密的32个随机字节。然后照如下方式做:
mysecret[0] &= 248;
mysecret[31] &= 127;
mysecret[31] |= 64;
生成一个32字节Curve25519 秘钥mysecret[0], mysecret[1], …, mysecret[31]。

未来该库版本将支持一个curve25519_压缩函数,它将128个字节散列压缩为32个字节,增加了一些对不足的随机数生成器的保护;一个curve25519_钳函数,它将32个字节转换为密钥;以及一个最容易使用的组合的curve25519_秘钥生成函数,它直接将128个字节转换为密钥。

  1. 计算公钥
    为了生成和32Byte秘钥一致的32Byte的公钥 mypublic[0], mypublic[1], …, mypublic[31],调用函数
curve25519(mypublic,mysecret,basepoint);

其中常量basepoint为:

 const unsigned char basepoint[32] = {9};

以后的库版本将支持更简洁的curve25519_公共函数。

  1. 生成共享秘钥

给定另一用户的Curve25519公共秘钥hispublic[0], hispublic[1], …, hispublic[31], 调用

 curve25519(shared,mysecret,hispublic);

生成32-byte共享秘钥shared[0], shared[1], …, shared[31]. 另一个人可以根据自己的私钥以及你的公钥生成相同的共享秘钥。
然后你们两个都可以对这个共享秘钥进行散列运算,并将结果作为一个密钥使用,例如用于 Poly1305-AES。
以后的库版本将支持一个curve25519_扩展函数直接将一个32Byte秘钥运用散列运算生成128 byte用于作为一个秘钥,并且最容易使用的,一个组合curve25519_共享函数。

4. 参考

[Ed25519和Curve25519解释] https://blog.csdn.net/stella_alash/article/details/73658473
[Curve25519加解密 和 Ed25519加验签的使用] https://blog.csdn.net/farley119/article/details/87875201
[Ed25519算法] https://blog.csdn.net/u013137970/article/details/84573265
[android ed25519实现] https://mvnrepository.com/artifact/click.kobaken/ed25519/1.0.0
[[ed25519 C实现] https://github.com/orlp/ed25519
[ed25519 Java实现] https://github.com/str4d/ed25519-java

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Calvin880828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值