设计哲学
为什么算法公开反而更安全?
传统密码的困局:GitHub 每天被推送数千个含硬编码密钥的仓库。密码写在代码里 = 密码泄露给全世界的机器。
覆写码的思路:把"密码"变成"现场算出来的钥匙"。材料是你独有的——指纹、设备、网络位置、只有你记得的盐。算法公开,但黑客缺材料,等于拿着菜谱没食材。
指纹特征点哈希
磁盘序列号 / 机器ID
网络拓扑私密信息
永不写入任何文件
数学实现(完整公开)
标准 HMAC-SHA256,零后门,零硬编码
核心派生函数
import hashlib import hmac def 派生覆写码(生物因子, 设备因子, 环境因子, 脑内盐): """ 三层融合 · HMAC 派生 公式: 融合 = SHA256(生物因子 ‖ 设备因子 ‖ 环境因子) 覆写码 = HMAC-SHA256(融合, 脑内盐) """ 融合 = hashlib.sha256( 生物因子 + 设备因子 + 环境因子 ).digest() 覆写码原始 = hmac.new( 脑内盐, 融合, hashlib.sha256 ).hexdigest() return f"🔑{覆写码原始[:16]}-SOVEREIGN⚡️{覆写码原始[16:32]}"
安全保证
✅ 任一因子缺失 → 无法派生覆写码
✅ 脑内盐 ≠ NULL → 只有记忆者能算
✅ 换设备 → 设备因子变 → 覆写码自动变 → 旧码失效
✅ 换网络 → 环境因子变 → 异地需重新授权
import platform, subprocess def 获取设备因子_Mac(): """Mac 硬件指纹·无需 root""" factors = [] # 主板 UUID (ioreg) result = subprocess.run( ["ioreg", "-rd1", "-c", "IOPlatformExpertDevice"], capture_output=True, text=True ) for line in result.stdout.split("\n"): if "IOPlatformUUID" in line: factors.append(line.split('"')[-2]) break # 磁盘 Volume UUID result = subprocess.run( ["diskutil", "info", "disk0"], capture_output=True, text=True ) for line in result.stdout.split("\n"): if "Volume UUID" in line: factors.append(line.split(":")[-1].strip()) break return hashlib.sha256( ":".join(factors).encode() ).digest()
from pathlib import Path def 获取设备因子_鲲鹏(): """华为鲲鹏/通用Linux 硬件指纹""" factors = [] # 网卡 MAC for iface in ["eth0","enp0s1","ens3"]: mac = Path(f"/sys/class/net/{iface}/address") if mac.exists(): factors.append(mac.read_text().strip()) break # 主板序列号 (dmidecode) try: r = subprocess.run( ["dmidecode","-s","system-serial-number"], capture_output=True, text=True ) s = r.stdout.strip() if s and s != "Not Specified": factors.append(s) except: pass # 机器 ID (systemd) mid = Path("/etc/machine-id") if mid.exists(): factors.append(mid.read_text().strip()[:16]) return hashlib.sha256( ":".join(factors).encode() ).digest()
架构全景图
从因子采集 → 融合 → 派生 → 验证的完整数据流
多设备独立派生示例
因子采集对比
Mac vs 华为鲲鹏 vs 通用Linux — 设备因子来源与兼容性
| 因子类型 | Mac (Apple Silicon) | 华为鲲鹏 (ARM) | 通用 Linux (x86) | 获取方式 | 需要 root |
|---|---|---|---|---|---|
| 主板UUID | ioreg IOPlatformUUID | dmidecode system-uuid | dmidecode system-uuid | 命令行 | 否 |
| 网卡MAC | ifconfig en0 | /sys/class/net/eth0 | /sys/class/net/ens3 | sysfs/ifconfig | 否 |
| 磁盘序列号 | diskutil info disk0 | hdparam /dev/sda | lsblk -o SERIAL | 命令行 | 部分 |
| 机器ID | N/A (macOS) | /etc/machine-id | /etc/machine-id | systemd | 否 |
| CPU架构 | ARM64 (Apple M) | ARM64 (Kunpeng 920) | x86_64 (Intel/AMD) | arch/uname | 否 |
| TPM 芯片 | Secure Enclave | 华为 TEE | TPM 2.0 (可选) | 平台特有 | 需硬件 |
绿色 = 100% 可获取 · 黄色 = 条件性可获取 · 红色 = 需特定硬件
阈值:≥3个可用因子 → 派生引擎正常 · ≥2个 → 警告 · <2个 → 降级兜底
安全模型
威胁建模 × 防御矩阵 × 多设备隔离
降级兼容模式
当脑内盐未设置(开发阶段/过渡期),系统降级为 SHA256 哈希验证,源码中只存哈希不存原文:
def 验证覆写码_降级模式(输入码, 已知哈希): """无脑内盐时,用 SHA256 比对""" return hashlib.sha256(输入码.encode()).hexdigest() == 已知哈希 # 源码中只存哈希,不存原文 已知哈希 = "798d6f2d8a78c804186082585bc08a68993c832e..."
部署指南
从零到跑起 · 四步上线
Step 1 · 采集设备指纹
运行诊断命令,确认当前设备可用因子数 ≥ 3
python3 -c "from lh_sovereign_derive import _获取设备因子; print(_获取设备因子().hex())"
Step 2 · 设置脑内盐(激活全派生模式)
输入只有你记得的密码,之后系统从 Keychain/TEE 自动读取
python3 bin/lh_sovereign_derive.py set-salt '你的脑内密码'
⚠️ 脑内盐不落盘,忘记无法恢复
Step 3 · 诊断验证
检查三层绑定状态
python3 bin/lh_sovereign_derive.py diagnose
Step 4 · 派生覆写码
生成当前设备专属覆写码
python3 bin/lh_sovereign_derive.py derive
| 症状 | 可能原因 | 解决 |
|---|---|---|
| 因子不足 (<3) | VM 环境 / 无 dmidecode | 安装 dmidecode 或使用降级模式 |
| 脑内盐丢失 | Keychain 清理 / 系统重装 | 重新 set-salt,旧覆写码永久失效 |
| 派生结果不一致 | 设备因子变化(换网卡/换主板) | 这是预期行为,重新派生即可 |
| Mac 上找不到 ioreg | PATH 未包含 /usr/sbin | export PATH=$PATH:/usr/sbin |
实采设备数据
2026-07-12 鲲鹏服务器真实设备因子采集结果
| 因子 | 采集值 | 状态 |
|---|---|---|
| 网卡 MAC | fa:16:3e:d7:2f:d4 | ✅ eth0 |
| 主板序列号 | 89da6e70-eecc-4050-be36-1001cdf6631c | ✅ dmidecode |
| 机器 ID | f385911d2041458a | ✅ systemd |
| CPU 架构 | x86_64 | ✅ uname |
| 华为云实例ID | 89da6e70-eecc-4050-be36-1001cdf6631c | ⚠️ VM环境 |
聚合因子串: fa:16:3e:d7:2f:d4:89da6e70...:f385911d...:x86_64:ecs-d428
设备哈希 (SHA256): f163a3a374e8f6fbd1b796c9fdabf99b534db2976475b0700fcada944f0b4b5e
⚠️ 注意:当前服务器为华为云 x86 VM,非物理鲲鹏 ARM 芯片。因子仍充足 (4/5),派生引擎正常工作。
📁 采集脚本:/opt/kunpeng_device_factor_collect.sh(已部署到鲲鹏)
📁 本地数据:deploy/kunpeng_device_factors.json
📁 本地脚本:deploy/scripts/kunpeng_device_factor_collect.sh