天津模板网页制作如何做网站seo快速排名

张小明 2026/1/2 21:56:37
天津模板网页制作如何做,网站seo快速排名,给网站做视频怎么赚钱,小程序制作材料这张图把 ECDSA 的签名/验签数据流画得很直观#xff1a;左边 Bob#xff08;持有密钥对#xff09;#xff0c;右边 Alice#xff08;只拿到消息签名公钥来验证#xff09;。1) 图里在讲什么#xff1a;标准 ECDSA 流程签名端#xff08;Bob#xff09;对消息做哈希左边 Bob持有密钥对右边 Alice只拿到消息签名公钥来验证。1) 图里在讲什么标准 ECDSA 流程签名端Bob对消息做哈希eH(M)取一个一次性随机数noncek图中单独画出来的k椭圆曲线标量乘RkG取 R 的 x 坐标再 mod 曲线阶 n得到计算输出签名 (r,s)图中写的r k.G、就是这两步。验签端Alice同样哈希eH(M)计算很多教材写计算计算点验证图右下角的、u1/u2、Pu1.Gu2.pk、Prove rP就是这套验签。2) 为什么会引出“确定性签名”问题全在 kECDSA 里k 的质量是生死线如果 k 重复用在两次不同消息上或者被攻击者猜到/泄露一部分私钥 sksksk 会被直接解出来。历史上很多真实事故都不是算法错而是随机数发生器不可靠、实现 bug、虚拟机熵不足、设备启动早期熵不够等导致 k 出问题。所以“确定性 ECDSADeterministic ECDSA”的核心思想是k 不再靠外部 RNG 随机生成而是由 (私钥 sk 消息哈希 e) 通过标准算法确定性地产生。这样 RNG 挂了也不至于把私钥送出去。3) ECDSA 的“确定性签名”到底确定在哪里确定性 ECDSA 并不是改了 r,s 公式公式完全一样而是把随机选 k换成确定性推导 k最常见、事实标准是RFC 6979用HMAC_DRBG从 sk 与 eH(M) 推导出 k。可以把它理解成然后照旧算结果是什么同一个私钥 sk 对同一条消息 M每次签名得到的 (r,s)完全一致如果不额外加盐。不依赖系统 RNG也就规避了“烂随机数导致私钥泄露”的大坑。4) 确定性签名的优缺点优点强抗 RNG 故障最大价值点。可复现调试、审计、硬件实现一致性更好。协议层不用改验签方完全无感还是标准 ECDSA 签名。注意点 / 风险仍然要防侧信道计时/功耗/缓存因为 k 虽然不靠 RNG但它依然是“必须保密的一次性秘密”。有些系统会在 RFC6979 的基础上再混入少量随机性“deterministic but randomized”来增强侧信道防护——这不影响正确性但会让签名不再完全可复现。5) 你可以用一句话记住确定性 ECDSA 标准 ECDSA 用 RFC6979 从(私钥消息哈希)确定性生成 k公式不变安全性大幅降低对随机数的依赖避免“k 出事私钥就没了”。下面按图里的变量k、r、s、c、u1、u2、P把 **“确定性 ECDSARFC6979”**讲透并给出一份可直接照着写 Delphi 的伪代码 单元骨架。1) 关键点确定性 ECDSA 只“换掉 k 的来源”ECDSA 的签名公式不变其中 e 是消息哈希按规则截断/折叠确定性的地方在于不再用 RNG 随机挑 k而是用 RFC6979 的 HMAC_DRBG 从(sk, e)推导出 k。同一私钥 同一消息 → 推导出的 k 固定 → 签名 (r,s) 固定。2) RFC6979 的 k 推导流程HMAC_DRBG2.1 需要的辅助函数RFC6979 术语设曲线阶为 nnn其字节长度qlen bit_length(n)rolen ceil(qlen / 8)n 的定长字节数定义int2octets(x)把整数 x 编成固定 rolen 字节的大端序不足左补 0bits2int(b)把哈希输出 b比特串取左侧 qlen 位如果 b 比 qlen 长就截断得到整数bits2octets(b)z1 bits2int(b)z2 z1 mod n返回int2octets(z2)注意这一步就是“把 H(M) 变成适合模 n 的 e”。很多实现错在没做 bits2octets / truncation。2.2 HMAC_DRBG 状态机K、V选择哈希函数常见P-256 用 SHA-256secp256k1 也常用 SHA-256P-384 用 SHA-384…初始化V 0x01重复hlen次K 0x00重复hlen次bx int2octets(sk) || bits2octets(h1)其中h1 H(M)的原始哈希字节串更新K HMAC(K, V || 0x00 || bx)V HMAC(K, V)K HMAC(K, V || 0x01 || bx)V HMAC(K, V)生成候选 k循环T emptywhile len(T) rolen:V HMAC(K, V)T T || Vk bits2int(T)同样按 qlen 截断if1 k n-1成功返回 k否则极少发生K HMAC(K, V || 0x00)V HMAC(K, V)继续循环3) 把 k 塞回你图里的 ECDSA 签名公式得到 k 后就是标准 ECDSAR k*Gr R.x mod n若r0重新生成 kRFC6979 循环继续即可e bits2int(H(M))或者直接用上面 bits2octets 产生的 z 再转整数两者要一致s k^{-1} * (e r*sk) mod n若s0重新生成 k推荐额外做一步 “low-s 规范化”防签名可塑性如果s n/2就s n - s4) Delphi 实现要点你写代码时最容易踩坑的地方4.1 哈希与 HMAC你需要Hash(M) - bytesHMAC(K, data) - bytes你可以选System.Hash新 Delphi 版本常见mORMot 的 SHA/HMACOpenSSL 的 HMAC 接口最稳我下面给骨架时把 HMAC/SHA 当作可替换的函数。4.2 大整数签名过程里必需modInv(k, n)modMul / modAdd / mod建议用System.Math.BigNumbers的TBigInteger如果你版本有否则用你自己的大数库/openssl BN。4.3 椭圆曲线运算你需要ScalarMul(G, k) - ECPointECAdd(P,Q)验签要用如果你不想自己写椭圆曲线算术最省事是用 OpenSSL 的 EC_GROUP/EC_POINT 做乘法与加法r,s 的计算用 BN 做5) Delphi 伪代码 单元骨架照着填就能跑下面把RFC6979 派生 k写成 Delphi 风格骨架ECC 点乘那部分你可以接 OpenSSL 或你已有的曲线库。unit DeterministicECDSA_RFC6979; interface uses System.SysUtils, System.Classes {$IFDEF HAS_BIGINTEGER} , System.Math.BigNumbers {$ENDIF} ; type TBytes System.SysUtils.TBytes; // 你需要提供HMAC(Hash) 与 Hash // 推荐HMAC-SHA256 / SHA256以 P-256 或 secp256k1 为例 THashFunc reference to function(const Data: TBytes): TBytes; THmacFunc reference to function(const Key, Data: TBytes): TBytes; // 曲线参数需要n阶G基点以及点乘函数 // 这里把点类型抽象掉方便你接 OpenSSL 或自写实现 TECPoint record X, Y: TBytes; // 或者你用 BN/BigInteger 保存 end; function RFC6979_DeriveK( const PrivKeyInt2Octets: TBytes; // int2octets(sk), fixed rolen bytes const MsgHash: TBytes; // h1 H(M) const N_BigEndian: TBytes; // n 的大端字节固定 rolen 也行 QLenBits: Integer; const Hmac: THmacFunc; HLen: Integer ): TBytes; // 返回 k 的 int2octets(k), fixed rolen bytes implementation function CeilDiv(A, B: Integer): Integer; begin Result : (A B - 1) div B; end; function ConcatBytes(const A, B: TBytes): TBytes; var L1, L2: Integer; begin L1 : Length(A); L2 : Length(B); SetLength(Result, L1 L2); if L1 0 then Move(A[0], Result[0], L1); if L2 0 then Move(B[0], Result[L1], L2); end; function Concat3(const A, B, C: TBytes): TBytes; begin Result : ConcatBytes(ConcatBytes(A, B), C); end; function RepeatByte(B: Byte; Count: Integer): TBytes; var i: Integer; begin SetLength(Result, Count); for i : 0 to Count - 1 do Result[i] : B; end; // bits2int取左边 qlen 位 function Bits2Int(const Bits: TBytes; QLenBits: Integer): TBytes; var qlenBytes, shiftBits: Integer; tmp: TBytes; i: Integer; begin qlenBytes : CeilDiv(QLenBits, 8); SetLength(tmp, qlenBytes); // 先取前 qlenBytes for i : 0 to qlenBytes - 1 do if i Length(Bits) then tmp[i] : Bits[i] else tmp[i] : 0; shiftBits : (qlenBytes * 8) - QLenBits; if shiftBits 0 then begin // 右移 shiftBits仅对最后一个字节区域不够时的截断 // 简化实现整体右移 shiftBits // 你也可以换成大整数处理更稳 // 下面给一个字节级右移 var carry: Byte : 0; for i : 0 to qlenBytes - 1 do begin var newCarry : tmp[i] shl (8 - shiftBits); tmp[i] : (tmp[i] shr shiftBits) or carry; carry : newCarry; end; end; Result : tmp; end; // 这里的 ModN / Compare / SubN / AddN 等最好用大整数实现 // 为了给你结构清晰我只留接口说明。 // 你实际实现时把字节串转 BN/BigInteger做 mod 运算再转回定长 rolen bytes。 function RFC6979_DeriveK( const PrivKeyInt2Octets: TBytes; const MsgHash: TBytes; const N_BigEndian: TBytes; QLenBits: Integer; const Hmac: THmacFunc; HLen: Integer ): TBytes; var rolen: Integer; K, V, bx: TBytes; h1_b2o: TBytes; Tacc: TBytes; begin rolen : Length(PrivKeyInt2Octets); // 定长 // h1_b2o bits2octets(h1) int2octets(bits2int(h1) mod n) // 你需要在这里做Bits2Int(MsgHash) - integer - mod n - int2octets // 暂用占位请替换为正确的 mod n 逻辑 h1_b2o : Bits2Int(MsgHash, QLenBits); // TODO: h1_b2o : Int2Octets( (BigInt(h1_b2o) mod n), rolen ) bx : ConcatBytes(PrivKeyInt2Octets, h1_b2o); V : RepeatByte($01, HLen); K : RepeatByte($00, HLen); // K HMAC(K, V || 0x00 || bx) K : Hmac(K, Concat3(V, TBytes.Create($00), bx)); V : Hmac(K, V); // K HMAC(K, V || 0x01 || bx) K : Hmac(K, Concat3(V, TBytes.Create($01), bx)); V : Hmac(K, V); while True do begin SetLength(Tacc, 0); while Length(Tacc) rolen do begin V : Hmac(K, V); Tacc : ConcatBytes(Tacc, V); end; // k bits2int(Tacc) Result : Bits2Int(Tacc, QLenBits); // TODO: 把 Result 作为整数检查 1..n-1 // if 1 k n-1 then // Result : Int2Octets(k, rolen); Exit; // 失败分支极少 K : Hmac(K, ConcatBytes(V, TBytes.Create($00))); V : Hmac(K, V); end; end; end.上面这份骨架里我刻意把“mod n / 比较 1..n-1 / int2octets 定长输出”留成 TODO因为这部分你肯定会用你自己的大数TBigInteger 或 OpenSSL BN这样最稳、也最贴合你现有工程。6) 你接下来怎么落地两条路线路线 A全用 OpenSSL最省心、最不容易错HMAC/SHAOpenSSL大数 BNOpenSSLEC 点乘/加法OpenSSL你只负责 RFC6979 输出 k然后用 OpenSSL 做k*G取 r再算 s。路线 B你有自己的 ECC / 大数库直接把 RFC6979 的 k 接到你现有的ScalarMul(G,k)上
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

