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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章