ASCON:以“慢而稳”赢得NIST轻量级加密算法标准

news2025/2/13 12:46:58

1. 引言

自2016年以来,NIST一直在评估轻量级加密方法,并于2022年发布了入围决赛的10种轻量级加密算法:

  • ASCON
  • Elephant
  • GIFT-COFB
  • Grain128 AEAD
  • ISAP
  • Photon Beetle
  • Romulus
  • Sparkle
  • TinyJambu
  • Xoodyak

在这里插入图片描述
在评估过程中,NIST重点关注:

  • 1)算法的安全性
  • 2)在低功耗FPGA/嵌入式处理器上的性能
  • 3)对side-channel(侧信道)攻击的鲁棒性。

于2023年2月,NIST宣布ASCON是赢家,并将对ASCON进行标准化。

总体来说,ASCON在大多数测试中都表现良好,是一名优秀的全能选手。它由格拉茨理工大学(Graz University of Technology)、英飞凌科技公司(Infineon Technologies)和拉德布大学(Radboud University)的Christoph Dobraunig、Maria Eichlseder、Florian Mendel和Martin Schläffer设计。ASCON既是一种轻量级的哈希算法,也是一种轻量级的加密算法。
在这里插入图片描述
ASCON使用基于Sponge的操作模式的单个轻量级permutation和SPN(substitution-permutation网络)permutation。总的来说,ASCON是一种易于在硬件(等价为2.6个gate)和软件中实现的实验法。5-bit S-box(如用作Keccak的S-box的核心)用于实现轻量级方法,且其没有已知的侧信道攻击。ASCON还可以实现高吞吐量——如4.9到7.3 Gbps之间的吞吐量。它用320位存储其当前状态。

更多关于Sponge的知识可参看:

  • Prof Bill Buchanan OBE 2019年博客One of the greatest advancements in Cybersecurity: The Sponge Function (Keccak, SHAKE and ASCON)。

ASCON代码示例见:

  • ASCON AEAD - Light-weight cipher
  • https://github.com/usnistgov/Lightweight-Cryptography-Benchmarking(C)
  • https://github.com/meichlseder/pyascon/blob/master/ascon.py(Python)

2. 性能评估

目前主要包括运行在Arduino Uno R3(AVR ARmega 328P)、Arduino Nano Every(AVR ARmega 4809)、Aruino MKR Zero(ARM Cortex M10+)和Arduino Nano 33 BLE(ARM皮质M4F)之上的benchmark(基准测试)。这些都只是8位处理器,可以安装在Arduino板中。除了处理器限制外,其内存占用(运行代码和存储代码)也受到限制。因此,轻量级密码算法必须克服这些限制,在保持安全的前提下,提供良好的性能水平。在这些设备上以块模式运行AES通常是不可能的,因为资源不足。
使用的benchmark基准为:

  • 加密基准为:encryption with AEAD(关联数据的认证加密)。使用AEAD,可将额外的信息(如session ID会话ID)添加到加密过程中。这种类型的算法可将加密绑定到特定的stream流。
  • 哈希基准

2.1 ARM性能

如下表所示,在Arduino Due with an ARM Cortex M3 running at 84MHz 上运行某测试用例。这些测试用例针对AEAD定义,并与ChaCha20 stream cipher对比:
在这里插入图片描述
上表中的值越大,性能越好。可以看出:

  • Sparkle、Xoodyak、ASCON最快。相比于ChaCha20的加密速度,Sparkle提升了100%,Xoodyak提升了60%。
  • Elephant、ISAP、PHOTON-Beetle的加密性能最差,其速度仅有ChaCha20的约1/20。

并不是所有入围决赛的算法都支持用于哈希函数。与BLAKE2s对比,用作哈希函数时的性能对比为:
在这里插入图片描述
可知当用作哈希函数时,Sparkle和Xoodyak速度领先,在测试中,Sparkle要快于BLAKE2s,Xoodyak要慢一点点。ASCON用于哈希函数时性能较弱,PHOTON-Beetle相对慢。

3. energy(能效)评估

在这里插入图片描述
其中能效定义为:
Energy efficiency(bit/J)=Throughput(bits/sec)/Power(J/sec)

在这里插入图片描述

4. ASCON算法

ASCON中的sponge函数可用于生成AEAD和哈希,该sponge函数的主要参数有:

  • rate:block size(单位为字节数,如Ascon-128和Ascon-80pg的rate为8个字节,Ascon-128a的rate为16字节)
  • a:permutation的initialization/finalization轮数。(默认为12)
  • b:permutation的intermediate轮数。(如Ascon-128和Ascon-80pg的b为6,Ascon-128a的b为8)

