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

目录

1  ECDSA 是什么?

2  理解基础知识

3  为什么使用 ECDSA?

4  基础数学和二进制

5  哈希

6  ECDSA 方程

7  点加法

8  点乘法

9  陷阱门函数!


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

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

1  ECDSA 是什么?

ECDSA 代表 “椭圆曲线数字签名算法”,它用于对数据(例如文件)进行签名,以便让您验证其真实性,同时不损害其安全性。ECDSA 签名与真实签名之间的区别在于,伪造 ECDSA 签名是不可能的。

您不应该将 ECDSA 与 AES(高级加密标准)混淆,后者是用来加密数据的。ECDSA不加密或阻止他人查看或访问您的数据,但它保护的是确保数据未被篡改

😽 加密是用来加密数据以防泄漏的,签名是用来验证数据是否被篡改的。在第 3 节会再次进行说明。

ECDSA 这一短语中的两个词值得注意,那就是 “曲线” 和 “算法”,因此 ECDSA 本质上都是关于数学的。这些数学知识相当复杂,所以尽管我会尝试使其易于理解,您可能仍然需要一些数学知识才能真正理解它。

2  理解基础知识

原理很简单,假设你有一个数学方程,并在图上画出它的曲线,然后你在曲线上选择一个随机点作为起点。接着你生成一个 随机数,这就是你的 私钥,你用这个 随机数和 “起点” 进行一些神秘的数学运算,你在曲线上得到第二个点,那就是你的 公钥

可以看出,公钥是由私钥决定的。

当你想要签名一个文件时,你会使用这个私钥和文件的哈希(表示文件的独特数字)进行一个神秘的方程,这将为你生成签名。签名本身分为两部分,称为 RS

为了验证签名是否正确,你只需要公钥和签名的一部分(S),将其放入另一个神秘的方程中。如果这个数学方程给了你 R,那么签名是有效的。

我们没有办法知道别人的私钥,也没有办法使用公钥创建签名。

3  为什么使用 ECDSA?

ECDSA 的应用:假设有一个 APP 不希望其数据被用户篡改或修改,比如一个只允许你加载官方地图的游戏,或者一个只允许你安装官方应用程序的手机。

在这些情况下,文件(游戏地图、数据)将使用 ECDSA 签名进行签名,公钥将与 APP /设备捆绑在一起,通过验证签名来确保数据没有被修改,而私钥则被锁在某个安全的地方。

由于你可以使用公钥验证签名,但无法使用它创建/伪造新签名,因此可以将公钥与 APP /设备一起分发而无需担心。这与 AES 加密系统形成对比,后者允许你加密数据,但你需要密钥来解密,这样的 APP 需要捆绑密钥,这就失去了目的。

4  基础数学和二进制

ECDSA 只使用 整数,不使用浮点数。

此外,数字的范围受签名中使用的 位数 的限制。正如你所知,计算机使用 “位” 来表示数据。每次你增加一位,可以表示的最大数字就会翻倍。通常 ECDSA 会使用 160 位总数,所以它能一个非常大的数字,有 49 位数字。

位数越多,可以表示的数字就越大,这意味着更高的安全性,因为很难 “猜测” 到方程中使用的关键数字。

另一个你需要知道的数学结构是 模数,它可以简单地被描述为整数除法的结果。例如,x mod 10 意味着 x 除以 10 的余数。

5  哈希

哈希是一个你应用于数据每个字节的数学方程,它会给你一个独特于你数据的数字。例如,所有字节值的总和可能被认为是一个非常简单的哈希函数。所以如果文件(消息)中的任何东西发生变化,哈希也会完全不同。

SHA1 哈希算法 的情况下,结果总是 20 字节(160 位)。它非常有用,可以验证文件是否被修改或损坏,你为任何大小的文件获得 20 字节的哈希,你可以轻松地重新计算这个哈希以确保它匹配。ECDSA 签名的是实际的哈希,所以如果数据发生变化,哈希发生变化,签名就不再有效。

签名是由私钥和文件的哈希值生成的,因此可以说签名是在对文件的哈希值进行签名。

