基于ASCON的AEAD
1. 引言
前序博客:
- ASCON:以“慢而稳”赢得NIST轻量级加密算法标准
- 密码学中的AEAD(authenticated encryption with associated data)
对称密钥加密过去数年来已发生改变,具体为:
- 当今主要使用stream ciphers,因其比block ciphers要快得多。
- 经常会使用AEAD(Authenticated Encryption with Additional Data)。
- 在加密过程中常使用sponge函数,进而支持使用sponge函数来创建对称密钥和哈希函数。
- Rust现在正在成为一种事实上的软件语言,它在编码方面提高了健壮性。
ASCON代码示例见:
- ASCON AEAD - Light-weight cipher
- https://github.com/usnistgov/Lightweight-Cryptography-Benchmarking(C)
- https://github.com/meichlseder/pyascon/blob/master/ascon.py(Python)
- https://github.com/itzmeanjan/ascon(C++)
- https://github.com/NomanNasirMinhas/ASCON_Benchmark(Rust)
- https://github.com/sebastinas/isap-aead(Rust)
- https://github.com/neoilir/Simple-ascon-hash-implementation-rust(Rust)
- https://github.com/sebastinas/ascon-aead(Rust)
- https://github.com/IAIK/ascon_hardware(VHDL,硬件实现)
- https://github.com/ascon/ascon-c(C和汇编)
- https://github.com/ascon/ascon-hardware(Python和VHDL,硬件实现)
- https://github.com/RustCrypto/sponges/tree/master/ascon(Rust)
- https://github.com/RustCrypto/AEADs/tree/master/ascon-aead(Rust)
2. AEAD(Authenticated Encryption with Additional Data)
所谓对称密钥加密,是指使用相同的密钥来加解密:
但是这样的对称密钥加密存在重放攻击问题,如:
- Bob用对称密钥加密了一条消息给Alice,Alice收到密文用相同的对称密钥解密后,获得“你明天可休假一天”,于是Alice第二天休假了。
- 但是,Eve窃听了上述消息,在第二天将相同的密文再次发送给Alice,Alice解密后,第三天又休假了一天。
- Bob会很奇怪,为啥Alice连休了2天假。
原因就在于Eve对密文进行了重放攻击。因此,需要将加密过程与某网络连接或session绑定,使得Eve无法重构相同的场景。
通过增强的加密方法,使得既可认证加密,也可证明其完整性。这被称为关联数据的身份验证加密(AEAD)。为此,提供额外的数据来认证加密过程,并可识别密文已被修改因其无法被加密:
大多数传统的AEA方法为创建一个nonce值,并添加认证但不加密的额外数据(Additional Data, AD)。额外数据AD可为:
addresses, ports, sequence numbers, protocol version numbers, and other fields that indicate how the plaintext or ciphertext should be handled, forwarded, or processed
这样就可将网络包与加密数据绑定,提供了完整性,使得入侵者无法复制粘贴其它通道的密文来形成攻击。如,若绑定包序号和端口号,使用另一序号或端口号将认证失败。
可以用于AEAD的主要方法是AES GCM、AES SIV、AES CCM、ChaCha20/Poly1305和AES OCB3。每一个都是流密码,避免了CBC和ECB的块方法模式。
3. 基于ASCON的AEAD
如以https://github.com/RustCrypto/sponges/tree/master/ascon(Rust)实现的AEAD为例:
cargo new arc
相应的cargo.toml
文件为:
[package]
name = "arc"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]
ascon = "0.1.4"
rand="0.8.3"
hex="0.4.3"
相应的main.rs
源代码为:
use ascon;
use rand::thread_rng;
use rand::Rng;
use hex::{self};
use std::env;fn get_random_key16() -> [u8; 16]{let mut arr = [0u8; 16];thread_rng().try_fill(&mut arr[..]).expect("Ooops!");return arr;
}fn main() {let mut msg="hello";let mut aad1="test";let args: Vec<String> = env::args().collect();if args.len() >1 { msg = args[1].as_str();}if args.len() >2 { aad1 = args[2].as_str();}let randkey128=get_random_key16(); //为128字节let iv=get_random_key16(); //用作saltlet plaintext=msg.as_bytes();let aad=aad1.as_bytes();let (ciphertext,tag) = ascon::aead_encrypt(&randkey128, &iv, plaintext, aad); //tag也为128字节let pt=ascon::aead_decrypt(&randkey128, &iv,&ciphertext[..], &aad, &tag);let s = String::from_utf8(pt.unwrap()).expect("Found invalid UTF-8");println!("Message:\t{}\n",msg);println!("AAD:\t\t{}\n",aad1);println!("Key:\t\t{}\n",hex::encode(randkey128));println!("Cipher:\t\t{}\n",hex::encode(ciphertext));println!("Tag:\t\t{}\n",hex::encode(tag));println!("Decryped:\t{}", s);
}
运行结果为:
Message: helloAAD: testKey: 6680811197f36de07227b8f08ae31c33Cipher: 01e0d0d020Tag: 6e90b3a9790c28188172d5bd8041555dDecryped: hello
参考资料
[1] Prof Bill Buchanan OBE 2023年9月博客 ASCON, Rust and AEAD: Is ASCON better than AES?
相关文章:

基于ASCON的AEAD
1. 引言 前序博客: ASCON:以“慢而稳”赢得NIST轻量级加密算法标准密码学中的AEAD(authenticated encryption with associated data) 对称密钥加密过去数年来已发生改变,具体为: 当今主要使用stream ciphers,因其比…...
汇编宏伪指令介绍
1、汇编宏伪指令介绍 .macro macname macargs .endm(1)“.macro"和”.endm"表示宏定义的开始和结束; (2) “.macro"后面接着宏定义的名字,然后是参数,参数后面的宏定义的实现…...

优化系统报错提示信息,提高人机交互(一)
1、常规报错及处理 package com.example.demo.controller;import com.example.demo.service.IDemoService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.w…...

FPGA纯verilog实现8路视频拼接显示,提供工程源码和技术支持
目录 1、前言版本更新说明免责声明 2、我已有的FPGA视频拼接叠加融合方案3、设计思路框架视频源选择OV5640摄像头配置及采集静态彩条视频拼接算法图像缓存视频输出 4、vivado工程详解5、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 6、上板调试验证并演示…...

spring boot项目一次性能测试的总结
满足标准:并发大于等于100 ,平均响应时间小于等于3秒 项目在压测过程中并发数只有50,在并发数100的情况下有很多请求链接是失败的 我们该如何入手去处理这些问题并提高并发数呢? 1、首先从压测结果入手,对不满足标准…...

10分钟设置免费海外远程桌面
前言 本教程将向您介绍如何使用 Amazon Lightsail 服务的免费套餐轻松搭建属于您的远程桌面。依托于 Amazon 全球可用区,您可以在世界各地搭建符合您配置需求的远程桌面。 本教程需要先拥有亚马逊云科技海外账户。现在注册亚马逊云科技账户可以享受12个月免费套餐…...

基于复旦微的FMQL45T900全国产化ARM核心模块(100%国产化)
TES745D是一款基于上海复旦微电子FMQL45T900的全国产化ARM核心板。该核心板将复旦微的FMQL45T900(与XILINX的XC7Z045-2FFG900I兼容)的最小系统集成在了一个87*117mm的核心板上,可以作为一个核心模块,进行功能性扩展,能…...

2023.9.11 关于传输层协议 UDP和TCP 详解
目录 UDP协议 TCP协议 TCP十大核心机制 确认应答 超时重传 连接管理(三次握手 四次挥手) 滑动窗口 流量控制 拥塞控制 延时应答 捎带应答 面向字节流 粘包问题 TCP 中的异常处理 经典面试题 对比 TCP 和 UDP 如何使用 UDP 实现可靠传…...

thinkphp8路由
thinkphp8已出来有好一段时间了。这些天闲来无事,研究了下tp8的路由。默认情况下,tp8的路由是在route\app.php的文件里。但在实际工作中,我们并不会这样子去写路由。因为这样不好管理。更多的,是通过应用级别去管理路由。假如项目…...

