golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证

我们已经展示了,给定生成点 G,并选择一个足够大的标量 e,我们可以轻松计算出 P=e*G,但是当你拥有 G 和 P 时,几乎不可能得到 e。这是椭圆曲线加密的基础。

所选择的标量 k 被称为私钥,而 Q 是公钥。注意,k 是一个256位的整数,而 Q 包含两部分:一个是 x 坐标,另一个是 y 坐标。

这种公钥加密的名称是椭圆曲线数字签名算法,简称 ECDSA。它涉及以下步骤:

复制代码
选择一个标量 e,计算 P = e*G,其中 e 是私钥,P 是公钥,将 P 公之于众,所有人都可以知道它。

私钥的持有者随机选择两个有限域成员 u 和 v,并计算 k = u + ve,k 需要保密。

计算 R = k * G = (u + v*e)*G = u*G + v*(e*G) = u*G+v*P,我们仅使用 R 的 x 坐标,并将 x 的值命名为 r。

私钥持有者生成一条任意长度的消息文本(可以公开),并通过 sha256 或 md5 将其哈希为一个256位的数字,称该哈希结果为 z。

通过公式 s = (z + r*e) / k 计算一个数字 s(所有这些计算都基于模 p 的运算)。

将三元组 (z, s, r) 作为私钥持有者的签
相关推荐
AIOps打工人几秒前
数据库运维工具选型 2026 横评:dbskiter vs MySQL Workbench vs percona_toolkit vs Navicat
运维·数据库·mysql
这个DBA有点耶3 分钟前
核心系统的高可用与容灾架构:从主从到两地三中心全面解析
java·开发语言·数据库·sql·mysql·架构·运维开发
张忠琳3 分钟前
【Go 1.26.4】(Part 3) Go 1.26.4 超深度分析 — Runtime GC 垃圾收集 (mgc*.go + mbitmap.go)
开发语言·golang
是店小二呀4 分钟前
零门槛快速接入主流大模型:基于 AI Ping 平台一键集成 GLM-5.1 与多场景应用深度实战
大数据·数据库·人工智能
asdfg12589638 分钟前
BeanListHandler的通俗理解
java·数据库·oracle
KaMeidebaby12 分钟前
卡梅德生物技术快报|羊驼免疫:分子生物学实战:基于羊驼免疫的重链抗体制备与全流程验证方案
前端·网络·数据库·人工智能·算法·百度
jieyucx22 分钟前
数据库专题开篇:零基础迈入 MySQL 的第一步
数据库·mysql
码界索隆24 分钟前
Python转Java系列:语法与类型系统
java·开发语言·python
ch.ju26 分钟前
Java程序设计(第3版)第四章——编译中的错误:无法覆盖
java·开发语言
ClouGence26 分钟前
Oracle BLOB 实时同步为什么这么难?一次看懂背后的 5 个技术挑战
数据库·oracle