BLS12-381 and BLS Signatures

2023-11-22 12:20
文章标签 381 bls signatures bls12

本文主要是介绍BLS12-381 and BLS Signatures,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BLS12-381 and BLS Signatures

椭 圆曲线密码算法具有密钥短的优点,为了达到128 bit的安全水平,NIST (美国国家标准与技术研究院)推荐使用 3072 bit 的RSA密钥 ,而椭圆曲线密码算法仅需要256 bit就能达到同等安全强度,这使得密钥长度大大缩短,因而大受欢迎。

一. BLS12-381简介

BLS12-381是Pairing-Friendly的椭圆曲线,Pairing-Friendly的椭圆曲线要满足两点:1.具有大素数阶子群;2.嵌入次数要小。BLS12-381就满足以上两种性质,BLS12-381 名称中的 12是指嵌入次数 ,381是指模数

请添加图片描述

二. bilinear pairing

​ 令G1和G2分别为加法群,GT是乘法群,一个双线性对 e 就是一个从$G_1* G_2 $到 GT 的双线性映射,并满足下面性质

  • 双线性:设 g 1 ∈ G 1 , g 2 ∈ G 2 g_1\in G_1,g_2 \in G_2 g1G1,g2G2 有$e(g_1a,g_2b) =e(g_1,g_2)^{ab} $
  • 非退化性:存在 g 1 ∈ G 1 , g 2 ∈ G 2 g_1\in G_1,g_2 \in G_2 g1G1,g2G2,使得 e ( g 1 , g 2 ) ≠ 1 e(g_1,g_2)\neq 1 e(g1,g2)=1
  • 可计算性:存在有效算法可以计算 e

并不是所有椭圆曲线都可以实现上面的bilinear pairing,我们把能实现 bilinear pairing的椭圆曲线,称为Pairing-Friendly Curves。Pairing-Friendly Curves 主要有两类: BN 曲线和BLS 曲线

三. BLS签名

BLS 签名方案于2001年提出,BLS签名除了正常签名之外,还可以实现签名聚合,以减少通信开销和加快签名验证。BLS 签名可以基于BLS12-381曲线实现,需要说明的是BLS签名比 BLS 曲线提出时间要早,其中BLS都是三个人名的简写,但BLS签名和BLS曲线中只有L是同一个人,B和S都是不同的人,只是恰巧简写一样而已。

BLS 签名算法是基于双线性映射构造的一种加密算法,算法如下:

  • 生成密钥:生成私钥k,计算公钥 P=kG
  • 签名生成:对消息 m ,将其映射到曲线上的一个点,记为H,签名 S = kH
  • 签名验证 e ( P , H ) = ? e ( G , S ) e(P,H) =? e(G,S) e(P,H)=?e(G,S)
四. BLS聚合

BLS聚合签名简单分为一下三类

  • 对不同一消息签名的聚合

  • 对同一消息签名的n-n聚合(即n-n多重签名)

  • 对同一消息签名的m-n聚合(即m-n多重签名)

4.1 对不同消息签名的聚合
  • 生成密钥:每一个用户生成私钥ki,计算公钥 Pi=kiG

  • 签名生成:对消息mi ,将其映射到曲线上的一个点,记为Hi, Si = kiHi

  • 签名聚合 S = ∑ S i S = \sum S_i S=Si

  • 聚合验证 e ( G , S ) = ? ∏ e ( P i , H i ) e(G,S) =? \prod e(P_i,H_i) e(G,S)=?e(Pi,Hi)

4.2 对同一消息签名的n-n聚合: 设签名消息为 m ,将其映射到曲线上的一个点,记为H
  • 生成密钥:对每一个用户生成私钥ki,计算公钥 Pi=kiG
  • 签名生成: Si = kiH
  • 签名聚合 S = ∑ S i S = \sum S_i S=Si
  • 聚合验证 e ( G , S ) = ? e ( ∑ P i , H ) e(G,S) =? e(\sum P_i,H) e(G,S)=?e(Pi,H)

上述聚合看似完美,但存在rogue-key attacks,举个例子: 用户1的公钥为P1 ,用户2的公钥为P2,但用户2对外宣称其公钥为P‘ = p1 -P2,最后用户2可以制造用户1和用户2的聚合签名,有以下两种方式可以防止rogue-key attacks

  • 要求每个签名者证明它拥有公钥对应的私钥

  • 加入非线性系数:使得P = a1×P1+a2×P2+a3×P3

下面介绍使用一种使用非线性系数来抵抗rogue-key attacks的算法

  • 生成密钥:每一个用户生成私钥ki,计算公钥 Pi=kiG
  • 签名生成: Si = ki * h(Pi) * H //h: 哈希算法,将点哈希到标量
  • 签名聚合 S = ∑ S i S = \sum S_i S=Si
  • 聚合验证 e ( G , S ) = ? e ( ∑ h ( P i ) P i , H ) e(G,S) =? e(\sum h(P_i) P_i,H) e(G,S)=?e(h(Pi)Pi,H)
