密码学基础--ECDSA算法入门

目录

1.ECDSA签名长度的疑惑

2.ECDSA原理

2.1 生成签名

2.2 验签过程

 2.3 签名编码问题

3.小结


1.ECDSA签名长度的疑惑

我们来看看ECDSA签名长什么样子,使用MuscleV02自动生成密钥对,并对message"0x11223344”进行签名,结果如下:

仔细看,这个签名的长度竟然来到了568bit,可是我们用的是SECP256R1,这个长度既不是256,也不是256的倍数,这里面到底有什么玄机?

今天我们就来了解一下:1)ECDSA原理;2)签名值的编码格式。

2.ECDSA原理

首先回顾下签名原理:

  • Bob 使用 Hash 函数对"Hello Alice"计算出摘要;
  • Bob 为了证明消息是自己发的,用自己的私钥对摘要进行加密,也即签名;并把消息和签名同时发送给 Alice;
  • Alice 拿到数据后,首先对"Hello Alice”使用同样 Hash 函数进行摘要计算,得到消息原始 Hash值;使用 Bob 对外公开的公钥,对签名进行解密得到待校验的 Hash 值;
  • 将上述 Hash 进行比对,如果值一致,则证明是 Bob 发送的消息。
  • 如果用其他的密钥进行签名会出现什么情况呢?
    • 如果 Bob 使用自己的公钥签名,那只有自己私钥才能验,Alice 不知道是谁发的;
    • 如果 Bob Alice 的公钥签名,虽然只有 Alice 能验证,但是由于只要是获得了 Alice 公钥的人都可以签名,不能证明是 Bob 发的。

ECDSA(Elliptic Curve Digital Signature Algorithm)就是基于椭圆曲线密码学的一种签名机制。

以SECP256R1(对应NIST P-256曲线)为例,它满足方程形如:

该方程我们用函数 T = (p,a,b,G,n,h)进行表示,其中 p 为素数,ab 为椭圆曲线参数,G为基点,n为G的阶(即多少个点),h是辅助计算因子。

根据SEC2标准定义,该曲线推荐参数如下:

在实际代码中,我们也可以看到上述参数均作为常数:

有了上述基础,我们接着看算法细节。

2.1 生成签名

ECDSA的签名总体流程一句话概括:对消息做Hash计算得到H,对H进行计算得到整数对(r,s),(r,s)根据不同编码格式输出S,作为最终签名。

我们主要讨论对H如何进行计算,具体如下:

  • 首先我们先基于曲线生成对应的公私钥对,如下:

原理也很简单,就是在上述推荐参数n中随机选择一个数d作为私钥(即上图P),然后利用基点G计算出公钥Q = d * G(xG,yG) ,故密钥对为(Q,dU)。

  • 然后继续在随机选择一个整数k(k<n),生成一个临时密钥对(Q1, k),Qt坐标为(x1,y1);
  • 令 r = x1 mod n,注意这个n不是模数,而是上述提到的固定参数n(阶),
  • 判断r是否为0,如果为0,就需要重新再次生成,

从mbedtls的示例中也可以看出这个判断过程;

  •  从上述消息摘要H中派生出整数e,来源于H的二进制表现形式下高log2n个bit,代码如下:

  •  然后套用公式

最终得到了签名(r,s),函数实现如下:

2.2 验签过程

接收者受到明文M、签名(r,s),

  • 计算M哈希值H,并根据生成过程派生出整数e;
  • 根据公式u1 = e / s mod n, u2 = r / s mod n,分别计算出u1,u2;
  • 使用发送方公钥Q,计算R = (xR,yR)= u1*G+u2*Q,如果R不是该曲线上的点,则认为签名无效;
  • 计算v = xR mod ;
  • 判断v 是否等于r,如果相等,则签名有效。

 2.3 签名编码问题

从上面签名生成过程,其实我们可以发现,不管是r还是s,它的长度都不会超过模数p,因此P-256签名(r,s)的长度最大理应为256*2 = 512bit.

