当前位置: 首页 > news >正文

基于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. 引言 前序博客&#xff1a; ASCON&#xff1a;以“慢而稳”赢得NIST轻量级加密算法标准密码学中的AEAD(authenticated encryption with associated data) 对称密钥加密过去数年来已发生改变&#xff0c;具体为&#xff1a; 当今主要使用stream ciphers&#xff0c;因其比…...

汇编宏伪指令介绍

1、汇编宏伪指令介绍 .macro macname macargs .endm&#xff08;1&#xff09;“.macro"和”.endm"表示宏定义的开始和结束&#xff1b; &#xff08;2&#xff09; “.macro"后面接着宏定义的名字&#xff0c;然后是参数&#xff0c;参数后面的宏定义的实现…...

优化系统报错提示信息,提高人机交互(一)

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项目一次性能测试的总结

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

10分钟设置免费海外远程桌面

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

基于复旦微的FMQL45T900全国产化ARM核心模块(100%国产化)

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

2023.9.11 关于传输层协议 UDP和TCP 详解

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

thinkphp8路由

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

Python统计pdf中英文单词的个数

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

Kindle电子书下载功能关闭怎么办,借助calibre和cpolar搭建私有的网络书库公网访问

Kindle中国电子书店停运不要慌&#xff0c;十分钟搭建自己的在线书库随时随地看小说&#xff01; 文章目录 Kindle中国电子书店停运不要慌&#xff0c;十分钟搭建自己的在线书库随时随地看小说&#xff01;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学习笔记 反正都有学不完的技术&#xff0c;不如就学一学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

文章目录 前言 一&#xff1a;强制类型转换 1&#xff1a;强制类型转换为String (一)&#xff1a;方式一&#xff1a;调用被转换类型的toString()方法 (二)&#xff1a;方式二&#xff1a;调用String函数 2&#xff1a;强制类型转换为Number (一)&#xff1a;方式一&…...

动力节点老杜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 飞书签约韵达速递 近日&#xff0c;国内物流服务公司韵达快递宣布全员上飞书。飞书解决方案副总裁何斌表…...

zookeeper + kafka

Zookeeper 概述 Zookeeper是一个开源的分布式服务管理框架。存储业务服务节点元数据及状态信息&#xff0c;并负责通知再 ZooKeeper 上注册的服务几点状态给客户端 Zookeeper 工作机制 Zookeeper从设计模式角度来理解: 是一个基于观察者模式设计的分布式服务管理框架&…...

wordpress添加评论过滤器

给wordpress添加评论过滤器&#xff0c;如果用户留言包含 "http" (可以为任意字符串) 就禁止提交评论。 function filter_comment_content($comment_data) {$comment_contents $comment_data["comment_content"]; //获取评论表单的内容字段if (stripos($…...

工具篇 | Gradle入门与使用指南

介绍 1.1 什么是Gradle&#xff1f; Gradle是一个开源构建自动化工具&#xff0c;专为大型项目设计。它基于DSL&#xff08;领域特定语言&#xff09;编写&#xff0c;该语言是用Groovy编写的&#xff0c;使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序&#x…...

Wireshark TS | MQ 传输缓慢问题

问题背景 应用传输慢是一种比较常见的问题&#xff0c;慢在哪&#xff0c;为什么慢&#xff0c;有时候光从网络数据包分析方面很难回答的一清二楚&#xff0c;毕竟不同的技术方向专业性太强&#xff0c;全栈大佬只能仰望&#xff0c;而我们能做到的是在专注于自身的专业方向之…...

flink集群与资源@k8s源码分析-回顾

本章是分析系列最后一章,作为回顾,以运行架构图串联起所有分析场景 1 启动集群,部署集群(提交k8s),新建作业管理器组件 2 构建和启动flink master组件 3 提交作业,N/A...

学习心得09:C++新特性

现在语言越来越复杂&#xff0c;关键字也越来越多。所以我提出了关键字自动加标识的想法。 这些新特性也都是有用的&#xff0c;一般人也用不上。在这方面&#xff0c;我的主张是&#xff1a;除非你确实需要用到新特性&#xff0c;否则尽量不要用。保证了代码的可维护。 C很复杂…...

前端框架vBean admin

文章目录 引言I 数据库表设计1.1 用户表1.2 角色表1.3 菜单表II 接口引言 文档:https://doc.vvbin.cn/guide/introduction.html http://doc.vvbin.cn 仓库:https://github.com/vbenjs/vue-vben-admin git clone https://github.com/vbenjs/vue-vben-admin-doc 在线体验demo:…...