4.3对同一消息签名的t-n聚合(即t-n多重签名)
  • 生成密钥:每一个用户生成私钥ki,计算公钥 Pi=kiG
  • 公钥聚合: a p k = ∑ H 1 ( p i ) ⋅ p i apk = \sum {H_1(p_i)}· p_i apk=H1(pi)pi // H1: 哈希到标量,H2 哈希到点
  • 计算成员私钥: m k i = ∑ j = 0 n U i , j , U i , j = K j ⋅ H 1 ( P j ) ⋅ H 2 ( a p k , i ) mk_i = \sum_{j=0}^{n} U_{i,j}, U_{i,j} = K_j·H_1(P_j)·H_2(apk,i) mki=j=0nUi,j,Ui,j=KjH1(Pj)H2(apk,i) , U i , j U_{i,j} Ui,j 为第j个用户计算发第i个用户的
  • 成员密钥验证: e ( G , m k i ) = ? e ( a p k , H 2 ( a p k , i ) ) e(G,mk_i) =? e(apk,H_2(apk,i)) e(G,mki)=?e(apk,H2(apk,i)), 通过此验证可确保成员密钥的正确性
  • 签名生成:设签名人数为t,其构成的集合为W,t个人分别计算签名 S i = k i ⋅ H 2 ( a p k , m ) + m k i S_i = k_i·H_2(apk,m) + mk_i Si=kiH2(apk,m)+mki
  • 聚合验证: 令 P w = ∑ i ∈ W P i P_w = \sum_{i\in W} P_i Pw=iWPi , S w = ∑ i ∈ W S i S_w = \sum_{i\in W}S_i Sw=iWSi ,验证 e ( H 2 ( a p k , m ) , P w ) ⋅ e ( ∑ i ∈ W ( H 2 ( a p k , i ) , a p k ) ) = e ( S w , G ) e(H_2(apk,m),P_w)·e(\sum_{i\in W}(H_2(apk,i),apk)) = e(S_w,G) e(H2(apk,m),Pw)e(iW(H2(apk,i),apk))=e(Sw,G)

这篇关于BLS12-381 and BLS Signatures的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410092

相关文章

20170723 做的事 ecdsa的签名验证时间短于bls signature

1 今天在虚拟机 /home/smile/Desktop/20170610/Test//time_ecdsa 文件夹下,找到ecdsa的验证时间是 989.060606μs μs 先 make ,然后run。 再取BLS的签名生成时间: ./run  2  gnuplot 画图,画对比的时间 gnuplot 画图参考教程 http://blog.sciencen

solidity上实现BLS签名机制

原文地址:https://ethereum.stackexchange.com/questions/59293/does-ethereum-support-pairing-operations BLS签名机制说明:http://www.ymcall.com/artinfo/698628886830280666.html   pragma solidity ^0.4.14;/*Exampl

Broad Learning System (BLS) 宽度学习系统

宽度学习(Broad Learning System, BLS)是一种有效的神经网络学习框架,旨在通过扩展网络的宽度而不是深度来提高学习能力和效率。与传统的深度学习相比,宽度学习通过堆叠多层特征节点和增强节点来构建网络,从而避免了深度学习中常见的梯度消失和复杂的训练过程。 BLS结构以及增量算法          宽度学习系统在 RVFLNN 基础上做出了改进。首先,宽度学

密码学系列5-BLS短签名和存在不可伪造性(EUF-CMA)

本章将给出BLS短签名方案和方案的安全性证明。这个方案是很多签名方案的基础方案,学会这一个方案,也就学会了这一系列方案的安全性证明。 注:签名方案:私钥签名,公钥验证;加密方案:公钥加密,私钥解密。 论文名:Short signatures from the Weil pairing 一、BLS短签名 密钥生成 1.选择参数 q q q,定义哈希函数 H : { 0 , 1

LeetCode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复(链表,哈希套哈希)

思路: 这道题:“LeetCode380. 常数时间插入、删除和获取随机元素”的加强版。 同样的用 v e c t o r vector vector加哈希记录每个值的位置。因为可能出现重复的元素,所以我们用哈希套哈希,来记录这个值对应所有出现的位置。 class RandomizedCollection {private:vector<int>vec;unordered_map<int,

第一次机房收费系统—实时错误“381”下标越限

一、实时错误 二、问题原因 这是容器太小了,无法存放我们的数据了,也就是我们原先所设的MSHFlexgrid控件的行数或列数的最大值,小于我们现在要用到的行数或列数。 三、解决方法 ①右键单击名为myflexgrid的MSHFlexgrid控件→选择“属性” ②修改列数至满足所需的最少数 补充:如果依然报错,就要看你的代码了,你的代码是否是这样的: 首先我们要明白在这个位置“+”与“

BLS综述

BLS综述 宽度学习基础RBLS&GBLSConvolutional BLSWeighted BLSFuzzy BLSMultiview BLSManifold LearningEnsemble Learning BLS从2017年被陈俊龙教授提出后,发展时间不长且未被广泛使用,参考 《Research Review for Broad Learning System: Algor

【哈希映射】【 哈希集合】 381. O(1) 时间插入、删除和获取随机元素 - 允许重复

作者推荐 视频算法专题 本文涉及知识点 哈希映射 哈希集合 LeetCode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复 RandomizedCollection 是一种包含数字集合(可能是重复的)的数据结构。它应该支持插入和删除特定元素,以及删除随机元素。 实现 RandomizedCollection 类: RandomizedCollection()初始化空的

381. 有线电视网络(网络流,最小割,《算法竞赛进阶指南》)

381. 有线电视网络 - AcWing题库 给定一张 n 个点 m 条边的无向图,求最少去掉多少个点,可以使图不连通。 如果不管去掉多少个点,都无法使原图不连通,则直接返回 n。 输入格式 输入包含多组测试数据。 每组数据占一行,首先包含两个整数 n 和 m,接下来包含 m 对形如 (x,y) 的数对,形容点 x 与点 y 之间有一条边。 数对 (x,y) 中间不会包含空格,其余地方

力扣381. O(1) 时间插入、删除和获取随机元素 - 允许重复

RandomizedCollection 是一种包含数字集合(可能是重复的)的数据结构。它应该支持插入和删除特定元素,以及删除随机元素。 实现 RandomizedCollection 类: RandomizedCollection()初始化空的 RandomizedCollection 对象。 bool insert(int val) 将一个 val 项插入到集合中,即使该项已经存在。如果该