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

相关文章

【译】PCL官网教程翻译(18):估计一组点的视点特征直方图(VFH)签名 - Estimating VFH signatures for a set of points

英文原文查看 估计一组点的视点特征直方图(VFH)签名 本文描述了视点特征直方图([VFH])描述符,这是一种针对聚类(如对象)识别和6DOF姿态估计问题的点簇表示方法。 下图展示了一个VFH识别和姿态估计的例子。给定一组火车数据(除最左边的点云外,最上面一行、最下面一行),学习一个模型,然后使用一个云(最左边的部分)查询/测试模型。匹配的结果按从最好到最差的顺序从左到右从左下角开始。有关更多

C++ | Leetcode C++题解之第381题O(1)时间插入、删除和获取随机元素-允许重复

题目: 题解: class RandomizedCollection {public:unordered_map<int, unordered_set<int>> idx;vector<int> nums;/** Initialize your data structure here. */RandomizedCollection() {}/** Inserts a value to t

Java | Leetcode Java题解之第381题O(1)时间插入、删除和获取随机元素-允许重复

题目: 题解: class RandomizedCollection {Map<Integer, Set<Integer>> idx;List<Integer> nums;/** Initialize your data structure here. */public RandomizedCollection() {idx = new HashMap<Integer, Set<Integ

Codeforces Round #381 (Div. 1) A. Alyona and mex

这道题我觉得题意看懂了,大问题也就没有了。 一个比较简单的思维题。 mex是不在子串中的最小非负数,那么对于一个子串而言,最大的mex就是子串的长度+1。 因为子串的长度不一,那么mex就有一个范围,题意就是让你使得mex的最小值最大化,也就是保证最小长度的子串(假设长度为len)能够取到[0, len-1]的数。 那么,看到0~len-1就要想到 取模 。需要保证无论我的最短子串取在何处

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控件→选择“属性” ②修改列数至满足所需的最少数 补充:如果依然报错,就要看你的代码了,你的代码是否是这样的: 首先我们要明白在这个位置“+”与“