Caume/HerraduraKEx

GitHub: Caume/HerraduraKEx

基于 FSCX 按位运算原语构建的实验性密码套件,涵盖经典 Diffie-Hellman 密钥交换、El Gamal 加密、Schnorr 签名以及后量子 Ring-LWR 和基于编码的 Stern 签名方案,支持从 Arduino 到桌面端的六种平台实现。

Stars: 6 | Forks: 1

# Herradura 密码套件 (v1.5.20) Herradura 密码套件实现了基于 FSCX (Full Surroundings Cyclic XOR) 原语、GF(2^n)* 上的 Diffie-Hellman 密钥交换以及后量子 Ring-LWR 密钥交换构建的密码协议。 # FSCX — 核心原语 设 $A$, $B$, $C$ 为大小为 $P$ 的比特串,其中 $A_i$ 是第 $i$ 位(从左到右),且 $i \in \{0,\ldots,P-1\}$。设 $\oplus$ 表示按位异或,设 $\circlearrowleft$, $\circlearrowright$ 分别表示 1 位的循环左移和循环右移。 $$\text{FSCX}(A, B) = A \oplus B \oplus \circlearrowleft\!A \oplus \circlearrowleft\!B \oplus \circlearrowright\!A \oplus \circlearrowright\!B$$ 等价地,定义线性算子 $M = I \oplus \text{ROL} \oplus \text{ROR}$: $$\text{FSCX}(A, B) = M \cdot (A \oplus B)$$ **FSCX_REVOLVE(A, B, n)** 保持 $B$ 不变并迭代 FSCX $n$ 次: $$\text{FSCX}\textunderscore\text{REVOLVE}(A, B, n) = \text{FSCX}^{\circ n}(A, B)$$ 对于大小为 $P = 2^k$ 的比特串,轨道周期始终为 $P$ 或 $P/2$,因此对于所有 $A$, $B$ 都有 $\text{FSCX}\textunderscore\text{REVOLVE}(A, B, P) = A$。 # HKEX-GF — GF(2^n)* 上的密钥交换 HKEX-GF 是基于乘法群 $\mathbb{GF}(2^n)^*$ 的标准 Diffie-Hellman 密钥交换。 1. **设置。** 双方约定一个 $n$ 次不可约多项式 $p(x)$ 和生成元 $g = 3$。 2. **密钥生成。** Alice 生成一个私有标量 $a$;Bob 生成 $b$。 3. **公开值。** Alice 公布 $C = g^a$;Bob 公布 $C_2 = g^b$(所有算术运算均在 $\mathbb{GF}(2^n)$ 中进行)。 4. **共享密钥。** Alice 计算 $\mathit{sk} = C_2^a = g^{ab}$;Bob 计算 $\mathit{sk} = C^b = g^{ba}$。根据域乘法的交换律,$g^{ab} = g^{ba}$。 | $n$ | 本原多项式 | 经典安全性 | |-----|---------------------|-------------------| | 32 | $x^{32}+x^{22}+x^2+x+1$ (`0x00400007`) | 仅用于演示 | | 64 | $x^{64}+x^4+x^3+x+1$ (`0x1B`) | ~40 位 | | 128 | $x^{128}+x^7+x^2+x+1$ (`0x87`) | ~60–80 位 | | 256 | $x^{256}+x^{10}+x^5+x^2+1$ (`0x425`) | ~128 位(推荐) | # Herradura 密码套件 该套件在 HKEX-GF、FSCX_REVOLVE 和 v1.5.0 NL-FSCX 扩展的基础上构建协议: **经典协议 (v1.4.0):** 1. **HKEX-GF** — 密钥交换($\mathbb{GF}(2^n)^*$ 上的 DH,如上所述) 2. **HSKE** — 对称加密:$E = \text{FSCX}\textunderscore\text{REVOLVE}(P, \mathit{key}, i)$;使用 $D = \text{FSCX}\textunderscore\text{REVOLVE}(E, \mathit{key}, r)$ 解密 3. **HPKS** — Schnorr 风格的公钥签名:$R = g^k$;$e = \text{FSCX}\textunderscore\text{REVOLVE}(R, P, i)$;$s = (k - a \cdot e) \bmod (2^n - 1)$;验证 $g^s \cdot C^e = R$ 4. **HPKE** — El Gamal 公钥加密:$R = g^r$;$\mathit{enc}\textunderscore\mathit{key} = C^r$;$E = \text{FSCX}\textunderscore\text{REVOLVE}(P, \mathit{enc}\textunderscore\mathit{key}, i)$;Alice 使用 $\mathit{dec}\textunderscore\mathit{key} = R^a$ 解密 **后量子 / NL 强化 (v1.5.0):** 5. **HSKE-NL-A1** — 使用 NL-FSCX v1 的计数器模式:$\mathit{ks} = \text{NL-FSCX-revolve-v1}(K, K \oplus \mathit{ctr}, i)$;$E = P \oplus \mathit{ks}$ 6. **HSKE-NL-A2** — 使用 NL-FSCX v2 的 revolve 模式:$E = \text{NL-FSCX-revolve-v2}(P, K, r)$;$D = \text{NL-FSCX-revolve-v2-inv}(E, K, r)$ 7. **HKEX-RNL** — Ring-LWR 密钥交换(推测具有抗量子性):在 $\mathbb{Z}_q[x]/(x^n+1)$ 中共享 $m_\text{blind}$;双方推导出 $C = \text{round}_p(m_\text{blind} \cdot s)$;协商 $K = \text{round}_{pp}(s \cdot \text{lift}(C_\text{other}))$ 8. **HPKS-NL** — NL 强化的 Schnorr:$e = \text{NL-FSCX-revolve-v1}(R, P, i)$ 9. **HPKE-NL** — NL 强化的 El Gamal:$E = \text{NL-FSCX-revolve-v2}(P, \mathit{enc}\textunderscore\mathit{key}, i)$;$D = \text{NL-FSCX-revolve-v2-inv}(E, \mathit{dec}\textunderscore\mathit{key}, i)$ **基于编码的 PQC (v1.5.18):** 10. **HPKS-Stern-F** — Fiat-Shamir Stern ZKP 签名(EUF-CMA ≤ SD($n$,$t$) + NL-FSCX v1 PRF):提交 $(c_0, c_1, c_2)$;通过 NL-FSCX 哈希生成挑战 $b \in \{0,1,2\}$;响应公开置换后的 $r$,$y = e \oplus r$ 或置换 $\pi$。参数 (C/Go/Python):$N = n = 256$,$t = 16$,轮数 $= 32$。Assembly/Arduino:$N = 32$,$t = 2$,轮数 $= 4$。 11. **HPKE-Stern-F** — Niederreiter KEM:$\mathit{ct} = H \cdot e'^T$;$K = \text{hash}(\mathit{seed}, e')$。生产环境的解封装需要 QC-MDPC 伴随式解码器;演示使用已知的 $e'$。 实现提供了 C、Go、Python、ARM Thumb-2 汇编、NASM i386 汇编和 Arduino 版本(所有六个目标平台均为 v1.5.19 版本)。 # 构建与运行说明 ## C ``` # 完整加密套件 (所有协议:classical、NL/PQC、Stern-F code-based) gcc -O2 -o "Herradura cryptographic suite_c" "Herradura cryptographic suite.c" ./"Herradura cryptographic suite_c" # 安全性与性能测试 (位于 CryptosuiteTests/ 目录) gcc -O2 -o CryptosuiteTests/Herradura_tests_c CryptosuiteTests/Herradura_tests.c ./CryptosuiteTests/Herradura_tests_c ``` ## Go ``` # 完整加密套件 go run "Herradura cryptographic suite.go" # 安全性与性能测试 (位于 CryptosuiteTests/ 目录) cd CryptosuiteTests && go run Herradura_tests.go ``` ## Python ``` # 完整加密套件 python3 "Herradura cryptographic suite.py" # 安全性与性能测试 (位于 CryptosuiteTests/ 目录) python3 CryptosuiteTests/Herradura_tests.py ``` ## Assembly ``` # ARM Linux — 完整套件 + 测试 (32-bit Thumb;classical + NL/PQC + Stern-F 协议) arm-linux-gnueabi-gcc -o "Herradura cryptographic suite_arm" "Herradura cryptographic suite.s" arm-linux-gnueabi-gcc -o CryptosuiteTests/Herradura_tests_arm CryptosuiteTests/Herradura_tests.s qemu-arm -L /usr/arm-linux-gnueabi "./Herradura cryptographic suite_arm" qemu-arm -L /usr/arm-linux-gnueabi ./CryptosuiteTests/Herradura_tests_arm # NASM i386 — 完整套件 + 测试 (纯 Linux syscalls,无 libc) # 依赖: nasm, x86_64-linux-gnu-ld (或支持 elf_i386 的 ld), qemu-i386 nasm -f elf32 "Herradura cryptographic suite.asm" -o suite32.o nasm -f elf32 CryptosuiteTests/Herradura_tests.asm -o tests32.o x86_64-linux-gnu-ld -m elf_i386 -o "Herradura cryptographic suite_i386" suite32.o x86_64-linux-gnu-ld -m elf_i386 -o CryptosuiteTests/Herradura_tests_i386 tests32.o qemu-i386 "./Herradura cryptographic suite_i386" qemu-i386 ./CryptosuiteTests/Herradura_tests_i386 # 在原生 x86/x86_64 Linux 主机上,二进制文件无需 qemu-i386 即可直接运行 ``` ## Arduino `.ino` 文件需要安装了 AVR 开发板包的 Arduino IDE 或 `arduino-cli`。在 IDE 中打开并上传至带有 9600 波特率串口监视器的开发板,或者: ``` # 仅编译检查 (需要 arduino-cli 及 arduino:avr 开发板包) arduino-cli compile --fqbn arduino:avr:uno "Herradura cryptographic suite.ino" arduino-cli compile --fqbn arduino:avr:uno CryptosuiteTests/Herradura_tests.ino ``` # 性能 (v1.5.18, Orange Pi 5 — RK3588, Cortex-A76 @ 2.4 GHz) 来自 `CryptosuiteTests/Herradura_tests.{c,go,py}` 且带有 `-t 3.0` 参数的基准测试。 GF/NL/Stern 基准测试使用 32 位参数;FSCX/HSKE 基准测试使用 256 位参数。 ## C (gcc -O2) | 基准测试 | 吞吐量 | |-----------|-----------| | FSCX 单步 (256-bit) | 10.4 M ops/sec | | gf_pow 吞吐量 (32-bit) | 19,841 M ops/sec | | HKEX-GF 完整握手 (32-bit) | 1,968 M ops/sec | | HSKE 往返 (256-bit) | 40.9 K ops/sec | | HPKE El Gamal 往返 (32-bit) | 2,004 M ops/sec | | NL-FSCX v1 revolve (32-bit, n/4 步) | 1,968 M ops/sec | | NL-FSCX v2 enc+dec (32-bit) | 1,941 M ops/sec | | HSKE-NL-A1 计数器模式 (32-bit) | 10.2 M ops/sec | | HSKE-NL-A2 revolve 模式 (32-bit) | 15.2 M ops/sec | | HKEX-RNL 完整握手 (n=32) | 77.3 K ops/sec | | HPKS-Stern-F sign+verify (N=256, t=16, rounds=4) | 113 ops/sec | ## Go (go run) | 基准测试 | 64-bit | 128-bit | 256-bit | |-----------|--------|---------|---------| | FSCX 单步 | 146 K | 121 K | 110 K ops/sec | | HKEX-GF 完整握手 (32-bit) | 270 ops/sec | — | — | | HSKE 往返 | 2.15 K | 1.03 K | 413 ops/sec | | NL-FSCX v1 revolve (n/4 步) | 6.34 K | 2.62 K | 1.21 K ops/sec | | NL-FSCX v2 enc+dec | 213 ops/sec | — | — | | HSKE-NL-A1 计数器模式 | 5.65 K | 2.66 K | 1.18 K ops/sec | | HSKE-NL-A2 revolve 模式 (64-bit) | 220 ops/sec | — | — | | HKEX-RNL 完整握手 | 10.0 K (n=32) | 4.79 K (n=64) | — | | HPKS-Stern-F sign+verify (N=256, rounds=4) | 1.3 ops/sec | — | — | ## Python 3 | 基准测试 | 64-bit | 128-bit | 256-bit | |-----------|--------|---------|---------| | FSCX 单步 | 157 K | 152 K | 155 K ops/sec | | HKEX-GF 完整握手 (32-bit) | 491 ops/sec | — | — | | HSKE 往返 | 2.36 K | 1.18 K | 601 ops/sec | | NL-FSCX v1 revolve (n/4 步) | 7.29 K | 3.63 K | 1.85 K ops/sec | | NL-FSCX v2 enc+dec | 296 ops/sec | — | — | | HSKE-NL-A1 计数器模式 | 7.01 K | 3.63 K | 1.82 K ops/sec | | HSKE-NL-A2 revolve 模式 (64-bit) | 295 ops/sec | — | — | | HKEX-RNL 完整握手 | 1.05 K (n=32) | 510 (n=64) | — | | HPKS-Stern-F sign+verify (N=32, rounds=4) | 75.7 ops/sec | — | — | # 仓库结构 ``` Herradura cryptographic suite.{c,go,py,s,asm,ino} — protocol suite implementations CryptosuiteTests/ Herradura_tests.{c,go,py,s,asm,ino} — security tests & benchmarks go.mod SecurityProofsCode/ — formal break proofs (Python) SecurityProofs.md — algebraic analysis (incl. §11 NL/PQC, §12 quantum, §11.8.4 Stern-F) ``` # 许可证 基于 GPL v3.0 和 MIT 双重许可。用户可选择其中一种。 OAHR
标签:Cryptography, Crypto Suite, Diffie-Hellman, DNS 反向解析, FSCX, GF(2^n), Herradura, Key Exchange, meg, Ring-LWR, XOR, 位运算, 信息安全, 加密套件, 加密算法, 后量子密码学, 密码学, 密码学原语, 密钥交换, 手动系统调用, 抗量子加密, 数学算法, 日志审计, 有限域, 环形纠错学习问题, 网络安全, 网络安全, 软件库, 逆向工具, 隐私保护, 隐私保护