密码学 | 椭圆曲线数字签名方法 ECDSA(下)

news2025/2/7 10:37:32

目录

10  ECDSA 算法

11  创建签名

12  验证签名

13  ECDSA 的安全性

14  随机 k 值的重要性

15  结语


⚠️ 原文:Understanding How ECDSA Protects Your Data.

⚠️ 写在前面:本文属于搬运博客,自己留着学习。同时,经过几天的折磨后,我对椭圆曲线已经有点基础了,因此删除了一些我认为无关紧要的原文。

10  ECDSA 算法

现在让我们来谈谈 ECDSA 签名算法。

对于 ECDSA,你首先需要知道你的曲线参数,即 a、b、p、N 和 G。你已经知道 a 和 b 是曲线函数的参数:

y^2=(x^3+ax+b)\ \mathrm{mod}\ p

还知道 p 是模数,N 是曲线的点数。但还需要知道 G 是什么。G 代表一个 “参考点” 或者说一个 “原点”,参考点可以是曲线上的任何一点。

NIST(美国国家标准与技术研究院)和 SECG(高效加密标准组)提供了预先制作和标准化的曲线参数,这些参数被认为是有保障且高效的。

私钥是一个 160 位的随机数,而公钥是曲线上的一个点,它是私钥与参考点 G 的点乘结果。设 dA 为私钥,Qa 为公钥,则有:Qa = dA * G,其中 G 是曲线参数中的参考点。

不懂 dA 和 Qa 为什么要这样大小写 😇

11  创建签名

一个签名的长度是 40 个字节,它由两个 20 字节的值组成,第一个称为 R,第二个称为 S,所以 (R, S) 共同构成 ECDSA 签名。具体流程如下:

首先,您必须生成一个随机值 k(20 字节),并使用 “点乘法” 计算 P 点:

P=k*G

P 点的 x 坐标值即为 R,它的长度是 20 个字节。

为了计算 S,您必须对消息进行 SHA1 散列,得到一个长为 20 个字节的值,我们将称之为 z 。现在您可以使用以下方程计算 S:

S = k^{-1}(z + dA * R)\ \mathrm{mod}\ p

请注意 k^{-1},它是 k 的 “模乘逆”。虽然 k^{-1} 本质上是 k 的倒数,但由于我们处理的是整数,所以这是不可能的。因此要求 k^{-1} 是一个整数,它能够使得 (k^{-1} * k) mod p 等于 1

暂时还没有学 “模乘逆”,应该就是一个求模数的方法。

再次提醒您,k 是用于生成 R 的随机数,z 是要被签署的消息的散列,dA 是私钥,R 是 k*G 的 x 坐标值,其中 G 是曲线参数的参考点。

12  验证签名

既然您已经有了签名,您想要验证它,这也是相当简单的。

您使用这个方程来计算一个点 P:

P = S^{-1}*z*G + S^{-1} * R * Qa

只要 P 点的 x 坐标值等于 R,就意味着签名是有效的,否则它就不是。

按照上述方程把 P 点计算出来,只要这个 P 点的 x 坐标值等于 R,就说明签名有效。

很简单,对吧?现在让我们看看为什么成立,这需要一些数学来验证。

我们有:

P = S^{-1}*z*G + S^{-1} * R * Qa

可以看出,算 P 点的时候只需要使用一些公开的数据,而不会涉及私钥。

其中

Qa = dA*G

因此

P = S^{-1}*z*G + S^{-1} * R * dA*G = S^{-1}(z + dA* R) * G

我们代入 P 点的坐标值有:

k*G = S^{-1} (z + dA * R) *G

我们可以通过消除 G 来简化,得到:

k = S^{-1}(z + dA * R)

通过求 k 和 S 的逆,我们得到:

S = k^{-1}(z + dA *R)

这正是用于生成签名的方程,因此等号左右两边的式子是相等的。这就是为什么您可以使用上面的第一个方程来验证签名。

签名的时候会需要使用私钥 dA,验证的时候只需要使用公钥 Qa,这就是所谓的零知识证明吧。

13  ECDSA 的安全性

因为 Qa=dA*G、P=k*G,又因为 ECDSA 的 “点乘法” 是一个陷门函数 —— 在第 9 步中解释过 —— 所以我们不能根据 Qa 和 P 来倒推 dA 或 k,这使得 ECDSA 算法是安全的。

我们没有办法找到私钥,也没有办法在不知道私钥的情况下伪造签名。

为什么 “也没有办法在不知道私钥的情况下伪造签名”?

14  随机 k 值的重要性

现在让我们讨论一下索尼在 Playstation 3 上使用的 ECDSA 签名是如何出现缺陷的,以及这是如何允许黑客获取 PS3 的 ECDSA 私钥的。

生成签名所需的方程如下:

S = k^{-1}(z + dA*R)\ \mathrm{mod}\ p,\ \ R = k*G

S 方程的强度在于它一个方程含有两个未知数,即 k 和 dA,因此无法进行求解。