但实际我们从第一节知道,该签名有568bit,总共多了56bit(7个字节)。

直觉告诉我这必然与编码格式有关。

我印象里就只记得ASN.1,所以就去翻了翻了文档,最终在DER(Distinguished Encoding Rules)里找到了答案。

DER叫做可辨别编码规则,采用TLV三元组格式进行编码,具体如下:

Tag表示真实数据结构,Length表示具体字节长度,Value则是真实数据;

它的构造可以如下图:

而我们开头看到的0x30, 刚好对应Sequence:

根据这个规则,我把刚才的签名做了如下分解:

为什么r会有前导字节00,这是因为(r,s)都是整数,r第一个字节99最高位为1,为了避免混淆,故需要添加前导字节。

为了验证正确性,我继续做了几次签名试验,分别如下:

可以初步判断,这个python库 ECDSA签名采用ASN,1 DER编码规则。

3.小结

这篇文章把ECDSA的原理讲述清楚,原理简单,难点主要是在这些计算公式的理解上;同时我们把针对数字签名的DER编码格式理了一遍。

就酱,中秋快乐!

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

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

相关文章

Java的衍生生态有哪些?恐怖如斯的JAVA

Java的衍生生态极其丰富&#xff0c;涵盖了多个层面和领域。以下是Java衍生生态的一些主要方面&#xff1a; 1. 开源工具 开发工具&#xff1a;如Eclipse&#xff0c;这是一款非常优秀的Java IDE工具&#xff0c;支持Java以及其他语言的代码编写。Spring官方还基于Eclipse开发…

Golang开发之路

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

混合整数规划及其MATLAB实现

目录 引言 混合整数规划的基本模型 混合整数规划的求解方法 MATLAB中的混合整数规划实现 示例&#xff1a;多变量系统的混合整数规划 表格总结&#xff1a;混合整数规划的求解方法与适用场景 结论 引言 混合整数规划&#xff08;Mixed Integer Programming, MIP&#xf…

多线程学习篇二:Thread常见方法

1. 常见方法 方法名 static 功能说明 注意点 start() 启动一个新线程&#xff0c;在新线程里面运行run方法 start 方法只是让线程进入就绪&#xff0c;里面代码不一定立刻运行(CPU 的时间片还没分给它)。每个线程对象的 start 方法只能调用一次&#xff0c;如果调用了多…

【Hadoop|MapReduce篇】MapReduce概述

1. MapReduce定义 MapReduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并发运行在一个Hadoop集群上。 2. Map…

【绿盟科技盟管家-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

linux 最简单配置免密登录

需求&#xff1a;两台服务器互信登录需要拉起对端服务 ip&#xff1a; 192.168.1.133 192.168.1.137 一、配置主机hosts&#xff0c;IP及主机名&#xff0c;两台都需要 二、192.168.1.137服务器&#xff0c;生成密钥 ssh-keygen -t rsa三、追加到文件 ~/.ssh/authorized_key…

2024年第二届《英语世界》杯全国大学生英语听力大赛

下周开考&#xff01; 一、主办单位 商务印书馆《英语世界》杂志社 二、时间安排 赛事报名时间&#xff1a;即日起-2024年11月15日 正式比赛阶段&#xff1a;第一场&#xff1a;2024年9月22日10:00-22:00 第二场&#xff1a;2024年10月27日10:00-22:00 第三场&#xff1…

QT::QComboBox自定义左击事件信号

因为QComboBox没有自定义的clink信号&#xff0c;所以自己新建一个MyComBox类继承QComboBox&#xff0c;并且添加自定义的左击信号&#xff0c;以及使用该信号连接一个槽函数 mycombobox.h #ifndef MYCOMBOBOX_H #define MYCOMBOBOX_H#include <QComboBox> #include &l…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C语言)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切&#xff08;ROI&#xff09;功能&#xff08;C语言&#xff09; Baumer工业相机Baumer工业相机的图像剪切&#xff08;ROI&#xff09;功能的技术背景CameraExplorer如何使用图像剪切&#xff08;ROI&#xff0…