ASCON可用于创建:

  • 1)AEAD(Authenticated Encryption with Additional Data,关联数据认证加密):可参看博客密码学中的AEAD(authenticated encryption with associated data)。
    主要变种有:
    • Ascon-128:提供128位安全性,且使用128位(16字节)nonce。
    • Ascon-128a:提供160位安全性,且使用128位(16字节)nonce。
    • Ascon-80pq:其sponge函数具有不同的rate。
  • 2)MAC(Message Authentication Code,消息认证码):可参看博客 密码学中的MAC(message authentication code)。
    • Ascon-Mac:创建的tag长度为16字节。同理有“Ascon-Maca”变种。
  • 3)PRF(Pseudo-Random Function,伪随机函数):可参看博客 密码学中的PRNG(pseudorandom number generator)及PRF(Pseudo-Random Functions)。
    • Ascon-Prf:创建的tag具有任意长度。同理有“Ascon-Prfa”变种。
    • Ascon-PrfShort:用于输入具有少量位数的情况。
  • 4)固定长度哈希 或 动态长度哈希:主要变种有:
    • Ascon-Hash:定义了具有固定长度输出的哈希算法,长度固定为32字节(256位)。同理也有“Ascon-Hasha”变种。
    • Ascon-Xof:具有动态长度哈希算法。同理也有“Ascon-Xofa”变种。

参考资料

[1] Prof Bill Buchanan OBE 2023年5月博客Slow And Steady Wins The Light-weight Race: Meet ASCON
[2] Lightweight Cryptography Primitives

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

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

相关文章

使用Python把文件夹里面的图片放入一个pdf

文章目录 背景介绍代码代码分析展示 背景介绍 在看一位up主的“矩阵分析”课程的时候,up主的课件是以图片形式保存在QQ空间的。图片形式不便于学习,所以想要通过Python代码,把保存在“矩阵分析课件”里面的图片,转换为pdf&#x…

Qt函数运用

setwidget 文件 文件读写 链接 std::ifstream---std::ofstream 头文件--#include <fstream> 执行都是类&#xff0c;用这些类操作文件都要建立对象流。 1&#xff0c;建立对象流 流对象的建立有两种方式&#xff1a; &#xff08;1&#xff09;使用fstream类可以…

内网安全:Socks 代理 || 本地代理 技术.

内网安全&#xff1a;Socks 代理 || 本地代理 技术. Socks 代理又称全能代理&#xff0c;就像有很多跳线的转接板&#xff0c;它只是简单地将一端的系统连接到另外一端。支持多种协议&#xff0c;包括http、ftp请求及其它类型的请求。它分socks 4 和socks 5两种类型&#xff0…

Selenium中的隐式等待和显式等待

在Selenium中&#xff0c;“等待”在执行测试中起着重要作用。在本文中&#xff0c;您将学习Selenium中“隐式”和“显式”等待的各个方面。 在本文中&#xff0c;您将学习到 1. 为什么我们需要在selenium中等待&#xff1f; 2. 隐瞒等待 3. 明确等待 4. 流利的等待 为什么…

15.DIY可视化-拖拽设计1天搞定主流小程序-分类联动文章列表实时刷新

