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) 作为私钥持有者的签
相关推荐
Wyz201210242 分钟前
HTML函数运行时触控屏失灵是硬件故障吗_输入层兼容性测试【详解】
jvm·数据库·python
Greyson19 分钟前
TensorFlow中如何冻结模型层_设置layer.trainable等于False实现微调
jvm·数据库·python
老纪的技术唠嗑局9 分钟前
4.15 bubseek —— 让 Agent 的足迹,变成团队的洞察
大数据·数据库·sql·游戏·ai·oceanbase·sql优化
m0_7488394910 分钟前
SQL视图在ETL流程中的作用_数据清洗与标准化接口
jvm·数据库·python
2401_8326355811 分钟前
JavaScript中字符串toLowerCase与toUpperCase规范
jvm·数据库·python
gihigo199813 分钟前
分布式发电的配电网有功-无功综合优化 MATLAB 实现
开发语言·分布式·matlab
人工干智能13 分钟前
科普:python的pandas包中的DataFrame就是二维表
开发语言·python·pandas
Wyz2012102413 分钟前
如何在 Discord.py 中实现按钮权限控制:仅允许特定角色点击
jvm·数据库·python
浪客川14 分钟前
【百例RUST - 006】一文理解所有权和切片
开发语言·后端·rust
Westward-sun.17 分钟前
PyQt5入门实战:从零实现一个表达式输入式计算器(附完整代码)
开发语言·qt