通过 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‑256256‑位输出,广受信任
SHA‑384384‑位输出,安全裕度更高
SHA‑512512‑位输出,标准最高安全性

所有候选算法均具备密码学安全性,因此无需自定义哈希实现。

Source:

密钥处理流程

  1. 提取 密钥的前几位。
  2. 确定 根据这些位使用哪种哈希算法。
  3. 哈希 使用选定的算法对剩余的密钥进行哈希。
  4. 生成 所有加密参数,来源于哈希输出。

示例

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位哈希
000SHA‑224
001SHA‑256
010SHA‑384
011SHA‑512
100BLAKE2s
101BLAKE2b
110SHA‑256 (fallback)
111SHA‑512 (fallback)

方法 2 – 派生选择

selector = (sum of first N bytes) mod 6
0SHA224
1SHA256
2SHA384
3SHA512
4 → BLAKE2s
5 → BLAKE2b

方法 3 – 基于密钥长度

密钥长度哈希
128‑256 位BLAKE2s
257‑512 位SHA‑256
513‑1024 位SHA‑384
1025+ 位SHA‑512 或 BLAKE2b

威胁模型

对攻击者

  1. 猜测密钥。
  2. 确定使用的哈希算法。
  3. 逆向工程哈希生成的参数。
  4. 确认生成的加密算法。
  5. 解密密文。

每一步都会乘以搜索空间 (∞ × 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 – 开源概念。

欢迎社区贡献!

Back to Blog

相关文章

阅读更多 »

装饰性密码学

请提供您希望翻译的具体摘录或摘要文本,我才能为您进行翻译。

PGP问题 (2019)

请提供您希望翻译的文章摘录或摘要文本,我将为您翻译成简体中文。

构建安全的密码管理器

概述 本项目是一个使用 Python 和 Tkinter 构建的安全桌面密码管理器。它在本地存储和管理凭证,采用强加密和……