密码学学习笔记(十七 ):Edwards曲线数字签名算法 - edDSA

news2025/1/1 22:19:46

Edwards曲线数字签名算法(Edwards-curve Digital Signature Alogorithm, edDSA)由Daniel J. Bernstein等人在2011年提出,它是一种使用基于扭曲爱德华兹曲线的Schnorr签名变体的数字签名方案。

EdDSA的一个特殊之处在于,该方案不要求每次签名都是用全新的随机数,而且该算法是确定性的。

EdDSA不直接生成密钥,而是首先生成一个密钥并用它派生实际的签名密钥和nonce密钥。这个nonce会以确定性的方式生成每个签名所需要的nonce。

计算签名时,EdDSA首先计算nonce密钥(nonce key)与待签名消息的哈希值作为nonce值。算法之后的执行过程类似于Schnorr签名。

  • 计算nonce: nonce值为HASH(nonce key \left | \right | message)
  • 计算R值: R值为[nonce]G,其中G是群的基点。
  • 计算挑战: 挑战值为HASH(commitment \left | \right | publick key \left | \right | message)
  • 计算证据: 证据S为 nonce + challenge x signing key

最终签名是(R,S)。

EdDSA的密钥生成算法生成一个密钥,然后用它派生另外两个密钥。算法生成的第一个密钥是实际的签名密钥,该签名密钥可用于生成公钥;算法生成的另一个密钥是nonce密钥,用于在签名时确定性地生成nonce。EdDSA签名与Schnorr签名类似,不同之处在于(1)EdDSA用nonce密钥和消息确定性地生成nonce,以及(2)签名者的公钥包含在挑战中

EdDSA密钥生成

EdDSA密钥对包括:
私钥(整数):privKey
公钥(EC点):pubKey = privKey * G

私钥是从一个被称为种子的随机整数生成的(它应该具有类似的比特长度,就像曲线顺序一样)。

公钥pubKey是椭圆曲线上的一个点,通过EC点相乘计算:pubKey=privKey*G(私钥,乘以曲线的生成点G)。公钥被编码为压缩的EC点:y坐标,与x坐标的最低位(奇偶校验)相结合。

EdDSA 签名

EdDSA_sign(msg, privKey) --> { R, s }

  • 计算pubKey=privafKey*G
  • 确定性地生成一个秘密整数r=hash(hash(privaKey)+msg)mod q
  • 通过将r后面的公钥点乘以曲线生成器来计算:r=r*G
  • 计算h=哈希(R+pubKey+msg)mod q
  • 计算s=(r+h*privKey)mod q
  • 返回签名{R,s}

EdDSA验证签名

EdDSA签名验证算法将文本消息msg+签名者的EdDSA公钥pubKey+EdDSA签名{R,s}作为输入,并产生布尔值作为输出。

EdDSA_signature_verify(msg, pubKey, signature { R, s } ) --> valid / invalid

  • 计算h=哈希(R+pubKey+msg)mod q
  • 计算P1=s*G
  • 计算P2=R+h*pubKey
  • 返回P1==P2

在验证过程中,点P1计算为:P1=s*G。

在签名过程中,s=(r+h*privKey)mod q。现在将s替换为上式:
P1 = s * G = (r + h * privKey) mod q * G = r * G + h * privKey * G = R + h * pubKey

以上正是另一点P2。如果这些点P1和P2是相同的EC点,这证明了由私钥计算的点P1与由其对应的公钥创建的点P2匹配。

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

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

相关文章

Spring项目如何创建?Bean对象是如何存储的?

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE进阶 目录 文章目录 一、创建Spring项目 1.1 创建Maven项目 2.2 配置国内源 二、Bean对象的存储和读取 2.1 添加spring配置文件 2.2 创建Bean对象 2.3 读取Bean对象 2.3.1 得到spring上下文对象…

前端技术Vue学习笔记--001

前端技术Vue学习笔记 文章目录 前端技术Vue学习笔记1、Vue2和Vue3比较2、Vue简介3、Vue快速上手4、插值表达式{{}}5、Vue响应式特性6、Vue指令6.1、v-html指令6.2、v-show指令和v-if指令6.3、v-else指令和v-else-if指令6.4、v-on指令6.4.1、v-on指令基础6.4.2、v-on调用传参 6.…

生命的样子

bbc纪录片《王朝》第一季就让我颇为震撼,第二季拖到现在才看,不过好在看了《晚酌de流派》之后,现在对待上好的游戏和视频都要颇有仪式感的情况下食用,夜深人静,配着暖灯,一杯茶,伴随大卫爱登堡的…

Lesson2——时间复杂度与空间复杂度

前言: 一个物品的好坏,我们可以通过体验、口碑、销量等因素判断。那一个算法的好坏我们怎么判断呢? 目录: 1. 算法的效率 2. 时间复杂度 3. 空间复杂度 4. 常见时间复杂度以及复杂度oj练习 一、算法的效率 1、如何衡量一个算…

react-draft-wysiwyg富文本编辑器

