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

news2024/11/23 0:49:14

交互式零知识证明

零知识证明(ZKP)就是不会将证据泄露给验证者的知识证明。Schnorr身份认证识别协议是一个交互式ZKP,它满足了完备性、可靠性、零知识性。所谓的交互式ZKP方案通常包含3个步骤(承诺、挑战和证明),在文献中通常被称为sigma协议。交互式协议增加了一些不可忽略的开销,因为它需要双方通过网络发送多条消息,并在双方不同时在线时会增加无法限制的延迟。因此,应用密码学领域几乎不使用交互式ZKP。

Fiat-Shamir转换可以将交互式ZKP转换为非交互式ZKP。数字签名是一种非交互式ZKP。将Fiat-Shamir转换应用于Schnorr身份识别协议,我们就可以得到Schnorr签名方案。总而言之,Schnorr签名本质上是两个值R和s,其中R是对某个秘密随机值的承诺(一般被称为nonce,因为它需要对每个签名都是唯一的),s是通过承诺R、私钥(见证x)和消息计算的值。

Schnorr识别协议

识别方案是证明人P和验证人V这两方之间的交互协议。如果协议成功,那么在协议结束时,验证者确信他正在与证明人交互,或者更准确地说,与知道与证明人公钥对应的密钥的人交互。

一个简单的例子是密码身份验证的标准协议。证明者的密钥是她的密码pw,公钥是H(pw),其中H是一个“单向”散列函数。该协议由证明方发送H(pw)组成,验证者检查这是否与存储的值匹配。虽然这对“直接”攻击是安全的,但对“窃听”攻击是不安全的,即对手可以观察到P和V之间的一些交互,然后尝试模仿P——一旦对手从一次交互中看到H(pw),他就可以在所有进一步的交互中模仿P。

在使用椭圆曲线的Schnorr识别协议中,证明者的秘密是一对(P,Q=[a]P)的离散对数a,其中P和Q是椭圆曲线E(Fq)上的点。(该系统适用于离散对数很难的任何有限阿贝尔群)为了防止窃听攻击,该协议有三轮:

公钥pk由一条椭圆曲线E(Fq)和两个r阶点P,Q∈E(Fq)组成。密钥sk是[1,r]中的一个整数,使得Q=[a]P

  • \rho选择一个随机k\overset{R}{\leftarrow}\left [ 1,r \right ] 并且将R=[k]P发送到V。
  • V随机选择一个“挑战”e\overset{R}{\leftarrow}\left [1,r \right ]并将e发送到\rho
  • \rho计算s=k+ae(mod r)并将s发送到V。

如果[s]\rho=R+[e]Q,则V接受。

初始随机值k的作用是“屏蔽”秘密a,以便在协议的后续执行中重复使用。

Schnorr签名

假设代数群G和素数阶r的元素g∈G对所有用户都是已知的。这些值(G,g,r)被称为系统参数。设h=g^{a}为用户的公钥。关于公钥h的消息m上的数字签名可以由知道私钥A的用户生成。在不知道私钥的情况下,很难计算给定公钥的签名。

非正式地说,公钥识别方案是验证方和验证方之间的协议,其中验证方有公钥pk和私钥sk,验证方有pk的副本。该协议有三个通信阶段:首先,证明者发送一个承诺s0;则验证者发送质询s1;则证明者发送响应s2。验证人接受或拒绝该证明。该协议旨在说服验证者,他们正在与知道与证明者公钥对应的私钥的用户进行通信。换言之,验证者应该确信他们正在与证明者沟通。

对于Schnorr格式[522,523],证明者具有公钥h=g^{a},其中g是素数阶r的代数群的元素,并且1≤a<r是一致随机选择的。证明者选择一个随机整数0≤k<r,计算s0=g^{k}并将s0发送给验证者。验证人向证明者发送“挑战”1≤s1<r。校准仪返回s2=k+as1(mod r)。

然后验证人检查是否满足:

如果是这种情况,则接受该证明。换言之,如果验证人接受证明,则证明人已经成功地向验证人识别了自己。 

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

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

相关文章

传奇新手小白架设单机给玩家充值元宝教程

阿杰今天和大家说说架设的单机如何给玩家和给自已充值元宝的教程 相信有很多玩家都架设过单机吧&#xff0c;架设容易&#xff0c;但是还有一些搞不明白&#xff0c;就是版本里面需 要充值点和积分回馈点才能领取的&#xff0c;那么这些怎么设置呢&#xff1f;今天就教大家两种…

【Express.js】evp-express-cli

evp-express-cli evp-express-cli 是笔者结合自己的实践经验编写的一款 express 手脚架&#xff0c;以一种比较合适的流程构建的 express 架构。 文档 安装用法 命令新建项目运行模板 验证数据库RedisAuthRabbitMQSocketIONacos 开发工具 BabelEsintJestPkgPM2 资源配置日志异…

【Docker】详解docker安装及使用

详解docker安装及使用 1. 安装docker2. Docker镜像操作3. Docker容器操作4.知识点总结4.1 docker镜像操作4.2 docker容器操作4.3 docker run启动过程 参见docker基础知识点详解 1. 安装docker 目前 Docker 只能支持 64 位系统。 systemctl stop firewalld.service setenforce…

Docker 应用容器引擎 (一)

Docker 应用容器引擎 Docker是什么 是一个开源的应用容器引擎&#xff0c;基于GO语言开发并遵循了apache2.0协议开源 是在linux容器里运行应用的开源工具 是一种轻量级的“虚拟机” Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的…

NOTA WL12,新型双功能整合剂,正电子发射断层扫描 (PET) 显像剂

&#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ NOTA-WL12试剂 | 基础知识概述&#xff08;部分&#xff09; 英文名称&#xff1a;NOTA-WL12 CAS号&#xff1a;N/A 分子式&#xff1a;N/A 分子量&#xff1a;N/A 规格标准…

【Linux】Docker 基本管理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Docker 基本管理 Docker 概述Docker 核心概念Docker 安装部署Docker 镜像操作Docker 容器操作 Docker 概述 Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵…

如何在Windows 10中启用或禁用缩略图预览

文件资源管理器可以在 Windows 10 中显示文件和文件夹的缩略图或图标。 本教程将向你展示如何在文件资源管理器中为你的帐户、所有用户或Windows 10 中的特定用户启用或禁用缩略图预览。 缩略图预览仅在打开并且选择了中等图标、大图标或超大图标文件夹视图布局时显示。 如果缩…

【T1】T1飞跃版红字反冲,提示单据已生成了凭证,不能红冲。但是联查凭证不存在。

【问题描述】 T1飞跃专业版&#xff0c;在经营历程中操作【红字反冲】的时候&#xff0c; 提示&#xff1a;单据已生成了凭证&#xff0c;不能红冲。 但是选中单据&#xff0c;点击联查凭证的时候&#xff0c;又提示【单据没有凭证】。 【解决方法】 针对账套库执行下述语句&…

若依vue -【 33 ~ 】

33 登录日志 系统管理 > 日志管理 > 登录日志 1 应用场景 统计用户的活跃度用户错误输入密码多少次 2 后台实现 &#xff08;1&#xff09;SysLoginController#login&#xff1a;登录 /*** 登录方法* * param loginBody 登录信息* return 结果*/PostMapping("…

(七)「消息队列」之 RabbitMQ 发布者确认(使用 .NET 客户端)

发布者确认&#xff08;Publisher Confirms&#xff09; 发布者确认是一个 RabbitMQ 扩展&#xff0c;用于实现可靠的发布。当在通道上启用发布者确认时&#xff0c;客户端发布的消息将由代理异步确认&#xff0c;这意味着它们已在服务器端得到处理。 0、引言 先决条件 本教程…

Spring、SpringBoot、SpringCloud、SpringCloud Alibaba、Elasticsearch版本对应,附下载地址

