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

news2025/2/7 15:02:57

目录

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.coloradmin.cn/o/1598360.html

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

相关文章

OpenHarmony轻量系统开发【9】WiFi之STA模式连接热点

9.1AT指令操作WiFi 我们可以使用AT指令进行Hi3861 WiFi操作&#xff0c;连接热点、ping服务器等。 但是很多时候&#xff0c;我们需要实现开机后自动连接到某个热点&#xff0c;光靠AT指令不行。 Hi3861 为我们提供了WiFi操作的相关API&#xff0c;方便我们编写代码&#xff0…

GitLab 安全漏洞 CVE-2022-1162 如何解决?

本文来自极狐GitLab 官方公众号【极狐GitLab】&#xff0c;原文链接&#xff1a;https://mp.weixin.qq.com/s/JVpA14HHWgt58s3vM5TRcA。 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https…

文字转语音工具:GPT-SoVITS

诸神缄默不语-个人CSDN博文目录 OpenAI官方的TTS模型我在这篇博文中给出了使用教程&#xff1a;ChatGPT 3.5 API的调用不全指南&#xff08;持续更新ing…&#xff09; - 知乎 但是OpenAI的TTS对中文支持不好&#xff0c;有一种老外说中文的美&#xff0c;所以本文介绍另一个…

2024软考中项考哪个版本?应该该如何备考?

2024年1月&#xff0c;备受瞩目的软考中级系统集成项目管理工程师官方教程终于迎来了久违的大改版。为确保广大考生能够有充足的准备时间&#xff0c;软考中项的考试时间被顺延至同年11月&#xff0c;届时&#xff0c;这也将成为软考中项首次依据第3版考纲进行的考试。 新教材核…

数图智慧零售解决方案,赋能零售行业空间资源价值最大化

数图智慧零售解决方案 赋能零售行业空间资源价值最大 在激烈的市场竞争中&#xff0c;如何更好地提升空间资源价值&#xff0c;提高销售额&#xff0c;成为行业关注的焦点。近日&#xff0c;NIQ发布的《2024年中国饮料行业趋势与展望》称&#xff0c;“在传统零售业态店内&…

CSS特效---跳动的文字

1、演示 2、一切尽在代码中 <!--* Author: your name* Date: 2023-10-03 14:42:44* LastEditTime: 2023-10-03 14:56:26* LastEditors: DESKTOP-536UVPC* Description: In User Settings Edit* FilePath: \css-special-effects\跳动的文字.html --> <!DOCTYPE html>…

ARM看门狗定时器

作用 在S3C2440A中&#xff0c;看门狗定时器的作用是当由于噪声和系统错误引起的故障干扰时恢复控制器的工作。 也就是说&#xff0c;系统内部的看门狗定时器需要在指定时间内向一个特殊的寄存器内写入一个数值&#xff0c;俗称喂狗。 如果喂狗的时间过了&#xff0c;那么看门…

行式存储VS列式存储对比

行式存储&#xff1a; 一行代表一个记录的所有字段。 可以快速读取和写入单条记录。 如果要检索一条数据&#xff0c;数据库会读取or写入整条记录&#xff0c;包含所有相关字段。 列式存储&#xff1a; 表中每一列的数据连续存放。这种方式在需要对某一列进行大量运算或分析时…

AI预测福彩3D第37弹【2024年4月16日预测--第8套算法开始计算第5次测试】

今天咱们继续测试第8套算法和模型&#xff0c;今天是第5次测试&#xff0c;目前的测试只是为了记录和验证&#xff0c;不建议大家盲目跟买。。我的目标仍旧是10次命中3-4次!~废话不多说了&#xff0c;直接上结果&#xff01; 2024年4月16日3D的七码预测结果如下 第一套…

数字乡村创新实践探索农业现代化路径:科技赋能农业产业升级、提升乡村治理效能与农民幸福感

随着信息技术的快速发展和数字化时代的到来&#xff0c;数字乡村建设正成为推动农业现代化、提升农业产业竞争力、优化乡村治理以及提高农民幸福感的重要途径。本文将围绕数字乡村创新实践&#xff0c;探讨其在农业现代化路径中的积极作用&#xff0c;以及如何通过科技赋能实现…

