hjack-rw/EnigmaR
GitHub: hjack-rw/EnigmaR
EnigmaR 是一个基于 Enigma 风格密码和 HMAC 的自验证短码生成与验证引擎,让代码无需数据库即可离线证明自身真实性。
Stars: 0 | Forks: 0
# EnigmaR
[](https://github.com/hjack-rw/EnigmaR/actions/workflows/ci.yml)
一个自主开发的 **Enigma 风格密码**,被用于一项真正实用的工作:
**密封的、自我验证的代码**。简短、美观的代码携带着自身的数据,
并能证明其真实性,且在验证时*无需查询数据库*。
[](https://hjack-rw.github.io/EnigmaR/)
```
SUMMR-7F3QA-9 → decode → { creator: 42, discount: 15%, expiry, serial } ✓ genuine
```
**这是真正的用例,而非玩具。** 它适用于任何需要分发代码且必须在无需查找的情况下自证其身的场景:折扣码和优惠券、礼品卡、许可证密钥、活动门票、推荐码。代码*本身即记录*,因此收银机或闸机可以离线对其进行验证,而背后无需共享数据库。
这种安全划分是刻意为之并已事先声明:标准的 **HMAC** 负责密封代码,而 Enigma 赋予其形态与特征。由于这是一种自主开发的密码,它并非用于存储真实机密的保险库,但它解决了既定问题,并且坦诚地说明了其强度的确切来源。
## 一分钟核心理念
Enigma 机器是一种*带有密钥的、可逆的、格式保留的*置换:它将符号映射为同一字母表、相同长度的符号。这正是**需要保持形状的代码**所需要的。将其包裹在 payload 和 HMAC 标签之外,代码便具有以下特性:
- **不可伪造:** HMAC 标签位于*内部*,因此没有密钥就无法铸造有效的代码
- **自我验证:** 解码并重新计算标签;验证真实性**无需数据库**
- **自我描述:** 代码携带自身的字段(id、折扣、有效期、序列号)
- **防篡改:** 更改任何一个字符都会导致标签验证失败
- **美观:** 分组的 base32,看起来像普通的代码,而不是杂乱的字符串
坦诚的划分:**HMAC 负责安全,Enigma 负责格式**(且基于密钥的配置为每个品牌提供各自独立的代码空间)。可逆性与格式保留是该引擎所能做到的,而单向哈希无法实现的关键所在。
```
from enigmar import FPE
card = FPE("key", "0123456789", nonce="card")
card.encrypt("4111 1111 1111 1111") # another valid, same-shape card; spaces kept
```
## 发展历程
最初作为 **BSc 毕业论文配套项目 (2020)** 启动,主题是数字信号处理中的加密,并持续发展至今。其历史记录保存在各个分支和标签中:
| 分支 / 标签 | 用途 |
|---|---|
| `thesis` / `v0-thesis` | 原始的 2020 年 Flask Enigma 应用,项目发源地 |
| `engine` / `v1-engine` | 案例研究引擎:包含动态特性、DH 握手、密钥轮换机制 (ratchet)、会话、socket 聊天、测试以及用法演示。其功能已远超代码本身的需求,旨在探讨该机制的极限 |
| `main` / `v2-codes` | **当前内容**:精简的核心 (`enigmar/`) 以及实时浏览器演示 |
## 目录结构(当前 `main` 分支:库与实时演示)
```
enigmar/ machine · cipher · fpe (the lean cipher core)
docs/ index.html · style.css · app.js · assets (the live demo → GitHub Pages)
```
`engine` 分支包含案例研究的构建版本:同一引擎的功能被远超代码本身的需求进一步扩展,并配备了完整的测试套件和可运行的用法演示。
这种做法是有意为之的“大材小用”,将其保留为该机制的试验场,而不是代码所需的最低限度。
## 诚实的边界
由于是自主开发且未经外部审查,因此如果要保护真实机密,请选择经过严格审查的密码(如 AES-GCM, ChaCha20)。然而,在其自身的适用范围内,该设计证明了自己的价值:
- **破解 payload 的成本不低:** 每个代码都带有自己的 nonce,因此没有两个代码共享相同的 keystream,你无法通过对比差异来批量读取它们(这曾是一个真实的弱点,现已修复)
- **伪造意味着伪造 HMAC 标签,** 这意味着必须掌握密钥
有效的安全性取决于你注入的熵,即随机密钥,而不是机器本身的精巧程度。这才是真正起支撑作用的核心部分。轮换租户的密钥则作为一项额外的便利功能:只需操作一次,所有使用旧密钥签发的代码都会在同一时刻失效。
纯标准库,零依赖。采用 MIT 许可证。
标签:Enigma密码机, HMAC, WebAssembly, 密码学, 手动系统调用, 授权码生成, 离线验证, 逆向工具, 防篡改