1 个不稳定版本
0.1.0 | 2024 年 6 月 28 日 |
---|
#1318 in 密码学
26KB
485 行
Orodruin
基于 Ristretto 曲线的安全 Rust Monero 类 bLSAG 环签名,如《从零到 Monero》所述。
环签名
"环"是一组公钥。环签名是一种只能由环成员伪造的签名,虽然你可以验证其真实性,但你不能确定是哪个成员伪造的。
此 crate 实现了 bLSAG,这是一种环签名,可以证明由同一密钥发出的不同签名是相互关联的(而不破坏匿名性)。你可能想使用一次性密钥来避免可链接性。
典型应用是匿名投票系统和匿名交易(例如 Monero)。
解释和正确性证明见这篇简短的文章。
特性
- 签名(功能
alloc
) - 验证(no-std)
- 泛型,用于实现
digest::Digest
的加密 512 位哈希器(例如 sha2)(功能digest
) - 实现
blake2b-simd
(功能blake2b
) - 你可以轻松实现其他哈希器
- 不保证 恒定时间操作。
示例
use orodruin::*;
let mut rng = rand::thread_rng();
let mut hasher = sha2::Sha512::default();
let secret_keys: Vec<SecretKey> = (0..4).map(|_| SecretKey::random(&mut rng)).collect();
let ring: Vec<PublicKey> = secret_keys.iter().map(SecretKey::public_key).collect();
for (i, secret_key) in secret_keys.into_iter().enumerate() {
let message = i.to_be_bytes();
let signature = sign(secret_key, &ring, i, &message, &mut rng, &mut hasher);
assert_eq!(signature.verify(ring.iter(), &message, &mut hasher), Ok(()));
}
免责声明
我是一个学生,在密码学和计算机安全领域(截至 2024 年),但 我不是椭圆曲线方面的专家,也没有为这个算法做过安全性证明。此 crate 尚未 经过专家审查。使用风险自负。
名称
在 指环王 中,奥罗杜因是力量之戒被锻造和毁灭的火山。由于 crate Nazgul 的实现细节是受其启发的,我们保持了这一主题。
许可证
GNU AGPL v3,版权所有 2024 Pascal Engélibert (为什么是 copyleft?)
所有权利归 Axiom-Team(法国协会法律 1901)所有。
实现细节受 nazgul 启发。
本程序是自由软件:您可以在自由软件基金会发布的 GNU Affero 通用公共许可证的条款下重新分发和/或修改它,许可证版本为 3。
本程序按原样分发,不提供任何保证;甚至没有对适销性和特定用途适用性的暗示保证。有关详细信息,请参阅 GNU Affero 通用公共许可证。
您应该已经收到了与该程序一起的GNU Affero General Public License副本。如果没有,请参阅https://gnu.ac.cn/licenses/。
依赖项
~1.5–2.3MB
~50K SLoC