1. 引言

Pairing-based cryptography已发展了数十年,可用于:

  • short数字签名,见2001年论文 Short signatures from the Weil pairing,该签名方案可高效aggregatable,详细见2003年论文 Aggregate and Verifiably Encrypted Signatures from Bilinear Maps
  • identity-based cryptography
  • 单轮多方秘钥交换,详细见2000年论文 A One Round Protocol for Tripartite Diffie–Hellman
  • 多项式承诺方案,如KZG commitment

paring-friendly椭圆曲线应具有:

  • 合适的embedding degree
  • 大的prime-order subgroup

同时满足以上2个要求的椭圆曲线比较稀有,根据2006年论文 A TAXONOMY OF PAIRING-FRIENDLY ELLIPTIC CURVES 可知,现有的pairing-friendly曲线族主要有:

作为ZCash Sapling升级的基石,ZCash团队Sean Bowe 2017年设计实现了一种新的 pairing-friendly 椭圆曲线——BLS12-381,其针对zk-SNARKs优化,并具有128-bit security level。

“下一代”可扩展区块链协议的激增,使得生成可高效聚合或轻松阈值化的短数字签名变得尤为重要。BLS12-381的特性经常使其成为这些协议的首选曲线。BLS12-381目前已广泛用于以下项目的数字签名和Zero-Knowledge Proof(ZKP)方案中:

  • ZCash
  • Ethereum 2.0
  • Skale
  • Algorand
  • Dfinity
  • Chia
  • 等等

详细代码实现可参看:

  • https://github.com/zkcrypto/pairing(提供了basic traits for pairing-friendly椭圆曲线)(Rust语言)
  • https://github.com/zkcrypto/bls12_381(实现了BLS12-381曲线)(Rust语言)
  • https://github.com/zcash/librustzcash/blob/6e0364cd42a2b3d2b958a54771ef51a8db79dd29/pairing/src/bls12_381/README.md(BLS12-381曲线详细的参数和序列化说明)
  • Apache的 https://github.com/apache/incubator-milagro-crypto-c/tree/develop/src中有rom_curve_BLS381(C语言)
  • https://github.com/herumi/mcl中实现了bls12-381(C语言)
  • https://github.com/supranational/blst(C语言和汇编),高性能和安全实现BLS12-381签名。

目前,BLS-381已被纳入IETF标准中:

  • 2020年IETF标准草案 Pairing-Friendly Curves draft-yonezawa-pairing-friendly-curves-02
  • 2020年IETF标准草案 Hashing to Elliptic Curves draft-irtf-cfrg-hash-to-curve-05
  • 2020年IETF标准草案 draft-irtf-cfrg-bls-signature-00.txt draft-irtf-cfrg-bls-signature-00

1.1 Barreto-Naehrig curves

Barreto-Naehrig(BN) curves为a class of paring-friendly 椭圆曲线,即base field为 F q \mathbb{F}_q Fq,order为 r r rr ≈ q r\approx q rq。当 q ≈ 2 254 q\approx 2^{254} q2254时,根据Kim–Barbulescu variant of the Number Field Sieve to compute discrete logarithms in finite fields以及 2016年论文 Challenges with Assessing the Impact of NFS Advances on the Security of Pairing-based Cryptography,其安全性约为110 bits。

可构建目标为128-bit安全性的新BN曲线,需 q ≈ 2 384 q\approx 2^{384} q2384。但,更大的group order r r r值,会损害zk-SNARK以及MPC方案中所需的multi-exponentiation、fast fourier transforms等密码学操作计算性能。

1.2 Barreto-Lynn-Scott curves

Barreto-Lynn-Scott curves(BLS)为相对更老的pairing-friendly curves class(见2002年论文Constructing Elliptic Curves with Prescribed Embedding Degrees),但似乎更有助于实现目标安全级别。取 q ≈ 2 384 q\approx 2^{384} q2384,embedding degree为 12 12 12(即 r ∣ ( q 12 − 1 ) r|(q^{12}-1) r(q121)),可命中128-bit安全级别,其group order为 r ≈ 2 256 r\approx 2^{256} r2256,从而可避免在更大的scalar field中的性能和可用性缺陷。

2. BLS12-381

在zk-SNARK方案中,需要基于scalar field F r \mathbb{F}_r Fr操作非常大的多项式。为高效进行multi-point evaluation和interpolation with fast fourier transforms,要求 F r \mathbb{F}_r Fr具有large 2 s 2^s 2s root of unity。

根据2012年论文Implementing Pairings at the 192-bit Security Level,想设计具有optimal extension field towers以及simple twisting isomorphisms,并确保Montgomery reductions以及其他approximation算法是space-efficient的,取 r ≈ 2 255 r\approx 2^{255} r2255,使得以64-bit limbs表示时, r r rq q q的最高有效位为unset。

同时,为针对pairing性能优化,要求所设计的BLS曲线的参数具有low Hamming weight。从而最终选中了BLS12-381曲线,其 q ≈ 2 381 q\approx 2^{381} q2381

u = -0xd201000000010000k = 12q = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabr = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001E(Fq) := y^2 = x^3 + 4Fq2 := Fq[i]/(x^2 + 1)E'(Fq2) := y^2 = x^3 + 4(i + 1)

BLS12-381为BLS曲线族的成员之一。381为表示曲线上坐标所需的bit位数。381是一个很方便的数字,每个field element可用48字节表示,剩余的3个bit可用作标签或计算优化。

参考资料

[1] BLS12-381 For The Rest Of Us
[2] BLS12-381: New zk-SNARK Elliptic Curve Construction

附录A:椭圆曲线密码学入门资料