假设有一个简单的哈希函数,它计算对所有数据求和并在结果上使用模数 10 。

文本文件是一系列字节,把文件中的每个字节加起来,然后对结果进行10的模运算,我们最终会得到一个 0 到 9 之间的数字作为最终的哈希值。对于相同的数据,我们总是得到相同的哈希,如果你改变了文件中的一个字节,结果可能就不同了。

改变文件内容后,得到相同哈希的机会是十之一。

事实上,SHA1 算法比我们简单的 “模数10” 哈希函数复杂得多,它会给出一个非常大的数字并且有一个特点,即如果文件中的单个数据位被修改,它会大大改变。

SHA1 算法的结果有 160 位,即是一个有 49 位数字的十进制数。

这使得 SHA1 成为一个非常难以预测、非常安全的哈希算法,发生 “碰撞”(即两个不同文件具有相同的哈希值)的几率非常低,几乎不可能通过伪造数据来得到特定的哈希值。

6  ECDSA 方程

ECDSA 是如何工作的呢?椭圆曲线密码学基于如下形式的方程:

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

首先你注意到的是有一个模运算。模运算是一个素数(p),它确保所有的值都在 160 位范围内,并允许使用 “模平方根” 和 “模乘法逆元” 数学,这使得计算变得更加容易。

暂时还没学 “模平方根” 和 “模乘法逆元”,应该就是实现小数、负数模运算的方法 😇

由于我们的模数是 p,这意味着上述 y^2 的可能值仅在 0 到 p-1 之间,即我们一共只有 p 个可能值。此外,由于 ECDSA 只处理整数,并且只有一些数字是 “完全平方数”,即是两个整数的平方值,因此假设曲线上满足条件的点有 N 个,那么有 N < p,其中 N 是 0 到 p-1 之间完全平方数的数量。

由于 ECDSA 只处理整数,因此要求 y^2 开方后的结果必须是整数,不能带根号。又因为 y^2 开方后会得到两个结果,即一正一负且绝对值相等的数,因此原文说是 “两个” 整数。针对 “满足条件的点”,假设其坐标为 (x, y),那么 y^2 应该是一个完全平方数且其值落在 0 到 p-1 之间。

由于椭圆曲线是关于 x 轴对称的,即每个 x 对应有两个 y,因此有 N/2 个可能的 x 坐标是有效的。由上述分析可知,ECDSA 中的椭圆曲线上只有有限数量的点,这都是因为 “整数计算” 和 “模数”。

总结一下:ECDSA 方程给了我们一条包含有限个(N 个)有效点的曲线。这是因为 y 的取值受到模数(p)的限制,即 y^2 需要是一个完全平方数。又因为该曲线关于 x 轴对称,所以总共有 N/2 个可能的、有效的 x 坐标。别忘了 N < p!

7  点加法

别问我为什么要这样定义!

“点加法” 被定义为:将一个点 P 加到另一个点 Q 上,将得到一个点 S 。

当你从 P 画一条线到 Q 时,它会与曲线在第三个点 R 相交,S 是 R 的负值。

S 点就是图中 P+Q 那个点,只是没有标出来。如果你做 P+P,那么 R 点将是通过点 P 的切线与曲线相交的点。

8  点乘法

P+P+P 可以写成 (P+P)+P,即 P+P+P 是 P+P 的结果点与点 P 的加法,如下图所示。这就定义了 “点乘法”,其中 k*P 是将点 P 加到它自己的 k-1 次和上。

在上图中,你从 P 点作切线,它与曲线相交于第三个点,其对称点是 2P 点。然后,你从 2P 点画线到 P 点,它会与曲线相交于第三个点,其对称点是 3P 点。以此类推,你可以继续进行点乘法。

这就解释了为什么我们每次都要取对称点。因为如果每次都直接取交点,即所谓的 “第三个点”,那么你会发现不管怎么加来加去,得到的点始终在同一条直线上反复横跳,甚至始终都是那两个点(即 P 和 2P 的位置)。

9  陷阱门函数!

