Schnorr 和 BLS 算法详解

Schnorr 签名和 BLS 签名在区块链技术中都有着重要的应用。它们各自具备独特的优势,使其在不同的区块链应用场景中得到广泛使用。

Schnorr签名算法

Schnorr签名算法是一种基于离散对数问题的数字签名算法, 由德国密码学家 克劳斯·施诺尔 (Claus-Peter Schnorr)于1989年提出。Schnorr签名算法以其 签名生成和验证的高效性和简洁性 著称,是许多现代密码系统的重要组成部分。以下是Schnorr签名算法的基本工作原理和过程:

1.1 算法参数

  • 选择一个大素数 𝑝:确保 𝑝 足够大以保证安全性。

  • 选择一个素数 𝑞,𝑞 是 𝑝−1 的一个因子,通常 𝑞 较小。

  • 选择一个生成元 𝑔, 𝑔 是 𝑍_𝑝^∗ (整数模 𝑝p 的乘法群)的生成元,满足

𝑔𝑞≡1(𝑚𝑜𝑑𝑝)。

1.2 密钥生成

  • 私钥 𝑥:选择一个随机的私钥 𝑥 满足 0<𝑥<𝑞。

  • 公钥 𝑦:计算公钥 𝑦,满足

𝑦≡𝑔𝑥(𝑚𝑜𝑑𝑝)

1.3 签名生成

  • 选择一个随机数 𝑘:选择一个随机数 𝑘k 满足 0<𝑘<𝑞。

  • 计算 𝑟:计算 𝑟≡𝑔𝑘(𝑚𝑜𝑑𝑝)

  • 计算哈希值 𝑒:将消息 𝑚 和 𝑟 结合,计算哈希值 𝑒=𝐻(𝑚,𝑟) 其中 𝐻 是一个安全的哈希函数。

  • 计算签名 𝑠:计算 𝑠≡(𝑘+𝑥𝑒)(mod𝑞)

生成的签名为 (𝑒,𝑠)。

1.4 签名验证

  • 验证 𝑟:通过公钥 𝑦y 和签名 (𝑒,𝑠) 计算 𝑟′: 𝑟′≡𝑔𝑠⋅𝑦−𝑒(𝑚𝑜𝑑𝑝)

  • 计算哈希值 𝑒′:将消息 𝑚m 和计算得到的 𝑟′ 结合,计算哈希值 𝑒′=𝐻(𝑚,𝑟′)。

  • 验证签名:如果 𝑒′=𝑒,则签名有效;否则签名无效。

1.5 优点

  • 高效性:相比于其它签名算法,Schnorr签名在计算上更加高效,特别是在签名生成和验证过程中。

  • 短签名:Schnorr签名长度较短,有助于节省带宽和存储空间。

  • 安全性:基于离散对数问题的安全性,难以被破解。

1.6 应用

Schnorr签名广泛应用于区块链和加密货币领域,如比特币的Taproot升级中使用了基于Schnorr签名的聚合签名技术。此外,许多密码协议和标准也采用了Schnorr签名算法。

总之,Schnorr签名算法以其高效和安全的特点,成为了现代密码学中的一个重要工具,尤其在对资源要求较高的应用场景中具有显著优势。

基于有限单群的Schnorr 多重数字签名算法

基于有限单群的 Schnorr 签名算法是一种扩展和改进的 Schnorr 签名方案,其核心思想仍然依赖于 离散对数问题 ,但引入了 有限单群(finite simple group) 的概念。这种改进可以在某些方面提供额外的安全性和效率。

2.1 什么是有限单群

有限单群是仅有一个非平凡正规子群(即它自身)的群 。这些群在代数结构上具有较高的对称性和复杂性,因此在密码学中应用能够增加某些攻击的难度。

2.2 基于有限单群的 Schnorr 签名算法

2.2.1 算法参数
  • 选择有限单群 𝐺:选择一个有限单群 𝐺 及其阶 𝑛

  • 选择生成元 𝑔: 选择 𝐺 的一个生成元 𝑔。

2.2.2 密钥生成
  • 私钥 𝑥 选择一个随机的私钥 𝑥 满足 0<𝑥<n< span="">

  • 公钥 y, 计算公钥 𝑦=𝑔^𝑥

