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