1、GitHub Alibaba 发布SpringCloud Alibaba和SpringCloud 、SpringBoot版本 Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot2022.0.0.0-RC2Spring Cloud 2022.0.03.02022.0.0.0-RC1Spring Cloud 2022.0.03.0.02021.0.5.0*Spring Cloud 2021.0.52.6.132021.0.4…

Linux查看某进程所部署的目录路径

1.首先查看系统中正在跑的进程都有什么 ps -ef 2.然后通过抓取你要看的进程名&#xff0c;比如哪些服务 ps -ef | grep xxxxx(服务名) Linux在启动一个进程时&#xff0c;系统会在 /proc 下创建一个以PID命名的文件夹&#xff1b; 在该文件夹下会有我们的进程的信息&#…

【蓝图】p28按键+鼠标点击实现开关门

p28&#xff0c;创建门的蓝图类 actor和组件的区别、门的轴心点修改 创建一个Actor 添加一个静态网格体组件 创建一个门框 同理创建一个门Door 注意&#xff08;当门的中心点不在边角上时&#xff09; 创建一个Scene组件 把物体变换位置 这时只需要旋转Scene就可以旋转…

开发者评价:Serverless 容器最值得推荐的能力是什么?

Kubernetes 作为云原生计算的基础项目&#xff0c;已经在开发者和企业中获得广泛支持。它可以帮助企业加快部署频率、提升应用弹性、优化资源利用率、改善系统可用性。然而其自身复杂性和陡峭的学习曲线依然让一些开发者望而生畏&#xff1b;与此同时&#xff0c;随着企业数字化…

RabbitMQ到底为什么要使用它?

导入 一个技术的衍生必然是为了解决现实出现的问题&#xff0c;在讲这个问题之前我们先了解一下传统开发中关于服务调用出现的问题&#xff08;痛点&#xff09;有哪些&#xff1f; 我们为什么要使用MQ&#xff1f; ①、同步——超时 在多服务体系架构中&#xff0c;必然存在…

掘金量化—Python SDK文档—5.API 介绍(2)

Python SDK文档 5.API介绍 5.6通用数据函数&#xff08;免费&#xff09; python 通用数据 API 包含在 gm3.0.148 版本及以上版本&#xff0c;不需要引入新库 get_symbol_infos - 查询标的基本信息 获取指定(范围)交易标的基本信息&#xff0c;与时间无关. 此函数为掘金公…

C# 动态字典(可以随机实时增删访问,保证先入先出的字典)

如果你有以下需求&#xff1a; 1. 需要对Dictionary进行遍历的同时移除或者添加元素 2. 需要按顺序遍历Dictionary并且保证先入先出 3. 需要即时的获取字典内的元素数量&#xff0c;即时增删 如果你觉得好&#xff0c;请给我的框架点一个免费的star&#xff0c;球球啦 Yueh0607…

如何将视频转换为AVI格式?3个方法轻松转换!

在数字化时代&#xff0c;视频成为了人们记录和分享重要时刻的主要方式之一。然而&#xff0c;不同设备和平台对视频格式的要求千差万别&#xff0c;有时您可能需要将视频转换为特定格式以便于播放或编辑。在本文中&#xff0c;我们将重点介绍将视频转换为AVI&#xff08;Audio…

python实现小波降噪

文章目录 小波分解小波系数小波降噪阈值确定的一些小知识点python 实现小波去噪小波分解 上图为对信号进行3层小波分解,其中,Approximation 为近似小波系数(信号的低频成分),Detail为细节小波系数(信号的高频成分),分解后得到四个小波系数分别为A3,D3,D2,D1。 小波系数 小…

易查分怎么上传成绩?

当使用易查分制作查询系统时&#xff0c;许多老师可能对于如何上传成绩感到困惑。有时候&#xff0c;导入成绩到易查分系统后&#xff0c;信息可能无法完全显示&#xff0c;而且也很难找到错误的原因。因此&#xff0c;今天我将与老师们分享一下易查分上传成绩的方法。这个技巧…