当前位置: 首页 > news >正文

Stronghold Procedures 完全参考:BIP39、SLIP10、Ed25519 签名等 20+ 密码学操作一览

Stronghold Procedures 完全参考:BIP39、SLIP10、Ed25519 签名等 20+ 密码学操作一览

【免费下载链接】stronghold.rsStronghold is a secret management engine written in rust.项目地址: https://gitcode.com/gh_mirrors/st/stronghold.rs

Stronghold 是一个用 Rust 编写的密钥管理引擎(secret management engine),它的核心抽象是Procedure(过程):每一种密码学操作都被封装成一个 Procedure,对加密保险库(Vault)中的秘密执行"生成、派生、使用"三类动作。本文带你快速扫完内置的全部 22 个 Stronghold Procedures——从 BIP39 助记词生成、SLIP10 密钥派生到 Ed25519 消息签名——并教你按场景挑选最合适的过程。

什么是 Procedure:Stronghold 密码学操作的统一抽象

每个 Procedure 都声明了自己的秘密来源 Location(source,Vault 中的记录位置)与写回位置(target),引擎保证秘密只在受保护的内存缓冲区中流转,不会以明文形式暴露给宿主应用。

按对秘密的作用,源码client/src/procedures/types.rs将过程抽象为三个 trait:

Trait含义典型场景
GenerateSecret生成全新秘密并写入保险库BIP39 助记词生成
DeriveSecret用现有秘密派生出新秘密SLIP10 派生、HKDF
UseSecret使用秘密,只返回公开输出Ed25519 签名、HMAC

全部 22 个具体过程集中定义在client/src/procedures/primitives.rs中,并统一收敛为StrongholdProcedure枚举(第 40~65 行)。

22 个 Stronghold Procedures 速查表

分类过程它做什么
📦 保险库管理WriteVault把任意数据写入指定 Location
RevokeData吊销(标记删除)一条记录,可自动 GC
GarbageCollect物理清理已吊销记录
CopyRecord将秘密从一个 Location 复制到另一个
🧠 助记词与种子BIP39Generate生成 BIP39 助记词,种子存入保险库
BIP39Recover由助记词恢复种子(支持 passphrase)
Slip10Generate直接生成原始 SLIP10 种子(默认 64 字节)
🔑 密钥派生Slip10Derive从种子或父密钥派生子密钥,返回链码
HkdfHKDF 密钥扩展(SHA-256/384/512)
ConcatKdfNIST SP 800-56A 5.8.1 拼接 KDF
🔐 签名与公钥GenerateKey随机生成 Ed25519 / X25519 密钥
PublicKey由私钥计算 32 字节公钥
Ed25519Sign用 Ed25519 密钥签名,输出 64 字节签名
🤝 密钥交换X25519DiffieHellmanECDH 协商共享秘密并写入保险库
🔒 对称加密AeadEncryptAES-256-GCM 或 XChaCha20-Poly1305 加密
AeadDecrypt对应解密,校验认证标签
AesKeyWrapEncrypt用库内另一把密钥包裹密钥(AES-256-KW)
AesKeyWrapDecrypt解包裹密钥并写入指定 Location
🧮 KDF / MACPbkdf2HmacPBKDF2 密码派生(HMAC-SHA2/384/512)
Hmac用库内密钥计算 HMAC 消息认证码
✂️ 秘密操作ConcatSecret拼接两个秘密为新的秘密
⚠️ 非安全特性CompareSecret比较秘密与期望值(仅 insecure 特性)

BIP39 助记词:生成与恢复

  • BIP39Generate:生成 32 字节随机熵,编码为 24 词助记词(支持英文/日文词表),64 字节种子存入 Vault,助记词作为明文输出交给用户备份;可选 passphrase 保护。
  • BIP39Recover:由助记词 + passphrase 恢复种子并写入保险库,用于换设备迁移。实现上对助记词与口令做了zeroize清零,避免在内存中残留。

SLIP10 派生与 Ed25519 签名工作流

  • Slip10Generate:不借助助记词直接生成随机种子(默认 64 字节/512 位)。注意:走这条路后无法再反推出助记词,需要助记词请改用BIP39Generate
  • Slip10Derive:输入Slip10DeriveInput::Seed::Key加派生路径Chain,子密钥写入 output Location,并返回对应的ChainCode
  • Ed25519Sign:只要私钥记录的前 32 字节是 Ed25519 密钥材料即可直接签名——SLIP10 派生出的密钥完全兼容,密钥全程不出保险库。
  • GenerateKey/PublicKey:面向非层级化场景,直接生成密钥(KeyType::Ed25519/KeyType::X25519)并计算公钥。