2.2.3 签名生成
  • 选择一个随机数 𝑘, 𝑘 满足 0 < k < n

  • 计算 r,r = g^k

  • 计算哈希值 𝑒, 将消息 𝑚 和 𝑟 结合,计算哈希值 𝑒=𝐻(𝑚,𝑟), 其中 𝐻 是一个安全的哈希函数

  • 计算签名 𝑠, 𝑠≡(𝑘+𝑥𝑒)(mod𝑛)

生成的签名为 (𝑒, 𝑠)

2.2.4 签名验证
  • 验证 𝑟, 通过公钥 𝑦 和签名 (𝑒,𝑠) 计算 𝑟′, 𝑟≡𝑔^𝑠.𝑦^{−𝑒}

  • 计算哈希值 𝑒′:将消息 𝑚 和计算得到的 𝑟′结合,计算哈希值 𝑒′=𝐻(𝑚,𝑟)。

  • 验证签名:如果 𝑒′=𝑒 则签名有效;否则签名无效。

2.2.5 优点
  • 高安全性:由于有限单群的复杂结构,攻击者更难破解基于这些群的签名。

  • 高效性:算法保持了Schnorr签名的高效特点。

  • 较短的签名长度:签名长度较短,有助于节省带宽和存储空间。

2.2.6 应用

基于有限单群的 Schnorr 签名算法可以用于需要高安全性和高效性的场合,如加密货币、区块链技术和其他需要数字签名的应用领域。

总的来说,基于有限单群的 Schnorr 签名算法通过引入有限单群的结构,增强了算法的安全性,同时保持了原始 Schnorr 签名的效率和简洁性。

基于有限单群的 Schnorr 多重数字签名算法

基于有限单群的 Schnorr 多重数字签名算法是对传统 Schnorr 签名算法的扩展, 使其能够支持多个签名者共同生成一个联合签名。这种方法在区块链和其他分布式系统中具有重要应用,特别是在提高效率和减少数据传输量方面。

3.1 多重签名算法的基本思想

多重签名算法允许多个参与者共同生成一个签名,该签名可以由任何一组验证者进行验证。具体来说,基于有限单群的 Schnorr 多重签名算法使用了有限单群的性质,以增强安全性和性能。

3.2 基于有限单群的 Schnorr 多重数字签名算法

3.2.1.算法参数
  • 选择有限单群 𝐺:选择一个有限单群 𝐺 及其阶 𝑛

  • 选择生成元 𝑔: 选择 𝐺 的一个生成元 𝑔。

3.2.2.密钥生成

每个签名者 𝑖(共有 𝑡个签名者)生成自己的密钥对:

  • 私钥 𝑥_𝑖 选择一个随机的私钥 𝑥𝑖 满足 0<𝑥_𝑖<𝑛

  • 公钥 𝑦_𝑖, 计算公钥 𝑦_𝑖=𝑔_𝑖^𝑥

联合公钥 ( y ) 为各个签名者公钥的乘积:

3.2.3. 签名生成
  • 选择随机数 𝑘𝑖:每个签名者 𝑖 随机选择一个 ( k_i ) 满足 0<𝑘_𝑖<𝑛。

  • 计算 𝑟_𝑖:每个签名者计算 𝑟_𝑖=𝑔^𝑘_𝑖。

  • 广播 𝑟_𝑖:各个签名者相互广播 𝑟_𝑖。

  • 计算 𝑟:汇总所有签名者的 𝑟_𝑖计算出联合值 𝑟:

  • 计算哈希值 e:将消息 m 和联合值 r 结合,计算哈希值 e = H(m, r)。

  • 计算部分签名 𝑠𝑖:每个签名者计算部分签名 𝑠𝑖=𝑘𝑖+𝑥𝑖⋅𝑒𝑚𝑜𝑑𝑛

  • 汇总部分签名 𝑠:所有签名者将他们的部分签名相加得到联合签名 𝑠:


生成的联合签名为 (𝑒,𝑠)。

3.2.4.签名验证
  • 验证 r:通过联合公钥 y 和联合签名 (e, s) 计算 r'

𝑟′=𝑔𝑠⋅𝑦−𝑒

  • 计算哈希值 e':将消息 m 和计算得到的 r' 结合,计算哈希值 )𝑒′=𝐻(𝑚,𝑟′)。

  • 验证签名:如果 e' = e,则签名有效;否则签名无效。