分类联动文章列表实时刷新 本教程均在第一节中项目启动下操作 分类联动文章列表实时刷新前言需求一:功能实现:点击首页分类,对应分类内容显示到当前页一、清空原分类界面:二. 设置选项卡三:设定展示内容字段:1.跨页面复制:文章分类组件到分类![在这里插入图片描述](https://img…

服务器安装cuda版本的pytorch+DGL

1、先创建pytorch环境&#xff1a;conda create -n ljj_torch112 python3.8 看本机的&#xff1a; 先看自己的cuda版本&#xff1a;&#xff08;最权威的看&#xff1a;nvcc --version&#xff09; 10.0的cuda于是不太符合&#xff0c;所以换一个10.2的cuda比较常用&#xff0…

【C++从入门到放弃】list深度剖析及模拟实现

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《C从入门到放弃》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; list …

CANN黑科技解密|昇腾Ascend C编程语言 — 极简易用的算子开发体验

AI应用的大脑是神经网络&#xff0c;而构成神经网络的基石是一个个算子。为了让开发者的网络在昇腾硬件上高效运行&#xff0c;昇腾异构计算架构CANN&#xff08;Compute Architecture for Neural Networks&#xff09;提供了丰富的高性能算子库&#xff0c;包括神经网络库、线…

Python-opcua 编程(1)

任何一项新标准如果不能充分应用是不可能推广的&#xff0c;最近看了一些国外网站&#xff0c;发现类似OPC UA 的应用以及比较广泛了&#xff0c;而且有许多课程。相比之下&#xff0c;我国OPCUA 标准的普及工作仍然停留在概述的阶段&#xff0c;为此&#xff0c;我将逐步介绍一…

复习并发编程的基础知识(一)

时间长了&#xff0c;并发编程的基础知识总忘&#xff0c;来记录一下&#xff1a; 进程和线程 进程&#xff1a;资源分配的最小单元&#xff0c;什么是资源&#xff1f;CPU&#xff0c;内存&#xff0c;网卡等等 线程&#xff1a;进程中的一个实体&#xff0c;不能单独存在&…

七、DMSP/OLS、NPP/VIIRS等夜间灯光数据能源碳排放空间化——能源碳排放增长类型、增长率、总量增长等级分析

一、前言 前文对能源碳排放空间化后的分析角度做了一些介绍,其实无非就是能源碳排放增长类型、增长率等的计算,那么这里强调一下,这个时候不能用利用统计数据计算出来的能源碳排放数据进行计算,而是必须用反演的能源碳排放数据进行划定计算。 二、具体步骤 增长类型 (…

【Excel超实用快捷键!!!办公效率1000%up!up!up!】

目录索引 ctrle&#xff1a;提取数据&#xff1a;合并数据&#xff1a; 普通快捷键&#xff1a;ctrla&#xff1a;ctrlc&#xff1a;ctrlv&#xff1a;ctrlx&#xff1a;ctrlz&#xff1a;ctrly&#xff1a;ctrls&#xff1a;ctrlf&#xff1a; 文字格式快捷键&#xff1a;ctrl…

IMX6ULL裸机篇之SPI实验-SPI主控寄存器

一. SPI主控寄存器 IMX6ULL 芯片的 SPI接口叫做 ECSPI&#xff0c;支持全双工、主丛可配置。 本文学习 IMX6ULL-阿尔法开发板SPI中控芯片的 SPI寄存器部分。后续代码实现需要配置 SPI相关的寄存器。 二. SPI主控的寄存器配置 1. SPI主控芯片寄存器 (1) RXDATA寄存器&am…

DVWA-Command Injection

大约 命令注入攻击的目的是在易受攻击的应用程序中注入和执行攻击者指定的命令。 在这种情况下&#xff0c;执行不需要的系统命令的应用程序就像一个伪系统外壳&#xff0c;攻击者可能会使用它 作为任何授权的系统用户。但是&#xff0c;命令的执行权限和环境与 Web 服务具有的…

【MySQL】创建和管理表

创建和管理表 标识符命名规则MySQL中的数据类型创建和管理数据库使用数据库修改数据库 创建表语法方式一方式二 修改表向表中追加一个列修改一个列重命名一个列删除一个列 重命名表方式一方式2; 删除表清空表 存储数据是处理数据的第一步 。只有正确地把数据存储起来&#xff0…

基于卫星星历计算卫星在CGCS2000大地坐标系中的坐标

目录 一、北斗系统概述 1.空间星座 2.坐标系统 3.时间系统 二、实验目的 三、实验内容 四、实验过程 五、实验结果 一、北斗系统概述 1.空间星座 北斗卫星导航系统简称北斗系统&#xff0c;英文缩写为 BDS&#xff0c;其空间星座由 5 颗地球静止轨道&#xff08;GEO&…

​“前端已死”甚嚣尘上,全栈工程师卷到起飞

海量应届生入场&#xff0c;坑位却还是那多。具备前后端开发能力的全栈工程师兴起&#xff0c;不仅能够开发前端&#xff0c;还能够处理后端业务逻辑和数据库等技术&#xff0c;还能掌握整个软件开发的细节。企业自然会更愿意招聘全栈工程师&#xff0c;说白了&#xff0c;卷啊…

springboot整合quartz实现定时任务动态增删改查

springboot整合quartz quartz介绍Quartz 核心概念 使用依赖配置文件启动类quartz工具类job业务用到的对象类接口service实现类测试 quartz介绍 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;它可以与J2EE与J2SE应用程序相结合也可以单独使用。…

【CMake 入门与进阶(6)】 CMakeLists.txt 部分常用变量(附使用代码)

变量也是 cmake 中的一个重头戏&#xff0c;cmake 提供了很多内置变量&#xff0c;每一个变量都有它自己的含义&#xff0c;通过这个链接地址cmake-variables(7) — CMake 3.5.2 Documentation可以查询到所有的内置变量及其相应的介绍&#xff0c;如下所示&#xff1a; 在这一份…

App移动端测试 —— Monkey的日志

Monkey的日志对于分析脚本的执行情况十分必要。 Monkey 日志由以下几部分组成&#xff1a; 测试命令信息&#xff1a;随机种子 seed、运行次数、可运行应用列表、各事件百分比。” 正文内容从这里开始&#xff08;可直接省略&#xff0c;亦可配图说明&#xff09;。 01—Mon…