低功耗蓝牙的安全
安全概念
安全性包括了以下内容:
- 认证
- 授权
- 完整性
- 机密性
- 隐私
认证
认证是一种证明身份的方式,用来证实所连接的设备真正是其声称的设备,而非第三方攻击者。认证采用了下列两种基本方法:
- 初始认证和秘密共享
- 使用预先共享的秘密重新认证
授权
授权是指分配权限做某事,通常包括两种方式:
- 文档提供授权
- 直接进行授权
完整性
完整性的定义是指数据的内部一致性和无讹误性。无论使用有线还是无线通信协议,数据从一个设备传送到另一个设备时都容易产生各种错误。因此,错误检测和防范非常重要。
机密性
机密性是指将事物保持机密的意图。
在低功耗蓝牙中,机密性意味着即使一个第三方窃听者接收到一个消息,她也无法解码。消息的编码过程称为加密。第二次世界大战期间开发的恩尼格玛机是一个可以加密或解密消息的设备的经典例子。
隐私
另一个安全的关注点在于任何沟通都应是私人的。完全的匿名性很难做到,例如有一个名人登机,有许多人会通过他的样子认出他。因此,要在每一个位置授予完全匿名性几乎是不可能的。
因此,隐私是能够防止他人根据你的设备认出你,而且无法在一个空间跟踪你的运动的能力。
加密引擎
低功耗蓝牙有一个密码块,实际上是一个单向函数,用于产生密钥、加密和提供完整性检查。这种加密引擎被称为先进加密系统(AES),在 NIST 的出版物 FIPS-197 中有具体的定义。低功耗蓝牙使用 AES 的 128 位版本,称为 AES-128。
共享机密
几乎所有的安全性都是基于共享机密:你的银行卡密码是一个机密,由你和你的银行之间共享;
在低功耗蓝牙里也有很多共享机密,称之为密钥。一个密钥是一个“共享机密”的速记方式。可以有很多密钥,就如同你有车钥匙、门钥匙(一到两个或者三个)、自行车锁的钥匙或存取工作文件的钥匙等。
低功耗蓝牙主要有五个密钥:
- 临时密钥(TK)
- 短期密钥(STK)
- 长期密钥(LTK)
- 身份解析密钥(IRK)
- 连接签名解析密钥(CSRK)
配对和绑定
为了保证低功耗蓝牙的绝大多数安全特征,必须完成两件事情:首先,设备必须互相配对;其次,连接一旦加密,设备必须分配用于加密、保障隐私并对消息进行验证的密钥。只要密钥被保存下来,设备就处于绑定状态了。
配对
配对有三个不同的阶段:
- 配对信息交换
- 链路认证
- 密钥分配
绑定
绑定真正来说属于通用访问规范的讨论范畴,然而,此刻也不妨考虑一下它的操作。绑定指的无非是将密钥及相关身份信息保存到安全数据库当中。如果设备不保存这些值,它们虽能配对,但却不能绑定。只要当中某一个设备不保存,重新连接后,只有一个设备拥有 LTK(长期密钥),因此加密的启动将会失败。
为了避免这种情况,两个设备在最初配对时就会交换绑定信息,从而能够清楚地知道对方是否保留了该绑定信息。如果对方设备不保存信息,那么一旦启动加密地尝试失败,主机将试图再次配对。
数据签名
当一个设备已经连接但尚未加密时,可以发送没有保密性地认证数据。要实现这一点,第一次连接配对时应当交换 CSRK。在此之后,只要没有具有保密性要求的数据需要交互,就可以使用签名。
数据签名采用 CMAC 算法。该算法需用到进行身份验证的消息、一个签名计数器(SignCounter)和用来验证发送方的 CSRK,之后生成一个签名值。
参考资料
《低功耗蓝牙开发权威指南》第11章 安全