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

目录

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 安全机制就是使用的这种组合。但是,该算法本身可以使用任何大小的数字。本文可能存在其他不准确之处,但就像我说的,我不是专家,而且我已经尽可能地将内容简化,同时没有删除关于算法的任何信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

部署Zabbix代理服务器

目录 1.准备环境 2.设置 zabbix 的下载源 3.安装 zabbix 所需的数据库 3.1添加数据库用户,以及 zabbix 所需的数据库信息 3.2导入数据库信息 4.修改 zabbix-proxy 配置文件 5.启动 zabbix-proxy 6.在所有主机上配置 hosts 解析 7.在 Web 页面配置 agent 代…

市面上加密混淆软件的比较和推荐

引言 市面上有许多加密混淆软件可供开发者使用,但哪些软件是最好用的?哪些软件受到开发者的喜爱?本文将根据一次在CSDN上的投票结果,为大家介绍几款在程序员中普及度较高的加密软件。以下是投票结果,希望能对大家的选择…

什么是组网?如何远程组网?

在当今数字化时代,组网已成为企业提高工作效率、节省时间和成本的关键技术。组网是将多台计算机或其他网络设备连接起来,形成一个互联互通的网络系统。本文将概述组网的主要目的、实现方式及其价值,并深入分析远程组网策略。 1. 组网目的与价…

BK9531 BK9532上海博通BEKEN 提供开发资料

.概述 BK9531/BK9532 芯片是用于无线高品质语音传输的芯片组,包括发射芯片BK9531 和接收芯片 BK9532,每个芯片覆盖频段范围为:V 段160~270MHz 和 U 段500~980MHz。 BK9531/BK9532 采用数字调制和高性能音频 ADC 和 DAC,配合极低延…

idea2023专业版安装破解+maven配置教程

前言 上一篇文章已经介绍了maven在Win10系统的安装配置教程。基于Win10的maven配置环境,本篇文章将介绍idea2023的安装破解教程及maven在idea2023的配置教程(同时会将maven在idea2023的配置教程内容补充至上一篇文章)。 一、idea2023下载安…

再也不想用丑东西了!一个高颜值的备忘录,分享给你们【文末领源码】

谁工作中不得有点丢三落四的,但是被老大点名批评确实有点过不去了,提醒小伙伴们把必要的事情挂出来,同事说虽然已经有一款系统,但展示的不好看,根本不想用,于是找到了一款颜值还不错的备忘录工具 -- memo …

工作的第五天了

1.今天内容 1.现在的基本都增删改查都有 2.下一步做规格商品添加规格的方式 3.商品规格比较特殊 4.我们添加一个商品。通用一个商品,然后下面添加规格信息 5.如何做 6.第一个是添加商品 7.商品对应多个属性方式,简单来说是一个一对多的方式&#x…

WPF Extended.Wpf.Toolkit 加载界面

1、NuGet 中安装 Extended.Wpf.Toolkit 。 2、在MainWindow.xaml中添加xmlns:tk"http://schemas.xceed.com/wpf/xaml/toolkit" 。 MainWindow.xaml 代码如下。 <Window x:Class"WPF_Extended_Wpf_Toolkit_Loading.MainWindow" xmlns"ht…

基于ssm酒吧存酒系统论文

摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本次开发一套酒吧存酒系统有管理员和用户两…

Adobe联手OpenAI,AI视频编辑新功能震撼上线!

Adobe 尝试与 OpenAI 合作以添加AI工具 前言 就在北京时间4月15日 &#xff0c; Adobe准备开辟制作软件的新道路&#xff0c;该公司正处于允许第三方生成式人工智能工具&#xff08;如OpenAI的Sora等&#xff09;进入其广泛使用的视频编辑软件的早期阶段。那么这次Adobe与OpenA…

MathJax —— Vue3的使用方法

版本&#xff1a; mathjax3 需要实现效果 一、使用方式 1. index.html 中引入 <!-- 识别单行&#xff0c;行内&#xff0c;\( \)样式的公式 --><script>MathJax {tex: {inlineMath: [[$, $],[$$, $$], [\\(, \\)]]},};</script><script id"MathJ…