云原生周刊:Grafana Beyla 发布 | 2023.9.18

开源项目推荐 Komiser Komiser 是一个与云无关的开源资源管理器。它与多个云提供商&#xff08;包括 AWS、Azure、Civo、Digital Ocean、OCI、Linode、腾讯和 Scaleway&#xff09;集成&#xff0c;构建云资产库存&#xff0c;并帮助您在资源层面分解成本。 kr8s 这是一个用…...

C++ std::unique_lock 用法

文章目录 1.创建 std::unique_lock 对象2.自动加锁和解锁3.延迟加锁与手动加解锁4.尝试加锁5.配合条件变量使用6.小结参考文献 std::unique_lock 是 C11 提供的一个用于管理互斥锁的类&#xff0c;它提供了更灵活的锁管理功能&#xff0c;适用于各种多线程场景。 1.创建 std::u…...

Pytorch C++ 前端第二部分:输入、权重和偏差

本教程分为两部分 第 2.1 部分 – 基础知识速成课程。第 2.2 部分 – 使用 C++ 构建神经网络如果您已经了解神经网络的基础知识,那么无需阅读 Part-2.1 的内容,理解 Part-2.2 应该没有问题。我们试图通过动画 GIF 来可视化方程,从而使其简短而有趣。但请注意,我们根据在解释…...

面试题:RocketMQ 如何保证消息不丢失,如何保证消息不被重复消费?

文章目录 1、消息整体处理过程Producer发送消息阶段手段一&#xff1a;提供SYNC的发送消息方式&#xff0c;等待broker处理结果。手段二&#xff1a;发送消息如果失败或者超时&#xff0c;则重新发送。手段三&#xff1a;broker提供多master模式&#xff0c;即使某台broker宕机…...

uniapp打包安卓后在安卓屏上实现开机自启动

实现开机自启动(使用插件) 打开插件地址安卓开机自启动 Fvv-AutoStart - DCloud 插件市场 使用方法 选择你要开启自启动的项目 在项目的manifest.json中app-plus下写入以下代码 注意需要替换 android_package_name 为自己的,不然无法进行安卓apk打包 "nativePlugins&q…...

品牌设计公司品牌设计公司排名/如何做seo搜索引擎优化

现在的竞价账户已经不是像以前那样&#xff0c;只要花钱&#xff0c;账户可以随便折腾的时代了&#xff0c;它也会想seo一样&#xff0c;有降权和增权。可能有的同学说这不是关键词质量度的事情嘛&#xff0c;要是这么认为就是太狭隘了&#xff0c;账户的权重是一个整体&#x…...

网站建设资源库/googlechrome

ISSI IS63WV1288DBLL-10JLI是一种非常高速且低功耗的128X8位CMOS静态SRAM。该产品使用ISSI的高性能CMOS技术制造。这种高度可靠的过程与创新的电路设计技术相结合&#xff0c;可产生更高性能和更低功耗的设备。当CE为高电平&#xff08;取消选择&#xff09;时&#xff0c;器件…...

27寸显示器网站建设/近期发生的新闻

//使用显示名称初始化 System.ComponentModel.DisplayNameAttribute 类的新实例。 displayName 显示名称 [DisplayName("weight")] //初始化默认值 System.ComponentModel.DefaultValueAttribute 类的实例。支持所有类型&#xff0c;如字符串string,double,long,int,…...

网站注销/网络营销的重要性与意义

前言 kafka提供了消费组命令工具管理消费组&#xff1a;kafka-consumer-groups.sh&#xff0c;在0.11版本之后引入位移重置功能&#xff0c;重置策略如下&#xff08;引用自官方文档&#xff09;&#xff1a; --reset-offsets also has following scenarios to choose from (a…...

石家庄网站建设公司哪个好/链接购买平台

前言 TCP&#xff08;Transmisson Control Protocol&#xff09;又叫传输控制协议作为传输层最重要的协议&#xff0c;对于信息的可靠传输有着重要的意义&#xff0c;针对这一协议的攻击也数不胜数&#xff0c;这里就对这一协议以及相关内容进行详细的总结&#xff0c;将从以下…...

目前我们的网站正在建设中/网络优化工程师是做什么的

如题&#xff0c;最近项目里有个模块我做了异步处理方面的事情&#xff0c;在code过程中发现一个颠覆我对synchronized这个关键字和用法的地方&#xff0c;请问各位java开发者们是否对此有一个合理的解释&#xff0c;不多说&#xff0c;我直接贴出问题代码&#xff1a; &#x…...