Python统计pdf中英文单词的个数
之前的文章提供了批量识别pdf中英文的方法,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文上。以及自动pdf英文转中文文档,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文下。 本文实现python统计pdf中英文字符的个数。 文章目录 一、要统计字符的pdf…...

Kindle电子书下载功能关闭怎么办,借助calibre和cpolar搭建私有的网络书库公网访问
Kindle中国电子书店停运不要慌,十分钟搭建自己的在线书库随时随地看小说! 文章目录 Kindle中国电子书店停运不要慌,十分钟搭建自己的在线书库随时随地看小说!1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网…...

ubuntu、linux in window安装docker教程
1、首先进入管理员权限。 2、更新软件源。 sudo apt update 3、安装一些依赖 sudo apt install apt-transport-https ca-certificates curl software-properties-common 4、为系统添加Docker的密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-k…...

clickhouse学习之路----clickhouse的特点及安装
clickhouse学习笔记 反正都有学不完的技术,不如就学一学clickhouse吧 文章目录 clickhouse学习笔记clickhouse的特点1.列式存储2. DBMS 的功能3.多样化引擎4.高吞吐写入能力5.数据分区与线程级并行 clickhouse安装1.关闭防火墙2.CentOS 取消打开文件数限制3.安装依…...
STM32 驱动
led 驱动 led头文件 #ifndef _LED_H #define _LED_Hvoid LED_Init(void); void LED_ON(void); void LED_OFF(void); void LED_Turn(void);#endifled代码 #include "stm32f10x.h" void LED_Init(void) {//START CLOCKRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO…...

JavaScript系列从入门到精通系列第五篇:JavaScript中的强制类型转换包含强制类型转换之Number,包含强制类型转换之String
文章目录 前言 一:强制类型转换 1:强制类型转换为String (一):方式一:调用被转换类型的toString()方法 (二):方式二:调用String函数 2:强制类型转换为Number (一):方式一&…...

动力节点老杜JavaWeb笔记(全)
Servlet 关于系统架构 系统架构包括什么形式? C/S架构B/S架构C/S架构? Client / Server(客户端 / 服务器)C/S架构的软件或者说系统有哪些呢? QQ(先去腾讯官网下载一个QQ软件,几十MB,然后把这个客户端软件安装上去,然后输入QQ号以及密码,登录之后,就可以和你的朋友聊…...

【微信小程序开发】宠物预约医疗项目实战-注册实现
【微信小程序开发】宠物预约医疗项目实战-注册实现 第二章 宠物预约医疗项目实战-注册实现 文章目录 【微信小程序开发】宠物预约医疗项目实战-注册实现前言一、打开项目文件二、编写wxss代码2.1 什么是wxss2.2 配置主程序全局样式 三. 在sign文件下的wxml文件中编写如下代码并…...

聚观早报 | 飞书签约韵达速递;蔚来首颗自研芯片“杨戬”量产
【聚观365】9月22日消息 飞书签约韵达速递 蔚来首颗自研芯片“杨戬”10月量产 靳玉志接任华为车 BU CEO 亚马逊发布全新Alexa语音助手 OpenAI推出图像生成器DALL-E 3 飞书签约韵达速递 近日,国内物流服务公司韵达快递宣布全员上飞书。飞书解决方案副总裁何斌表…...

zookeeper + kafka
Zookeeper 概述 Zookeeper是一个开源的分布式服务管理框架。存储业务服务节点元数据及状态信息,并负责通知再 ZooKeeper 上注册的服务几点状态给客户端 Zookeeper 工作机制 Zookeeper从设计模式角度来理解: 是一个基于观察者模式设计的分布式服务管理框架&…...
wordpress添加评论过滤器
给wordpress添加评论过滤器,如果用户留言包含 "http" (可以为任意字符串) 就禁止提交评论。 function filter_comment_content($comment_data) {$comment_contents $comment_data["comment_content"]; //获取评论表单的内容字段if (stripos($…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...