了解低功耗蓝牙中的安全密钥

时间:2023-08-16
    在深入了解蓝牙低功耗 (LE) 技术如何使用安全密钥的具体细节之前(图 1),让我们先退后一步,通过了解什么是安全密钥来打下基础,特别是对于那些刚刚涉足有趣的密码学世界的人来说。
    用简单的术语来说,密码学是对用于在对手存在的情况下确保通信安全的技术的实践和研究。目标是确保只有那些应该访问该信息的人才能访问预期信息。密码学中用于实现此目标的基本工具之一是“安全密钥”。

    蓝牙 LE 使用安全密钥进行加密保护。

    图1。蓝牙 LE 使用安全密钥进行加密保护。图片来自Adobe Stock(已授权)
    安全密钥本质上是一条信息——一串数字、字符或两者——决定加密算法或密码的输出。将其视为食谱中的秘密成分,如果改变,可以极大地改变结果。
    安全密钥用于各种加密功能,例如加密、解密、签名和验证。它们帮助将纯文本数据转换为看似随机的字符集合(加密数据)并再次转换回来。
    加密是对数据进行加扰的过程,使得数据在被截获时无法被理解。安全密钥定义了数据混合的确切方式。
    解密是相反的过程,将加密的数据解密回其原始形式。此过程还使用安全密钥,该安全密钥可以与加密密钥相同(在对称加密中)或不同的相关密钥(在非对称加密中)。
    签名是使用安全密钥为一段数据创建“签名”的过程。该签名可以证明数据的完整性和真实性,表明数据自签名以来没有被篡改。
    在本文中,我们将重点介绍蓝牙 LE 技术如何使用安全密钥。重点关注三种类型的密钥:长期密钥 (LTK)、连接签名解析密钥 (CSRK) 和身份解析密钥 (IRK)。
    蓝牙 LE 安全的支柱
    低功耗蓝牙 (LE) 的安全机制建立在三个主要支柱之上:加密、数据签名和设备隐私。这些流程利用不同的安全密钥来确保数据保护和设备隐私。
    蓝牙 LE 中的加密
    加密是任何安全通信的,蓝牙 LE 也不例外。它采用对称密钥分组密码系统,即加密标准 (AES),密钥长度为 128 位。如果使用得当,它的抵抗所有已知实际攻击的能力是得到普遍认可的。
    在蓝牙 LE 中,加密过程涉及长期密钥 (LTK),它是两个连接设备共享和存储的密钥。该密钥在配对过程中生成,并在 AES-CCM 加密算法中用于加密和解密数据。
    具体来说,在加密过程中,使用 AES-CCM 算法将明文数据与 LTK 相结合,生成密文——加扰的、不可读的数据。只有拥有相应LTK的设备才能解密并访问原始信息。
    蓝牙 LE 中的数据签名
    蓝牙 LE 还通过数据签名确保数据完整性和真实性。这种安全措施保证数据在传输过程中不被篡改并且来自合法来源。
    连接签名解析密钥(CSRK)在这方面至关重要。当设备有数据要发送时,它会使用 CSRK 生成签名并将其附加到数据中。然后,接收设备使用相同的 CSRK 为接收到的数据生成自己的签名。如果生成的签名与附加到数据的签名相匹配,则确认数据的完整性和真实性。
    蓝牙 LE 中的设备隐私(随机寻址)
    蓝牙 LE 引入了通过实施可解析私有地址 (RPA) 来保护设备隐私的措施。这些临时且可变的蓝牙设备地址使恶意观察者很难根据设备的地址长期跟踪设备。
    此过程利用身份解析密钥 (IRK),这是另一个 128 位安全密钥。IRK 用于生成 RPA 并根据给定的 RPA 解析设备的身份。它确保只有受信任的设备才能从其 RPA 解析设备的真实身份,从而防止未经授权的跟踪。
    长期密钥 (LTK)

    AES-CCM 旨在在数据传输过程中提供身份验证和机密性。

    图2 . AES-CCM 旨在在数据传输过程中提供身份验证和机密性。图片由Microchip提供
    LTK 是一个 128 位密钥,与 AES-CCM(图 2)加密方法一起使用,用于执行三项主要任务:
    创建的密钥流:这是使用 LTK 制作特殊的性密钥流的步。该密钥流有时称为随机数,是随机数或近随机数。与 LTK 结合使用时,它有助于确保加密过程安全且难以破解。
    加密数据:创建密钥流后,使用 AES-CCM 加密方法来保护数据。AES-CCM 读取位于设备 RAM 中的未加密数据包,对数据包进行加密,并向数据包附加一个四字节长的消息完整性检查 (MIC) 字段。该 MIC 字段通过检查消息的完整性和真实性来增强安全性。AES-CCM 还会调整数??据包的长度以考虑额外的 MIC 字段。然后,加密的数据包将存储回设备的内存中。
    解密数据:在一步中,AES-CCM 查看设备内存中的加密数据包,对其进行解密,并验证数据包的 MIC 字段,从而生成正确的 MIC 状态。数据包的长度针对 MIC 字段进行了调整,将其减少了四个字节。然后,解密的数据包被存储回设备的存储器中。
    连接签名解析密钥 (CSRK)
    我们知道,一旦配对,两个设备就会共享可信关系,并且可以交换经过身份验证和加密的数据。
    但是,并非配对设备之间的所有通信都是加密的。是否对数据进行加密取决于通信场景的具体要求。例如,一些简单的传感器读数或其他非敏感数据可能不需要加密,而个人健康数据或其他敏感信息则需要加密。
    BLE 支持配对设备之间的加密和未加密通信,以在这些场景中提供灵活性。当不使用加密时,BLE 提供了一种替代方法来确保数据的真实性和完整性——这就是数据签名和 CSRK 发挥作用的地方。
    数据签名允许设备验证接收到的数据是否来自可信来源(与其配对的设备),并且数据在传输过程中未被篡改。
    可以将数据签名想象成用独特的个人蜡封密封一封信。任何收到这封信的人只要知道你的印章是什么样子,就可以看到印章就知道这封信是你写的。
    在蓝牙 LE 中,“密封”是发送设备在其发送的数据末尾添加的签名。当接收设备获得数据和签名时,它会检查签名。如果签名被确认或“验证”,接收设备就知道数据来自可信源。
    签名由两部分组成:消息码 (MAC),由签名算法使用 CSRK 和数据生成,以及计数器
    该计数器就像设备发送签名数据次数的运行计数。它包含在签名中以防止“重放攻击”,即恶意设备拦截数据并尝试重新发送数据。
    签署数据
    BLE 中的签名算法使用 AES-CMAC 生成消息身份验证代码 (MAC)(图 3)。该 MAC 本质上是验证数据完整性和真实性的“签名”。
    签名算法有三个输入:
    ' m ':要签名的消息或数据。这可以是任意长度。
    ' k ':用于签名生成的密钥是本例中的连接签名解析密钥。它的长度为 128 位。
    “ SignCounter ”:对于使用给定 CSRK 签名的每条消息,32 位计数器都会递增。
    签名算法使用 AES-CMAC(基于密码的消息身份验证代码)函数组合这些输入:
    MAC = CMAC (k, M, TLen)
    这里,“ M ”是消息“ m ”和“ SignCounter ”的串联。“ TLen ”是MAC的位长度,在 BLE 情况下为 64 位。
    生成MAC后,将其附加到原始消息中,并将该组合数据包发送到接收方。
    验证数据
    接收方收到此数据包后,将收到的 MAC 和消息分开。然后,它使用自己的发送者 CSRK 副本和接收到的 SignCounter 为接收到的消息生成新的 MAC。如果新计算的 MAC 与接收到的 MAC 匹配,则验证数据的完整性和真实性。
    另外,接收器将接收到的 SignCounter 与存储的 SignCounter 进行比较。如果接收到的 SignCounter 大于存储的 SignCounter,则确认该消息是新消息,从而防止重放攻击。
    身份解析密钥 (IRK)
    当蓝牙 LE 设备处于需要被发现的状态时,它会广播地址。然而,持续使用静态、可识别的地址可能会使设备容易被跟踪。
    为了避免这种情况,蓝牙 LE 使用 IRK 生成一个随机的、不断变化的 RPA(可解析私有地址),它可以用来代替其实际地址。这使得被动窃听者更难根据蓝牙地址跟踪设备。
    生成和解析这些私有地址涉及加密函数和 IRK。
    接下来,我们将更深入地了解它的工作原理。
    生成可解析的私有地址
    为了生成 RPA,设备在称为“ ah ”哈希函数的特定加密函数中使用其 IRK 和称为“ prand ”的随机数。
    该函数的方程为:
    hash = ah (IRK, prand),截断为 24 位
    在此函数中,128 位 IRK 和 24 位prand用作 AES-128 加密过程的输入,输出的有效 24 位被视为哈希值。
    然后,通过连接 24 位prand和 24 位哈希部分形成 RPA,其中prand是有效位,哈希是有效位。然后,设备在广播其广告数据包时使用此 RPA 作为其设备地址。
    RPA= 普兰德(24 位)|| 哈希(24 位)
    可解析的私有地址超时
    LE 设备的主机还负责设置超时,以确定应生成新 RPA 的频率。
    主机通过HCI_LE_Set_Resolvable_Private_Address_Timeout命令将此信息传达给控制器,该命令允许主机指定超时值。然后控制器的链路层根据该值设置计时器。当定时器到期时,控制器生成新的RPA以供使用。
    超时值的范围可以从 1 秒到 11.5 小时,这在平衡隐私需求与生成新 RPA 的计算成本方面提供了极大的灵活性。蓝牙规范建议值为 15 分钟,因为这为大多数应用程序提供了隐私和计算资源之间的合理权衡。
    可解析私有地址的解析
    当设备收到带有 RPA 的广告数据包时,它会使用其存储的 IRK 来解析 RPA 并揭示发送设备的身份或实际地址。
    这是通过使用接收到的、prand和每个存储的 IRK 执行“ ah ”散列函数来实现的。
    该函数的方程为:
    Computed_hash == ah(stored_IRK,extracted_prand)
    如果计算的哈希值与接收到的 RPA 中的哈希值匹配,则设备知道 RPA 是使用其存储的相同 IRK 生成的。因此,它可以确认广播RPA的设备是与其共享存储的IRK的同一设备。因此,解决的结果是成功的。
    解决列表和隐私模式
    解析列表(图 4)是设备链路层中的记录集,用于保存 IRK 对的记录:本地 IRK(设备自己的 IRK)和对等 IRK(与其配对的设备的 IRK) )。

    解析列表的逻辑表示。

    图4 . 解析列表的逻辑表示。使用的图像由蓝牙 5.4 规范提供
    这些 IRK 对与身份地址相关联。身份地址是的、恒定的地址,可以是公共的(在制造过程中分配)或静态的(随机选择但在设备重新启动时保持不变)。
    当设备收到带有 RPA 的广告数据包时,它会使用解析列表中的 IRK 来解析 RPA 并识别发送者。
    除了解析列表之外,低功耗蓝牙还集成了隐私模式,以定义设备如何响应解析列表中对等设备的扫描和连接请求。这些隐私模式是:
    网络隐私模式:启用后,设备仅接受来自其解析列表上的设备的广告数据包,并且数据包包含可使用对等设备存储的 IRK 进行解析的 RPA。此设置仅接受来自使用动态更改地址的已识别设备的请求,从而增强了隐私性。
    设备隐私模式:启用后,设备将仅接受来自其解析列表上的设备的广告数据包,这些设备使用其静态身份地址或可使用对等设备存储的 IRK 进行解析的 RPA。这意味着它允许使用静态地址的已知设备进行连接,以及使用隐私增强型 RPA 进行连接。
    主机可以使用控制器的 HCI_LE_Set_Privacy_Mode命令设置这两种隐私模式。
上一篇:PCB 设计注意事项
下一篇:低功耗无线电系统节能的 11 个重要技巧

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料