然而,算法的安全性基于其实现,即确保 “k 是随机生成的” 非常重要,确保没有任何人能够猜测、计算,或者使用时序攻击或其他任何类型的攻击来找到随机值 k 。

索尼

但是索尼在实现上犯了一个巨大的错误,他们在任何地方都使用相同的 k 值。

这意味着如果你有两个签名,它们都有相同的 k,那么它们都会有相同的 R 值。同时这意味着,只要你拥有同一个人的两个签名 S 和 S',就能计算出 k 值。

首先让 S 和 S' 相减:

S-S'= k^{-1} (z+dA*R)-k^{-1} (z'+ dA*R)

整理得到

S-S'= k^{-1}(z + dA*R -z'-dA*R)= k^{-1}(z-z')

从而有

k = (z - z') / (S - S')

其中,z 和 z'、S 和 S' 都是已知的。

一旦得到了 k,那么 S 方程就只含一个未知数了,从而可以很容易地解出 dA:

dA = (S*k - z) / R

一旦得到了私钥 dA,你可以用它来签署自己的文件,而 PS3 将会认为它是索尼签名的合法文件。这就是为什么确保用于生成签名的随机数实际上是 “密码学上随机” 的非常重要的原因。

比特币

另一个例子是当一些比特币客户端在某些浏览器和某些 Android 客户端上使用非密码学随机数生成器时,这导致它们用相同的 k 值签署交易,恶意人士能够找到他们的比特币钱包私钥并盗取他们的资金。

小结

这显示了每次制作签名时使用真正随机数的重要性,因为如果你签名对的 (R, S) 中的 R 值在两个不同的签名中相同,你就会暴露私钥。

理论上,ECDSA 算法非常安全,不可能找到私钥。当然,它的前提是 “算法实现是正确的”。如果有一种方法可以找到私钥,那么每个计算机、网站、系统的安全性都可能受到威胁。

15  结语

最后!我希望这能让很多人更清楚地理解这个算法。我知道这仍然非常复杂和难以理解。我通常试图让非技术人士更容易理解事物,但这个算法太复杂了,无法用更简单的术语来解释。

但是,如果您是一名开发人员或数学家,或者您对学习此内容感兴趣,因为您想帮助或简单地获取知识,那么我相信这为您提供了开始学习或至少理解这个被称为 “ECDSA” 的未知野兽的概念的信息。

附言:在本文中,我使用了 “160位” 来讨论 ECDSA 签名,因为它通常与 160 位的 SHA1 散列值(20 字节)匹配,而且 PS3 安全机制就是使用的这种组合。但是,该算法本身可以使用任何大小的数字。本文可能存在其他不准确之处,但就像我说的,我不是专家,而且我已经尽可能地将内容简化,同时没有删除关于算法的任何信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1598404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

00 【哈工大_操作系统】Bochs 汇编级调试方法及指令

本文将介绍一下哈工大李治军老师《操作系统》课程在完成Lab时所使用到的 Bochs 调试工具的使用方法。这是一款汇编级调试工具,打开调试模式非常简单,只需在终端下输入如下指令: 1、bochs 调试基本指令大全 功能指令举例在某物理地址设置断点…

LED电子显示屏的性能要求

LED电子显示屏作为一种重要的信息传播媒介,在各行各业得到广泛应用。然而,其性能要求直接影响到其稳定运行和有效传播信息的效果。以下是LED电子显示屏的性能要求概述: 1. 发光体可靠性 LED电子显示屏的发光体质量必须可靠稳定,保…

云安全与网络安全:有什么区别?

云计算已经存在了一段时间,但某些术语的正确含义仍然存在混乱。一个例子是区分云安全与网络安全。 首先,让我们看一下网络安全一词 ,以了解它的含义。然后,我们将将该术语与云安全进行比较,以了解两者在几个关键领域的…

STM32笔记---CAN采样点设置和报错

STM32笔记---CAN采样点设置和报错 采样点设置再同步补偿宽度(SJW)设置 报错分析CAN中断使能寄存器CAN错误状态寄存器 采样点设置 以前配置CAN参数的BS1和BS2参数时认为总线波特率符合要求就可以了,其实同一个波特率可能对应多组参数设置的情…

vue3 el-table无表头

需要实现的样式 父组件 <template><div><!-- 表格组件 无表头 --><Table :label"tableData.label" :data"tableData.data" :querydata"tableData.querydata" :queryTitle"tableData.title"><template #o…

矩阵起源招聘进行时,寻找发光的你~

推荐有礼&#xff01;添加MO小助理 MO定制书包轻松GET~

Linux查看进程

Linux查看进程 引言查看进程1.快速查看运行中的进程列表2. 查看所有用户的所有进程3.显示所有进程的完整格式。4.动态显示进程的信息5.根据进程名查找进程ID6.以树状图的方式显示进程间的父子关系7.查找指定名字的进程id 引言 Linux查看进程在日常的使用中比较常见&#xff0c…

Sony Camera Remote SDK在Windows上的使用

Sony官方提供了相机遥控软件开发包&#xff0c;允许用户自行开发应用软件&#xff0c;实现对相机的远程控制&#xff0c;包括拍摄、监看和文件传输等。截至目前最新的版本是2024.4.12发布的1.12.00版本&#xff0c;下载链接如下&#xff1a;Camera Remote SDK | LICENSE AGREEM…

直流充电桩与交流充电桩有哪些区别,如何选最靠谱?

在当今快速发展的电动汽车市场&#xff0c;正确选择充电桩成为了车主们面临的重要问题之一。直流充电桩与交流充电桩区到底有什么区别&#xff1f;哪些方面不同&#xff1f;分别适用场景是什么&#xff1f;不同场景应该怎么选&#xff1f;本文一文为您详解。 一、直流充电桩与交…

wps使用Latex编辑公式没有Latex formula

wps使用Latex编辑公式没有Latex formula 1. 下载CTEX2. 下载LaTeXEE3. 配置Miktex4. 配置latexee5. 用管理员权限运行latexeqedit.exe6. wps插入latex公式 1. 下载CTEX 下载CTEX网址&#xff0c;我下载的下图这个&#xff0c;下载完了之后运行exe文件安装ctex。 2. 下载LaTe…

雷达智能名片小程序源码系统 带完整的安装代码包以及搭建教程

在数字化高速发展的今天&#xff0c;名片作为商务交流中的一张“金名片”&#xff0c;其形式与功能也在不断地迭代升级。雷达智能名片小程序源码系统应运而生&#xff0c;为企业和个人提供了一个全新的、智能化的名片展示与互动平台。本文将对雷达智能名片小程序源码系统的开发…

初级软件测试常见问题

1.JMeter &#xff08;1&#xff09;在http请求的时候&#xff0c;消息体数据中的数据需要用{}和“”标记起来&#xff0c;变量要用${}括起来。 &#xff08;2&#xff09;在响应断言的时候&#xff0c;要根据测试模式输出的内容来改变测试字段&#xff0c;假如输出错误可以把…

谷歌浏览器的开发者插件vue-devtools

在这里我留下一个git地址用来下载插件包&#xff0c;首先在自己喜欢的位置创建一个新的文件夹&#xff0c;起一个自己喜欢的文件夹名字&#xff0c;下载到包后&#xff0c;然后点进文件夹里下载依赖&#xff0c;npm install,下载后如下面这个样子 git clone https://gitee.com…

【Leetcode每日一题】 动态规划 - 最小路径和(难度⭐⭐)(58)

1. 题目解析 题目链接&#xff1a;64. 最小路径和 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路梳理&#xff1a; 一、状态表示 在路径类问题中&#xff0c;状态表示通常有两种形式&#xff1a; 从 [i,…

算法题解记录13+++杨辉三角(百日筑基)

本题是动态规划的问题&#xff0c;我也在此阐述我对动态规划的理解&#xff0c;如有不准确、缺失、错误&#xff0c;敬请斧正。 题目描述&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和…

激光雷达初识

一、实车激光雷达 一般在车顶位置: 二、激光雷达组成 激光收发器模块:发射激光器VCSEL+接收模块采用了SiPM(硅基光电倍增管)或者APD,一个激光器发生失效的情况,其他仍可正常工作 扫描模块:水平视场和的垂直视场的扫描,128个阵列的VCSEL激光器负责 信号处理模块:信号处…

3_2Linux中内核级加强型火墙的管理

### 一.Selinux的功能 ### 观察现象 ①当Selinux未开启时 在/mnt中建立文件被移动到/var/ftp下可以被vsftpd服务访问 匿名用户可以通过设置后上传文件 当使用ls -Z /var/ftp查看文件时显示"?" ps auxZ | grep vsftpd 时显示&#xff1a; - root 8546 0.0 0.0 26952 …

从iPhone恢复已删除照片的最佳软件

本文分享了从iPhone恢复已删除照片的最佳软件。如果您正在寻找如何从iPhone恢复已删除的照片&#xff0c;请查看这篇文章。 为什么您需要软件从iPhone恢复已删除的照片&#xff1f; 没有什么比丢失iPhone上的重要数据更痛苦的了&#xff0c;尤其是一些具有珍贵回忆的照片。有时…

Java面试必问题38:SpringMVC执行流程(工作原理)(一般必问) SpringMVC的常用注解

MVC 是 Model — View — Controler 的简称&#xff0c;它是一种架构模式&#xff0c;它分离了表现与交互。它被分为三个核心部件&#xff1a;模型、视图、控制器。 Model&#xff08;模型&#xff09;&#xff1a;是程序的主体部分&#xff0c;主要包含业务数据和业务逻辑。在…

Python 版分布式消息队列 Kafka 实现图片数据传输

1、Kafka 介绍 在使用 Kafka 之前&#xff0c;通常需要先安装和配置 ZooKeeper。ZooKeeper 是 Kafka 的依赖项之一&#xff0c;它用于协调和管理 Kafka 集群的状态。 ZooKeeper 是一个开源的分布式协调服务&#xff0c;它提供了可靠的数据存储和协调机制&#xff0c;用于协调…