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) 作为私钥持有者的签
相关推荐
WiChP12 小时前
【V0.1B10】从零开始的2D游戏引擎开发之路
java·数据库·游戏引擎
一然明月12 小时前
qt基本用法
开发语言·qt
小当家.10513 小时前
PostgreSQL 做向量数据库:pgvector 在 RAG 中的实战与多场景适配
数据库·人工智能·postgresql·rag
hef28813 小时前
Prism图形设计从入门到精通:外观设置、图层顺序与微调技巧
开发语言
Access开发易登软件13 小时前
Access 和 SQLite,根本不在一个赛道上
java·jvm·数据库·sqlite·excel·vba·access开发
长谷深风11113 小时前
Java 面试高频:反射机制与异常体系全面解析
java·开发语言·面试·exception·java 反射·java 异常·class 对象
一 乐13 小时前
疫苗发布和接种预约|基于Java+vue疫苗发布和接种预约系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·疫苗发布和接种预约系统系统
Navicat中国13 小时前
如何专业化地导出数据
数据库·导出数据·navicat·数据
fantasy_arch13 小时前
BasicVSR-lite图像画质增强
开发语言·pytorch
倒流时光三十年13 小时前
PostgreSQL 部分索引(Partial Index)详解
数据库·postgresql·partial index·部分索引