10 个版本 (4 个破坏性版本)
0.5.2 | 2024 年 4 月 2 日 |
---|---|
0.5.1 | 2024 年 4 月 2 日 |
0.4.0 | 2024 年 3 月 27 日 |
0.3.3 | 2024 年 3 月 19 日 |
0.1.0 | 2024 年 3 月 17 日 |
#340 in 加密学
用于 venues
67KB
1.5K SLoC
存在性
生成简短离散存在性令牌的库和工具。
令牌可以在一定时间范围内验证其有效性,但在其他情况下则看起来是随机的,且可以合理地否认。这对隐私应该很有帮助!
结构
令牌应以上午十六进制字符串或二进制8字节数组的形式传递。
前4字节是盐的sha256哈希值(大写十六进制)加上UNIX时间戳的十进制字符串。
其他4字节是随机盐。
命令行界面
配套的命令行工具可以验证或生成存在性令牌。如果没有匹配或生成存在性(类似于grep),则给出非零退出码。
如果您指定SECRET(要散列成种子的字符串)、SECRET_SEED(32字节十六进制)或SECRET_SEED_FILE(包含32+字节的二进制文件,只读取前32个字节),则还可以生成用ed25519签名的存在性。
安装
$ cargo install presence
用法
生成新令牌或多个令牌
$ presence new
67CE238185EA6D0B
$ presence new new new new
54C2BACC2E2DAF45
FBB0E058058CFF1E
71FE18E54F52DC76
22E8DAEBBDD7A220
检查令牌
$ presence 1234567890123456
1234567890123456 None
$ presence nonsense
nonsense Failed: string must be 16 bytes long
$ presence nonsenseXXXXXXXX
nonsenseXXXXXXXX Failed: string must be a hex
在没有参数时也适用于stdin
$ presence 1234567890123456 | presence
1234567890123456 None
您还可以使用stdin以空行生成令牌
$ echo | presence
FFA86CA7292F9225
ouroboros,打印匹配的时间戳
$ echo | presence | presence
B615BEDA94640BA7 OK 1710799816
我们可以在shell中轻松创建相同的存在性令牌
presence_sh () {
local time="${time:-$(date +%s)}"
local salt="${salt:-$(head -c32 /dev/random | sha256sum | head -c8 | tr 'a-f' 'A-F')}"
printf "$salt$time" | sha256sum | head -c8 | tr 'a-f' 'A-F'
printf "$salt\n"
}
time=1710799816 salt=94640BA7 presence_sh
生成3个用ed25519签名的存在性,显示公钥
$ printf "12345678901234567890123456789012\n\n\n" |
SECRET_SEED_FILE="/dev/stdin" REVEAL_PUBLIC_KEY=yp presence
pubkey: 02F8C6129D816CF51C374BC7F8C3E63ED156CF78AEFB4A6550D97B87997977EE
76DF4CA121D3253EbazupoVjFItfM6gPG0bZce7adrWwFjrTiePI7KUwifVQwBc9Q8hWNOLcNpNQr6LlcMi0t5HMWxBajCFWhQ-LCQ
A1FB3851EFB04D71OUvhSXJ1WaVEKGTVJLO-0FiI9CJk1CjxC0JI2vYj_8Pyx0UHqN-gqN0z9g6J1vWSmT09pqvq7JZy7Jb3T_JqDg
772A7DBBFC75C305oZnUM5XX_TAIQ-0UAyFClaWGudOKuq5CUnvirTiHbVKBAtK7g8nfefel9Ep5dxd7gmoxDWv8r3cY-j5ejweuCA
保持存在
$ while echo; do sleep 1; done | presence
C0C6792F43904B94
3418E6B820D54FE3
DBA0FD7F65FDD4D7
492F9AED9F2A904F
AC646257A1B78CCE
A09249459EA29CAA
4D0AAFB96D3970F0
...
依赖关系
~14–22MB
~292K SLoC