2个版本
0.1.1 | 2023年5月13日 |
---|---|
0.1.0 | 2023年1月10日 |
#1794 in 密码学
38KB
723 行
zeppelin_core
zeppelin_core是一个实现基于Balloon哈希的流密码的库。
⚠️ 警告:不要使用 ⚠️
此项目仅供娱乐。该库的设计和实现均未经过独立评估。
密码学特性
- 认证加密
- 密码总是加盐
- 任意可扩展的时间和空间复杂度
- 它是一个全或无变换
非密码学特性
- 可扩展的容器格式,可以扩展
- 可以用于实现
Read
和Seek
特质的任何东西 - 特别是,支持从磁盘到磁盘的直接操作
架构
该架构主要基于hash::Balloon
,这是一个具有可变长度输出的哈希函数,然后用于实现流密码。hash::Balloon
有三个主要设置
s_cost
,表示内部状态的大小,以64字节块为单位t_cost
,表示创建密钥时需要填充内部状态的次数step_delta
,表示填充一个块所需的SHA3-512
哈希次数。这也决定了流密码的运行速度。
使用这些参数,可以任意扩展密钥的时间和内存需求。
为了方便,这些参数组合成一个cipher::CryptSettings
对象。
为了进行认证,使用了MAC-then-Encrypt方案。
为了将此方案转换为全或无变换,盐值也通过与流密码的结果进行XOR运算来“加密”。
加密过程可以总结如下
┌ ─ ─ ─ ─ ─ ┌──────────┐┌────────┐┌────────┐┌────────┐
OS ││ Key ││ File 1 ││ File 2 ││ ... │
└ ─ ─ ─ ─ ─ └──────────┘└────────┘└────────┘└────────┘
│ │ │ │ │
│ │ └─────────┼─────────┘
▼ │ ▼
┌ ─ ─ ─ ─ ─ │ ┏━━━━━━━━━┓
Entropy │ │ ┃ ZIP ┃
└ ─ ─ ─ ─ ─ │ ┗━━━━━━━━━┛
│ │ │
│ │ ┌─────────────┴────┐
▼ │ ▼ ▼
┌──────────┐ │ ┏━━━━━┓ ┌─────┬──────────┐
│ Salt │ ├──▶┃Sha3 ┃──▶│ MAC │Plaintext │
└──────────┘ │ ┗━━━━━┛ ├─────┴──────────┤
│ ▼ └────────────────┘
│ ┏━━━━━━━━━━━┓ ┏━━━┓ │
├────▶┃ Balloon ┃──▶┃Xor┃◀───────┘
│ ┗━━━━━━━━━━━┛ ┗━━━┛
▼ │
┏━━━━━━━━━━━┓ │
┃Wrapped Xor┃◀────────────────┴───────┐
┗━━━━━━━━━━━┛ │
│ ▼
│ ┌──────────┐ ┌──────────────┐
│ │ Metadata │ │MAC/Ciphertext│
│ └──────────┘ └──────────────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┏━━━━━━━━━━┓ ┌──────────┐
│ Salt │ ┃ json ┃ │ Data │
└──────────┘ ┗━━━━━━━━━━┛ └──────────┘
│ │ │
└───────────────┼───────────────┘
│
▼
┏━━━━━━━━━━┓ ┌──────────┐
┃ ZIP ┃──▶│ _.zep │
┗━━━━━━━━━━┛ └──────────┘
注意:目前仅实现了单个文件的加密。
依赖项
~4–12MB
~112K SLoC