shrec/UltrafastSecp256k1

GitHub: shrec/UltrafastSecp256k1

一个用 C++20 编写的超高性能 secp256k1 椭圆曲线加密库,通过 CUDA、Metal、OpenCL、ROCm 等 GPU 后端将签名速度提升到百万级每秒,同时覆盖从服务器到嵌入式设备的 12 个以上平台。

Stars: 16 | Forks: 9

# UltrafastSecp256k1 -- 最快的开源 secp256k1 库 **零依赖、多后端 secp256k1 椭圆曲线加密库** -- GPU 加速 ECDSA 与 Schnorr 签名,恒定时间侧信道防护,支持 12+ 平台目标,包括 CUDA、Metal、OpenCL、ROCm、WebAssembly、RISC-V、ESP32 和 STM32。 ### 为什么选择 UltrafastSecp256k1? - **最快的开源 GPU 签名** -- 没有其他库能在 CUDA、OpenCL 和 Metal 上提供 secp256k1 ECDSA + Schnorr 签名/验证([可复现基准测试套件和原始日志](docs/BENCHMARKS.md)) - **零依赖** -- 纯 C++20,无 Boost,无 OpenSSL,只要有符合标准的编译器即可在任何地方编译 - **双层安全** -- 可变时间 FAST 路径用于吞吐量,恒定时间 CT 路径用于私钥操作 - **12+ 平台** -- x86-64、ARM64、RISC-V、WASM、iOS、Android、ESP32、STM32、CUDA、Metal、OpenCL、ROCm **快速链接:** [Discord](https://discord.gg/sUmW7cc5) * [基准测试](docs/BENCHMARKS.md) * [构建指南](docs/BUILDING.md) * [API 参考](docs/API_REFERENCE.md) * [安全策略](SECURITY.md) * [威胁模型](THREAT_MODEL.md) * [移植指南](PORTING.md) [![GitHub stars](https://img.shields.io/github/stars/shrec/UltrafastSecp256k1?style=flat-square&logo=github&label=Stars)](https://github.com/shrec/UltrafastSecp256k1/stargazers) [![GitHub forks](https://img.shields.io/github/forks/shrec/UltrafastSecp256k1?style=flat-square&logo=github&label=Forks)](https://github.com/shrec/UltrafastSecp256k1/network/members) [![CI](https://img.shields.io/github/actions/workflow/status/shrec/UltrafastSecp256k1/ci.yml?branch=main&label=CI)](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/ci.yml) [![Benchmark](https://img.shields.io/github/actions/workflow/status/shrec/UltrafastSecp256k1/benchmark.yml?branch=main&label=Bench)](https://shrec.github.io/UltrafastSecp256k1/dev/bench/) [![Release](https://img.shields.io/github/v/release/shrec/UltrafastSecp256k1?label=Release)](https://github.com/shrec/UltrafastSecp256k1/releases/latest) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![C++20](https://img.shields.io/badge/C%2B%2B-20-blue.svg)](https://en.cppreference.com/w/cpp/20) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/shrec/UltrafastSecp256k1/badge)](https://scorecard.dev/viewer/?uri=github.com/shrec/UltrafastSecp256k1) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12011/badge)](https://www.bestpractices.dev/projects/12011) [![CodeQL](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/8d734a8727024919.svg)](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/codeql.yml) [![Security Audit](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4f1d456e17024919.svg)](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/security-audit.yml) [![CT ARM64](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/dc96ccd5db024920.svg)](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/ct-arm64.yml) [![CT-Verif](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/eb74ac4c41024921.svg)](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/ct-verif.yml) [![Valgrind CT](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7f76bbcf39024922.svg)](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/valgrind-ct.yml) [![Perf Gate](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1bfa070bfb024922.svg)](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/bench-regression.yml) [![Clang-Tidy](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4cdb2e8d6b024923.svg)](https://github.com/shrec/UltrafastSecp256k1/actions/workflows/clang-tidy.yml) [![SonarCloud](https://sonarcloud.io/api/project_badges/measure?project=shrec_UltrafastSecp256k1&metric=security_rating)](https://sonarcloud.io/summary/overall?id=shrec_UltrafastSecp256k1) [![codecov](https://codecov.io/gh/shrec/UltrafastSecp256k1/graph/badge.svg)](https://codecov.io/gh/shrec/UltrafastSecp256k1) [![Discord](https://img.shields.io/badge/Discord-Join%20Us-5865F2?logo=discord&logoColor=white)](https://discord.gg/sUmW7cc5) **支持的区块链(基于 secp256k1):** [![Bitcoin](https://img.shields.io/badge/Bitcoin-BTC-F7931A.svg?logo=bitcoin&logoColor=white)](https://bitcoin.org) [![Ethereum](https://img.shields.io/badge/Ethereum-ETH-3C3C3D.svg?logo=ethereum&logoColor=white)](https://ethereum.org) [![Litecoin](https://img.shields.io/badge/Litecoin-LTC-A6A9AA.svg?logo=litecoin&logoColor=white)](https://litecoin.org) [![Dogecoin](https://img.shields.io/badge/Dogecoin-DOGE-C2A633.svg?logo=dogecoin&logoColor=white)](https://dogecoin.com) [![Bitcoin Cash](https://img.shields.io/badge/Bitcoin%20Cash-BCH-8DC351.svg?logo=bitcoincash&logoColor=white)](https://bitcoincash.org) [![Zcash](https://img.shields.io/badge/Zcash-ZEC-F4B728.svg)](https://z.cash) [![Dash](https://img.shields.io/badge/Dash-DASH-008CE7.svg?logo=dash&logoColor=white)](https://dash.org) [![BNB Chain](https://img.shields.io/badge/BNB%20Chain-BNB-F0B90B.svg?logo=binance&logoColor=white)](https://www.bnbchain.org) [![Polygon](https://img.shields.io/badge/Polygon-MATIC-8247E5.svg?logo=polygon&logoColor=white)](https://polygon.technology) [![Avalanche](https://img.shields.io/badge/Avalanche-AVAX-E84142.svg?logo=avalanche&logoColor=white)](https://avax.network) [![Arbitrum](https://img.shields.io/badge/Arbitrum-ARB-28A0F0.svg)](https://arbitrum.io) [![Optimism](https://img.shields.io/badge/Optimism-OP-FF0420.svg)](https://optimism.io) [![+15 more](https://img.shields.io/badge/+15%20more-secp256k1%20coins-grey.svg)](#secp256k1-supported-coins-27-blockchains) **GPU 与平台支持:** [![CUDA](https://img.shields.io/badge/CUDA-12.0+-green.svg)](https://developer.nvidia.com/cuda-toolkit) [![OpenCL](https://img.shields.io/badge/OpenCL-3.0-green.svg)](https://www.khronos.org/opencl/) [![Apple Silicon](https://img.shields.io/badge/Apple%20Silicon-M1%2FM2%2FM3%2FM4-black.svg?logo=apple)](metal/) [![Metal](https://img.shields.io/badge/Metal-GPU%20Compute-silver.svg?logo=apple)](metal/) [![ROCm](https://img.shields.io/badge/ROCm-6.3%20HIP-red.svg)](cuda/README.md) [![WebAssembly](https://img.shields.io/badge/WebAssembly-Emscripten-purple.svg)](wasm/) [![ARM64](https://img.shields.io/badge/ARM64-Cortex--A55%2FA76-orange.svg)](https://developer.android.com/ndk) [![RISC-V](https://img.shields.io/badge/RISC--V-RV64GC-orange.svg)](https://riscv.org/) [![Android](https://img.shields.io/badge/Android-NDK%20r27-brightgreen.svg)](android/) [![iOS](https://img.shields.io/badge/iOS-17%2B%20XCFramework-lightgrey.svg)](cmake/ios.toolchain.cmake) [![ESP32-S3](https://img.shields.io/badge/ESP32--S3-Xtensa%20LX7-orange.svg)](https://www.espressif.com/en/products/socs/esp32-s3) [![ESP32](https://img.shields.io/badge/ESP32-Xtensa%20LX6-orange.svg)](https://www.espressif.com/en/products/socs/esp32) [![STM32](https://img.shields.io/badge/STM32-Cortex--M3-orange.svg)](https://www.st.com/en/microcontrollers-microprocessors/stm32f103ze.html) ## [!] 安全声明 **研究与开发项目 -- 尚未审计** 本库**未经过独立安全审计**。仅供研究、教育和实验目的使用。 - [失败] 不建议在未进行独立加密审计的情况下用于生产环境 - [通过] 所有自检通过(76/76,包括所有后端) - [通过] 双层恒定时间架构(FAST + CT 始终激活) - [通过] 稳定的 C ABI (`ufsecp`) 包含 45 个导出函数 - [通过] 核心算术经过模糊测试(libFuzzer + ASan) 通过 [GitHub Security Advisories](https://github.com/shrec/UltrafastSecp256k1/security/advisories/new) 或电子邮件 [payysoon@gmail.com](mailto:payysoon@gmail.com) **报告漏洞**。 对于生产环境加密系统,建议使用经过审计的库,如 [libsecp256k1](https://github.com/bitcoin-core/secp256k1)。 ## secp256k1 功能概览 功能按**成熟度层级**组织(详见 [SUPPORTED_GUARANTEES.md](include/ufsecp/SUPPORTED_GUARANTEES.md)): | 层级 | 类别 | 组件 | 状态 | |------|----------|-----------|--------| | **1 -- 核心** | 域 / 标量 / 点 | GLV, 预计算, 批量求逆 | [通过] | | **1 -- 核心** | 汇编 | x64 MASM/GAS, BMI2/ADX, ARM64, RISC-V RV64GC | [通过] | | **1 -- 核心** | SIMD | AVX2/AVX-512 批量操作, Montgomery 批量求逆 | [通过] | | **1 -- 核心** | 恒定时间 | CT 域/标量/点 -- 无秘密相关分支 | [通过] | | **1 -- 核心** | ECDSA | 签名/验证, RFC 6979, DER/Compact, low-S, 恢复 | [通过] | | **1 -- 核心** | Schnorr | BIP-340 签名/验证, 标签哈希, x-only 公钥 | [通过] | | **1 -- 核心** | ECDH | 密钥交换(raw, xonly, SHA-256) | [通过] | | **1 -- 核心** | 多标量 | Strauss/Shamir 双标量乘法 | [通过] | | **1 -- 核心** | 批量验证 | ECDSA + Schnorr 批量验证 | [通过] | | **1 -- 核心** | 哈希 | SHA-256 (SHA-NI), SHA-512, HMAC, Keccak-256 | [通过] | | **1 -- 核心** | C ABI | `ufsecp` 稳定 FFI(45 个导出) | [通过] | | **2 -- 协议** | BIP-32/44 | HD 派生, 路径解析, xprv/xpub, 币种类型 | [通过] | | **2 -- 协议** | Taproot | BIP-341/342, 调整, Merkle 树 | [通过] | | **2 -- 协议** | MuSig2 | BIP-327, 密钥聚合, 2 轮签名 | [通过] | | **2 -- 协议** | FROST | 门限签名, t-of-n | [通过] | | **2 -- 协议** | 适配器 | Schnorr + ECDSA 适配器签名 | [通过] | | **2 -- 协议** | Pedersen | 承诺, 同态, 切换承诺 | [通过] | | **3 -- 便捷** | 地址 | P2PKH, P2WPKH, P2TR, Base58, Bech32/m, EIP-55 | [通过] | | **3 -- 便捷** | 币种 | 27 条区块链, 自动分发 | [通过] | | -- | GPU | CUDA, Metal, OpenCL, ROCm 内核 | [通过] | | -- | 平台 | x64, ARM64, RISC-V, ESP32, STM32, WASM, iOS, Android | [通过] | ### BIP-340 严格编码 所有公共 API 函数均强制执行 BIP-340 和 Bitcoin 共识要求的**规范输入编码**: - `r >= p` 或 `s >= n` 的签名将被**拒绝,而非规约** - `x >= p` 的公钥将被**拒绝,而非规约** - 私钥必须满足 `1 <= sk < n` C ABI (`ufsecp_*`) 返回不同的错误代码:`UFSECP_ERR_BAD_SIG`(非规范签名)与 `UFSECP_ERR_VERIFY_FAIL`(有效编码,数学错误)。详见 [docs/COMPATIBILITY.md](docs/COMPATIBILITY.md)。 ## 60 秒快速入门 一分钟内运行自检: **选项 A -- Linux (apt)** ``` sudo apt install libufsecp3 ufsecp_selftest # Expected: "OK (version 3.x, backend CPU)" ``` **选项 B -- npm (任意操作系统)** ``` npm i ufsecp node -e "require('ufsecp').selftest()" # Expected: "OK" ``` **选项 C -- Python (任意操作系统)** ``` pip install ufsecp python -c "import ufsecp; ufsecp.selftest()" # Expected: "OK" ``` **选项 D -- 从源码构建** ``` git clone https://github.com/shrec/UltrafastSecp256k1.git && cd UltrafastSecp256k1 cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release && cmake --build build -j ./build/selftest # Expected: "ALL TESTS PASSED" ``` ## 平台支持矩阵 | 目标 | 后端 | 安装 / 入口 | 状态 | |--------|---------|----------------------|--------| | **Linux x64** | CPU | `apt install libufsecp3` | [通过] 稳定 | | **Windows x64** | CPU | NuGet `UltrafastSecp256k1` / [Release .zip](https://github.com/shrec/UltrafastSecp256k1/releases) | [通过] 稳定 | | **macOS (x64/ARM64)** | CPU + Metal | `brew install ufsecp` / 从源码构建 | [通过] 稳定 | | **Android ARM64** | CPU | `implementation 'io.github.shrec:ufsecp'` (Maven) | [通过] 稳定 | | **iOS ARM64** | CPU | Swift Package / CocoaPods / XCFramework | [通过] 稳定 | | **浏览器 / Node.js** | WASM | `npm i ufsecp` | [通过] 稳定 | | **ESP32-S3 / ESP32** | CPU | PlatformIO / IDF 组件 | [通过] 已测试 | | **STM32 (Cortex-M)** | CPU | CMake 交叉编译 | [通过] 已测试 | | **NVIDIA GPU** | CUDA 12+ | 使用 `-DSECP256K1_BUILD_CUDA=ON` 构建 | [通过] 稳定 | | **AMD GPU** | ROCm/HIP | 使用 `-DSE256K1_BUILD_ROCM=ON` 构建 | [!] Beta | | **Apple GPU** | Metal | 使用 Metal 后端构建 | [通过] 稳定 | | **任意 GPU** | OpenCL | 使用 `-DSECP256K1_BUILD_OPENCL=ON` 构建 | [!] Beta | | **RISC-V (RV64GC)** | CPU | 交叉编译 | [通过] 已测试 | ## 安装 ### Linux (APT -- Debian / Ubuntu) ``` # 添加仓库 curl -fsSL https://shrec.github.io/UltrafastSecp256k1/apt/KEY.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/ultrafastsecp256k1.gpg echo "deb [signed-by=/etc/apt/keyrings/ultrafastsecp256k1.gpg] https://shrec.github.io/UltrafastSecp256k1/apt stable main" \ | sudo tee /etc/apt/sources.list.d/ultrafastsecp256k1.list sudo apt update # 安装 (仅运行时) sudo apt install libufsecp3 # 安装 (开发 -- 头文件、静态库、cmake/pkgconfig) sudo apt install libufsecp-dev ``` ### Linux (RPM -- Fedora / RHEL) ``` # 从 GitHub Releases 下载 curl -LO https://github.com/shrec/UltrafastSecp256k1/releases/latest/download/UltrafastSecp256k1-*.rpm sudo dnf install ./UltrafastSecp256k1-*.rpm ``` ### Arch Linux (AUR) ``` # 使用 yay yay -S libufsecp # 或手动 git clone https://aur.archlinux.org/libufsecp.git cd libufsecp && makepkg -si ``` ### 从源码构建(任意平台) ``` cmake -S . -B build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ -DSECP256K1_BUILD_SHARED=ON \ -DSECP256K1_INSTALL=ON \ -DSECP256K1_USE_ASM=ON cmake --build build -j$(nproc) sudo cmake --install build sudo ldconfig ``` ### 在你的 CMake 项目中使用 ``` find_package(ufsecp 3 REQUIRED) target_link_libraries(myapp PRIVATE ufsecp::ufsecp) ``` ### 配合 pkg-config 使用 ``` g++ myapp.cpp $(pkg-config --cflags --libs ufsecp) -o myapp ``` ## secp256k1 GPU 加速 (CUDA / OpenCL / Metal / ROCm) UltrafastSecp256k1 是**唯一**在四种后端上提供完整 secp256k1 ECDSA + Schnorr 签名/验证的**开源库**(截至 2026 年 2 月;如果你知道其他的,[请告诉我们](https://github.com/shrec/UltrafastSecp256k1/issues)): | 后端 | 硬件 | kG/s | ECDSA 签名 | ECDSA 验证 | Schnorr 签名 | Schnorr 验证 | |---------|----------|------|------------|--------------|--------------|----------------| | **CUDA** | RTX 5060 Ti | 4.59 M/s | 4.88 M/s | 2.44 M/s | 3.66 M/s | 2.82 M/s | | **OpenCL** | RTX 5060 Ti | 3.39 M/s | -- | -- | -- | -- | | **Metal** | Apple M3 Pro | 0.33 M/s | -- | -- | -- | -- | | **ROCm (HIP)** | AMD GPU | 可移植 | -- | -- | -- | -- | *CUDA 12.0, sm_86;sm_89, 批量=16K 签名。Metal 2.4, 8x32 位 Comba limbs, 18 个 GPU 核心。* ### CUDA 核心 ECC 操作(仅内核吞吐量) | 操作 | 耗时/操作 | 吞吐量 | |-----------|---------|------------| | 域乘法 | 0.2 ns | 4,142 M/s | | 域加法 | 0.2 ns | 4,130 M/s | | 域求逆 | 10.2 ns | 98.35 M/s | | 点加法 | 1.6 ns | 619 M/s | | 点倍乘 | 0.8 ns | 1,282 M/s | | 标量乘法 (Pxk) | 225.8 ns | 4.43 M/s | | 生成元乘法 (Gxk) | 217.7 ns | 4.59 M/s | | 批量求逆 | 2.9 ns | 340 M/s | | Jac->Affine (每点) | 14.9 ns | 66.9 M/s | ### GPU 签名操作 (ECDSA + Schnorr) | 操作 | 耗时/操作 | 吞吐量 | 协议 | |-----------|---------|------------|----------| | **ECDSA 签名** | **204.8 ns** | **4.88 M/s** | RFC 6979 + low-S | | **ECDSA 验证** | **410.1 ns** | **2.44 M/s** | Shamir + GLV | | **ECDSA 签名+recid** | **311.5 ns** | **3.21 M/s** | 可恢复 (EIP-155) | | **Schnorr 签名** | **273.4 ns** | **3.66 M/s** | BIP-340 | | **Schnorr 验证** | **354.6 ns** | **2.82 M/s** | BIP-340 + GLV | ### CUDA 与 OpenCL 对比 (RTX 5060 Ti) | 操作 | CUDA | OpenCL | 胜出 | |-----------|------|--------|--------| | 域乘法 | 0.2 ns | 0.2 ns | 平局 | | 域求逆 | 10.2 ns | 14.3 ns | **CUDA 1.40 倍** | | 点倍乘 | 0.8 ns | 0.9 ns | **CUDA 1.13 倍** | | 点加法 | 1.6 ns | 1.6 ns | 平局 | | kG (生成元乘法) | 217.7 ns | 295.1 ns | **CUDA 1.36 倍** | *基准测试:2026-02-14, Linux x86_64, NVIDIA 驱动 580.126.09。均为仅内核(无缓冲区分配/复制开销)。* ### Apple Metal (M3 Pro) -- 仅内核 | 操作 | 耗时/操作 | 吞吐量 | |-----------|---------|------------| | 域乘法 | 1.9 ns | 527 M/s | | 域求逆 | 106.4 ns | 9.40 M/s | | 点加法 | 10.1 ns | 98.6 M/s | | 点倍乘 | 5.1 ns | 196 M/s | | 标量乘法 (Pxk) | 2.94 us | 0.34 M/s | | 生成元乘法 (Gxk) | 3.00 us | 0.33 M/s | *Metal 2.4, 8x32 位 Comba limbs, Apple M3 Pro (18 个 GPU 核心, 统一内存 18 GB)* ## secp256k1 ECDSA 与 Schnorr 签名 (BIP-340, RFC 6979) 跨 CPU 和 GPU 的完整签名支持: - **ECDSA**:RFC 6979 确定性 nonce,low-S 标准化,DER/Compact 编码,公钥恢复 - **Schnorr**:符合 BIP-340 -- 标签哈希,x-only 公钥 - **批量验证**:ECDSA 和 Schnorr 批量验证 - **多标量**:Shamir 技巧 (k_1xG + k_2xQ) 用于快速验证 ### CPU 签名基准测试 (x86-64, Clang 19, AVX2, Release) | 操作 | 耗时 | 吞吐量 | |-----------|------:|----------:| | ECDSA 签名 (RFC 6979) | 8.5 us | 118,000 op/s | | ECDSA 验证 | 23.6 us | 42,400 op/s | | Schnorr 签名 (BIP-340) | 6.8 us | 146,000 op/s | | Schnorr 验证 (BIP-340) | 24.0 us | 41,600 op/s | | 密钥生成 (CT) | 9.5 us | 105,500 op/s | | 密钥生成 | 5.5 us | 182,000 op/s | | ECDH | 23.9 us | 41,800 op/s | *由于 nonce 派生更简单(无需模逆),Schnorr 签名比 ECDSA 签名快约 25%。单核、绑核测量,2026-02-21。* ## 恒定时间 secp256k1(侧信道防护) `ct::` 命名空间为私钥材料提供恒定时间操作 -- 无秘密相关分支或内存访问模式: | 操作 | Fast | CT | 开销 | |-----------|------:|------:|--------:| | 域乘法 | 17 ns | 23 ns | 1.08x | | 域求逆 | 0.8 us | 1.7 us | 2.05x | | 完整加法 | -- | 276 ns | -- | | 标量乘法 | 23.6 us | 26.6 us | 1.13x | | 生成元乘法 | 5.3 us | 9.9 us | 1.86x | **CT 层提供:** `ct::field_mul`, `ct::field_inv`, `ct::scalar_mul`, `ct::point_add_complete`, `ct::point_dbl` **CT 层用途**:私钥操作、签名、nonce 生成、ECDH。 **FAST 层用途**:验证、公钥派生、批处理、基准测试。 详见 [THREAT_MODEL.md](THREAT_MODEL.md) 的完整分层风险评估。 ### CT 证据与方法论 | 证据 | 范围 | 状态 | |----------|-------|--------| | **无秘密相关分支** | 所有 `ct::` 函数 | [通过] 设计强制,通过 Clang-Tidy 检查验证 | | **无秘密相关内存访问** | 所有 `ct::` 表查找使用恒定索引 cmov | [通过] | | **ASan + UBSan CI** | 每次提交 -- 捕获 CT 路径中的未定义行为 | [通过] CI | | **计时测试** | CPU 域/标量操作 | 🔜 计划中(见 [路线图](ROADMAP.md)) | | **形式化 CT 验证** | Fiat-Crypto 风格 | 🔜 计划中 | **假设**:CT 保证依赖于编译器在优化期间不引入秘密相关分支。构建使用带 Clang 的 `-O2`;MSVC 可能需要额外标志。微架构侧信道(Spectre、功耗分析)不在当前范围内 -- 见 [THREAT_MODEL.md](THREAT_MODEL.md)。 ## secp256k1 基准测试 -- 跨平台对比 ### CPU:x86-64 vs ARM64 vs RISC-V | 操作 | x86-64 (Clang 21, AVX2) | ARM64 (Cortex-A76) | RISC-V (Milk-V Mars) | |-----------|-------------------------:|--------------------:|---------------------:| | 域乘法 | 17 ns | 74 ns | 95 ns | | 域平方 | 14 ns | 50 ns | 70 ns | | 域加法 | 1 ns | 8 ns | 11 ns | | 域求逆 | 1 us | 2 us | 4 us | | 点加法 | 159 ns | 992 ns | 1 us | | 生成元乘法 | 5 us | 14 us | 33 us | | 标量乘法 | 25 us | 131 us | 154 us | ### GPU:CUDA vs OpenCL vs Metal | 操作 | CUDA (RTX 5060 Ti) | OpenCL (RTX 5060 Ti) | Metal (M3 Pro) | |-----------|--------------------:|---------------------:|---------------:| | 域乘法 | 0.2 ns | 0.2 ns | 1.9 ns | | 域求逆 | 10.2 ns | 14.3 ns | 106.4 ns | | 点加法 | 1.6 ns | 1.6 ns | 10.1 ns | | 生成元乘法 | 217.7 ns | 295.1 ns | 3.00 us | ### 嵌入式:ESP32-S3 vs ESP32 vs STM32 | 操作 | ESP32-S3 LX7 (240 MHz) | ESP32 LX6 (240 MHz) | STM32F103 (72 MHz) | |-----------|-------------------:|-------------------:|-------------------:| | 域乘法 | 6,105 ns | 6,993 ns | 15,331 ns | | 域平方 | 5,020 ns | 6,247 ns | 12,083 ns | | 域加法 | 850 ns | 985 ns | 4,139 ns | | 域求逆 | 2,524 us | 609 us | 1,645 us | | **Fast** 标量 x G | 5,226 us | 6,203 us | 37,982 us | | **CT** 标量 x G | 15,527 us | -- | -- | | **CT** 生成元 x k | 4,951 us | -- | -- | ### 域表示:5x52 vs 4x64 | 操作 | 4x64 | 5x52 | 加速比 | |-----------|------:|------:|--------:| | 乘法 | 42 ns | 15 ns | **2.76x** | | 平方 | 31 ns | 13 ns | **2.44x** | | 加法 | 4.3 ns | 1.6 ns | **2.69x** | | 加法链 (32 ops) | 286 ns | 57 ns | **5.01x** | *5x52 使用 `__int128` 延迟规 -- 适合 64 位平台。* 完整基准测试结果见 [docs/BENCHMARKS.md](docs/BENCHMARKS.md)。 ## secp256k1 嵌入式应用 (ESP32 / STM32 / ARM Cortex-M) UltrafastSecp256k1 可在资源受限的微控制器上运行,采用**可移植 C++(无需 `__int128`,无需汇编)**: - **ESP32-S3** (Xtensa LX7 @ 240 MHz):Fast 标量 x G 为 5.2 ms,**CT 生成元 x k 为 4.9 ms** - **ESP32-PICO-D4** (Xtensa LX6 @ 240 MHz):标量 x G 为 6.2 ms,CT 层可用(44.8 ms CT) - **STM32F103** (ARM Cortex-M3 @ 72 MHz):带 ARM 内联汇编的标量 x G 为 38 ms (UMULL/ADDS/ADCS) - **Android ARM64** (RK3588, Cortex-A76 @ 2.256 GHz):标量 x G 为 14 us,标量 x P 为 131 us,ECDSA 签名 30 us 所有 37 个库测试在每个嵌入式目标上均通过。见 [examples/esp32_test/](examples/esp32_test/) 和 [examples/stm32_test/](examples/stm32_test/)。 ### 移植到新平台 添加新 CPU 架构、嵌入式目标或 GPU 后端的分步检查清单,见 [PORTING.md](PORTING.md)。 ## WASM secp256k1(浏览器与 Node.js) 通过 Emscripten 构建 WebAssembly -- 在任何现代浏览器或 Node.js 中运行 secp256k1: ``` ./scripts/build_wasm.sh # -> build/wasm/dist/ ``` 输出:`secp256k1_wasm.wasm` + `secp256k1.mjs`(带 TypeScript 声明的 ES6 模块)。 JavaScript/TypeScript 集成见 [wasm/README.md](wasm/README.md)。 ## secp256k1 批量模逆(Montgomery 技巧) 所有后端均包含**批量模逆** -- Jacobian->Affine 转换的关键构建块: | 后端 | 函数 | 备注 | |---------|----------|-------| | **CPU** | `fe_batch_inverse(FieldElement*, size_t)` | 带 scratch buffer 的 Montgomery 技巧 | | **CUDA** | `batch_inverse_montgomery` / `batch_inverse_kernel` | GPU Montgomery 技巧内核 | | **Metal** | `batch_inverse` | 分块并行线程组 | | **OpenCL** | 内联 PTX 求逆 | 通过 host 编排批量操作 | **算法**:Montgomery 批量求逆仅使用 **1 次模逆 + 3(N-1) 次乘法**计算 N 次域求逆,将昂贵的求逆分摊到整个批次。 对于 N=1024:比单独求逆便宜约 500 倍。单次域求逆约 3.5 us(费马法),而批量分摊后每元素约 7 ns。 ### 混合加法(Jacobian + Affine) 无分支混合加法(`add_mixed_inplace`)使用 **madd-2007-bl** 公式:**7M + 4S**(完整 Jacobian 加法为 11M + 5S)。 ``` #include using namespace secp256k1::fast; Point P = Point::generator(); FieldElement gx = P.x(), gy = P.y(); // Compute 2G using mixed add (7M + 4S) Point Q = Point::generator(); Q.add_mixed_inplace(gx, gy); // Q = G + G = 2G // Batch walk: P, P+G, P+2G, ... Point walker = P; for (int i = 0; i < 1000; ++i) { walker.add_mixed_inplace(gx, gy); // walker += G each step } ``` ### GPU 模式:H-Product 串行求逆 生产级 GPU 应用使用一种内存高效变体:`jacobian_add_mixed_h` 不存储完整 Z 坐标,而是单独返回 **H = U2 - X1**。由于 Z_k = Z_0 * H_0 * H_1 * … * H_{k-1},整个 Z 链可从 H 值 + 初始 Z_0 求逆。 **代价**:每线程 1 次费马求逆 + 2N 次乘法(相比朴素 N 次费马求逆)。 ## secp256k1 稳定 C ABI (`ufsecp`) -- FFI 绑定 从 **v3.4.0** 开始,UltrafastSecp256k1 提供稳定的 C ABI -- `ufsecp` -- 专用于 FFI 绑定(C#、Python、Rust、Go、Java、Node.js 等): ``` +--------------------------------------------------+ | Your Application | | (C, C#, Python, Go, Rust, …) | +------------------+-------------------------------+ | ufsecp C ABI (45 functions) +------------------▼-------------------------------+ | ufsecp.dll / libufsecp.so | | Opaque ctx | Error model | ABI versioning | +--------------+---------------+-------------------+ | FAST layer (variable-time public ops) | +--------------------------------------------------+ | CT layer (constant-time secret-key ops) | +--------------------------------------------------+ ``` **默认行为:** - **C ABI (`ufsecp`)**:默认为安全行为 -- 所有私钥操作(签名、派生、ECDH)内部使用 CT。无需配置。 - **C++ API**:同时暴露 `fast::` 和 `ct::` 命名空间 -- 开发者在每个调用点显式选择。 ### 快速入门 (C) ``` #include "ufsecp.h" ufsecp_ctx* ctx = NULL; ufsecp_ctx_create(&ctx); // Generate keypair unsigned char seckey[32], pubkey[33]; ufsecp_keygen(ctx, seckey, pubkey); // ECDSA sign unsigned char msg[32] = { /* SHA-256 hash */ }; unsigned char sig[64]; ufsecp_ecdsa_sign(ctx, seckey, msg, sig); // Verify int valid = 0; ufsecp_ecdsa_verify(ctx, pubkey, 33, msg, sig, &valid); ufsecp_ctx_destroy(ctx); ``` ### API 覆盖 | 类别 | 函数 | |----------|-----------| | **上下文** | `ctx_create`, `ctx_destroy`, `selftest`, `last_error` | | **密钥** | `keygen`, `seckey_verify`, `pubkey_create`, `pubkey_parse`, `pubkey_serialize` | | **ECDSA** | `ecdsa_sign`, `ecdsa_verify`, `ecdsa_sign_der`, `ecdsa_verify_der`, `ecdsa_recover` | | **Schnorr** | `schnorr_sign`, `schnorr_verify` | | **SHA-256** | `sha256` (SHA-NI 加速) | | **ECDH** | `ecdh_compressed`, `ecdh_xonly`, `ecdh_raw` | | **BIP-32** | `bip32_from_seed`, `bip32_derive_child`, `bip32_serialize` | | **地址** | `address_p2pkh`, `address_p2wpkh`, `address_p2tr` | | **WIF** | `wif_encode`, `wif_decode` | | **Tweak** | `pubkey_tweak_add`, `pubkey_tweak_mul` | | **版本** | `version`, `abi_version`, `version_string` | 第 1/2/3 层稳定性保证见 [SUPPORTED_GUARANTEES.md](include/ufsecp/SUPPORTED_GUARANTEES.md)。 ## secp256k1 用例 - **交易签名与验证** -- Bitcoin、Ethereum 及 25+ 条区块链交易签名,支持 CPU 或 GPU 规模 - **批量签名验证** -- 每秒验证数千个 ECDSA/Schnorr 签名,用于区块验证 - **HD 钱包密钥派生** -- BIP-32/44 分层确定性派生,支持 27 种币地址生成 - **嵌入式物联网签名** -- ESP32 和 STM32 设备端密钥生成与交易签名 - **高吞吐量索引** -- GPU 加速公钥派生,用于地址索引服务 - **零知识证明系统** -- Pedersen 承诺、适配器签名,用于 ZK 协议 - **多方计算** -- MuSig2 (BIP-327) 和 FROST 门限签名 - **跨平台加密服务** -- 单一代码库跨服务器、桌面、移动端 (ARM64)、浏览器 (WASM) 和嵌入式 (ESP32/STM32) - **加密研究与基准测试** -- 域/群操作微基准测试、算法变体比较 ## 从源码构建 secp256k1 (CMake) ### 前置条件 - CMake 3.18+ - C++20 编译器(GCC 11+, Clang/LLVM 15+, MSVC 2022+ 带 `-DSECP256K1_ALLOW_MSVC=ON`) - CUDA Toolkit 12.0+(可选,用于 GPU) - Ninja(推荐) ### 仅 CPU 构建 ``` cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release cmake --build build -j ``` ### 含 CUDA GPU 支持 ``` cmake -S . -B build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DSECP256K1_BUILD_CUDA=ON cmake --build build -j ``` ### WebAssembly (Emscripten) ``` ./scripts/build_wasm.sh # -> build/wasm/dist/ ``` ### iOS (XCFramework) ``` ./scripts/build_xcframework.sh # -> build/xcframework/output/ ``` 通用 XCFramework(arm64 设备 + arm64 模拟器)。也可通过 **Swift Package Manager** 和 **CocoaPods** 获取。 ### 构建选项 | 选项 | 默认值 | 描述 | |--------|---------|-------------| | `SECP256K1_USE_ASM` | ON | 汇编优化 (x64/ARM64/RISC-V) | | `SECP256K1_BUILD_CUDA` | OFF | CUDA GPU 支持 | | `SECP256K1_BUILD_OPENCL` | OFF | OpenCL GPU 支持 | | `SECP256K1_BUILD_ROCM` | OFF | ROCm/HIP GPU 支持 (AMD) | | `SECP256K1_BUILD_TESTS` | ON | 测试套件 | | `SECP256K1_BUILD_BENCH` | ON | 基准测试 | | `SECP256K1_RISCV_FAST_REDUCTION` | ON | 快速模约简 (RISC-V) | | `SECP256K1_RISCV_USE_VECTOR` | ON | RVV 向量扩展 (RISC-V) | 详细构建说明见 [docs/BUILDING.md](docs/BUILDING.md)。 ## secp256k1 快速入门(C++ 示例) ### 基本点操作 ``` #include #include #include #include using namespace secp256k1::fast; int main() { // Public key derivation: private_key x G = public_key auto generator = Point::generator(); auto private_key = Scalar::from_hex( "E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262" ); auto public_key = generator * private_key; std::cout << "Public Key X: " << public_key.x().to_hex() << "\n"; std::cout << "Public Key Y: " << public_key.y().to_hex() << "\n"; return 0; } ``` ``` g++ -std=c++20 example.cpp -lufsecp -o example && ./example ``` ### GPU 批量乘法 ``` #include #include #include using namespace secp256k1::fast; int main() { std::vector base_points(1'000'000, Point::generator()); std::vector scalars(1'000'000); for (auto& s : scalars) s = Scalar::random(); cuda::BatchConfig config{.device_id = 0, .threads_per_block = 256, .streams = 4}; auto results = cuda::batch_multiply(base_points, scalars, config); std::cout << "Processed " << results.size() << " point multiplications\n"; return 0; } ``` ## secp256k1 安全模型 (FAST vs CT) 两个安全配置**始终处于活动状态** -- 无基于标志的选择: ### FAST 配置(默认) - 最大吞吐量,可变时间算法 - 用于:验证、批处理、公钥派生、基准测试 - [!] **不适用于私钥操作** -- 可能存在计时侧信道 ### CT / 加固配置(`ct::` 命名空间) - 恒定时间算术 -- 无秘密相关分支或内存访问 - 相比 FAST 约 5-7 倍性能损失 - 用于:签名、私钥处理、nonce 生成、ECDH **根据用例选择合适的配置。** 对秘密数据使用 FAST 是安全漏洞。 详见 [THREAT_MODEL.md](THREAT_MODEL.md)。 ## secp256k1 支持的币种(27 条区块链) | # | 币种 | 代码 | 地址类型 | BIP-44 | |---|------|--------|---------------|--------| | 1 | **Bitcoin** | BTC | P2PKH, P2WPKH (Bech32), P2TR (Bech32m) | m/86'/0' | | 2 | **Ethereum** | ETH | EIP-55 校验和 | m/44'/60' | | 3 | **Litecoin** | LTC | P2PKH, P2WPKH | m/84'/2' | | 4 | **Dogecoin** | DOGE | P2PKH | m/44'/3' | | 5 | **Bitcoin Cash** | BCH | P2PKH | m/44'/145' | | 6 | **Bitcoin SV** | BSV | P2PKH | m/44'/236' | | 7 | **Zcash** | ZEC | P2PKH (透明) | m/44'/133' | | 8 | **Dash** | DASH | P2PKH | m/44'/5' | | 9 | **DigiByte** | DGB | P2PKH, P2WPKH | m/44'/20' | | 10 | **Namecoin** | NMC | P2PKH | m/44'/7' | | 11 | **Peercoin** | PPC | P2PKH | m/44'/6' | | 12 | **Vertcoin** | VTC | P2PKH, P2WPKH | m/44'/28' | | 13 | **Viacoin** | VIA | P2PKH | m/44'/14' | | 14 | **Groestlcoin** | GRS | P2PKH, P2WPKH | m/44'/17' | | 15 | **Syscoin** | SYS | P2PKH | m/44'/57' | | 16 | **BNB Smart Chain** | BNB | EIP-55 | m/44'/60' | | 17 | **Polygon** | MATIC | EIP-55 | m/44'/60' | | 18 | **Avalanche** | AVAX | EIP-55 (C-Chain) | m/44'/60' | | 19 | **Fantom** | FTM | EIP-55 | m/44'/60' | | 20 | **Arbitrum** | ARB | EIP-55 | m/44'/60' | | 21 | **Optimism** | OP | EIP-55 | m/44'/60' | | 22 | **Ravencoin** | RVN | P2PKH | m/44'/175' | | 23 | **Flux** | FLUX | P2PKH | m/44'/19167' | | 24 | **Qtum** | QTUM | P2PKH | m/44'/2301' | | 25 | **Horizen** | ZEN | P2PKH | m44'/121' | | 26 | **Bitcoin Gold** | BTG | P2PKH | m/44'/156' | | 27 | **Komodo** | KMD | P2PKH | m/44'/141' | 所有 EVM 链(ETH、BNB、MATIC、AVAX、FTM、ARB、OP)共享相同的地址格式(EIP-55 带校验和的十六进制)。 ## secp256k1 架构 ``` UltrafastSecp256k1/ +-- cpu/ # CPU-optimized implementation | +-- include/ # Public headers (field.hpp, scalar.hpp, point.hpp, ecdsa.hpp, schnorr.hpp) | +-- src/ # Implementation (field_asm_x64.asm, field_asm_riscv64.S, ...) | +-- fuzz/ # libFuzzer harnesses | +-- tests/ # Unit tests +-- cuda/ # CUDA GPU acceleration +-- opencl/ # OpenCL GPU acceleration +-- metal/ # Apple Metal GPU acceleration +-- wasm/ # WebAssembly (Emscripten) +-- android/ # Android NDK (ARM64) +-- include/ufsecp/ # Stable C ABI +-- examples/ | +-- esp32_test/ # ESP32-S3 Xtensa LX7 port | +-- stm32_test/ # STM32F103 ARM Cortex-M3 port +-- docs/ # Documentation ``` ## secp256k1 测试与验证 ### 内置自检 每个可执行文件在启动时运行确定性的**已知答案测试 (KAT)**,覆盖所有算术操作: | 模式 | 耗时 | 时机 | 内容 | |------|------|------|------| | **smoke** | ~1-2s | 应用启动, 嵌入式 | 核心 KAT(10 次标量乘,域/标量恒等式,边界向量) | | **ci** | ~30-90s | 每次提交 (CI) | Smoke + 交叉检查, 双线性, NAF/wNAF, 批量扫描, 代数压力 | | **stress** | ~10-60min | 每日 / 手动 | CI + 1000 次随机标量乘, 500 个域三元组, 批量求逆至 8192 | ``` #include "secp256k1/selftest.hpp" using namespace secp256k1::fast; Selftest(true, SelftestMode::smoke); // Fast startup check Selftest(true, SelftestMode::ci); // Full CI suite Selftest(true, SelftestMode::stress, 0xDEADBEEF); // Nightly with custom seed ``` ### 消毒剂构建 ``` cmake --preset cpu-asan && cmake --build build/cpu-asan -j # ASan + UBSan cmake --preset cpu-tsan && cmake --build build/cpu-tsan -j # TSan (data races) ctest --test-dir build/cpu-asan --output-on-failure ``` ### 模糊测试 libFuzzer 覆盖核心算术 (`cpu/fuzz/`): | 目标 | 测试内容 | |--------|---------------| | `fuzz_field` | 加/减往返, 乘法恒等, 平方, 求逆 | | `fuzz_scalar` | 加/减, 乘法恒等, 分配律 | | `fuzz_point` | 曲线上检查, 取反, 压缩往返, 倍乘 vs 加法 | ### 平台 CI 覆盖 | 平台 | 后端 | 编译器 | 状态 | |----------|---------|----------|--------| | Linux x64 | CPU | GCC 13 / Clang 17 | [通过] CI | | Linux x64 | CPU | Clang 17 (ASan+UBSan) | [通过] CI | | Linux x64 | CPU | Clang 17 (TSan) | [通过] CI | | Windows x64 | CPU | MSVC 2022 | [通过] CI | | macOS ARM64 | CPU + Metal | AppleClang | [通过] CI | | iOS ARM64 | CPU | Xcode | [通过] CI | | Android ARM64 | CPU | NDK r27c | [通过] CI | | WebAssembly | CPU | Emscripten | [通过] CI | | ROCm/HIP | CPU + GPU | ROCm 6.3 | [通过] CI | ### 跨平台审计结果 `unified_audit_runner` 执行 **49 个审计模块**,涵盖 8 个部分 (数学不变量、恒定时间分析、差分测试、标准向量、模糊测试、协议安全、ABI 安全、性能验证)。 | 平台 | 操作系统 | 编译器 | 模块数 | 结论 | 耗时 | |----------|----|----------|---------|---------|------| | Windows (本地) | Windows x86-64 | Clang 21.1.0 | 48/49 | 审计就绪 | 39 s | | Linux Docker | Linux x86-64 | GCC 13.3.0 | 48/49 | 审计就绪 | 46 s | | Linux CI | Linux x86-64 | Clang 17.0.6 | 46/46 | 审计就绪 | 44 s | | Linux CI | Linux x86-64 | GCC 13.3.0 | 46/46 | 审计就绪 | 48 s | | Windows CI | Windows x86-64 | MSVC 1944 | 45/45 | 审计就绪 | 139 s | ## secp256k1 基准测试目标 | 目标 | 描述 | |--------|-------------| | `bench_comprehensive` | 完整的域/点/批量/签名套件 | | `bench_scalar_mul` | kxG 和 kxP 及 wNAF 分析 | | `bench_ct` | Fast-vs-CT 开销对比 | | `bench_atomic_operations` | 单个 ECC 构建块延迟 | | `bench_field_52` | 4x64 vs 5x52 域表示 | | `bench_ecdsa_multiscalar` | k_1xG + k_2xQ (Shamir vs 分开) | | `bench_jsf_vs_shamir` | JSF vs 窗口 Shamir 对比 | | `bench_adaptive_glv` | GLV 窗口大小扫描 (8-20) | | `bench_comprehensive` | 跨平台基准测试套件(所有操作) | ## 研究声明 本库探索 **secp256k1 在 CPU 架构(x64、ARM64、RISC-V、Cortex-M、Xtensa)和 GPU(CUDA、OpenCL、Metal、ROCm)上的性能极限**。零外部依赖。纯 C++20。 ## API 稳定性 **C++ API**:尚未稳定。**v4.0** 之前可能会发生破坏性更改。核心层(域、标量、点、ECDSA、Schnorr)已成熟。实验层(MuSig2、FROST、适配器、Pedersen、Taproot、HD、币种)可能会更改。 **C ABI (`ufsecp`)**:从 v3.4.0 起稳定。ABI 版本单独追踪。见 [SUPPORTED_GUARANTEES.md](include/ufsecp/SUPPORTED_GUARANTEES.md)。 ## 发布签名与验证 从 **v3.15.0** 开始,所有发布版本均使用 [Sigstore cosign](https://docs.sigstore.dev/)(无密钥,GitHub OIDC 身份)进行加密签名。 较旧的历史版本未签名,但保持原样保留。 每次发布包含: | 制品 | 用途 | |----------|---------| | `SHA256SUMS` | 所有发布归档的校验和 | | `SHA256SUMS.sig` | 清单的 Cosign 签名 | | `SHA256SUMS.pem` | 签名证书 | | `sbom.cdx.json` | CycloneDX 软件物料清单 | | 每个归档的 `.sig` + `.pem` | 单独的制品签名 | ### 验证校验和 **Linux:** ``` curl -LO https://github.com/shrec/UltrafastSecp256k1/releases/latest/download/SHA256SUMS sha256sum -c SHA256SUMS ``` **macOS:** ``` shasum -a 256 -c SHA256SUMS ``` **Windows (PowerShell):** ``` Get-Content SHA256SUMS | ForEach-Object { $parts = $_ -split ' ' $expected = $parts[0]; $file = $parts[1] $actual = (Get-FileHash $file -Algorithm SHA256).Hash.ToLower() if ($actual -eq $expected) { "[OK] $file" } else { "[FAIL] $file" } } ``` ### 验证签名 ``` cosign verify-blob SHA256SUMS \ --signature SHA256SUMS.sig \ --certificate SHA256SUMS.pem \ --certificate-identity-regexp "github.com/shrec/UltrafastSecp256k1" \ --certificate-oidc-issuer https://token.actions.githubusercontent.com ``` | 供应链 | 状态 | |-------------|--------| | 所有制品的 SHA256SUMS | [通过] 每次发布 | | Cosign / Sigstore 清单签名 | [通过] v3.15.0+ | | 每个制品的 Cosign 签名 | [通过] v3.15.0+ | | SLSA 构建来源 | [通过] 每次发布 | | CycloneDX SBOM | [通过] 每次发布 | | 可复现构建文档 | [通过] Dockerfile.reproducible | ## 常见问题 **UltrafastSecp256k1 是 libsecp256k1 的直接替代品吗?** **API 稳定吗?** **恒定时间的范围是什么?** **哪些部分目前在生产环境中是安全的?** **如何复现基准测试?** ## 文档 | 文档 | 描述 | |----------|-------------| | [API 参考](docs/API_REFERENCE.md) | 完整 C++ 和 C ABI 参考 | | [构建指南](docs/BUILDING.md) | 所有平台的详细构建说明 | | [基准测试](docs/BENCHMARKS.md) | 完整的基准测试结果和方法论 | | [威胁模型](THREAT_MODEL.md) | 分层安全风险评估 | | [安全策略](SECURITY.md) | 漏洞报告和审计状态 | | [移植指南](PORTING.md) | 添加新平台、架构、GPU 后端 | | [RISC-V 优化](RISCV_OPTIMIZATIONS.md) | RISC-V 汇编细节 | | [ESP32 设置](docs/ESP32_SETUP.md) | ESP32 嵌入式开发指南 | | [贡献](CONTRIBUTING.md) | 开发指南 | | [更新日志](CHANGELOG.md) | 版本历史 | ## 贡献 欢迎贡献!请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。 ``` git clone https://github.com/shrec/UltrafastSecp256k1.git cd UltrafastSecp256k1 cmake -S . -B build/dev -G Ninja -DCMAKE_BUILD_TYPE=Debug cmake --build build/dev -j ctest --test-dir build/dev --output-on-failure ``` ## 许可证 **MIT License** 本项目采用 MIT 许可证授权。 之前的发布版本(至 v3.14.x)采用 AGPL-3.0。 从 v3.15.0 起,许可证改为 MIT -- 以便与更广泛的 Bitcoin 生态系统保持一致 并减少采用阻力。 详见 [LICENSE](LICENSE)。 ## 联系与社区 | 渠道 | 链接 | |---------|------| | 问题 | [GitHub Issues](https://github.com/shrec/UltrafastSecp256k1/issues) | | 讨论 | [GitHub Discussions](https://github.com/shrec/UltrafastSecp256k1/discussions) | | Wiki | [文档 Wiki](https://github.com/shrec/UltrafastSecp256k1/wiki) | | 基准测试 | [实时仪表板](https://shrec.github.io/UltrafastSecp256k1/dev/bench/) | | 安全 | [报告漏洞](https://github.com/shrec/UltrafastSecp256k1/security/advisories/new) | | 商业 | [payysoon@gmail.com](mailto:payysoon@gmail.com) | ## 致谢 UltrafastSecp256k1 是一个独立实现 -- 从头编写,拥有自己的架构、GPU 管线、嵌入式移植和优化技术。同时,没有项目存在于真空中。更广泛加密社区的公开研究、规范和开放讨论帮助我们完善了自己的想法并验证了我们的结果。 我们要感谢那些公开工作为我们部分旅程提供参考的团队: - **[bitcoin-core/secp256k1](https://github.com/bitcoin-core/secp256k1)** -- 参考性 C 库,其关于恒定时间域算术和基于自同态的标量乘法(GLV、Strauss、Pippenger)的公开研究帮助我们基准测试和验证了自己在 GPU 和嵌入式目标上的独立实现。 - **[Bitcoin Core](https://github.com/bitcoin/bitcoin)** 贡献者 -- 感谢开放规范(BIP-340 Schnorr、BIP-341 Taproot、RFC 6979)和以正确性为先的工程文化,这惠及了在此领域构建的所有人。 - **Pieter Wuille, Jonas Nick, Tim Ruffing** 和 libsecp256k1 维护者 -- 感谢公开分享他们关于侧信道防护、穷举测试和域表示权衡的研究。他们发表的发现帮助我们在设计自己的架构时做出了更好的决策。 我们自由分享我们的优化、GPU 内核、嵌入式移植和跨平台技术 -- 因为当知识自由流动时,开源加密技术会变得更强大。 特别感谢 [Stacker News](https://stacker.news) 和 [Delving Bitcoin](https://delvingbitcoin.org) 社区的早期支持和技术反馈。 额外感谢 [@0xbitcoiner](https://stacker.news/0xbitcoiner) 的初步联系以及帮助项目与更广泛的 Bitcoin 开发者生态系统建立桥梁。 ## ⚡ 支持项目 如果你觉得 **UltrafastSecp256k1** 有用,请考虑支持其开发! [![Donate with Bitcoin Lightning](https://img.shields.io/badge/Donate%20with-Lightning%20%E2%9A%A1-yellow?style=for-the-badge&logo=bitcoin)](https://stacker.news/shrec) **Lightning 地址:** `shrec@stacker.news` -- 通过任意 Lightning 钱包或 [stacker.news/shrec](https://stacker.news/shrec) 发送 sats [![Sponsor](https://img.shields.io/badge/Sponsor-GitHub%20Sponsors-ea4aaa.svg?logo=github)](https://github.com/sponsors/shrec) [![PayPal](https://img.shields.io/badge/PayPal-Donate-blue.svg?logo=paypal)](https://paypal.me/IChkheidze) **UltrafastSecp256k1** -- 最快的开源 secp256k1 库。为 Bitcoin、Ethereum 和 25+ 条区块链提供 GPU 加速的 ECDSA 与 Schnorr 签名。零依赖。恒定时间层。12+ 平台。
标签:AI工具, Apple Silicon, ARM架构, Bash脚本, C++20, CSV导出, CUDA, CVE, DNS 反向解析, ECDSA, ESP32, M1, M2, M3, M4, Metal, OpenCL, RISC-V, ROCm, Schnorr签名, secp256k1, STM32, Vectored Exception Handling, Veh, WASM, WebAssembly, Web报告查看器, 区块链, 密码学, 嵌入式系统, 开源库, 异构计算, 恒定时间编程, 手动系统调用, 抗侧信道攻击, 搜索引擎爬虫, 数字签名, 椭圆曲线加密, 比特币, 零依赖