未来的数字签名方案:Dilithium、FALCON 和 SPHINCS+

news2024/11/29 4:39:15

1. 引言

当前的数字签名方案主要有:

  • RSA
  • ECDSA
  • EdDSA:已废弃DSA,将EdDSA纳入FIPS 186。

这些数字签名方案都不可抗量子攻击。为此,需要新的量子强健的签名方案,NIST引入了3种新的PQC数字签名标准化方案:

  • 1)CRYSTALS-Dilithium数字签名方案:基于Lattice安全假设。分为:
    • Dilithium2 (Level 1):等价为128-bit AES
    • Dilithium3 (Level 3):等价为192-bit AES
    • Dilithium5 (Level 5):等价为256-bit AES
  • 2)Falcon数字签名方案:基于Lattice安全假设。分为:
    • Falcon-512 (Level 1)
    • Falcon-1024 (Level 5)
  • 3)SPHINCS+数字签名方案:基于Hash安全假设,分为:
    • SPHINCS+-128 (Level 1)
    • SPHINCS+-192 (Level 3)
    • SPHINCS+-256 (Level 5)

总体结论为:
Dilithum为通用数字签名方案,FALCON签名size有优势。Dilithum和FALCON为基于lattice的数字方案,SPHINCS+ 为基于哈希的数字签名方案,具有小的公私钥size,但是签名size相对要大很多。

根据PQC Digital Signature Speed Tests,这3个方案的密钥生成、签名、验签用时对比情况为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由此可知,与FALCON 和 SPHINCS+ 相比,Dilithium在各个维度性能最优。SPHINCS+ 系列中,SPINHCS+-Haraka的性能最优。
FALCON在密钥生成时性能要弱于Dilithium,但签名和验签性能二者相当。与签名和验签相比,密钥生成阶段发生的频次要低很多,因此该问题不大。

仍然根据PQC Digital Signature Speed Tests,这三个方案的密钥size和签名size对比为:
在这里插入图片描述
在这里插入图片描述
由此可知,SPHINCS+ 的公私钥size都不错,有32-byte私钥和64-byte公钥——与ECC类似。但是其数字签名size超过17kB。
Dilithium性能不错,但FALCON的签名size有优势,FALCON-512 的签名为690-byte,而Dilithium-2签名有2,420-byte。
Dilithium的私钥为1,312-byte,公钥为2,528-byte,签名为2,420-byte。Falcon的密钥size相当。
总体的密钥size情况为:

Method                       Public key size    Private key size   Signature size  Security level
------------------------------------------------------------------------------------------------------
Crystals Dilithium 2         1,312              2,528              2,420         1 (128-bit) Lattice
Crystals Dilithium 3         1,952              4,000              3,293         3 (192-bit) Lattice
Crystals Dilithium 5         2,592              4,864              4,595         5 (256-bit) Lattice
Falcon 512 (Lattice)           897              1,281                690         1 (128-bit) Lattice
Falcon 1024                  1,793              2,305              1,330         5 (256-bit) Lattice
Sphincs SHA256-128f Simple      32                 64             17,088         1 (128-bit) Hash-based
Sphincs SHA256-192f Simple      48                 96             35,664         3 (192-bit) Hash-based
Sphincs SHA256-256f Simple      64                128             49,856         5 (256-bit) Hash-based
RSA-2048                       256                256                256
ECC 256-bit                     64                 32                256

2. SPHINCS+

近20年来,Daniel J Bernstein (djb) 在密码学领域有突出贡献,其创建了ChaCha20, Salsa20, Curve 25519, twisted elliptic curves, AES timing attacks等等。其核心贡献之一为
The SPHINCS+ Signature Framework。

当前大多数基于哈希的方案都需要记录之前签名的私钥,而SPHINCS为基于哈希的stateless的签名方案。

SPHINCS+ 256 128-bit的公钥size为32字节,私钥size为64字节,签名为17kB。4核3.5GHz处理器在一秒内可做数百次哈希运算,
其它的哈希方案有Haraka 和 SHAKE-256 的128-bit、192-bit 以及 256-bit 版本。

基于hash的tree会使用WOTS和HORST,以及其他参数,如:

  • n n n — length of hash in WOTS / HORST (in bits)
  • m m m — length of message hash (in bits)
  • h h h — height of the hyper-tree
  • d d d — layers of the hyper-tree
  • w w w — Winternitz parameter used for WOTS signature
  • t a u tau tau — layers in the HORST tree ( 2 t a u 2^{tau} 2tau is no. of secret-key elements)
  • k k k — number of revealed secret-key elements per HORST signature

