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) 作为私钥持有者的签
相关推荐
●VON2 小时前
鸿蒙Flutter实战:分类管理页BottomSheet CRUD
数据库·flutter·华为·harmonyos·鸿蒙
Cosolar2 小时前
Chroma向量库面试学习指南
数据库·人工智能·面试·职场和发展·数据库架构
方也_arkling2 小时前
【Java-Day08】static / final / 枚举
java·开发语言
风吹夏回2 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
Chengbei113 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1123 小时前
web-第一次课后作业
java·开发语言·idea
小熊Coding3 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
企服AI产品测评局3 小时前
Agent适配信创环境实测:企业级自动化如何实现国产操作系统与数据库全兼容?
运维·数据库·人工智能·ai·chatgpt·自动化
秋93 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
cfm_29143 小时前
Redis数据安全性解析
数据库·redis·缓存