关于椭圆曲线密码学的入门资料,可参看ANDREA CORBELLINI系列文章:

  • Elliptic Curve Cryptography: a gentle introduction
  • Elliptic Curve Cryptography: finite fields and discrete logarithms
  • Elliptic Curve Cryptography: ECDH and ECDSA
  • Elliptic Curve Cryptography: breaking security and a comparison with RSA

附录B:基于pairing的密码学入门资料

基于pairing的密码学入门资料有:

  • MIT课件 Lecture 25: Pairing-Based Cryptography
  • Alfred Menezes文章 An Introduction to Pairing-Based Cryptography
  • Vitalik博客 Exploring Elliptic Curve Pairings
  • NIST 2015年报告 Report on Pairing-based Cryptography,重点推荐第2节和附录。
  • 2020年IETF标准草案 Pairing-Friendly Curves draft-yonezawa-pairing-friendly-curves-02,很好的pairing-friendly curves背景资料
  • Craig Costello的书籍 Pairings for beginners,很赞强烈推荐,里面附magma代码,有助于理解。

BLS12-381 pairing-friendly 曲线相关推荐

  1. nil Foundation blueprint模块代码解析

    1. 引言 zkllvm-blueprint库的核心思想还是借鉴了https://github.com/scipr-lab/libsnark: crypto3-zk库:为零知识密码学工具.当前仅支持S ...

  2. bls12 curve生成器,可生成ZCash sapling版本中所使用的BLS12-381曲线

    使用的编译工具为SageMath--在GPL协议下发布的开源数学软件.可从官网下载最新版本,双击下载的exe文件安装即可. 下载bls12 curve 生成器代码,代码库来自 https://gith ...

  3. JPBC实现非对称双线性配对:typeF型曲线

    文章目录 引言 一.对称与非对称双线性对 二.TypeF简单使用 1.初始化实例 2.生成群元素与计算 疑问与补充 引言 最近在做基于身份的签名算法仿真,涉及到椭圆曲线双线性配对,本人比较小白所以就用 ...

  4. ROC 曲线/准确率、覆盖率(召回)、命中率、Specificity(负例的覆盖率)

      欢迎关注博主主页,学习python视频资源 sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.ht ...

  5. Android开发——贝塞尔曲线解析

    相信很多同学都知道"贝塞尔曲线"这个词,我们在很多地方都能经常看到.利用"贝塞尔曲线"可以做出很多好看的UI效果,本篇博客就让我们一起学习"贝塞尔曲线 ...

  6. Python+Matplotlib可视化三次贝塞尔曲线的4个调和函数

    开学第一课:一定不要这样问老师Python问题 中国大学MOOC"Python程序设计基础"第6次开课时间 董付国老师Python系列教材推荐与选用参考 ============= ...

  7. Python+Matplotlib绘制三次贝塞尔曲线

    开学第一课:一定不要这样问老师Python问题 中国大学MOOC"Python程序设计基础"第6次开课时间 董付国老师Python系列教材推荐与选用参考 ============= ...

  8. 组态王怎么做超级曲线_鲁班修图:一款超级好用的修图软件

    黑光网 中国人像摄影学会 合作媒体 文章来源:鲁班修图(微信号:gh_91c465aecde2) 就在2020年的5月份,上线了一款不同寻常的修图软件.它不是完全人工智能的自动处理,那样太没个性了:也 ...

  9. PCL:拟合平面直线和曲线以及空间曲线的原理到算法实现

    使用两种思路进行直线拟合: 1.利用逆矩阵思想 --------------进行下列公式的推导需要理解逆矩阵(求A矩阵的逆矩阵,则A矩阵必须是方阵)的知识: (1)为什么要引入逆矩阵呢? 逆矩阵可以类 ...

最新文章

  1. 【数据结构与算法】之深入解析“二叉树的序列化与反序列化”的求解思路与算法示例
  2. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波2 - 图像反转、对数变换
  3. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记24 popovers弹窗
  4. Java 获取 URL响应头的日期信息
  5. mysql plsql cursor_Oracle--plsql游标创建和使用
  6. php在命令行下显示进度条,PHP命令行进度条
  7. 在C#中ParameterizedThreadStart和ThreadStart区别
  8. SAP HANA - 企业管理软件数据库表结构完整文档
  9. 2018_7_5 自撰imrotate和bwlabel的matlab代码实现
  10. 0x0000006b蓝屏解决方法 - WIN7
  11. python中pip作用_python中的pip有什么作用
  12. 远程安全接入解决方案
  13. js 删除obj对象的属性
  14. 如何快速熟悉一套程序的框架结构
  15. 录屏,webm格式转gif的小技巧
  16. 图片上的文字用CSS写出毛玻璃效果
  17. 【总线】什么是并行传输?什么是串行传输?什么是异步传输?什么是同步传输?什么是等时传输?
  18. DHCP Relay的介绍
  19. MyBatis从入门到精通(一)—MyBatis基础知识和快速入门
  20. NLP - 文本向量化

热门文章

  1. R语言读取Excel表格数据并绘制多系列柱状图、条形图
  2. 你知道吗?没有硅胶消泡剂,避孕套可能都不安全了
  3. 电影求爱方式之榜中榜
  4. 知其所以然(1)(2)(3)(关键词:算法)
  5. 2007年中国富豪榜单上的七宗“最”
  6. stm32f103c8t5点灯
  7. [历史上的今天]1927年人工智能之父、Lisp之父John McCarthy诞生
  8. 【BZOJ 2395】 [Balkan 2011]Timeismoney
  9. phpmyadmin SQL注入 (CVE-2020-5504) 复现
  10. chown –r mysql:mysql_MySQL安全配置