n = 256 , m = 512 , h = 2 , d = 1 , w = 4 , t a u = 8 , k = 64 n=256, m=512, h=2, d=1, w=4, tau=8, k=64 n=256,m=512,h=2,d=1,w=4,tau=8,k=64为例:
在这里插入图片描述
某些操作使用BLAKE哈希方案,且ChaCha用于生成随机数。

2.1 Winternitz one time signature scheme (W-OTS)

W-OTS具有相对小的密钥和签名size,且是量子强健的。其生成 w w w次 32×256 bit 随机私钥。若 w = 8 w=8 w=8,则对这些私钥哈希 2 w 2w 2w次,可创建32×256 bits 公钥。每次取8bits,然后将私钥哈希 256 − n 256-n 256n(其中 n n n为8-bit binary int)次。签名为自随机私钥派生的32个哈希值。验签时,接收者会解析签名哈希(每次使用8 bits,提取 8 bit int n n n值),然后自签名可派生出签名。

在这里插入图片描述
Winternitz one time signature scheme (W-OTS)方案具体为:

  • 首先创建32个256-bit随机值。这32个值为私钥。
  • 对每个随机值做256次哈希运算之后的32个值为公钥。
  • 对待签名message做SHA-256哈希,生成32个8-bit values( N 1 , N 2 , ⋯   , N 32 N1,N2,\cdots,N32 N1,N2,,N32)。
  • 对message哈希结果的每个8-bit value( N 1 , N 2 , ⋯   , N 32 N1,N2,\cdots,N32 N1,N2,,N32),做 256 − N 256-N 256N次哈希运算,其中 N N N为该8-bit value的值。
  • 验签时,对待签名message做SHA-256哈希,生成32个8-bit values( N 1 , N 2 , ⋯   , N 32 N1,N2,\cdots,N32 N1,N2,,N32)。对每个8-bit signature值做 N N N次哈希运算,其中 N N N为相应待签名message哈希结果的8-bit value值。每次操作的结果应等于公钥。

W-OTS示例见Quantum Robust: Winternitz one time signature scheme (W-OTS):

Hashing number:	256
==== Private key (keep secret) =====
Priv[0]:  bd344c6110628aa38c9b5ca6458bed7b78425b2e82efa0624a578031562f82ee
Priv[1]:  20670af5b1663fa9fad49fab6a692ae5989cff77439f98d2288f173b17a8d99f
Priv[2]:  625aa290fd1f88c930451ff743d5d9ef90e7064368fb23a18c9fd048474818f2
Priv[3]:  ee0e1363cbd5f61017ba27bfe91ec53969d28d143ed59a99efb020941bc4990f
Priv[4]:  ce94d7282ee3f7b05b99768695ff224b5994900c6182dfb89d596d8b7b405ec6
Priv[5]:  d0c59651e951b0bb8d5a2d7b93f6739c9ce4a0c0c0f63bfce23b331b947eb285
==== Public key (show everyone)=====
Pub[0]:  45fdac6339e80cadd1331cce026cd0364ea84146a36f6f3f2449b66fb55a217a
Pub[1]:  184cf92f22072fef078fa4a93ec2044f07ac8b12e326509474209312cace8a5a
Pub[2]:  a47548d4537bd284e7d7f935f41570866d9c6a72c463bb2a2b10c8c7907621f0
Pub[3]:  60395e575522cacb70d866211c64e8a74e562c79d1fffce224d1013d088bf66f
Pub[4]:  8be7b53d5b56e698b8798f2a707fba7b8e417554fd489d74cc40fe8574d7589e
Pub[5]:  9fac35971dae3a5c77ae7b5c720a72f90ee53852668c96c78e095cbb52af20a1
==== Message to sign ===============
Message:	The quick brown fox jumps over the lazy dog
SHA-256:	d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
==== Signature =====================
Sign[0]:	45cb53c5c33af9b20426fd0233fd63d92bf0c2ded367163e6f2f93588a33c6d8
Sign[1]:	e8c35987101f2d11d7056a2fe78069d3ed73aee315ebef8c2d40e04973301c26
Sign[2]:	59220d80b7c958957b28511f4081341cc4a00a0d6d5e1d05351be7dec3ca8aaa
Sign[3]:	72a906d719be18e1592314bf6f6c521a325a9de2b5b9e9e13117bf01b0157f5c
The signature test is  True