复旦:EoT下Muti-agentllm曾带给我的启发

结合最近的一些经历&#xff0c;回忆起很早之前探索Agent时阅读过的一篇自来复旦/NUS/上海AI Lab的泛CoT框架思想论文&#xff0c;文中提出了一种名为“思想交换”&#xff08;Exchange-of-Thought, EoT&#xff09;的新框架&#xff0c;该框架允许在问题解决过程中进行跨模型交…

android 老项目中用到的jar包不存在,通过离线的方法加载

1、之前的项目用的jar包&#xff0c;已经不在远程仓库中&#xff0c;只能手工去下载&#xff0c;并且安装。 // implementation com.github.nostra13:Android-Universal-Image-Loader // implementation com.github.lecho:hellocharts-android:v1.5.8 这…

信息安全工程师(1)计算机网络分类

一、按分布范围分类 广域网&#xff08;WAN&#xff09;&#xff1a; 定义&#xff1a;广域网的任务是提供长距离通信&#xff0c;运送主机所发送的数据。其覆盖范围通常是直径为几十千米到几千千米的区域&#xff0c;因此也被称为远程网。特点&#xff1a;连接广域网的各个结点…

智能语音技术在人机交互中的应用与发展

摘要&#xff1a;本文主要探讨智能自动语音识别技术与语音合成技术在构建智能口语系统方面的作用。这两项技术实现了人机语音通信&#xff0c;建立起能听能说的智能口语系统。同时&#xff0c;引入开源 AI 智能名片小程序&#xff0c;分析其在智能语音技术应用场景下的意义与发…

实现CPU压力测试工具的C语言实现

实现CPU压力测试工具的C语言实现 一、背景与需求二、伪代码设计三、C语言实现四、编译和运行五、注意事项在软件开发和系统维护中,CPU压力测试是一项重要任务,用于评估系统的稳定性和性能。本篇文章将详细介绍如何使用C语言结合伪代码实现一个简单的CPU压力测试工具。 一、…

软媒市场新趋势:自助发布与一手资源渠道商自助发稿的崛起

在当今这个信息爆炸的时代,软媒市场作为品牌传播的重要阵地,正经历着前所未有的变革。随着技术的不断进步和消费者行为的日益多样化,传统的营销方式已难以满足企业的需求。在这样的背景下,自助发布与一手资源渠道商自助发稿的模式应运而生,为企业的品牌宣传开辟了新的道路。 自…

旺店通ERP集成用友BIP(旺店通主供应链)

源系统成集云目标系统 用友BIP介绍 用友BIP是以数智底座以及财务、人力、供应链、营销、采购、制造、研发、项目、资产、协同等数智化服务成就的数智平台&#xff0c;同时也预置了很多跨行业通用的SaaS服务&#xff0c;在营销、采购、制造、财务、人力、协同等核心业务领域提供…

Wophp靶场漏洞挖掘

首先进入网站发现有个搜索框&#xff0c;那么我们试一下xss和SQL注入 SQL注入漏洞 发现这里页面没有给我们回显 那么我们尝试sql注入 查数据库 查表 最后查出账号密码 找到账号密码之后我们去找后台登录 进入后台后发现这里有个flag flag 接着往下翻找到一个文件上传的地方 …

linux-L3-linux 复制文件

linux 中要将文件file1.txt复制到目录dir中&#xff0c;可以使用以下命令 cp file1.txt dir/复制文件 cp /path/to/source/file /path/to/destination移动 mv /path/to/source/file /path/to/destination复制文件夹内的文件 cp -a /path/to/source/file /path/to/destinati…

2024年开学季,有哪些大学宿舍必备好物?

随着2024年开学季的到来&#xff0c;新生们即将离开熟悉的家乡&#xff0c;踏入充满未知与挑战的大学生活。对于许多学子而言&#xff0c;宿舍不仅是他们未来几年的居住之所&#xff0c;更是承载青春记忆、实现自我成长的重要空间。为了帮助大家更好地适应校园生活&#xff0c;…