“点乘法” 的一个特点是:假设你有一个点 R=k*P,并且你知道 R 和 P 的值,你将无法找出 k 的值。这是由于没有 “点减法” 或 “点除法”,因此你不能轻松地解出 k=R/P 。

或者说,你进行数百万次 “点加法” 后到达曲线上的一个点,但反过来你是很难知道是 “如何” 到达那里的。你不能反转这个操作,也不能找到与点 P 相乘得到结果点 R 的 k 值。

这种即使知道原始点和目标点也无法找到乘数的特性,是 ECDSA 算法安全性的整个基础,这个原则被称为 “陷阱门函数”

陷阱门函数的进一步介绍可以参考:密码学 | 椭圆曲线 ECC 密码学入门(一)

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

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

相关文章

<Halcon> 变换矩阵求解

变换矩阵求解 hom_mat2d_translate( : : HomMat2D, Tx, Ty : HomMat2DTranslate) hom_mat2d_translate通过向量t (Tx,Ty)向齐次二维变换矩阵HomMat2D添加平移&#xff0c;得到平移矩阵&#xff1b;vector_to_rigid( : : Px, Py, Qx, Qy : HomMat2D) vector_to_rigid近似于刚性…

测出Bug就完了?从4个方面教你Bug根因分析

01 现状及场景 &#x1f3af; 1.缺失bug根因分析环节 工作10年&#xff0c;虽然不是一线城市&#xff0c;也经历过几家公司&#xff0c;规模大的、规模小的都有&#xff0c;针对于测试行业很少有Bug根因环节&#xff0c;主流程基本上都是测试提交bug-开发修改-测试验证-发送报…

rest_framework_mongoengine实现后端的增删改查

rest_framework_mongoengine实现后端增删改查 ‍ 一、增删改查 1. 继承ModelViewSet实现增删改查 父urls.py path("api/testapp/", include("apps.testapp.urls")), # 测试子urls.py # -*- coding: utf-8 -*- from django.urls import path from res…

如何在苹果手机上安装iOS应用的.ipa文件?

哈喽&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;如今移动应用市场不断的发展&#xff0c;许多开发者小伙伴们都选择将他们的应用发布到苹果App Store上&#xff0c;但是&#xff0c;有时候他们可能希望通过直接分享IPA文件来分发他们的App&#xff0c;那…

自定义javax.validation 校验能用 spring

自定义注解 import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*;Target(ElementType.FIELD) Documented Retention(value RetentionPolicy.RUNTIME) Constraint(validatedBy {IdExistMyTestValidator.class }) public in…

STM32标准库+HAL库 | CPU片内FLASH存储器数据掉电读写

一、片内FLASH 在STM32芯片内部有一个FLASH存储器&#xff0c;它主要用于存储代码&#xff0c;我们在电脑上编写好应用程序后&#xff0c;使用下载器把编译后的代码文件烧录到该内部FLASH中&#xff0c; 由于FLASH存储器的内容在掉电后不会丢失&#xff0c;芯片重新上电复位后&…

ArduPilot开源飞控之ROS系统简介

ArduPilot开源飞控之ROS系统简介 1. 源由2. ROS系统3. 安装2.1 安装Docker2.2 安装ROS2 4. 总结5. 补充资料 1. 源由 之前在ArduPilot开源飞控之硬件SBC分析中讨论过&#xff0c;个人角度最推荐其中两个系统是&#xff1a; Rpanion-server【推荐&#xff0c;简单】BlueOS【推…

SAP Fiori开发中的JavaScript基础知识14 - promise, async, await异步编程

1. 前言 本文将介绍JavaScript中异步编程技术&#xff0c;包括promise, sync, await的使用。 2. Promise 2.1 简介 Promise 是 JavaScript 中用于处理异步操作的一种对象。它代表了一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。 Promise 对象有三种状…

Unity之Unity面试题(四)

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity之Unity面试题&#xff08;四&#xff09; TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取…

什么是并行通信、串行通信?什么是全双工、半双工、单工? 什么是异步通信、同步通信? 什么是RS232、RS485?什么是pwm?

