#stream-cipher #encryption #balloon #hashing #crypto

zeppelin_core

一个基于Balloon哈希实现的流密码库

2个版本

0.1.1 2023年5月13日
0.1.0 2023年1月10日

#1794 in 密码学

MIT/Apache

38KB
723

zeppelin_core

zeppelin_core是一个实现基于Balloon哈希的流密码的库。

⚠️ 警告:不要使用 ⚠️

此项目仅供娱乐。该库的设计和实现均未经过独立评估。

密码学特性

  • 认证加密
  • 密码总是加盐
  • 任意可扩展的时间和空间复杂度
  • 它是一个全或无变换

非密码学特性

  • 可扩展的容器格式,可以扩展
  • 可以用于实现ReadSeek特质的任何东西
  • 特别是,支持从磁盘到磁盘的直接操作

架构

该架构主要基于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