通过 Key-Selected Hashing 实现的增强扩散
发布: (2026年1月7日 GMT+8 21:56)
6 min read
原文: Dev.to
Source: Dev.to
概述
要在元类加密架构中实现完全扩散,系统可以实现键驱动的哈希算法选择。
密钥本身决定用于参数派生的哈希算法,从而为无限算法空间添加了另一层。
主要哈希候选
| 算法 | 典型用例 |
|---|---|
| BLAKE2s | 为 8‑ 到 32‑位平台优化 |
| BLAKE2b | 为 64‑位平台优化 |
| SHA‑224 | 紧凑的 224‑位输出 |
| SHA‑256 | 256‑位输出,广受信任 |
| SHA‑384 | 384‑位输出,安全裕度更高 |
| SHA‑512 | 512‑位输出,标准最高安全性 |
所有候选算法均具备密码学安全性,因此无需自定义哈希实现。
Source: …
密钥处理流程
- 提取 密钥的前几位。
- 确定 根据这些位使用哪种哈希算法。
- 哈希 使用选定的算法对剩余的密钥进行哈希。
- 生成 所有加密参数,来源于哈希输出。
示例
Key: "mySecretKey123xyz"
First 3 bits: 101 → selects SHA‑512
SHA‑512("mySecretKey123xyz") → generates modulus, exponent, maps …
更改单个位可以:
- 切换哈希算法本身。
- 产生完全不同的哈希输出。
- 导致派生参数出现最大程度的变化(雪崩效应)。
算法多样性
- 两个相似的密钥可能调用 不同的哈希函数(例如,SHA‑256 与 BLAKE2b)。
- 这为已经无限的算法空间增加了一个 乘法层。
加密强度
- 所有列出的散列函数都提供强扩散。
- 除密钥之外不需要额外的秘密。
性能灵活性
| 平台 | 最佳选择 |
|---|---|
| 资源受限(32 位) | BLAKE2s |
| 高性能(64 位) | BLAKE2b |
| 兼容性优先 | SHA‑256 / SHA‑512 |
速度(约略,平台相关):
- BLAKE2b: ~3.3 GB/s(在 64 位上最快)
- BLAKE2s: ~2.5 GB/s(在 32 位上最快)
- SHA‑256 / SHA‑224: ~500 MB/s
- SHA‑512 / SHA‑384: ~650 MB/s(在 64 位上比 SHA‑256 更快)
当性能至关重要时,密钥可以自然选择更快的算法;否则可选择较慢但兼容性更好的算法。
与现有框架的集成
之前:
Key → SHA‑256 → Parameters → Algorithm
使用哈希选择:
Key → [Key selects hash] → Selected Hash → Parameters → Algorithm
现在,密钥控制:
- 哪个哈希算法对其进行处理。
- 使用哪种映射生成方法。
- 应用哪种表示策略。
- 遵循哪种模数模式。
- 实施哪些转换规则。
每一层都会乘以可能性:
[ \infty_1 \times \infty_2 \times \infty_3 \times \infty_4 \times \infty_5 \dots ]
哈希选择方法
方法 1 – 直接位映射
| 前3位 | 哈希 |
|---|---|
| 000 | SHA‑224 |
| 001 | SHA‑256 |
| 010 | SHA‑384 |
| 011 | SHA‑512 |
| 100 | BLAKE2s |
| 101 | BLAKE2b |
| 110 | SHA‑256 (fallback) |
| 111 | SHA‑512 (fallback) |
方法 2 – 派生选择
selector = (sum of first N bytes) mod 6
0 → SHA‑224
1 → SHA‑256
2 → SHA‑384
3 → SHA‑512
4 → BLAKE2s
5 → BLAKE2b
方法 3 – 基于密钥长度
| 密钥长度 | 哈希 |
|---|---|
| 128‑256 位 | BLAKE2s |
| 257‑512 位 | SHA‑256 |
| 513‑1024 位 | SHA‑384 |
| 1025+ 位 | SHA‑512 或 BLAKE2b |
威胁模型
对攻击者
- 猜测密钥。
- 确定使用的哈希算法。
- 逆向工程哈希生成的参数。
- 确认生成的加密算法。
- 解密密文。
每一步都会乘以搜索空间 (∞ × 6 × ∞ × ∞ × ∞ …)。
对合法用户
- 密钥 确定性 地选择相同的哈希。
- 哈希 确定性 地生成相同的参数。
- 解密遵循相同的路径——无需额外的秘密。
示例实现(Python)
import hashlib
def derive_parameters(key: str):
"""
Derive encryption parameters from a key using key‑driven hash selection.
"""
# 1️⃣ Choose hash algorithm (simple selector: first byte % 6)
selector = key.encode()[0] % 6
hash_algorithms = [
hashlib.sha224,
hashlib.sha256,
hashlib.sha384,
hashlib.sha512,
hashlib.blake2s,
hashlib.blake2b,
]
selected_hash = hash_algorithms[selector]
# 2️⃣ Hash the key
key_hash = selected_hash(key.encode()).digest()
# 3️⃣ Derive parameters from the hash output
modulus = int.from_bytes(key_hash[:8], 'big') % (10**12)
exponent = int.from_bytes(key_hash[8:10], 'big') % 7 + 3
map_seed = int.from_bytes(key_hash[10:], 'big')
return modulus, exponent, map_seed, selected_hash.__name__
与传统方法的比较
| 方面 | 传统(固定哈希) | 扩展(键选哈希) |
|---|---|---|
| 哈希函数 | 固定(通常为 SHA‑256) | 按键选择(6 种可能) |
| 攻击者工作量 | 仅猜测密钥 | 猜测密钥 以及 哈希函数(×6) |
| 扩散性 | 限于单一哈希 | 跨多个哈希的完全扩散 |
| 开销 | 最小 | 略有增加(哈希选择) |
整体影响
- 完全扩散,同时在元类架构中添加乘法层。
- 仅使用已建立且可信的密码散列。
- 除密钥外不需要额外的秘密。
- 增加最小的计算开销。
- 无缝集成到现有框架中。
- 扩展算法空间的规模(再增加一个倍数)。
系列信息
Metaclass Encryption Architecture 系列的一部分
作者: Muhammed Shafin P (@hejhdiss)
许可证: CC BY‑SA 4.0 – 开源概念。
欢迎社区贡献!