国外新闻媒体稿件宣发:海外pr发稿干货秘籍-大舍传媒

一、了解目标市场和受众 发布新闻稿件的首要步骤是了解你的目标市场和受众。在撰写新闻稿件之前&#xff0c;你需要研究你的目标市场&#xff0c;了解他们的需求、兴趣和习惯。你还需要了解你的受众&#xff0c;包括他们的年龄、性别、职业、地理位置和媒体使用习惯等。这些信…

Shell——执行方式详解

一.什么是shell Shell 是一个计算机程序&#xff0c;它提供了用户与操作系统内核之间的交互界面。它接受来自用户或其他程序的命令&#xff0c;并将其转换为操作系统能理解的形式&#xff0c;然后执行这些命令并将结果返回给用户或程序。 Shell 在操作系统中扮演着重要的角色…

负载均衡集群——Nginx

目录 1.Nginx反向代理实战 2.Nginx 反向代理和负载均衡实践 实验操作步骤 步骤 1 Nginx1 和 Nginx2 配置 步骤2 测试资源是否可用 步骤 3 安装和配置 Nginx 代理 步骤 4 代理服务器配置检测 步骤 5 在 Nginx1 和 Nginx2 配置虚拟主机 步骤 6 将虚拟主机添加入后端主机组…

鸿蒙南向开发:【编译和烧录】指导

编译 #进入源码目录 #rm -rf ohos_config.json #hb set #. #如下图所示,按↑↓键&#xff0c;选择需要编译的工程名&#xff0c;然后回车 #hb build -f #然后回车&#xff0c;等待屏幕出现&#xff1a;BUILD SUCCESS字样&#xff0c;说明编译成功。如下图 #编译生成的固件在…

OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

7.1实验效果 Hispark WiFi开发套件又提供一个oled屏幕&#xff0c;但是鸿蒙源码中没有这个屏幕的驱动&#xff0c;我们需要自己去移植。 以下是移植效果&#xff1a; 接口&#xff1a;I2C 使用引脚&#xff1a;HI_IO_NAME_GPIO_13 、 HI_IO_NAME_GPIO_14 7.2代码 这里我直…

TiDB存储引擎TiKV揭秘

目录 一、TiKV 介绍 二、RocksDB 三、TiKV 与 RocksDB 架构 3.1 用户数据保存 3.2 TiKV 中 Region 一、TiKV 介绍 TiKV 是一个分布式事务型的键值数据库&#xff0c;提供了满足 ACID 约束的分布式事务接口&#xff0c;并且通过 Raft 协议保证了多副本数据一致性以及高可用。…

一文读懂BTC生态新贵Giants Planet,将L2与现实世界整合

前言 获新加坡主权基金鼎力扶持&#xff0c;Giants Planet将引爆Web3新风向。 随着年前BTC现货 ETF 的获批&#xff0c;加密世界涌入大量的资金&#xff0c;BTC价格也成功突破新高。与之相比&#xff0c;传统金融的弊端日益凸显&#xff0c;且大部分资产涨幅都低于BTC&#xf…

RACE IPEMD:构建安全基石的密码学原理与实践

title: RACE IPEMD&#xff1a;构建安全基石的密码学原理与实践 date: 2024/4/16 16:53:56 updated: 2024/4/16 16:53:56 tags: IPEMD哈希算法SHA-1SHA-2/3消息摘要数字签名安全分析 前言 在当今信息爆炸的时代&#xff0c;数据安全和隐私保护变得尤为重要。密码学作为信息安…

鑫鹿助贷CRM系统:助力助贷行业实现智能商业转型

数字化时代&#xff0c;商业竞争愈发激烈&#xff0c;助贷行业如何把握商机、实现高效管理、打造高回报率的商业模式&#xff0c;成为了助贷行业老板们比较关注的问题&#xff0c;而鑫鹿助贷CRM管理系统&#xff0c;正是这场商业变革中的得力助手&#xff0c;系统功能完善&…