蓝牙安全(AES-CCM)

news/2025/3/20 22:26:26/

目录

AES-CCM

CCM规范加密过程

CCM规范解密认证过程

formatting函数

counter generation函数

蓝牙AES-CCM加密流程

参考文献


AES-CCM

Advanced Encryption Standard-Counter with Cipher Block Chaining-Message Authentication Code

自蓝牙4.1起蓝牙的加密算法开始采用AES-CCM对基带数据进行加密。

AES-CCM使用CBC-MAC(Cipher Block Chaining-Message Authentication Code)消息认证算法和Counter(CTR)加密模式实现。

CBC-MAC:提供数据完整性认证。

CTR:提供数据加密。

 CBC-MAC和CBC有以下区别:

1:CBC使用需要使用到初始化向量IV,CBC-MAC没有使用IV

2:CBC所有的中间值Yi都会作为密文的一部分,CBC-MAC只是输出最终的tag Yr

CCM不支持部分处理和流处理,包含2个过程:generation-encryption 和 decryption-verification

CCM规范加密过程

前提条件:

块加密算法

密钥K

counter generation函数

formatting函数

MAC的长度Tlen

输入参数:

nonce N

长度为Plen的有效负载P

关联数据( associated data) A

输出:

密文C

步骤和流程示意:

 

CCM规范解密认证过程

前提条件:

块加密算法

密钥K

counter generation函数

formatting函数

MAC的长度Tlen

输入参数:

nonce N

长度为Clen的密位C

关联数据( associated data) A

输出:

负载P(明文)或者无效

流程及示意图:

 

formatting函数

作用是将输入参数(N, A, P)格式化为块序列B0,B1,...,Br。

N:nonce

A:associated data A

P:需要加密的明文

CCM规范Flags的格式如下:

 t:MAC的字节数

q:payload的字节数

CCM规范B0的格式如下:

B0:nonce

B1:associated data A

Bn+1:验证payload的数据

counter generation函数

Ctri的格式:

Ctri的Flags格式:

 

 

蓝牙AES-CCM加密流程

 

MAC:在蓝牙Core spec中称为Message Integrity Check (MIC),避免和媒体控制的相关术语冲突

Nonce:长度为13个字节,有2种格式。

 

payload counter format:用于ACL数据包,在加密开始或恢复后每个方向的加密包从0开始。

clock format:用于SCO数据包。

IV:8个字节长,加密开始时IV值来自于加密前最后一次执行h5的ACO输出,在加密前可能会发生多个设备的认证,仅使用最后一个设备的ACO输出。

Associated data A:数据的packet header和payload header。

参考文献

NIST 800-38C


http://www.ppmy.cn/news/24543.html

相关文章

【java】springboot和springcloud区别

文章目录1、含义不同2、作用不同3、使用方式不同4、特征不同5、注释不同6、优势不同7、组件不同8、设计目的不同1、含义不同 springboot:一个快速开发框架,它简化了传统MVC的XML配置,使配置变得更加方便、简洁。 springcloud:是…

Linux 内核定时器实验

目录 一、内核时间管理简介 二、内核定时器简介 三、驱动编写 1、修改makefile 2、添加定义 3、初始化led函数 4、添加调用 5、初始化定时器与定时器处理函数 这部分代码如下 四、ioctl函数 五、内核添加unlocked_ioctl 函数 1、添加设备操作集unlocked_ioctl成员 2…

牛客网Python篇数据分析习题(三)

1.现有一个Nowcoder.csv文件,它记录了牛客网的部分用户数据,包含如下字段(字段与字段之间以逗号间隔): Nowcoder_ID:用户ID Level:等级 Achievement_value:成就值 Num_of_exercise&a…

TransactionTemplate编程式事务

Spring可以支持编程式事务和声明式事务。 Spring提供的最原始的事务管理方式是基于TransactionDefinition、PlatformTransactionManager、TransactionStatus 编程式事务。 而TransactionTemplate的编程式事务管理是使用模板方法设计模式对原始事务管理方式的封装。 Transact…

【Spring Cloud】如何修改Feign的日志记录级别

本期目录前言1. 介绍2. 方式一:配置文件1)全局生效2)局部生效3. 方式二:Java代码1)全局配置2)局部配置前言 本次示例代码的文件结构如下图所示。 1. 介绍 Feign 允许我们自定义配置,下面是 …

记一次 .NET 某游戏网站 CPU爆高分析

一:背景 1. 讲故事 这段时间经常有朋友微信上问我这个真实案例分析连载怎么不往下续了,关注我的朋友应该知道,我近二个月在研究 SQLSERVER,也写了十多篇文章,为什么要研究这东西呢? 是因为在 dump 中发现…

operator的两种用法(重载和隐式类型转换)

文章目录重载隐式类型转换构造函数的隐式类型转换补充operator算子的隐式类型转换重载 略 隐式类型转换 构造函数的隐式类型转换 利用operator进行的隐式类型转换成为operator算子的隐式类型转换,讲这个之前先了解构造函数的隐式类型转换,请看以下代…

使用继承与派生的6大要点

概述 面向对象编程技术非常看重软件的可重用性,在C中,可重用性是通过继承机制来实现的。继承机制允许程序员在保持原有类的数据和功能的基础上进行扩展,增加新的数据和功能,从而构成一个新的类,也称为派生类。原有类&a…