2.2 SPHINCS+签名

SPHINCS+ 具有短的公钥和私钥size,但前签名要远长于Dilithium签名和Falcon签名。
详细实现见SPHINCS+ - Digital Signature:
在这里插入图片描述
相同安全级别的情况下,SPHINCS+ 签名为49KB,而Dilithium签名仅为4KB,Falcon签名仅为1KB。

SPHINCS+ - Digital Signature的具体代码实现可为:

#include "api.h"
#define MLEN 59
char *showhex(uint8_t a[], int size) ;char *showhex(uint8_t a[], int size) {
    char *s = malloc(size * 2 + 1);    for (int i = 0; i < size; i++)
        sprintf(s + i * 2, "%02x", a[i]);    return(s);
}int main(void)
{
  size_t i, j;
  int ret;
  size_t mlen, smlen;
  uint8_t b;
  uint8_t m[MLEN + CRYPTO_BYTES];
  uint8_t m2[MLEN + CRYPTO_BYTES];
  uint8_t sm[MLEN + CRYPTO_BYTES];
  uint8_t pk[CRYPTO_PUBLICKEYBYTES];
  uint8_t sk[CRYPTO_SECRETKEYBYTES];
    randombytes(m, MLEN);    crypto_sign_keypair(pk, sk);
    crypto_sign(sm, &smlen, m, MLEN, sk);
    ret = crypto_sign_open(m2, &mlen, sm, smlen, pk);    if(ret) {
      fprintf(stderr, "Verification failed\n");
      return -1;
    }
    if(smlen != MLEN + CRYPTO_BYTES) {
      fprintf(stderr, "Signed message lengths wrong\n");
      return -1;
    } 
    if(mlen != MLEN) {
      fprintf(stderr, "Message lengths wrong\n");
      return -1;
    }
    for(j = 0; j < MLEN; ++j) {
      if(m2[j] != m[j]) {
        fprintf(stderr, "Messages don't match\n");
        return -1;
      }
    }
    randombytes((uint8_t *)&j, sizeof(j));
    do {
      randombytes(&b, 1);
    } while(!b);
    sm[j % (MLEN + CRYPTO_BYTES)] += b;
    ret = crypto_sign_open(m2, &mlen, sm, smlen, pk);
    if(!ret) {
      fprintf(stderr, "Trivial forgeries possible\n");
      return -1;
    }
  
  printf("NAME: %s\n", CRYPTO_ALGNAME);
  printf("CRYPTO_PUBLICKEYBYTES = %d\n", CRYPTO_PUBLICKEYBYTES);
  printf("CRYPTO_SECRETKEYBYTES = %d\n", CRYPTO_SECRETKEYBYTES);
  printf("CRYPTO_BYTES = %d\n", CRYPTO_BYTES);  printf("Signature Length + Msg = %ld\n", smlen);  printf("\nAlice Public key: %s\n",showhex(pk,CRYPTO_PUBLICKEYBYTES));
  printf("Alice Secret key: %s\n",showhex(pk,CRYPTO_SECRETKEYBYTES));  printf("\nMessage: %s\n",showhex(m,MLEN));
  printf("Signature (Showing 1/32th of signature): %s\n",showhex(sm,smlen/32));
  return 0;
}

运行SPHINCS+ 128示例可知,公钥size为32字节,私钥size为64字节,数字签名为17,088字节:

NAME: SPHINCS+
CRYPTO_PUBLICKEYBYTES = 32
CRYPTO_SECRETKEYBYTES = 64
CRYPTO_BYTES = 17088
Signature Length + Msg = 17147Alice Public key: 2fbdcbb6ec87851c3674e0a38f551ca1bb44677ae13969ed16c1350fe95238ce
Alice Secret key: 2fbdcbb6ec87851c3674e0a38f551ca1bb44677ae13969ed16c1350fe95238ce79fb06c5872fbccf30afefc46d1a74791273744e66c59a1b517278a58c33b706Message: 79fb06c5872fbccf30afefc46d1a74791273744e66c59a1b517278a58c33b7062fbdcbb6ec87851c3674e0a38f551ca1c890f02e568a49a7fcc14c
Signature (Showing 1/32th of signature): d681767c6c41ecd17ffd2eda21143b305e133be88bb770a451403a199d9de6e292b16fb4d614817e28e14f07809488f506d18c58db6a3d9106b357a333d75e3d10c9ba78a7eb1a070a08084ee6878b95c9d7c9d24fa377f4131d07dbb07c123eb88a9e8196699f2ed35a62a3fd2c25eb4398a43bc89dd9f3f9fbd479d34395bfba932d9971e68e560b93ceac905afe3a0c87311b345e72fec4b67f0094a693e14fafd890498b3fd0c4c7dfa4f594d35413f3489a40c06bd2c82b8cd4d101a3afba346cf6cd723d23f8aeeee8c8bbcc4f5d70a5975815cad42bc3a59ff5f4af7dc07c9cc26002d25c9a4f2c55e45136f37d4c7a5055c0a76736578da27994472fe81409d1b4578d05d4256444a152e437368040addd4b25c452578199f855ea090a3afe6b49df75505385d8a76460ad0ff8e290ca5db7a0c4a2aab38ad1c544f273776ccb5d12bfaca08271319b3b4aa7b179d5b31034366664cd5290be8f411170015c8f07286445ef6164a5fff825dda62ea61a56418c4a62955537904d87ac2f89b1b5e8c6208fa9192f21019d6730b39dfe8bb4e681551f75902e92a1ff92adf6eaa773c6d0937fcb6abc583872cc61f8ab136e8dbffa43c4711f7677553efaadea1c12002acf0ec222a8217d22ea896d2de8df88704296ff1be222fa8b1a09af78ef2a0483c0b525e04563eaf2db5001d884d74c6a609da361a7808be4264bc00fb56c9fc382f80bd0a150211f817991a25bfaf804

参考资料

[1] Prof Bill Buchanan OBE 2023年5月2日博客 Digital Signatures for the Future: Dilithium, FALCON and SPHINCS+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考A计划-真题-分类精讲汇总-第八章(面向对象)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

【CSS基础】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、CSS是什么&#xff1f; 语法规范 引入方…

基于matlab使用主动声纳系统进行水下目标检测

一、前言 此示例演示如何模拟具有两个目标的主动单基地声纳方案。声纳系统由各向同性投影仪阵列和单个水听器元件组成。投影仪阵列呈球形。反向散射信号由水听器接收。接收到的信号包括直接和多路径贡献。 二、水下环境 在浅水环境中&#xff0c;声源和目标之间存在多个传播路径…

网络工程师常用命令排行榜,Ping就在这一行

大家好&#xff0c;我是老杨。 如果问你&#xff0c;你在日常工作中用的最频繁的命令是哪个&#xff0c;你下意识的第一反应是什么。 年前&#xff0c;我做了个不完全统计&#xff0c;大概有100多位粉丝参与的问卷调查&#xff0c; 调查每一位网工在解决网络故障时使用最多的…

[PCIE703]FPGA实时处理器-XCKU060+ARM(华为海思视频处理器-HI3531DV200)高性能综合视频图像处理平台设计资料及原理图分享

板卡概述 PCIE703是自主研制的一款基于PCIE总线架构的高性能综合视频图像处理平台&#xff0c;该平台采用Xilinx的高性能Kintex UltraScale系列FPGA加上华为海思的高性能视频处理器来实现。 华为海思的HI3531DV200是一款集成了ARM A53四核处理器性能强大的神经网络引擎&#x…

基于matlab编程的线性规划整数解问题求解

背景&#xff1a; 自己读研期间曾经用matlab做过一些小项目和实验&#xff0c;自己的毕业论文实验仿真也是用的matlab&#xff0c;最近打算更换电脑&#xff0c;在翻阅电脑磁盘的时候找到了一些和matlab相关的代码和文档&#xff0c;简单整理和分享一下。 说明&#xff1a; …

Dubbo——微服务框架(单体式->分布式->微服务)

是什么&#xff1f; Dubbo是阿里巴巴开源的基于Java的高性能RPC&#xff08;一种远程调用&#xff09;分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案&#xff0c;它提供了三大核心能力&#xff1a;面向接口的远程…

别让你的云端“瘫痪”——教你如何优化云平台性能测试

目录 引言 目的 测试指标 系统性能指标 资源指标 中间件指标 数据库指标 稳定性指标 批量处理指标 可扩展性指标 可靠性指标 性能测试的过程 测试计划 性能测试项目检测与控制 测试分析 测试设计 测试执行 测试完成 性能分析 性能分析的前提 性能分析的流…

