加密工具箱
蓝牙mesh网络的大多数安全特性都有赖于业内标准的加密算法和程序,这在本系列的其他安全性相关文章中也会提及,本文还是着重解释最重要的内容。
蓝牙mesh协议栈中采用的两项关键的安全功能是AES-CMAC和AES-CCM。这些是基本的加密和认证功能,所有用于密钥生成的其他功能都是基于上述两者。
AES-CMAC
基于密码的消息认证码(CMAC)是一种算法,能够生成固定长度的128位消息认证值,并将其用于任何变量长度输入。使用AES-CMAC算法生成消息认证码MAC的公式为:
AES-CMAC具有出色的错误检测能力。涉及验证校验和或者使用错误检测代码的其他技术只能检测数据的意外修改。AES-CMAC旨在检测有意的、未经授权的数据修改,以及意外修改。如果您有意向了解更多关于此功能的信息,请参考RFC4493 中的详细定义:
向 AES-CMAC输入:
k – 128位的密钥
m – 将被认证的可变长度数据
AES-CCM
AES-CCM是一种通用的、认证的加密算法,使用时需要加密块密码。在蓝牙mesh规格中,AES-CCM在所有情况下都能被用作基本的加密和认证功能。其使用公式如下:
向AES-CCM输入四项内容:
k – 一个128位的密钥
n – 一个104位的随机数
m – 将被加密和认证的可变长度数据
a – 将被认证、但不加密的可变长度数据,也被称为“附加数据(Additional Data)”,这一输入参数长度可以为0字节。
从 AES-CCM有两项输出:
密文 - 加密后的可变长度数据
MIC – m和a的消息完整性检查值
下图显示了可能来自蓝牙mesh网络层(network layer)或上层传输层(upper transport layer) 的纯文本有效载荷(Payload),由具有输入加密密钥(Key)、随机数(Nonce)和纯文本有效载荷的AES-CCM进行处理。其输出为加密的有效载荷(Encrypted Payload) 和MIC。
用于数据包有效负载加密和认证的AES-CCM
SALT生成
蓝牙mesh安全性定义了SALT 生成函数s1,它采用AES-CMAC功能。如上所述,AES-CMAC具有两个输入参数:k和m。当用于SALT生成时,只有输入参数m发生变化。 K一直被设置为一个128位的值,即0x0000 0000 0000 0000 0000 0000 0000 0000,它在蓝牙mesh规格中被称为ZERO。
SALT生成函数 向 SALT生成函数输入:
m – 一个长度非零的八位字节数组或ASCII编码字符串
其输出为一个128位的MAC值,s1公式 如下:
其它安全性函数
在蓝牙mesh网络规格第3.8.2章节的“安全工具箱(Security Toolbox)”部分中,可以找到对其他安全函数的定义,例如各种关键性的派生函数。所有这些都是基于AES-CMAC和SALT生成函数s1(SALT生成函数也是基于AES-CMAC)。
()
未完待续!
安全性是蓝牙技术的首要问题,我们将在解密蓝牙mesh系列中持续探讨这一话题。读完本文,对于蓝牙mesh网络主要的安全特性以及一些基本的加密技术,您应该已经有了较为深入的了解,敬请期待下周的解密蓝牙mesh系列!
加密工具箱
蓝牙mesh网络的大多数安全特性都有赖于业内标准的加密算法和程序,这在本系列的其他安全性相关文章中也会提及,本文还是着重解释最重要的内容。
蓝牙mesh协议栈中采用的两项关键的安全功能是AES-CMAC和AES-CCM。这些是基本的加密和认证功能,所有用于密钥生成的其他功能都是基于上述两者。
AES-CMAC
基于密码的消息认证码(CMAC)是一种算法,能够生成固定长度的128位消息认证值,并将其用于任何变量长度输入。使用AES-CMAC算法生成消息认证码MAC的公式为:
AES-CMAC具有出色的错误检测能力。涉及验证校验和或者使用错误检测代码的其他技术只能检测数据的意外修改。AES-CMAC旨在检测有意的、未经授权的数据修改,以及意外修改。如果您有意向了解更多关于此功能的信息,请参考RFC4493 中的详细定义:
向 AES-CMAC输入:
k – 128位的密钥
m – 将被认证的可变长度数据
AES-CCM
AES-CCM是一种通用的、认证的加密算法,使用时需要加密块密码。在蓝牙mesh规格中,AES-CCM在所有情况下都能被用作基本的加密和认证功能。其使用公式如下:
向AES-CCM输入四项内容:
k – 一个128位的密钥
n – 一个104位的随机数
m – 将被加密和认证的可变长度数据
a – 将被认证、但不加密的可变长度数据,也被称为“附加数据(Additional Data)”,这一输入参数长度可以为0字节。
从 AES-CCM有两项输出:
密文 - 加密后的可变长度数据
MIC – m和a的消息完整性检查值
下图显示了可能来自蓝牙mesh网络层(network layer)或上层传输层(upper transport layer) 的纯文本有效载荷(Payload),由具有输入加密密钥(Key)、随机数(Nonce)和纯文本有效载荷的AES-CCM进行处理。其输出为加密的有效载荷(Encrypted Payload) 和MIC。
用于数据包有效负载加密和认证的AES-CCM
SALT生成
蓝牙mesh安全性定义了SALT 生成函数s1,它采用AES-CMAC功能。如上所述,AES-CMAC具有两个输入参数:k和m。当用于SALT生成时,只有输入参数m发生变化。 K一直被设置为一个128位的值,即0x0000 0000 0000 0000 0000 0000 0000 0000,它在蓝牙mesh规格中被称为ZERO。
SALT生成函数 向 SALT生成函数输入:
m – 一个长度非零的八位字节数组或ASCII编码字符串
其输出为一个128位的MAC值,s1公式 如下:
其它安全性函数
在蓝牙mesh网络规格第3.8.2章节的“安全工具箱(Security Toolbox)”部分中,可以找到对其他安全函数的定义,例如各种关键性的派生函数。所有这些都是基于AES-CMAC和SALT生成函数s1(SALT生成函数也是基于AES-CMAC)。
()
未完待续!
安全性是蓝牙技术的首要问题,我们将在解密蓝牙mesh系列中持续探讨这一话题。读完本文,对于蓝牙mesh网络主要的安全特性以及一些基本的加密技术,您应该已经有了较为深入的了解,敬请期待下周的解密蓝牙mesh系列!
举报