在React项目中使用 yarn add react-draft-wysiwyg draft-js or npm i react-draft-wysiwyg draft-js推荐在项目中单独创建一个富文本编辑器组件 import { Editor } from "react-draft-wysiwyg"; import { EditorState, convertToRaw, ContentState } from draft-js…

12、动手学深度学习——循环神经网络从零实现+Pytorch内置函数实现:代码详解

1、基础知识 参考文章:8.4. 循环神经网络 2、从零开始实现 本节将上述描述, 从头开始基于循环神经网络实现字符级语言模型。 这样的模型将在H.G.Wells的时光机器数据集上训练。 首先, 我们先读取数据集。 %matplotlib inline import math…

陆拾柒- 如何通过数据影响决策(二)

是否曾感觉自己已经很努力了,但却一直被人说表现的比以前差了。 虽然古语有云“眼见为实”,但着眼之处很有可能是错的。 一、某咖啡店近期销量 7月17日准备要开大会时,负责小程序渠道的同事看到7月17日趋势下跌之后,就开始想办法…

fatal: unable to connect to github.com:github.com[0:20.205.243.166]: errno=Unknown error

git:fatal: unable to connect to github.com:github.com[0:20.205.243.166]: errnoUnknown error 在 bash 执行命令 git clone 时 报 : fatal: unable to connect to github.com:github.com[0: 20.205.243.166]: errnoUnknown error 发生此错误是因为 g…

【C++】string类的模拟实现(增删查改,比大小,运算符重载)

文章目录 1.1大框架1.2基本函数:2.成员函数2.0构造函数2.05析构函数2.09拷贝构造函数补充:预留存储空间(reserve) 2.1增加字符(push_back,append,s)push_backappends 2. 删除字符&am…

SpringCloud-Alibaba之Seata处理分布式事务

一ID三组件模型 Transaction ID XID 全局唯一的事务ID Transaction Coordinator(TC) 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚 Transaction Manager™ 控制全局事务的边界,负责开启一个全局事务,…

Java当中的深拷贝和浅拷贝

文章目录 一、前提二、浅拷贝1. BeanUtils实现浅拷贝 三、深拷贝1. 实现Cloneable接口并重写clone()方法:2. 使用序列化与反序列化: 一、前提 在计算机的内存中,每个对象都被赋予一个地址,该地址指向对象在内存中存储的位置。当我…

超详细图文教程:3DS Max 中创建低多边形游戏长剑模型

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 在此,由两部分组成的教程的第一部分中,我将向您展示如何: 对剑柄进行建模剑的护手模型剑刃建模 1. 如何制作剑柄 步骤 1 在本教程中使用正交视图。要更改视图&#x…

uniapp小程序跳转其他小程序uni.navigateToMiniProgram效果demo(整理)

放点击事件里面即可 uni.navigateToMiniProgram({appId: , //跳转的小程序的aooIdpath: pages/index/index?id123, //如果这里不填,默认是跳转到对方小程序的主页面extraData: { //需要传给对方小程序的数据data1: test},success(res) {// 打开成功} })

Leetcode每日一题:42. 接雨水(2023.7.23 C++)

目录 42. 接雨水 题目描述: 实现代码与解析: 单调栈 原理思路: 动态规划 原理思路: 42. 接雨水 原题链接: 42. 接雨水 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,…

SVTR: 使用单一视觉模型进行场景文本识别【论文翻译】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 SVTR: Scene Text Recognition with a Single Visual ModelAbstract1 Introduct…

Ansible部署与实施PlayBook

Ansible部署与实施PlayBook 计算机名称IP角色workstation192.168.182.130管理servera192.168.182.131被管理serverb192.168.182.132被管理serverc192.168.182.133被管理 部署 控制节点 官方文档 Ansible易于安装。只需要安装到要运行它的一个或多个控制节点上。由Ansbile管…

【事业单位-语言理解】中心理解01

【事业单位-语言理解】中心理解01 一、中心理解1.1 转折关系1.2 因果关系1.3必要条件关系 二、总结 一、中心理解 1.1 转折关系 转折之后是中心意思 转折在分述句子中,就没有那么重要 1.2 因果关系 一方面另一方面起到的是分述的作用,一般不要过多…

python解析markdown

python解析markdown 1、安装markdown模块2、python解析markdown2.1 QtWebEngineWidgets显示网页2.1.1 网页加载2.1.2 网页加载错误 2.2 Python-Markdown 模块库2.3 QTextDocument、QTextBrowser、QTextEdit 3、案例Demo3.1 先上图3.2 代码文件 1、安装markdown模块 pip instal…

ElasticSearch学习--操作

目录 索引库操作 mapping映射 总结 创建索引库 查询删除修改索引库 总结 文档操作 添加 查询,删除 修改文档 总结 RestClient操作索引库 初始化JavaRestClient 创建索引库​编辑 删除索引库,判断索引库是否存在 总结 操作文档 新增文档 查询文…

JAVA SE -- 第九天

(全部来自“韩顺平教育”) 一、类变量个类方法 (一)类变量 1、基本介绍 类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值&#…