点菜网站模板广州市城市建设

影刀RPA促销大杀器!亚马逊促销活动自动创建,效率暴增1500% 🚀还在手动设置亚马逊促销活动?复制粘贴活动规则到手抽筋?别傻了!今天我用影刀RPA打造智能促销机器人,5分钟创建100个促销活动&#x…

张小明 2025/12/30 19:47:59 网站建设

商业网站开发设计实训总结电脑系统网站建设

抖音无水印视频下载:3个超简单方法完整指南 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载:https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downloader 想要永久保存抖音上的…

张小明 2025/12/29 18:08:01 网站建设

网站建设a云世家宋南南怎么查询域名是否备案

万亿低空经济赛道的竞争已进入“申报冲刺”阶段!据内部消息透露,CES Asia2026亚洲消费电子展“最佳科技创新奖”申报通道开启以来,已有3家低空经济领域标杆企业率先提交申请,涵盖基础设施、核心技术、商业化运营三大关键赛道。展会…

张小明 2026/1/1 21:35:42 网站建设

建筑设计网站国外响应式酒店网站模板

Flutter AR 开发:打造厘米级精度的室内导航应用 引言 “AR 导航漂移严重,用户绕圈找不到出口!” “在商场里定位误差高达 5 米,完全不可用!” “手机发热严重,AR 模式只能坚持 3 分钟!” ——这…

张小明 2025/12/30 21:22:11 网站建设

商业网站平台建公司网站一般多少钱

还在为PS3手柄无法通过蓝牙连接Windows系统而困扰吗?BthPS3开源驱动项目通过创新的内核级蓝牙协议栈扩展,彻底解决了PS3手柄在PC平台的兼容性难题。这款免费驱动支持SIXAXIS、DualShock 3等所有PS3外设,让您轻松享受原生手柄操作体验。 【免费…

张小明 2025/12/29 19:19:50 网站建设

台州国强建设网站网站配色案例

目录 一、项目成品图片 二、项目功能简介 1.主要器件组成 2.功能详解介绍 三、项目原理图设计 四、项目PCB硬件设计 项目PCB图 五、项目程序设计 六、项目实验效果 ​编辑 七、项目包含内容 一、项目成品图片 哔哩哔哩视频链接: https://www.bilibili.c…

张小明 2025/12/30 14:47:07 网站建设