什么是并行通信、串行通信&#xff1f; 嵌入式系统中的通信是指两个或两个以上的主机之间的数据互交&#xff0c;这里的主机可以是计算机也可以是嵌入式主机&#xff0c;甚至可以是芯片。主机间通信的方式一般可以分为两类&#xff1a;并行通信和串行通信。并行通信是指多个比特…

华为配置静态ARP示例

华为配置静态ARP示例 组网图形 图1 配置静态ARP组网图 静态ARP简介配置注意事项组网需求配置思路操作步骤配置文件相关信息 静态ARP简介 静态ARP表项是指网络管理员手工建立IP地址和MAC地址之间固定的映射关系。 正常情况下网络中设备可以通过ARP协议进行ARP表项的动态学习&…

Android10以上MediaProject截屏

起因 在系统升级到Android10以上之后&#xff0c;之前的截屏方式不能用了&#xff0c;而且必须将MediaProject放在forground service里面跑才行。网上搜了一圈&#xff0c;都是语焉不详或者没有完整的一个代码应用。只能自己写一个&#xff0c;记录下 代码实现 新建一个Scre…

IO多路转接之poll

目录 1. poll 的基本认识 2. poll 基于 select 的突破 3. poll() 系统调用 3.1. struct pollfd 结构 4. poll() 的 demo 5. poll 的总结 1. poll 的基本认识 poll 是一种多路转接的方案&#xff0c; 它的核心功能和 select 一模一样&#xff0c;我们知道 IO 等待事件就绪…

WebLogic 数据源连接泄露

编码时,有时会忘记释放使用的数据源连接,造成连接泄露,没有连接资源可用。 现象 java.sql.SQLException: Cannot obtain XAConnectionat weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1691)at weblogic.jdbc.jta.DataSource.getConnectionIntern…

论文略读:Window Attention is Bugged: How not to Interpolate Position Embeddings

iclr 2024 reviewer 打分 6666 窗口注意力、位置嵌入以及高分辨率微调是现代Transformer X CV 时代的核心概念。论文发现&#xff0c;将这些几乎无处不在的组件简单地结合在一起&#xff0c;可能会对性能产生不利影响问题很简单&#xff1a;在使用窗口注意力时对位置嵌入进行插…

华为再次布局新行业:合作伙伴已超前谋划,该领域将大有可为

华为布局新行业 华为向外界公布了一个重要信息&#xff1a;在过去的三年里&#xff0c;尽管受到美国的制裁&#xff0c;华为仍然成功地完成了超过13000个元器件的国产替代研发&#xff0c;以及4000多块电路板的迭代开发。 不仅在硬件领域取得了显著成就&#xff0c;在软件和生…

oracle 19c数据库W00n进程使用很多PGA内存资源的分析

今天&#xff0c;客户反馈测试环境的数据库PGA资源不足&#xff0c;报错ORA-04036: 实例使用的 PGA 内存超出 PGA_AGGREGATE_LIMIT&#xff1b;分析是多个W00n进程使用大量PGA-触发了BUG&#xff0c;对应解决办法就是打补丁。&#xff08;民间办法就是KILL进程、重启数据库&…

大数据面试高频问题:大数据相关基础组件的维护及调优案例大全

目录 1、 Hadoop HDFS 磁盘空间不足问题 2、 Apache Spark Executor 内存溢出问题

基于云开发和微信小程序的爱宠家系统

基于云开发和微信小程序的爱宠家系统 “Development of PetCare Home System based on Cloud Computing and WeChat Mini Program” 完整下载链接:基于云开发和微信小程序的爱宠家系统 文章目录 基于云开发和微信小程序的爱宠家系统摘要第一章 系统概述1.1 研究背景1.2 研究目…

3d视图模型乱了怎么调?---模大狮模型网

在进行3D建模时&#xff0c;有时候您可能会遇到视图模型混乱的情况。这可能是由于模型结构问题、导入导出错误或编辑操作不当等原因造成的。混乱的模型不仅影响工作效率&#xff0c;还可能导致渲染结果不理想。本文将介绍六种有效的方法来调整混乱的3D视图模型&#xff0c;帮助…