3.2.5.优点
  • 提高安全性:基于有限单群的结构增加了破解难度。

  • 高效性:联合签名减少了签名长度和通信开销。

  • 灵活性:支持多方共同签名,提高了应用场景的灵活性和可扩展性。

3.2.6.应用

这种多重签名算法在分布式系统、区块链技术和需要多方共同认证的应用中非常有用,例如多重签名钱包、分布式密钥管理和共识协议等。

总的来说, 基于有限单群的 Schnorr 多重数字签名算法通过结合有限单群的复杂结构和多重签名机制,提供了强大的安全性和高效性,适用于现代分布式系统和密码学应用。

BLS 算法

BLS (Boneh-Lynn-Shacham) 签名算法是一种基于双线性配对(bilinear pairing)和椭圆曲线密码学的数字签名算法, 由Dan Boneh, Ben Lynn, 和 Hovav Shacham在2001年提出。BLS签名以其简洁、短签名和强安全性著称,被广泛应用于区块链和其他分布式系统中。

4.1 基本原理

BLS签名算法基于以下数学结构和问题:

双线性配对

给定两个椭圆曲线群 𝐺_1 和 𝐺_2 以及一个目标群 𝐺_𝑇,存在一个双线性映射 𝑒:𝐺_1×𝐺_2→𝐺_𝑇 满足:

  • 双线性性:e(aP, bQ) = e(P, Q)^{ab} 对所有 𝑃∈𝐺_1, 𝑄∈𝐺_2 和 𝑎,𝑏∈𝑍_𝑝。

  • 非退化性:如果 𝑃≠𝑂 且 ,则𝑄≠𝑂),则(𝑒(𝑃,𝑄)≠1。

  • 有效性:计算 𝑒(𝑃,𝑄) 在有限时间内是可行的。

4.2 算法步骤

系统参数生成

  • 选择一个大素数 𝑝。

  • 选择椭圆曲线 𝐸 定义在有限域 𝐹𝑝 上。

  • 选择群 𝐺1 的生成元 𝑃、G_2 的生成元 𝑄 和目标群 𝐺_𝑇 的生成元 𝑒(𝑃,𝑄)。

  • 定义双线性映射 𝑒:𝐺_1×𝐺_2→𝐺_𝑇。

密钥生成

  • 随机选择私钥 𝑥∈𝑍_𝑝。

  • 计算对应的公钥 𝑝𝑘=𝑠𝑘⋅𝑃,其中 𝑃 是 𝐺1中的一个生成元。。

签名生成

  • 给定消息 𝑚 和私钥 𝑠𝑘。

  • 计算消息的哈希值 𝐻(𝑚),其中 𝐻 是一个哈希函数,将消息映射到群 𝐺_1 中。

  • 计算签名 𝜎=𝑠𝑘⋅𝐻(𝑚)。

签名验证

  • 给定消息 𝑚、签名 𝜎 和公钥 𝑝𝑘。

  • 计算消息的哈希值 𝐻(𝑚)。

  • 验证 𝑒(𝜎,𝑃)=𝑒(𝐻(𝑚),𝑝𝑘),其中 𝑒 是双线性对映射。

4.3 特点和应用

  • 简洁性:BLS签名非常简洁,签名的大小固定且较小,只有一个群元素。

  • 效率:签名生成和验证的计算量相对较小,尤其是在签名长度较短的情况下。

  • 聚合签名:BLS签名具有天然的签名聚合(aggregate signature)特性,多个签名可以被聚合成一个签名,从而减少存储和传输的开销。这在区块链和分布式系统中尤为有用。

  • 多重签名:BLS也支持多重签名(multi-signature),多个用户可以共同签署同一消息,生成一个联合签名。

4.4 应用领域

BLS签名由于其高效性和灵活性,在许多领域中得到了广泛应用,特别是在区块链技术和分布式系统中,如Ethereum 2.0、Zcash、Algorand等。

4.5 总结

BLS签名算法通过使用双线性对,实现了高效且简洁的签名方案,具有签名聚合和多重签名等重要特性,使其在现代密码学和区块链技术中具有重要的应用价值。

4.6 go 代码实现

package mainimport ("crypto/rand""fmt""github.com/kilic/bls12-381""golang.org/x/crypto/blake2b"
)// GenerateKeyPair 生成私钥和公钥
func GenerateKeyPair() (*bls12381.Scalar, *bls12381.PointG1) {sk := bls12381.NewFr()sk.Rand(rand.Reader)pk := bls12381.NewG1().ScalarBaseMult(sk)return sk, pk
}// HashToG2 将消息哈希到G2
func HashToG2(msg []byte) *bls12381.PointG2 {hash := blake2b.Sum256(msg)return bls12381.NewG2().HashToCurve(hash[:])
}// Sign 生成消息的签名
func Sign(sk *bls12381.Scalar, msg []byte) *bls12381.PointG2 {hashPoint := HashToG2(msg)signature := bls12381.NewG2().ScalarMult(hashPoint, sk)return signature
}// Verify 验证签名
func Verify(pk *bls12381.PointG1, msg []byte, signature *bls12381.PointG2) bool {hashPoint := HashToG2(msg)engine := bls12381.NewEngine()engine.AddPair(pk, hashPoint)pairingLeft := engine.Result()engine.Reset()engine.AddPair(bls12381.NewG1().One(), signature)pairingRight := engine.Result()return pairingLeft.Equal(pairingRight)
}func main() {// 生成密钥对sk, pk := GenerateKeyPair()// 要签名的消息msg := []byte("Hello, BLS!")// 生成签名signature := Sign(sk, msg)// 验证签名isValid := Verify(pk, msg, signature)fmt.Printf("签名有效: %v\n", isValid)
}

 更多相关信息,,https://t.me/gtokentool

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

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

相关文章

C++类和对象 - 拷贝构造, 赋值重载

拷贝构造函数 拷贝构造作用&#xff1a;一个已经存在的对象去初始化另一个要创建的对象 日常写代码中会出现如下场景: class Data { public:Data(int year, int month, int day) // 拷贝构造函数{this->_year year;this->_month month;this->_day day;} priva…

为什么咨询公司需要项目管理软件:7大关键优势

在咨询公司中&#xff0c;同时管理多个项目、客户和目标并非易事&#xff0c;尤其需要兼顾长期发展。项目管理软件就成为了各类项目型企业&#xff08;包括咨询公司&#xff09;的重要工具。 对于顾问来说&#xff0c;项目管理软件可以简化工作流程、增强客户关系并提高效率。本…

3大核心技术,免费开源的智能合同审查分析软件的技术介绍

本智能合同审查分析系统致力于解决法律领域中复杂文档与信息处理的难题&#xff0c;采用最先进的深度学习与自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;提供精准的实体识别与关系抽取功能。系统基于BERT、GPT等主流模型&#xff0c;实现自动识别和关联法律文档中…

GitCode光引计划有奖征文大赛

一、活动介绍 GitCode平台汇聚了众多杰出的G-Star项目&#xff0c;它们犹如璀璨星辰&#xff0c;用各自的故事和成就&#xff0c;为后来者照亮前行的道路。我们诚邀广大开发者、项目维护者及爱好者&#xff0c;共同撰写并分享项目在GitCode平台上托管的体验&#xff0c;挖掘平…

UE4 Cook 从UAT传递参数给UE4Editor

需求 一句Cook的命令如下&#xff1a; ${EnginePath}/Engine/Build/BatchFiles/RunUAT.sh BuildCookRun -project${ClientPath}/${ProjectName}.uproject -noP4 -platformIOS -cooksinglepackage -client -clientconfig${CookConfig} -iterate -skipbuild -nocompile -NoMutex…

api驱动的云服务是什么意思?

API驱动的云服务是指利用API技术来驱动和提供云服务的模式。在这种模式下&#xff0c;云服务提供商会公开一系列的API接口&#xff0c;允许开发者或应用程序通过调用这些API来实现对云服务的访问和操作。API驱动的云服务是现代云计算技术的重要组成部分&#xff0c;API驱动的云…

Springboot 启动端口占用如何解决

Springboot 启动端口占用如何解决 1、报错信息如下 *************************** APPLICATION FAILED TO START ***************************Description:Web server failed to start. Port 9010 was already in use.Action:Identify and stop the process thats listening o…

【Rust调用Windows API】杀掉指定进程(包括兄弟进程、子进程、父进程)

前言 前面一篇文章写了使用Rust调用Windows API 获取正在运行的全部进程信息 &#xff0c;本篇实现杀掉指定进程。 通过标准库可以管理当前进程创建的子进程&#xff0c;要 kill 掉子进程也比较容易&#xff0c;这里不赘述了&#xff0c;主要实现通过调用Windows API来杀掉兄…

基于Python的外卖点餐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

世界坐标系、相机坐标系、图像物理坐标系、像素平面坐标系

坐标系及其转换在计算机视觉领域占据核心地位。理解如何从一个坐标系转换到另一个坐标系&#xff0c;不仅是理论上的需要&#xff0c;也是实际应用中不可或缺的技能。 一、世界坐标系的定义 世界坐标系是一个全局的坐标系统&#xff0c;用于定义场景中物体的位置。在这个坐标…

Pycharm也可以用来查看和操作MySQL数据库?

1.首先确保自己的电脑安装好MySQL MySQL :: Download MySQL Community Server 2.在创建project界面选择Open 打开并选择自己存放sql文件的路径 完成后的效果 3.创建好数据库的连接 4.打开Database视窗 5.给数据库添加新的Schema 6.运行需要查看或者操作的sql文件 7.选择适合的…

1、VMware12安装ubuntu18.04

1、ubuntu18地址获取&#xff1a; Index of /ubuntu-releases/18.04/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2、安装过程&#xff1a; 1、新建虚拟机 2、选择稍后安装操作系统 3.客户机操作系统选择Linux&#xff0c;版本选择Ubuntu 64位 4、点击“自定义…

数据结构查找-哈希表(创建+查找+删除)+(C语言代码)

#include<stdlib.h> #include<stdio.h> #include<stdbool.h> #define NULLKEY -1//单元为空 #define DELKEY -2//单元内容被删除 #define M 20 typedef struct {int key;//关键字int count;//统计哈希冲突探测次数 }HashTable; //插入到哈希表 void InsertHT…

基于Java的周次生成工具类实现

摘要&#xff1a; 本文介绍了一个基于Java的周次生成工具&#xff0c;用于根据指定的年份和周次类型&#xff08;自然周或财务周&#xff09;生成连续的周次列表数据。 需求描述&#xff1a; 根据周次类型&#xff0c;生成连续的周次列表数据。 周次类型分2种&#xff1a; …

为什么华大严选基因是您的最佳选择?品牌特色全解析

《为什么华大严选基因是您的最佳选择&#xff1f;品牌特色全解析》 在当今基因检测市场竞争激烈的环境下&#xff0c;华大严选基因以其卓越的品质和独特的品牌特色脱颖而出&#xff0c;成为众多消费者的首选。作为 DNA 基因检测行业十佳优质品牌和 3・15 重点推荐品牌&#xff…

中仕公考怎么样?国考有三不限岗位吗?

国考有三不限岗位吗? “三不限”岗位&#xff0c;即不限制专业、学历和户籍的岗位。国考中几乎没有“三不限”岗位。因为公务员国考的报考条件通常较为严格&#xff0c;尤其是不限制条件的职位更少见&#xff0c;所以国考中一般是没有三不限岗位的。 与省考公务员不同的是&a…

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III

Day44 | 动态规划 &#xff1a;状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III&&309.买卖股票的最佳时机含冷冻期 动态规划应该如何学习&#xff1f;-CSDN博客 本次题解参考自灵神的做法&#xff0c;大家也多多支持灵神的题解 买卖股票的最佳时机【…

inode,请别忽视它!

在Linux文件系统中&#xff0c;inode 是一个不可忽视的核心概念。它不仅是文件系统运行的基石&#xff0c;还在内核、应用程序以及驱动程序开发中扮演着重要角色。如果你曾对文件的底层运作感到困惑&#xff0c;或者在面试中遇到文件系统相关问题&#xff0c;那么理解inode绝对…

x-cmd pkg | howdoi - 无需打开浏览器,轻松搜索编程问题的解决方案

目录 简介首次用户技术特点竞品和相关项目进一步阅读 简介 howdoi 一个在终端中查找编程问题的命令行工具和 python 库&#xff0c;可用于从 Stack Overflow 等编程社区获取搜索问题的答案&#xff0c;并将它们以代码片段的形式显示在命令行中。 首次用户 本文提供了一个dem…

实测运行容器化Tomcat服务器

文章目录 前言一、拉取Tomcat 9.0镜像二、运行容器化Tomcat服务器三、访问Tomcat官网首页测试 总结 前言 运行容器化Tomcat服务器&#xff0c;首先确保正确安装docker&#xff0c;并且已启动运行&#xff0c;具体安装docker方法见笔者前面的博文《OpenEuler 下 Docker 安装、配…