Skip to content

Commit

Permalink
X meal-1
Browse files Browse the repository at this point in the history
  • Loading branch information
NashAiomos committed Feb 7, 2024
1 parent b5903b2 commit d506934
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 14 deletions.
12 changes: 6 additions & 6 deletions 8.IC里的密码学/BLS签名.html
Original file line number Diff line number Diff line change
Expand Up @@ -239,12 +239,12 @@ <h2 id="bls签名"><a class="header" href="#bls签名">BLS签名</a></h2>
当然还有其他性质,但是对于我们用来验证签名,主要用到以上性质。</p>
<br>
<p>BLS 签名的安全性建立在双线性对计算困难问题(bilinear Diffie-Hellman problem)的基础之上。它只需要两次群运算就可以完成签名和验证,效率很高。同时它还具有短签名、随机签名等优点。</p>
<p>BLS 支持简单的签名聚合:多个 BLS 签名可以通过群运算聚合成一个短签名。验证时对聚合签名做配对检验。</p>
<p>BLS 支持简单的签名聚合:几个 BLS 签名可以通过群运算聚合成一个短签名。验证时对聚合签名做配对检验。</p>
<p>有了单个签名,我们再来看下聚合签名。</p>
<br>
<h2 id="bls聚合签名"><a class="header" href="#bls聚合签名">BLS聚合签名</a></h2>
<h2 id="bls阈值签名"><a class="header" href="#bls阈值签名">BLS阈值签名</a></h2>
<p>区块链系统中,签名验证是一个非常重要也比较频繁的运算。为了确保安全,每个交易输入通常都需要一个签名来进行验证。但对于多方合作的场景,比如多签地址,这会导致交易大小急剧增长,并降低处理效率。</p>
<p>为了解决这个问题,研究人员提出了 BLS 多签名方案。BLS 签名是一种非常高效的数字签名方式,它基于双线性配对原理,只需要很短的签名即可确保安全。而 BLS 多签名方案在此基础上,通过一定的密码学技巧,可以将多个 BLS 签名聚合成一个,从而大大缩减存储和传输成本。</p>
<p>为了解决这个问题,研究人员提出了 BLS 阈值签名方案。BLS 签名是一种非常高效的数字签名方式,它基于双线性配对原理,只需要很短的签名即可确保安全。而 BLS 阈值签名方案在此基础上,可以将多个 BLS 签名聚合成一个,从而大大缩减存储和传输成本。</p>
<br>
<p>BLS 阈值签名如何工作呢?先简单回顾一下 BLS 签名本身的原理。它需要以下参数:一个双线性配对函数,两个循环群 G1 和 G0 ,G1 的生成元 P ,以及一个散列函数 H 。密钥生成是随机选择一个数字 sk ,计算公钥 pk=sk*P 。签名是对消息计算散列 H(m) ,然后计算签名 σ = sk * H(m) 。验证就是检验配对关系 e(P, σ) = e(pk, H(m)) 是否成立。</p>
<br>
Expand All @@ -260,8 +260,8 @@ <h2 id="bls聚合签名"><a class="header" href="#bls聚合签名">BLS聚合签
$$
这样只需要 2 个配对运算。这就是 BLS 签名聚合的优势所在。</p>
<br>
<p>但是直接聚合签名是不安全的,会存在 “ 恶意公钥 ” 攻击的风险。为了解决这个问题,BLS 多签名加入了一个新散列函数 H1 。这个散列函数输入是所有参与签名用户的公钥,输出是每个用户一个 “ 权重 ” 。在生成聚合签名时,每个用户的签名都要以其权重作为指数幂,才能计算出安全的聚合签名。关键思路是对每个公钥引入一个随机指数,这些指数由所有公钥的散列值决定。</p>
<p>验证时也是类似,重新计算出每个用户的权重,将公钥按权重聚合,与普通 BLS 签名验证流程一致。因此验证一个多签名与单签效率是相同的。这种机制可以有效防止恶意公钥攻击,每个用户签名的贡献是精确控制的。</p>
<p>但是直接聚合签名是不安全的,会存在 “ 恶意公钥 ” 攻击的风险。为了解决这个问题,BLS 阈值签名加入了一个新散列函数 H1 。这个散列函数输入是所有参与签名用户的公钥,输出是每个用户一个 “ 权重 ” 。在生成聚合签名时,每个用户的签名都要以其权重作为指数幂,才能计算出安全的聚合签名。关键思路是对每个公钥引入一个随机指数,这些指数由所有公钥的散列值决定。</p>
<p>验证时也是类似,重新计算出每个用户的权重,将公钥按权重聚合,与普通 BLS 签名验证流程一致。因此验证多个签名与单签效率是相同的。这种机制可以有效防止恶意公钥攻击,每个用户签名的贡献是精确控制的。</p>
<ol>
<li>生成密钥对 \((sk, pk=g1^sk)\) 。</li>
<li>对消息 \(m\) 签名,输出 \(σ = H(m)^sk\) 。</li>
Expand All @@ -270,7 +270,7 @@ <h2 id="bls聚合签名"><a class="header" href="#bls聚合签名">BLS聚合签
<li>验证时,计算 \((t_{1},...,t_{n}) = H1(pk_{1},...,pk_{n})\) ,并计算聚合公钥 \(apk = pk_{1}^{t_{1}} * ... * pk_{n}^{t_{n}}\) 。</li>
<li>检查 \(e(g_{1}, σ) = e(apk, H(m))\) ,等式成立即验证成功。</li>
</ol>
<p>这个方案能防止公钥替换攻击,理论上也是安全的,基于 co-CDH 问题的难度假设。该方案保留了 BLS 签名聚合的优势,同时也不需要证明私钥知识。因此这是 BLS 多签名一个很好的改进方案</p>
<p>这个方案能防止公钥替换攻击,理论上也是安全的,基于 co-CDH 问题的难度假设。该方案保留了 BLS 签名聚合的优势,同时也不需要证明私钥知识。因此这是 BLS 阈值签名一个很好的改进方案</p>
<br>
<p>BLS 阈值签名机制非常适合区块链系统。它不仅可以缩小交易大小,节省存储空间,还兼容交易批量验证,可以进一步提升处理性能。BLS 阈值签名可以非交互式聚合,更具有灵活性。未来如果搭配聚合公钥证明 (POP) 使用,可以完全隐藏用户的公钥信息。</p>
<p>随着区块链进入大规模商用的新阶段,各种效率和隐私技术会越来越重要。BLS 阈值签名为我们提供了一个非常实用的工具。</p>
Expand Down
12 changes: 6 additions & 6 deletions print.html
Original file line number Diff line number Diff line change
Expand Up @@ -4746,12 +4746,12 @@ <h2 id="bls签名-1"><a class="header" href="#bls签名-1">BLS签名</a></h2>
当然还有其他性质,但是对于我们用来验证签名,主要用到以上性质。</p>
<br>
<p>BLS 签名的安全性建立在双线性对计算困难问题(bilinear Diffie-Hellman problem)的基础之上。它只需要两次群运算就可以完成签名和验证,效率很高。同时它还具有短签名、随机签名等优点。</p>
<p>BLS 支持简单的签名聚合:多个 BLS 签名可以通过群运算聚合成一个短签名。验证时对聚合签名做配对检验。</p>
<p>BLS 支持简单的签名聚合:几个 BLS 签名可以通过群运算聚合成一个短签名。验证时对聚合签名做配对检验。</p>
<p>有了单个签名,我们再来看下聚合签名。</p>
<br>
<h2 id="bls聚合签名"><a class="header" href="#bls聚合签名">BLS聚合签名</a></h2>
<h2 id="bls阈值签名-2"><a class="header" href="#bls阈值签名-2">BLS阈值签名</a></h2>
<p>区块链系统中,签名验证是一个非常重要也比较频繁的运算。为了确保安全,每个交易输入通常都需要一个签名来进行验证。但对于多方合作的场景,比如多签地址,这会导致交易大小急剧增长,并降低处理效率。</p>
<p>为了解决这个问题,研究人员提出了 BLS 多签名方案。BLS 签名是一种非常高效的数字签名方式,它基于双线性配对原理,只需要很短的签名即可确保安全。而 BLS 多签名方案在此基础上,通过一定的密码学技巧,可以将多个 BLS 签名聚合成一个,从而大大缩减存储和传输成本。</p>
<p>为了解决这个问题,研究人员提出了 BLS 阈值签名方案。BLS 签名是一种非常高效的数字签名方式,它基于双线性配对原理,只需要很短的签名即可确保安全。而 BLS 阈值签名方案在此基础上,可以将多个 BLS 签名聚合成一个,从而大大缩减存储和传输成本。</p>
<br>
<p>BLS 阈值签名如何工作呢?先简单回顾一下 BLS 签名本身的原理。它需要以下参数:一个双线性配对函数,两个循环群 G1 和 G0 ,G1 的生成元 P ,以及一个散列函数 H 。密钥生成是随机选择一个数字 sk ,计算公钥 pk=sk*P 。签名是对消息计算散列 H(m) ,然后计算签名 σ = sk * H(m) 。验证就是检验配对关系 e(P, σ) = e(pk, H(m)) 是否成立。</p>
<br>
Expand All @@ -4767,8 +4767,8 @@ <h2 id="bls聚合签名"><a class="header" href="#bls聚合签名">BLS聚合签
$$
这样只需要 2 个配对运算。这就是 BLS 签名聚合的优势所在。</p>
<br>
<p>但是直接聚合签名是不安全的,会存在 “ 恶意公钥 ” 攻击的风险。为了解决这个问题,BLS 多签名加入了一个新散列函数 H1 。这个散列函数输入是所有参与签名用户的公钥,输出是每个用户一个 “ 权重 ” 。在生成聚合签名时,每个用户的签名都要以其权重作为指数幂,才能计算出安全的聚合签名。关键思路是对每个公钥引入一个随机指数,这些指数由所有公钥的散列值决定。</p>
<p>验证时也是类似,重新计算出每个用户的权重,将公钥按权重聚合,与普通 BLS 签名验证流程一致。因此验证一个多签名与单签效率是相同的。这种机制可以有效防止恶意公钥攻击,每个用户签名的贡献是精确控制的。</p>
<p>但是直接聚合签名是不安全的,会存在 “ 恶意公钥 ” 攻击的风险。为了解决这个问题,BLS 阈值签名加入了一个新散列函数 H1 。这个散列函数输入是所有参与签名用户的公钥,输出是每个用户一个 “ 权重 ” 。在生成聚合签名时,每个用户的签名都要以其权重作为指数幂,才能计算出安全的聚合签名。关键思路是对每个公钥引入一个随机指数,这些指数由所有公钥的散列值决定。</p>
<p>验证时也是类似,重新计算出每个用户的权重,将公钥按权重聚合,与普通 BLS 签名验证流程一致。因此验证多个签名与单签效率是相同的。这种机制可以有效防止恶意公钥攻击,每个用户签名的贡献是精确控制的。</p>
<ol>
<li>生成密钥对 \((sk, pk=g1^sk)\) 。</li>
<li>对消息 \(m\) 签名,输出 \(σ = H(m)^sk\) 。</li>
Expand All @@ -4777,7 +4777,7 @@ <h2 id="bls聚合签名"><a class="header" href="#bls聚合签名">BLS聚合签
<li>验证时,计算 \((t_{1},...,t_{n}) = H1(pk_{1},...,pk_{n})\) ,并计算聚合公钥 \(apk = pk_{1}^{t_{1}} * ... * pk_{n}^{t_{n}}\) 。</li>
<li>检查 \(e(g_{1}, σ) = e(apk, H(m))\) ,等式成立即验证成功。</li>
</ol>
<p>这个方案能防止公钥替换攻击,理论上也是安全的,基于 co-CDH 问题的难度假设。该方案保留了 BLS 签名聚合的优势,同时也不需要证明私钥知识。因此这是 BLS 多签名一个很好的改进方案。</p>
<p>这个方案能防止公钥替换攻击,理论上也是安全的,基于 co-CDH 问题的难度假设。该方案保留了 BLS 签名聚合的优势,同时也不需要证明私钥知识。因此这是 BLS 阈值签名一个很好的改进方案。</p>
<br>
<p>BLS 阈值签名机制非常适合区块链系统。它不仅可以缩小交易大小,节省存储空间,还兼容交易批量验证,可以进一步提升处理性能。BLS 阈值签名可以非交互式聚合,更具有灵活性。未来如果搭配聚合公钥证明 (POP) 使用,可以完全隐藏用户的公钥信息。</p>
<p>随着区块链进入大规模商用的新阶段,各种效率和隐私技术会越来越重要。BLS 阈值签名为我们提供了一个非常实用的工具。</p>
Expand Down
2 changes: 1 addition & 1 deletion searchindex.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion searchindex.json

Large diffs are not rendered by default.

0 comments on commit d506934

Please sign in to comment.