BLS签名中与0相关的漏洞

这篇具有很好参考价值的文章主要介绍了BLS签名中与0相关的漏洞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在密码中最有趣的数字是什么?

当然是0

因为0乘以万物都等于0

本文章主要讨论BLS签名中与0相关的漏洞(PS:本文最后简单回顾下BLS签名和BLS聚合签名)

1. Rogue public key attack

假设Alice的私钥为 1 _1 1,其公钥为 X 1 = x 1 ⋅ P 1 ∈ G 1 X_1 = x_1 \cdot P_1 \in G_1 X1=x1P1G1

攻击者Bob可公开他的公钥为 X 2 = x 2 P 1 − X 1 X_2 = x_2P_1 -X_1 X2=x2P1X1 和其签名消息 δ = x 2 H ( m ) \delta = x_2H(m) δ=x2H(m)

尽管Alice没有进行签名,但大家相信这个签名来自Alice和Bob的聚合签名

因为 e ( P 1 , δ ) = e ( P 1 , x 2 H ( m ) ) = e ( x 1 + x 2 , H ( m ) ) e(P_1,\delta) = e(P_1,x_2H(m)) = e(x_1+x_2,H(m)) e(P1,δ)=e(P1,x2H(m))=e(x1+x2,H(m))

3种行之有效的办法阻止这种攻击:

  1. 在验证聚合签名的时候,要求签名消息 m 1 , . . . , m n m_1,...,m_n m1,...,mn不同(个人感觉这个方法比较鸡肋)
  2. 签名的时候要求不能单单对消息签名,要对消息和公钥的级联( m i ∣ ∣ X i m_i || X_i mi∣∣Xi)进行整体签名
  3. 要求签名者提供一个证明来证明他知道私钥,即 P o p P r o v e ( x i ) = Y i = x i ⋅ H ′ ( x i ) PopProve(x_i) = Y_i = x_i \cdot H'(x_i) PopProve(xi)=Yi=xiH(xi) H ′ H' H是另一个哈希函数,验证者首先通过 P o p V e r i f y ( Y i ) PopVerify(Y_i) PopVerify(Yi)验证 e ( X i , H ′ ( X i ) ) = ? e ( P i , Y i ) e(X_i,H'(X_i)) =? e(P_i,Y_i) e(Xi,H(Xi))=?e(Pi,Yi),然后再验证签名 e ( P 1 , δ ) = ? e ( X 1 + . . . + X n , H ( m ) ) e(P_1,\delta) =? e(X_1+...+X_n,H(m)) e(P1,δ)=?e(X1+...+Xn,H(m))
2. Zero bug

如果我们将私钥设为 0 0 0 ,则最后的公钥、签名都为0,且对任何消息的签名都能验证通过

最有效的办法是验证签名的时候校验公钥是不是为0 ,如果公钥是以byte形式出现,那也应该先把它转换成坐标点再校验

3. ”Splitting zero” attack

虽然在签名验证的时候通过校验公钥是不是为0来阻止“Zero Bug”,但有没有一种可能:

X 1 ≠ 0 , X 2 ≠ 0 , δ 0 ≠ 0 , δ 1 ≠ 1 X_1 \neq 0,X_2 \neq 0,\delta_0 \neq 0,\delta_1 \neq 1 X1=0,X2=0,δ0=0,δ1=1,但是 X 1 + X 2 = 0 , δ 1 + δ 2 = 0 X_1+X_2 =0,\delta_1 + \delta_2 =0 X1+X2=0,δ1+δ2=0

以上面为目标,我们来假设一种攻击情景,Alice用它的私钥对消息 m 3 m_3 m3 进行签名,其签名为 δ 3 \delta_3 δ3, 现在攻击者的目标是使验证者相信 δ 3 \delta_3 δ3 是对消息 ( m , m , m 3 ) (m,m,m_3) (m,m,m3)的签名,尽管Alice至始至终没有对消息m签名,攻击者构造如下

  • 随机选择 x 1 x_1 x1作为私钥,其公钥为 X 1 = x 1 ⋅ P X_1=x_1 \cdot P X1=x1P
  • x 2 = − x 1 x_2= - x_1 x2=x1,其公钥为 X 2 = x 2 ⋅ P X_2=x_2 \cdot P X2=x2P

首先 X 1 , X 2 X_1,X_2 X1,X2均不为0,其次 ( x 1 , X 1 ) ( x 2 , X 2 ) (x_1,X_1)(x_2,X_2) (x1,X1)(x2,X2)是合法公钥,能通过PopVerif校验

最后 x 1 + x 2 = 0 x_1+x_2 =0 x1+x2=0,因此 X 1 + X 2 = 0 X_1+X_2 =0 X1+X2=0 δ 1 + δ 2 = x 1 H ( m ) + x 2 H ( m ) = 0 \delta_1+\delta_2 =x_1H(m)+x_2H(m) =0 δ1+δ2=x1H(m)+x2H(m)=0

因此最后的聚合签名 δ = δ 1 + δ 2 + δ 3 = δ 3 \delta = \delta_1+\delta_2+\delta_3 = \delta_3 δ=δ1+δ2+δ3=δ3是有效的

BLS签名:

假设Alice的私钥为 x x x,其公钥为 X = x ⋅ P 1 ∈ G 1 X = x \cdot P_1 \in G_1 X=xP1G1

H H H是哈希函数,能够将消息映射到 G 2 G_2 G2

对消息 m m m,Alice的签名为 δ = x ⋅ H ( m ) \delta = x \cdot H(m) δ=xH(m)

签名验证为 e ( P 1 , δ ) = ? e ( X , H ( m ) ) e(P_1,\delta) =? e(X,H(m)) e(P1,δ)=?e(X,H(m))

BLS聚合签名:

假设有 n n n方,其公私钥对为 x i , X i = x i ⋅ P 1 x_i,X_i= x_i \cdot P_1 xi,Xi=xiP1

每个用户对其消息 m i m_i mi的签名为 δ i = x i ⋅ H ( m i ) \delta_i = x_i \cdot H(m_i) δi=xiH(mi)

最后聚合签名为 δ = ∑ δ i \delta = \sum \delta_i δ=δi

聚合验证为 e ( P 1 , δ ) = ? e ( X 1 , H ( m 1 ) ) . . . e ( X n , H ( m n ) ) e(P_1,\delta) =? e(X_1,H(m_1)) ...e(X_n,H(m_n)) e(P1,δ)=?e(X1,H(m1))...e(Xn,H(mn))

参考:

https://eprint.iacr.org/2021/323.pdf文章来源地址https://www.toymoban.com/news/detail-400423.html

到了这里,关于BLS签名中与0相关的漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    Edwards曲线数字签名算法(Edwards-curve Digital Signature Alogorithm, edDSA)由Daniel J. Bernstein等人在2011年提出,它是一种使用基于扭曲爱德华兹曲线的Schnorr签名变体的数字签名方案。 EdDSA的一个特殊之处在于,该方案不要求每次签名都是用全新的随机数,而且该算法是确定性的。 EdDSA不直

    2024年02月16日
    浏览(46)
  • Web应用JSON数据保护(密码算法、密钥、数字签名和数据加密)

    1.JSON(JavaScript Object Notation) JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。JSON通过简单的key-value键值对来描述数据,可以被广泛用于网络通信、数据存储等各种应用场景,被广泛应用于互联网前后端数据交互与传输之中。 例如,

    2024年03月23日
    浏览(39)
  • SM2椭圆曲线公钥密码算法--密钥对与数字签名

    SM2算法全称是SM2椭圆曲线公钥密码算法(SM是商用密码的拼音缩写),是一种基于“椭圆曲线”的密码ECC(Elliptic Curve Cryptography)。2016年,SM2成为中国国家密码标准。 在商用密码体系中,SM2主要用于替换RSA加密算法。 SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于

    2024年02月11日
    浏览(43)
  • 商用密码应用与安全性评估要点笔记(SM9数字签名算法)

    1、SM9标识密码算法简介         首先有几个概念需要弄清楚:         (1)标识identity,可以唯一确定一个实体身份的信息,且实体无法否认。比如身份证号、手机号、邮箱等。         (2)主密钥master key MK,密码分层结构中最顶层的密钥,这里是非对称密钥就包括主私

    2024年02月05日
    浏览(43)
  • 商用密码应用与安全性评估要点笔记(SM2数字签名算法)

    1、SM2算法简介         SM2密码算法是我国2010年发布的商用密码算法,属于公钥密码算法,也成为非对称密钥机制密码算法。SM2基于椭圆曲线离散对数问题,相对于RSA基于大整数因数分解更具优越性。         SM2算法于2012年成为我国密码行业标准,并于2017年被ISO采纳,成为

    2024年02月09日
    浏览(49)
  • Linux中与“系统内存”相关的内核数据结构

    【摘要】本文讲述了在Linux中与系统内存相关的内核数据结构,通过逐行分析源代码讲述了内存数据结构之间的关联。 7.1 mm_struct 指向进程所拥有的内存描述符,保存了进程的内存管理信息 7.2 vm_area_struct 进程虚拟内存的每个区域表示为 struct vm_area_struct 的一个实例。 vm_flags是

    2024年02月04日
    浏览(37)
  • React 中与生命周期相关的 Hooks 及其使用示例

    React 16.8 引入了 Hooks 的概念,使得函数组件也可以使用 state 和生命周期等特性。与生命周期相关的 Hooks 主要有以下三个: useEffect useEffect 是最常用的一个 Hook,它可以用来替代 class 组件中的 componentDidMount、componentDidUpdate 和 componentWillUnmount 这三个生命周期函数。useEffect 的作

    2024年04月14日
    浏览(31)
  • nginx(七十二)nginx中与cookie相关的细节探讨

    背景知识铺垫 一   nginx中与cookie相关 ①  Cookie 请求头内容 回顾  cookie的形式和属性 ②   nginx获取cookie值的两种方法 ③    nginx对Cookie请求头限制 client_header_buffer_size 相关参考 除了下划线,nginx还可能丢弃哪些请求头      ③  nginx对上游Set-Cookies响应头属性的处理 proxy_coo

    2024年02月02日
    浏览(33)
  • Java类库中与Camera View框架相关的最佳实践指南

    使用SimpleHttpServer框架进行Java类库的网络测试和调试 原文:使用SimpleHttpServer框架进行Java类库的网络测试和调试 (techdatafuture.com)          简介:     SimpleHttpServer是一个基于Java的简单HTTP服务器框架,能够帮助开发人员进行Java类库的网络测试和调试。它提供了简单易用的

    2024年02月11日
    浏览(40)
  • Linux gpg命令(gpg指令、gpg加密工具)(GNU Privacy Guard、GnuPG)文件压缩加密、文件加密、文件解密、文件压缩密码、解压密码、GPG密钥、数字签名、非对称加密

    GNU Privacy Guard (GnuPG或GPG) 是一个完全免费的开源实现,用于OpenPGP标准的数据加密和解密。这种加密方式可以用于保护敏感数据,确保其在传输过程中不被截获或篡改。本文将介绍在Linux环境中如何使用GPG加密工具。 安装gpg 在大多数Linux发行版中,GPG已经预先安装了。 如果未安

    2024年02月03日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包