#chacha20-poly1305 #libsodium #poly1305 #chacha20 #public-key #nacl #encryption-decryption

不依赖于std crypto_secretstream

使用ChaCha20和Poly1305纯Rust实现libsodium的crypto_secretstream密钥流

4个版本 (2个重大更改)

0.2.0 2023年7月22日
0.1.1 2022年12月1日
0.1.0 2022年8月14日
0.0.1 2021年8月30日

#2572密码学

Download history 64/week @ 2024-03-14 10/week @ 2024-03-21 60/week @ 2024-03-28 188/week @ 2024-04-04 95/week @ 2024-04-11 770/week @ 2024-04-18 3252/week @ 2024-04-25 2243/week @ 2024-05-02 1938/week @ 2024-05-09 2350/week @ 2024-05-16 1119/week @ 2024-05-23 2014/week @ 2024-05-30 1881/week @ 2024-06-06 1699/week @ 2024-06-13 1812/week @ 2024-06-20 1024/week @ 2024-06-27

6,739 每月下载量
4 个crate中使用 (2个直接使用)

Apache-2.0 OR MIT

25KB
403 代码行

RustCrypto: crypto_secretstream

crate Docs Apache2/MIT licensed Rust Version Project Chat Build Status

纯Rust实现libsodiumcrypto_secretstream原语,提供使用ChaCha20Poly1305AEAD

它已与sodiumoxide进行了测试,这是一个Rustlibsodium绑定。

文档

关于

想象一下,Alice想要与Bob建立一个安全的通信频道,这个频道不能被其他人读取或修改。

她可以做的其中一种方式是首先与Bob达成共识,共享一个密钥(例如,通过密钥交换协议生成),然后她通过一个正常/不安全的通信频道发送消息,这些消息都是使用这个共享密钥加密的。然后,当Bob收到这些消息时,他可以解密每一个,仅仅知道这个共享密钥就可以确保它确实是由Alice发送的。

在内部,第一个消息由Alice生成的一个随机数后缀,称为nonce,在加密和解密时考虑,然后对每个新消息进行递增。

它还允许在每个消息中发送附加数据。这些数据未加密,但在加密过程中使用,因此接收者需要提前知道。它可以用来添加另一层安全性,大小不是固定的,就像密钥一样。

许可

以下两种许可中选择一种:

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,都应如上所述双重许可,不附加任何额外条款或条件。

注意事项

  • 计数器溢出时自动重键尚未测试
  • Tag::Final实际上没有做任何事情,因为libsodium做了,但sodiumoxide没有
  • KeyNonce没有被置零,也许应该这样做
  • PullStream中的MAC校验不是常数时间

依赖项

~0.6–1.2MB
~22K SLoC