一篇文章让你轻松通过佛科院的电子线路CAD考试——Altium Designer 14原理图设计与PCB设计(叶林朋著)

第一章 考试大纲 通过多次作业练习&#xff0c;我得出了完成一个完整的考试流程&#xff1a; 首先先创建PCB工程&#xff0c;查找一下元件&#xff0c;看一下哪些元件需要我们自己画创建元件集成库&#xff0c;画原理图元件和封装导入所有元件后&#xff0c;按照题目所给的图进…

Springboot源码:自动装配流程解析

前言 前面在写业务框架后&#xff0c;由于项目依赖的Spring IOC&#xff0c;单将该项目install后&#xff0c;在其它项目引入时&#xff0c;会找不到所依赖的Bean。所以利用Springboot的自动转配&#xff0c;在项目启动时加载Bean&#xff0c;并注册到IOC容器中。 Springboot…

node笔记_连接mysql编写js脚本的crud

文章目录 ⭐前言⭐mysql的api依赖库⭐建立数据库连接⭐query执行sql语句&#x1f496; create 新增table数据库表&#x1f496; insert 插入表数据插入单条数据插入多条数据 &#x1f496; select 查询数据&#x1f496; delete 删除表数据删除单条数据删除多条数据 ⭐ 结束 ⭐…

prometheus实战之五:飞书通知告警

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 《prometheus实战》系列链接 prometheus实战之一&#xff1a;用ansible部署prometheus实战之二&#xff1a;使用常见指标prometheus实战之三&#xff1a;告警…

Day968.如何开启一个遗留系统现代化项目? -遗留系统现代化实战

如何开启一个遗留系统现代化项目&#xff1f; Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于如何开启一个遗留系统现代化项目&#xff1f;的内容。那如何启动一个遗留系统现代化项目。 一、项目背景 说来有点唏嘘&#xff0c;国内遗留系统的重灾区&#xff0c;恰恰…

MongoDB概念和操作

一、相关概念 在mongodb中最基本的概念为&#xff1a;文档、集合、数据库 SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins表连接,MongoDB不支持prima…

Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?

在 《Cordova webapp实战开发&#xff1a;&#xff08;4&#xff09;Android环境搭建》中我们搭建好了开发环境&#xff0c;也给大家布置了调用插件的预习作业&#xff0c;做得如何了呢&#xff1f;今天我们来学一下如何自己从头建立一个Andorid下的cordova插件。 本次练习你能…

【大腹太卷】一篇文章带你了解校招的神秘面纱

校招求职复盘 写在前面方向确定前置工作就业信息获取简历制作简历投递 笔面试工作测评笔试面试八股文自我介绍项目相关HR面试反问环节 Offer选择写在后面 写在前面 2023届应届生&#xff0c;去年的时候参加了校招&#xff0c;一路走来&#xff0c;感慨良多&#xff0c;特此记录…

蚊香液、蚊香片、蚊香盘的优缺点

夏天来了&#xff0c;蚊子也出来活动了&#xff0c;又到了消灭蚊子的季节。     蚊子是凭借人所呼出的二氧化碳和带气味的气体&#xff0c;来定位人的位置&#xff0c;进而叮咬人的皮肤。     蚊子吸人血&#xff0c;主要是利用血液里的胆固醇、B族维生素&#xff0c;促进蚊…

OSPF综合实验(第一部分)

目录 要求 确定广播域的个数 分配网段 配置路由器IP地址-优先公网配通 配置MGRE部分 拓扑结构&#xff1a; 要求 1、R4为ISP&#xff0c;其上只能配置IP地址&#xff0c;R4与其他所有直连设备间使用公有IP 2、R3~R5/6/7为MGRE环境&#xff0c;R3为中心站点 3、整个OSPF环境I…

《编程思维与实践》1072.下一位妙数

《编程思维与实践》1072.下一位妙数 题目 思路 思路与最小不重复数基本一致,从最高位开始找到第一个出现9的位置,让其加1,后面全变为0即可. 只需要再加一个判定条件:不能被9整除. 由数学知识,一个数不能被9整除当且仅当各位数之和不能被9整除. 这里给出简单的证明: 不妨以三位…

Linux-初学者系列7_shell编程

在进行服务器集群管理时&#xff0c;需要编写shell程序来进行服务器管理。 shell是一个命令行解释器&#xff0c;他会为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序&#xff0c;用户用shell启动、挂起、停止和编写一些程序。 Linux-初学者系列7_shell编程…