密码学学习笔记(十五):ECDSA - 椭圆曲线数字签名算法

椭圆曲线数字签名算法是DSA的一种椭圆曲线变体,它发明的初衷只是避免使用Schnorr签名的专利。椭圆曲线数字签名算法依赖于验证器中的私钥和主机用于验证验证器的公钥。它的缺点和DSA一样,它也没有提供安全性证明。

椭圆曲线算法

DSS(数字签名标准)定义了两种用于ECC(椭圆曲线密码学)的椭圆曲线:伪随机曲线,其系数由种子密码散列函数的输出生成;以及特殊曲线,其系数和下伏场已被选择以优化椭圆曲线运算的效率。伪随机曲线可以定义在素域GF(p)以及二进制域GF(2m)上。

素数域是包含素数p个元素的域GF(p)。这个字段的元素是以p为模的整数;场运算是根据整数模p的运算来实现的。适用的椭圆曲线的形式为y²=x³+ax+b。

密钥对生成

在ECDSA验证器能够工作之前,它需要知道自己的私钥。公钥是从私钥和域参数派生而来的。密钥对必须位于验证器的内存中。顾名思义,私钥是无法从外部世界访问的。相比之下,公钥必须是可公开读取和访问的。

启动一个随机数生成器,当其操作完成时,它会传递成为私钥d(标量)的数值。

签名计算

数字签名允许消息的接收者使用验证器的公钥验证消息的真实性。首先,使用安全散列算法将可变长度消息转换为固定长度消息摘要h(m)。

安全散列具有以下独特的特性:

1)不可逆性——从摘要中确定消息在计算上是不可行的;

2) 抗冲突-找到一个以上的消息来生成给定的摘要是不切实际的;

3)高雪崩效应消息中的任何变化都会在摘要中产生显著变化。在计算消息摘要之后,激活随机数生成器以提供用于椭圆曲线计算的值k。

k永远不能重复使用,它必须是不可预测的。否则,恢复私钥将变得十分简单。通常nonce(k值)会由密码学库在后台生成,但有时也会有算法调用方来提供。

另一种不易察觉的风险是,如果nonce(k值)不是均匀随机选取的,那么仍然存在能够立即恢复私钥的有效攻击(格攻击算法)。理论上,我们称这些类型的密钥检索攻击为完全攻破攻击。

签名由两个整数r和s组成。

以下等式表示了根据随机数k和基点G(x,y)计算r:

(x1, y1) = k × G(x, y) mod p
r = x1 mod n

若要有效,r必须不同于零。在r为0的罕见情况下,必须生成一个新的随机数k,并且需要再次计算r。
在成功计算r之后,根据等式3使用标量运算来计算s。输入是消息摘要h(m);私钥d;r以及随机数k:

s = (k^{-1} (h(m) + d * r) mod n

若要有效,s必须不同于零。如果s为0,则必须生成新的随机数k,并且需要再次计算r和s。

签名验证

签名验证是签名计算的对应部分。其目的是使用验证器的公钥验证消息的真实性。使用与签名步骤中相同的安全散列算法,计算由认证器签名的消息摘要,该消息摘要与公钥Q(x,y)以及数字签名分量r和s一起产生结果。

输入是消息摘要h(m)、公钥Q(x,y)、签名分量r和s以及基点G(x,y):

w = s-1 mod n
u1 = (h(m) * w) mod n
u2 = (r * w) mod n
(x2, y2) = (u1 × G(x, y) + u2 × Q(x, y)) mod n

如果x2等于r,则验证成功(“通过”),从而确认签名确实是使用私钥计算的。

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

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

相关文章

torch分布式通信基础

torch分布式通信基础 1. 点到点通信2. 集群通信 官网文档:WRITING DISTRIBUTED APPLICATIONS WITH PYTORCH 1. 点到点通信 # 同步,peer-2-peer数据传递 import os import torch import torch.distributed as dist import torch.multiprocessing as mpdef…

php 开发微信 h5 支付 APIv3 接入超详细流程

✨ 目录 🎈 申请商户号🎈 申请商户证书🎈 设置V3密钥🎈 开通H5支付🎈 设置支付域名🎈 SDK 下载🎈 第一次下载平台证书🎈非第一次下载平台证书🎈 H5下单 🎈 申…

【前端知识】React 基础巩固(二十八)——StrictMode

React 基础巩固(二十八)——StrictMode StrictMode StrictMode 是一个用来突出显示应用程序中潜在问题的工具 与 Fragment 一样,StrictMode 不会渲染任何可见的 UI为后代出发额外的检测和警告严格模式检查仅在开发模式下运行,不影响生产构建 严格模式检…

【DBA课程-笔记】第 3 章:MongoDB数据库核心知识

内容 一、MongoDB 数据库架构 A. MongoDB数据库体系架构 1. 存储引擎(MongoDB Storage Engines): 2. MongoDB 数据逻辑架构 二、MongoDB 存储引擎 A. 查看mongodb服务器的状态 B. 查看引擎信息(4.2.1 没有这个命令&#xf…

搭载下一代人工智能技术,微软推出Power Automate流程挖掘产品

在近日的Microsoft Inspire大会中,微软揭晓了他们即将推出的Power Automate流程挖掘产品,并计划在8月1日正式对外开放。 试用地址:https://powerautomate.microsoft.com/zh-cn/#home-signup 这款产品搭载了下一代人工智能技术,有…

基于 Fedora 38 的预期版本 Nobara 38 发布

导读基于 Fedora 38 的预期版本 Nobara 38 终于发布了,它带来了一系列用户友好的修复和功能增强。Nobara 是 Fedora Linux 的修改版本,旨在解决用户面临的常见问题,并提供开箱即用的顺滑的游戏、流媒体和内容创建体验。凭借一系列附加软件包和…

深度学习ai学习方向如何规划,算法竞赛,机器学习,搭建环境等答疑

目录 1了解人工智能的背景知识 2 补充数学或编程知识 3 熟悉机器学习工具库 4 系统的学习人工智能 5 动手去做一些AI应用 1了解人工智能的背景知识 一些虽然存在但是在研究或者工业上不常用的知识,为自己腾出更多的时间来去学习,研究。 人工智能里…

天翎MyApps低代码平台唯品会金牌客服管理系统

项目痛点: 作为一家知名的创新大型电商,唯品会秉承“传承品质生活,提升幸福体验”的企业使命。基于客服铁军锻造项目,实现基于金牌案例的提交、评审、积分,学习功能。 项目中的晋升机制、案例产生学习机制、双激励机制…

linux 基于debian_ubuntu AB系统适配(三)- overlayroot

Overlayroot Overlayroot是一个实用工具,允许您创建一个只读的根文件系统和一个可写的覆盖文件系统。这对于创建一个更安全和稳定的系统很有用,因为对系统所做的任何更改都将存储在覆盖文件系统中,可以很容易地丢弃或重置。 在Debian下,分离的系统在/userdata/rootfs_ove…

手把手教你搭建SpringCloud项目(九)集成OpenFeign服务接口调用

什么是微服务?一看就会系列! 一、手把手教你搭建SpringCloud项目(一)图文详解,傻瓜式操作 二、手把手教你搭建SpringCloud项目(二)生产者与消费者 三、手把手教你搭建SpringCloud项目&#x…

【iOS】ARC实现

ARC由以下工具来实现: clang(LLVM编译器)3.0以上objc4 Objective-C运行时库493.9以上 下面我们,我们将围绕clang汇编输出和objc4库的源代码探究ARC实现 1. __strong修饰符 1.1 赋值给附有__strong修饰符的变量 看下面代码 {…

注释气泡图函数(更新)

之前我们写过一个原创可视化函数Dotplot_anno.R,nature级别图表:一个注释气泡热图函数(适用于单细胞及普通数据)。主要解决的问题是1) 单细胞基因可视化分组注释。2) Bulk RNA差异基因热图、气泡图。3) 富集分析结果气泡图展示。这…

【分布式训练】基于Pytorch的分布式数据并行训练

基于Pytorch的分布式数据并行训练 动机为什么要并行分布数据?现有资料的不足 Outline整体框架图带解释的最小demo示例没有multiprocessing开启multiprocessing 分布式训练启动方式混合精度训练(采用apex) 参考资料 简介: 在PyTorc…

【ROS】ROS1人机界面开发:第一个最简ROS+QtGui程序(按钮启动发布者)

【ROS】郭老二博文之:ROS目录 1、创建工程 1)新建工程:Other Project --> ROS Workspace 2)设置工程名称、路径 3)可以通过点击“Browse”来创建目录 注意:使用自带ros插件的qtcreator-ros,无法创建目录、也不能选择目录,这是个bug,因此需要在终端手动创建目录…

密码学学习笔记(十六 ):Schnorr签名算法

交互式零知识证明 零知识证明(ZKP)就是不会将证据泄露给验证者的知识证明。Schnorr身份认证识别协议是一个交互式ZKP,它满足了完备性、可靠性、零知识性。所谓的交互式ZKP方案通常包含3个步骤(承诺、挑战和证明),在文献中通常被称…

django框架向DRF框架演变过程详解

一、Django框架实现项目查询接口 主要知识点: Django框架视图函数 1、在 Django 项目中创建一个应用(如果还没有创建): python manage.py startapp projects 2、在项目的 models.py 文件中定义项目模型 from django.db impor…

【C++】-stack和queue的具体使用以及模拟实现(dqeue的介绍+容器适配器的介绍)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

Java八股文总结(二)

Java八股文总结(续) 接上篇笔记:Jhttps://blog.csdn.net/weixin_44780078/article/details/130192373 文章目录 Java八股文总结(续)六、MySql 相关1. InnoDB 与 MyISAM 的区别?2. 为什么 InnoDB 存储引擎表…

JavaFx 用户界面控件2——ListView

1.列表显示ListView 下面是一个JavaFX ListView的示例代码和使用方法&#xff1a; public class ListViewExample extends Application {Overridepublic void start(Stage primaryStage) {// 创建一个可观察的列表&#xff0c;用于存储ListView中的数据ObservableList<Str…

【MongoDB】SpringBoot整合MongoDB

【MongoDB】SpringBoot整合MongoDB 文章目录 【MongoDB】SpringBoot整合MongoDB0. 准备工作1. 集合操作1.1 创建集合1.2 删除集合 2. 相关注解3. 文档操作3.1 添加文档3.2 批量添加文档3.3 查询文档3.3.1 查询所有文档3.3.2 根据id查询3.3.3 等值查询3.3.4 范围查询3.3.5 and查…