Coder-cci/Absoluta
GitHub: Coder-cci/Absoluta
一个实现了变体一次性密码本的对称加密系统,通过扩展字符集、随机 salt 插入和 XOR 掩码追求完善保密性。
Stars: 0 | Forks: 0
# Absoluta
一个实现了变体一次性密码本(one-time pad)的密码学系统,具备扩展字符集和 salt 插入机制。
## 概述
Absoluta 是一个对称加密系统,通过结合大型密文字母表、随机 salt 插入和 XOR 掩码来实现完善保密性(perfect secrecy)。根据所选的密码字母表,该系统为每个源字符提供从数十亿到数百上万亿种可能的组合。
## 核心算法
### 关键组件
- **Seed**:32 个十六进制字符(128 位熵)
- **Salt 概率**:3 位数字值(000-999),控制 salt 插入频率
- **位置权重**:三个数字(0-3),决定 salt 放置的概率
- **密码字母表**:从外部文件加载的 Unicode 字符集(支持多种字母表)
### 加密过程
对于每个源字符:
1. 将源字符转换为其在源字母表中的索引(ASCII 为 0-94)
2. 从密码字母表中生成随机 Y 值
3. 根据概率参数确定是否存在 salt
4. 如果存在 salt:
- 使用循环权重算法选择 salt 位置
- 生成随机 salt 值
- 按确定的顺序构建三元组 [salt, X, Y]
5. 如果没有 salt:
- 构建二元组 [X, Y]
6. 将所有索引转换为密码字母表符号
### Salt 位置选择
系统使用具有可配置权重的循环选择算法:
- 权重 0:0% 概率
- 权重 1:33% 概率
- 权重 2:66% 概率
- 权重 3:99% 概率
循环检查位置(左 -> 中 -> 右 -> 重复),直到发生选择为止。
### XOR 掩码
在主加密之后,应用 XOR 掩码:
1. 使用以 key 为 seed 的独立 RNG 生成与中间密文长度相同的掩码
2. 将每个密文符号索引与对应的掩码值进行 XOR 运算
3. 将生成的索引转换回密码字母表符号
这确保了雪崩效应:在 seed 中更改一位将完全改变最终的密文。
## 密码字母表
系统支持存储在 `alphabets\` 文件夹中的多种密码字母表:
- **alphabet1635.txt**:1,635 个独特的 Unicode 字符
- **alphabet5483.txt**:5,483 个独特的 Unicode 字符
- **alphabet40326.txt**:40,326 个独特的 Unicode 字符
程序会自动:
- 扫描 `alphabets\` 文件夹中的所有 `.txt` 文件
- 计算每个文件中的实际字符数
- 在界面中显示实际大小
- 按需加载选定的字母表
## 安全属性
### 组合复杂度
下表显示了在使用不同字母表的情况下,不同明文长度所对应的可能组合数。
| 字母表 | 实际大小 | 1 个字符 | 10 个字符 | 100 个字符 | 1000 个字符 |
|----------|-----------|--------|----------|-----------|------------|
| alphabet1635.txt | 1,635 | ~4.37×10⁹ | ~10⁹⁶ | ~10⁹⁶⁰ | ~10⁹⁶⁰⁰ |
| alphabet5483.txt | 5,483 | ~4.95×10¹¹ | ~10¹¹⁷ | ~10¹¹⁷⁰ | ~10¹¹⁷⁰⁰ |
| alphabet40326.txt | 40,326 | ~1.97×10¹⁴ | ~10¹⁴² | ~10¹⁴²⁰ | ~10¹⁴²⁰⁰ |
### 密钥空间
- Seed:2¹²⁸ 种可能值
- Salt 概率:1000 种变体
- 位置权重:64 种变体
- 总密钥数:约 2¹⁴⁴ ≈ 2.2×10⁴³
### 密码学强度
- 通过 XOR 掩码实现完全的雪崩效应
- 由于每个字符具有多种表示形式,因此能够抵抗频率分析
- 明文与密文之间没有确定性关系
- 当密钥是真正随机的且只使用一次时,具有数学上的完善保密性
- 更大的字母表会呈指数级提高安全性
## 系统要求
- Python 3.8 及更高版本的解释器
- `alphabets\` 目录中至少有一个密码字母表文件
- 基本上,要运行该程序,您只需将 `alphabets\` 文件夹和 `absoluta.py` 文件放在同一目录下即可
## 用法
1. 使用任何 Python 3.8 及更高版本的解释器执行 `absoluta.py`
2. 选择源字母表(ASCII、俄语或数学符号)
3. 在输入字段中输入文本
4. 从下拉菜单中选择密码字母表(程序会显示实际字符数)
5. 配置密钥参数:
- Seed(32 个十六进制字符,可自动生成)
- Salt 概率(000-999)
- 位置权重(每个位置为 0-3)
6. 选择模式(加密或解密)
7. 点击“Execute”
8. 结果将显示在输出字段中
系统会在加密或解密之前验证所有参数,并为无效的输入提供清晰的错误提示。
## 添加自定义字母表
要添加您自己的密码字母表:
1. 创建一个包含所需 Unicode 字符的 `.txt` 文件
2. 将其放在 `alphabets\` 文件夹中
3. 程序会在下次启动时自动检测到它
4. 实际字符数将显示在下拉菜单中
该程序支持任何包含 Unicode 字符的 UTF-8 或 UTF-8-BOM 编码的文本文件。
标签:DNS 反向解析, 一次性密码本, 加密算法, 安全工具库, 密码学, 对称加密, 手动系统调用, 自动化审计, 被动侦察, 逆向工具