展示HN:RFC-9591 FROST作为libsecp256k1扩展实现(C89)
展示HN:RFC-9591 FROST作为libsecp256k1扩展实现(C89)作者:James Bentley
来源:Github.com
引用:https://github.com/bancaditalia/secp256k1-frost
这个仓库扩展了secp256k1库,以实现FROST,这是一种由C. Komlo和I. Goldberg最初设计的Schnorr阈值签名方案。
secp256k1-frost的代码库是secp256k1仓库的一个分支,最初由意大利银行作为itcoin项目的一部分开发。
有关secp256k1-frost的更多信息,请参阅专门的README.md文件。
请注意,此软件仅用于测试和实验目的,尚未准备好在生产环境中使用。
以下是对原始secp256k1仓库的README.md的链接。"
"additional_content": "libsecp256k1\n\n一个高性能、高保证的C库,用于在secp256k1椭圆曲线上进行数字签名和其他加密原语。\n\n此库旨在成为公开可用的最高质量加密库。然而,其开发的主要重点是用于比特币系统,与比特币的用法可能测试不足、验证不足或接口考虑不周。正确使用需要一些小心和考虑,以确保库适合您的应用程序目的。\n\n功能:\n\n- secp256k1 ECDSA签名/验证和密钥生成。\n- 秘密/公钥的加法和乘法调整。\n- 秘密密钥、公钥和签名的序列化和解析。\n- 常数时间、常数内存访问签名和公钥生成。\n- 基于RFC6979的随机化ECDSA(或使用调用者提供的函数)。\n- 非常高效的实现。\n- 适用于嵌入式系统。\n- 无运行时依赖项。\n- 可选的公钥恢复模块。\n- 可选的ECDH密钥交换模块。\n- 可选的BIP-340 Schnorr签名模块。\n- 可选的BIP-324 ElligatorSwift密钥交换模块。\n- 可选的BIP-327 MuSig2 Schnorr多重签名模块。\n\n实现细节\n\n- 通用:无运行时堆分配。广泛的测试基础设施。结构化以方便审查和分析。旨在可移植到任何具有C89编译器和uint64_t支持的系统。不使用浮点类型。仅公开高级接口以最小化API表面并提高应用程序安全性。\n- 场运算:优化了模曲线场大小的算术实现(2^256 - 0x1000003D1)。使用5个52位肢体。使用10个26位肢体(包括Wladimir J. van der Laan为32位ARM优化的汇编)。这是一个实验性功能,尚未经过足够的审查以满足该库的质量标准,但可供社区测试和审查。\n- 标量运算:优化了模曲线阶的算术运算,没有数据相关分支。使用4个64位肢体(依赖于编译器的__int128支持)。使用8个32位肢体。\n- 模逆运算(字段元素和标量)基于safegcd,并进行了一些修改,以及一个变时变体(由Peter Dettman提供)。\n- 群运算:针对曲线方程(y^2 = x^3 + 7)专门简化的点加法公式。尽可能在雅可比坐标和仿射坐标之间进行点之间的加法。在必要时使用统一加法/加倍公式以避免数据相关分支。通过在雅可比坐标空间中进行比较,无需字段逆运算即可进行点/x比较。\n- 点乘法用于验证(aP + bG)。使用wNAF表示法表示点乘数。对于G的倍数使用更大的窗口,使用预计算的倍数。使用Shamir技巧同时进行公钥和生成器的乘法。使用secp256k1的高效可计算端omorphism将P乘数拆分为两个半大小的一个。\n- 点乘法用于签名:使用一个预计算的16的幂的倍数乘以生成器的倍数表,因此一般乘法变成一系列加法。旨在在合理硬件/工具链上完全无时序通道(对于秘密密钥操作)。通过无分支条件移动访问表,以确保内存访问均匀。无数据相关分支。可选的运行时盲化尝试挫败差分功率分析。预计算的表为没有已知标量(秘密密钥)的点添加和减去,防止攻击者即使控制用于控制数据的秘密密钥也无法控制数据内部。\n\n获取和验证\n\n每个版本(例如v0.6.0)的git标签都由维护者之一进行GPG签名。为了完全验证此项目的构建,建议通过git获取此仓库,获取签名维护者的GPG密钥,然后使用git验证发布标签的签名。\n\n可以通过以下步骤完成:\n\n- 获取在SECURITY.md中列出的GPG密钥。如果可能,将这些密钥ID与其他受所有者控制的源交叉引用(例如社交媒体、个人网站)。这是为了减轻这种不太可能的情况,即此仓库正在提供错误的内容。\n- 克隆仓库:git clone https://github.com/bitcoin-core/secp256k1\n- 检出最新发布标签,例如git checkout v0.6.0\n- 使用git验证GPG签名:% git tag -v v0.6.0 | grep -C 3 'Good signature'\n\n构建与Autotools\n\n$ ./autogen.sh # 生成一个 ./configure 脚本\n$ ./configure # 生成构建系统\n$ make # 运行实际的构建过程\n$ make check # 运行测试套件\n$ sudo make install # 将库安装到系统中(可选)\n\n要编译可选模块(如Schnorr签名),需要使用附加标志(如--enable-module-schnorrsig)运行 ./configure。运行 ./configure --help 查看所有可用标志。\n\n使用CMake构建\n\n为了保持原始源树纯净,CMake鼓励使用分离的专用构建树进行外部构建。\n\n在POSIX系统上构建\n\n$ cmake -B build # 在子目录 "build" 中生成构建系统\n$ cmake --build build # 运行实际的构建过程\n$ ctest --test-dir build # 运行测试套件\n$ sudo cmake --install build # 将库安装到系统中(可选)\n\n要编译可选模块(如Schnorr签名),需要使用附加标志(如-DSECP256K1_ENABLE_MODULE_SCHNORRSIG=ON)运行cmake。运行 cmake -B build -LH 或 ccmake -B build 查看所有可用标志。\n\n交叉编译\n\n为了减轻交叉编译的问题,cmake目录中提供了预配置的工具链文件。例如,为了为Windows交叉编译:\n$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=cmake/x86_64-w64-mingw32.toolchain.cmake\n\n为了使用NDK为Android交叉编译(使用NDK的工具链文件,假设已设置ANDROID_NDK_ROOT环境变量):\n$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=\"${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake\" -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=28\n\n在Windows上构建\n\n要使用Visual Studio在Windows上构建,必须为新的构建树指定适当的生成器。\n\n以下示例假设使用Visual Studio 2022和CMake v3.21+。\n\n在“Visual Studio 2022的开发者命令提示符”:\n>cmake -G \"Visual Studio 17 2022\" -A x64 -B build\n>cmake --build build --config RelWithDebInfo\n\n使用示例\n\n使用示例可以在examples目录中找到。要编译它们,您需要使用 --enable-examples 配置。\n\n要编译示例,请确保已启用相应的模块。\n\n基准测试\n\n如果使用 --enable-benchmark(默认情况下是开启的),将在构建后根目录中存在用于基准测试libsecp256k1函数的二进制文件。\n\n要打印基准测试结果到命令行:\n$ ./bench_name\n\n要创建基准测试结果的CSV文件:\n$ ./bench_name | sed '2d;s/ {1,}/ /g' > bench_name.csv\n\n报告漏洞\n\n请参阅SECURITY.md\n\n为libsecp256k1做出贡献\n\n请参阅CONTRIBUTING.md
页:
[1]