加密、密钥交换与密钥包裹

  • X25519DiffieHellman:本地 X25519 私钥 × 对端公钥 → 共享秘密写入保险库,是 P2P 安全通道的起点。
  • AeadEncrypt/AeadDecrypt:AEAD 加密(AES-256-GCM 或 XChaCha20-Poly1305),需 nonce 与 associated_data;加密输出为 tag + 密文拼接。
  • AesKeyWrapEncrypt/AesKeyWrapDecrypt:用库内密钥"包裹"另一把密钥(AES-256-KW),是构建密钥层级的常用模式。
  • Pbkdf2Hmac:从口令经 PBKDF2(指定盐与迭代次数)派生密钥。
  • Hmac:用库内密钥计算 HMAC-SHA256/384/512 消息认证码。

如何选对 Procedure:场景速配清单 🎯

  1. 需要助记词备份?BIP39Generate/BIP39Recover;不需要则Slip10Generate更轻量。
  2. 多账户/多路径派生Slip10Derive+Ed25519Sign
  3. P2P 安全信道X25519DiffieHellmanConcatKdf派生会话密钥 →AeadEncrypt加密数据。
  4. 口令场景Pbkdf2Hmac密钥层级AesKeyWrapEncrypt/Decrypt
  5. 清理旧密钥RevokeDatashould_gc = true自动清理)或单独执行GarbageCollect
  6. ⚠️CompareSecret仅编译insecure特性时存在,源码明确标注禁止用于生产环境

关键源码与测试位置

  • 22 个过程的具体定义:client/src/procedures/primitives.rs
  • 三大 trait 抽象(GenerateSecret / DeriveSecret / UseSecret):client/src/procedures/types.rs
  • 引擎桥接实现(Runner / ClientRunner):client/src/procedures/clientrunner.rs
  • Location(Vault 路径 + 记录 ID)定义:client/src/types/location.rs
  • 过程行为测试:client/src/tests/procedure_tests.rs
  • 快速上手指南:client/README.md

【免费下载链接】stronghold.rsStronghold is a secret management engine written in rust.项目地址: https://gitcode.com/gh_mirrors/st/stronghold.rs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4174603.html

相关文章:

  • orga分词器源码剖析:基于text-kit读取器的lexer逐行设计解读
  • 免费打造FIFA 23梦想球队:Live Editor 生涯模式修改器完整上手指南
  • 流媒体时代,本地音乐播放器如何以“简洁”定义核心价值?
  • 工业具身智能落地的工程基石:从概念到实战的系统化底座构建指南
  • Qt插件机制详解:QPluginLoader动态加载与模块化架构完整指南(Awesome_Qt_Learning)
  • 为什么你的Redis客户端太慢?异步Redis客户端aredis完整概览
  • 铸铁平台与钢结构平台选型对比:从阻尼特性到全生命周期成本分析
  • XUnity.AutoTranslator:十分钟让没中译的 Unity 游戏跑起来
  • Connect You 开源联系人应用开发者指南:Jetpack Compose + Room 架构完整解析
  • 从斯大林排序算法看算法正确性与数据完整性
  • 猫抓 Cat-Catch:免费的网页视频资源嗅探与流媒体下载扩展
  • BBDown 命令行下载器:一条命令把 B 站视频存成本地 MP4
  • DRF Docs 安全指南:HIDE_DOCS 配置全解,为什么生产环境必须隐藏 API 文档
  • 多元分数多项式为何衰落?从统计建模稳定性与机器学习范式演变谈起
  • gogstash源码解析(三):codec编解码机制与simpleQueue队列暂停恢复的背压设计
  • SceneKit节点克隆与材质独立难题:Shinkansen 3D Seat Booking Prototype的NodeFactory深克隆技巧
  • 美赛微分方程建模实战:从识别到求解的完整指南
  • rack-tracker 埋点中间件安全深度解析:从 XSS 防护到线程安全的完整设计指南
  • 腾讯前端面试核心考点:JS基础与框架原理解析
  • LÖVE Potion架构深度剖析:modules/objects/utilities三层设计,LÖVE框架移植方法论全解读
  • TP6-Vue-Admin:ThinkPHP6 后台 + Vue 管理后台,前后端分离后台管理系统快速搭建指南
  • 分布感知算法设计:LLM智能体如何根据数据特征优化算法性能
  • 数学建模实战:从数据清洗到趋势预测,解析全球变暖问题的数据科学方法论
  • 突破大数据处理瓶颈:Awesome Data Analysis收录20个高性能工具,Polars、Dask一网打尽
  • 美团大模型产品岗面试全解析:技术考察与业务场景
  • KeplerMapper Cover类深度讲解:n_cubes与perc_overlap如何决定图的精细度
  • 递归算法面试全攻略:从基础到高阶优化
  • BongoCat 互动桌宠快速上手指南:键盘、鼠标、手柄全响应
  • 开源iOS投屏工具:有线优先、低延迟、可控制的开发测试利器
  • 《我的世界》基岩版物品复制机制解析与风险规避指南