#timelock #crypto #encryption

lhtlp

Rust中线性同态时间锁谜题(LHTLP)的实现

2个版本

0.1.1 2024年8月19日
0.1.0 2024年8月13日

#432密码学

Download history 63/week @ 2024-08-07 168/week @ 2024-08-14

每月 231 下载

MIT 协议

35KB
347

Crates.io Crates.io

Rust中的线性同态时间锁谜题(LHTLP)实现

这个LHTLP实现完全用Rust编写,基于num-bigintnum-primes包。

它实现了2019年Malavolta和Thyagarajan在《同态时间锁谜题及其应用》中描述的协议,第4.1节。

什么是LHTLP?

LHTLP是一种线性同态时间锁谜题。时间锁谜题是一种加密原语,允许在谜题中加密一个秘密,该谜题只能在执行一定数量的本质上顺序操作(在RSA群中的平方)后才能恢复。线性同态性质意味着一组谜题可以同态评估,即一组谜题可以捆绑在一起或作为一个单独的谜题与电路一起评估。有关更多详情,请参阅https://eprint.iacr.org/2019/635.pdf

用法

设置、生成和解决谜题

设置LHTLP需要两个参数

  • lambda:安全参数,用于设置随机生成的安全素数位数
  • difficulty:执行次数,当使用solve检索秘密时,线性增加计算时间
 use lhltp::LHTLP;
 const difficulty: u64 = 100000000;
 const lambda: u64 = 64;

 let lhtlp = LHTLP::setup(lambda, BigUint::from(difficulty));
 let secret = 42;
 let puzzle = lhtlp.generate(secret);
 let solution = lhtlp:solve(puzzle);

多个谜题的同态评估

 let first = lhtlp.generate(42);
 let second = lhtlp.generate(13);
 let bundle = lhtlp.eval(vec![first, second]);
 let solution = lhtlp:solve(puzzle);

 assert!(BigUint::from(55u32), solution);

依赖关系

~1MB
~17K SLoC