22个版本
0.10.0 | 2024年7月24日 |
---|---|
0.8.1 | 2022年10月10日 |
0.7.1 | 2022年2月13日 |
0.7.0 | 2021年12月29日 |
0.3.4 | 2018年7月7日 |
#1 in #strobe
每月20,550次下载
用于23个crate(14个直接使用)
65KB
927 行
strobe-rs
这是一个纯Rust、no_std
的Strobe协议框架实现。设计者的描述
Strobe是一种新的加密协议框架。它也可以用于常规加密。其目标是使加密协议的开发、部署和分析更加简单;并且能够适应非常小的物联网设备。为此,它仅使用一个块函数——Keccak-f——来加密和验证消息。
此实现目前仅支持Keccak-f[1600](最高安全级别)作为内部排列函数。
示例
一个简单的示例,执行认证加密和解密
use strobe_rs::{SecParam, Strobe};
use rand::RngCore;
// NOTE: This is just a simple authenticated encryption scheme. For a robust AEAD construction,
// see the example at https://strobe.sourceforge.io/examples/aead/
fn main() {
let mut rng = rand::thread_rng();
// Sender and receiver
let mut tx = Strobe::new(b"correctnesstest", SecParam::B256);
let mut rx = Strobe::new(b"correctnesstest", SecParam::B256);
// Key both sides with a predetermined key
let k = b"the-combination-on-my-luggage";
tx.key(k, false);
rx.key(k, false);
// Have the transmitter sample and send a nonce (192 bits) in the clear
let mut nonce = [0u8; 24];
rng.fill_bytes(&mut nonce);
rx.recv_clr(&nonce, false);
tx.send_clr(&nonce, false);
// Have the transmitter send an authenticated ciphertext (with a 256 bit MAC)
let orig_msg = b"groceries: kaymac, ajvar, cream, diced onion, red pepper, grilled meat";
let mut msg_buf = *orig_msg;
tx.send_enc(&mut msg_buf, false);
let mut mac = [0u8; 32];
tx.send_mac(&mut mac, false);
// Rename for clarity. `msg_buf` has been encrypted in-place.
let mut ciphertext = msg_buf;
// Have the receiver receive the ciphertext and MAC
rx.recv_enc(ciphertext.as_mut_slice(), false);
let res = rx.recv_mac(&mac);
// Check that the MAC verifies
assert!(res.is_ok());
// Check that the decrypted ciphertext equals the original plaintext
let round_trip_msg = ciphertext;
assert_eq!(&round_trip_msg, orig_msg);
}
功能
默认功能标志:无
功能标志列表
std
— 为AuthError
实现std::error::Error
。asm
— 如果可用,则启用Keccak排列的优化汇编。汇编目前仅存在于ARMv8。serialize_secret_state
— 为Strobe
结构实现serde
的Serialize
和Deserialize
特性。安全提示:序列化Strobe状态会输出安全敏感数据,这些数据必须保密。将这些数据视为您会处理的私有加密/解密密钥。
有关如何省略或包含功能标志的信息,请参阅cargo功能文档。
MSRV
当前最低支持的Rust版本(MSRV)是1.60.0(2022-04-04)。
测试
要运行测试,请执行
cargo test --features "std"
这包括已知答案测试,这些测试针对kat/目录中的JSON编码测试向量。要验证这些测试向量与参考Python实现的一致性,请先切换到kat/
目录,然后运行python2 verify_test_vector.py
,并遵循包含的说明。
基准测试
要执行基准测试,请运行
cargo bench
这将生成一个包含图表的总结,图表位于 target/crieteron/report/index.html
。由于STROBE中的几乎所有函数都具有相同的运行时间,所以这些图表可能不会很有趣。
许可证
许可方式任选其一
- Apache许可证,版本2.0,(LICENSE-APACHE)
- MIT许可证 (LICENSE-MIT)
由您自行选择。
警告
此代码在任何意义上均未经过审计。请自行判断是否使用。
依赖项
~0.5–1.1MB
~25K SLoC