纯研究项目,探索"人脑能否心算出具有密码学品质的哈希值"。
用户记住 8 个方位名词 + 1 个两位数(~9 项),通过九九乘法级的心算,从任意站点名生成不同的确定性密码,无需任何设备。
四层架构:秘密摘要 → 宫殿链 → SHA-256 种子 → 密码格式化。前两层心算,后两层计算机辅助。
下限(设计质量):接近最优。 在人脑算力约束下,雪崩率 83.8%、零碰撞、峰值工作记忆仅 2 项。
上限(安全天花板):不足。 Carry 状态仅 100 种(2 位数),DP 攻击可将 2^80 暴力搜索降至 ~2^34。这是人脑乘法能力的物理极限,不是设计缺陷。
| 困境 | 现状 | 根因 | 可改进性 |
|---|---|---|---|
| carry 瓶颈 | DP 攻击 ~2^34(远低于 2^80) | carry 仅 100 状态,攻击者可逐词搜索 | 3 位 carry→2^41,4 位→2^47,但心算已不现实 |
| 输出瓶颈 | 15 位 base-20 = 64.8 bits | 8 词 × 2 轮的输出位数不够 | 10 词 × 2 轮→82.1 bits,但加重记忆 |
| 熵税 | 理论 ~97 bits → 实际 ~65-79 bits | 用户选词偏好、Q&A 漂移、公式结构偏差 | 系统选词可缓解,但降低易用性 |
| 部分泄露 | 2 名词已知→69.4 bits(❌ 低于 80) | 每个名词贡献 ~11.5 bits | 结构性问题,无解 |
| 无容错 | 算错一步→全部后续位错 | carry 链单向传播 | 结构性问题,无解 |
| Miller 极限 | 9 项 = 7+2 上限,无扩展余量 | 人脑工作记忆有限 | 结构性问题 |
| vs BIP-39 | 128 bits vs ~34 bits(L2 独立) | BIP-39 全词参与 vs carry 链逐步混入 | 不同问题域,无法直接对标 |
核心矛盾:能心算的运算 → carry 窄 → 状态空间小 → 安全性受限。在"人脑可计算"约束下,BrainHash 接近理论最优,但理论最优本身不够用。
| 指标 | 当前值 | 安全下限 | 说明 |
|---|---|---|---|
| 零碰撞率 | 100% (1296/1296) | 100% | 2-char 输入 → 完全不同的输出 |
| 数字分布 χ² | 10.40 | <21.67 | 输出数字均匀(p>0.05) |
| 跨站 Hamming | 78.5% | ≥70% | 相似站点名 → 大不同输出 |
| 雪崩率(端到端) | 87.8% | ≥40% | 改 1 字符 → 87.8% 输出变化 |
| 雪崩率(单名词) | 83.8% | ≥50% | 换 1 名词 → 83.8% 输出变化 |
| 逆推路径(平均) | ~2.6 亿 (~28 bits) | ≥10,000 | 逆向工程难度 |
| 峰值工作记忆 | 2 项 | ≤7 | 远低于 Miller 定律上限 |
所有指标在 pnpm test 中自动断言。
brain-hash/
├── src/ 源码(TypeScript, ESM, Vitest)
├── test/ 测试(67 项:功能 + 安全性 + 雪崩 + 认知负载)
├── md/
│ ├── 架构/ 管线设计、层接口、认知负载
│ ├── 算法/ 各层算法实现细节
│ ├── 安全/ 威胁模型、熵分析、已知限制
│ └── 研究/ 前期调研(历史参考)
├── bin/ CLI 工具(待建)
└── examples/ 使用示例(待建)
pnpm install
pnpm test # 全量测试(67 项,含安全性断言)
pnpm typecheck # TypeScript 类型检查
pnpm check # 类型检查 + 测试