2个不稳定版本
0.2.0 | 2023年7月1日 |
---|---|
0.1.0 | 2023年6月30日 |
#1988 in 加密学
40KB
688 行
ecies-ed25519-morus
在ECIES上基于Twisted Edwards Curve25519和MORUS-1280-128的实验性方案
注意
- 灵活的对称加密 - 不可行的明文恢复攻击.
- 这项工作在ed25519方案中滥用了
sign & verify
密钥对来实现ECIES
。我们称之为扭曲,因为我们应该只使用ephemeral ones
(除了接收者)。 - 没有安全审计,也许不会发生。
示例
use rand_core::RngCore;
use ecies_ed25519_morus::{encrypt_into, decrypt_into};
const BUFFER_SIZE: usize = 512 * 1024; // avoid higher than this to prevent stackoverflow
let mut rng = rand_core::OsRng::default();
let sender_keypair = ed25519_dalek::SigningKey::generate(&mut rng);
let receiver_keypair = ed25519_dalek::SigningKey::generate(&mut rng);
let sender_public = sender_keypair.verifying_key();
let receiver_public = receiver_keypair.verifying_key();
let mut random_message = [0u8; BUFFER_SIZE];
let mut decrypted_message = [0u8; BUFFER_SIZE];
let mut ciphertext = [0u8; BUFFER_SIZE];
rng.fill_bytes(&mut random_message);
let decrypt_materials = encrypt_into(
&mut rng,
&sender_keypair,
&receiver_public,
&[],
&random_message[..],
&mut ciphertext[..],
)
.unwrap();
decrypt_into(
&decrypt_materials,
&receiver_keypair,
&sender_public,
&[],
&ciphertext[..],
&mut decrypted_message[..],
)
.unwrap();
assert_eq!(random_message, decrypted_message);
assert_ne!(sender_public, receiver_public);
特性
no-std
环境(例如:wasm)
cargo add ecies-ed25519-morus --no-default-features --features="pure"
std
环境(默认)
cargo add ecies-ed25519-morus
std
和aarch64
环境(例如:Apple Silicon)
cargo add ecies-ed25519-morus --features="aarch64-optimizations"
灵感来源
这项工作受到以下作品的强烈启发
- ecies-ed25519,它使用AES-GCM和临时密钥对(见:注意)
- rust-morus,修改为纯
no-std
(见:这些行)
未来工作
- 带关联数据的加密和解密
- 使用模糊器和工具提高测试
- 添加基准信息
- 添加示例和图表以阐述用例
- 实现
python
和c/c++
包装器
依赖关系
~4.5–6MB
~136K SLoC