C语言中的数据结构- -链表(1)

前言 前几节我们学习了C语言中的数据结构--顺序表&#xff0c;该数据结构类型相较于普通的数组而言有很多的优势&#xff0c;但是它还是在一定层面上存在着一些缺陷&#xff0c;可以归纳为以下三点&#xff1a; 1. 中间/头部的插⼊删除&#xff0c;时间复杂度为O(N)【数组的遍…

每日一VUE——组件基础

文章目录 认识组件如何使用注册方式 组件间传递数据propsprops的验证 组件事件组件事件的验证v-model与自定义事件结合使用 组件插槽动态组件 认识组件 组件由template&#xff0c;script&#xff0c;style三部分组成。 如何使用 定义组件注册组件调用组件 注册方式 全局注…

在STM32中给固定的地址写入一个值,并通过memory窗口进行查看

首先对STM32中存储数据的地方有一个了解 一个是FLASH,一个是RAM RAM是易失存储器&#xff0c;FLASH是非易失存储器&#xff0c;这是最直观的解释。 主要记住以下几点&#xff1a; RAM&#xff08;随机存储器&#xff09;&#xff1a;既可以从中读取数据&#xff0c;也可以写…

面试八股——数据库——分库分表

垂直策略 垂直分库 垂直分表 水平策略 水平分库 水平分表&#xff08;和水平分库差不多&#xff0c;区别是但这些表可以在同一个库内&#xff09;

spring-cloud微服务gateway

核心部分&#xff1a;routes(路由)&#xff0c; predicates(断言)&#xff0c;filters(过滤器) id&#xff1a;可以理解为是这组配置的一个id值&#xff0c;请保证他的唯一的&#xff0c;可以设置为和服务名一致 uri&#xff1a;可以理解为是通过条件匹配之后需要路由到&…

Oauth2.1第三方授权前后端分离实现

前言 Spring Cloud 整合 Spring Security Oauth2 请看我上一篇文章 在当今的数字化时代&#xff0c;随着微服务架构的流行和前后端分离技术的广泛应用&#xff0c;如何实现安全、高效的用户认证与授权成为了开发者们面临的重要挑战。Spring Cloud与Spring Security OAuth2作为J…

小程序商城和微商城的区别

移动互联网电商发展迅速&#xff0c;各种商城系统的类型越来越多&#xff0c;人们选择要从多方面考量再进行评估&#xff0c;选择过程变得困难了很多&#xff0c;比如现在火热的微商城和小程序商城&#xff0c;很多人都不太能分清楚。今天&#xff0c;我们就一起来看看这两种商…

BCLinux8U6系统部署oceanbase分布式数据库社区版之三、分布式数据库部署

本文是在完成步骤一、准备 OBD 中控机&#xff0c;步骤二3台数据库服务器准备后&#xff0c;正式开始oceanbase分布式数据库安装。 前序步骤&#xff1a;BCLinux8U6系统部署oceanbase分布式数据库社区版之一、准备 OBD 中控机 BCLinux8U6系统部署oceanbase分布式数据库社区版…

请求头包含“boundary=----WebKitFormBoundary”的request抓包

对于请求头包含“boundary----WebKitFormBoundary”&#xff0c;不能直接使用request.post请求&#xff0c;这类请求是文件上传请求。 s common_login(name, password) # 获取浏览器对象url archive_url /XXX# 这里先定义一个fields参数&#xff0c;格式为你可能需要一个包…

Linux yum搭建Keepalived,2 台机器都有虚拟 IP 问题

文章目录 Keepalived 搭建一、安装二、keepalived配置1、配置文件详解global_defs模块参数vrrp_instance模块参数vrrp_script模块参数 2、修改配置文件3、启动服务 Tips:1️⃣问题&#xff1a;两台机器上面都有VIP的情况2️⃣完整配置文件 Keepalived 搭建 服务IP服务器Keepal…