蓝牙安全 原文
像802.11安全一样,蓝牙并不是端到端的安全协议,而实际上只是采用网络无线部分的安全手段。
蓝牙有三种安全模式
安全模式1:非安全性:在非安全模式下,设备不会启动安全过程,并且完全忽略了认证和加密。
安全模式2:服务级强制安全性:在此模式下,在逻辑链路控制和适配协议(L2CAP)层建立通道后,开始安全过程。 安全管理器(security manager)通过使用策略和“信任(trust)”级别控制对不同服务和设备的访问。
安全模式3:链路级安全:在模式3中,设备在通道建立之前启动安全过程。 通过使用设备之间的秘密链接密钥(secret link key),都支持单向和双向(unidirectional and mutual)认证和加密。 第一次两台设备通信时就生成链路密钥。
链接密钥生成
首次通信的两台设备将经过初始化阶段; 他们将在这一点“联系(associated)”。 当用户将相同的PIN输入到两个设备中时,链路密钥生成开始,设备用于生成其秘密链接密钥(secret link key)。 蓝牙的安全优势之一是在设备之间的后续通信中,链路密钥(link key)永远不会传输到设备外部; 链接密钥(link key)仅用于加密算法来生成匹配序列(matching sequences)。
认证(Authentication)
在蓝牙中,通过质询 - 响应方案(challenge-response scheme)实现认证,其目的是验证请求访问的设备具有秘密链接密钥(secret link key)的知识。 请求设备首先将其唯一的设备地址发送到验证设备。 验证设备然后从随机数发生器发送128位随机质询(challenge)。 两个设备都使用E1算法处理随机质询(challenge),设备地址和链路密钥(link key)产生32位结果。 然后,验证者比较两个结果,并且如果结果匹配,则对请求设备进行认证。
蓝牙通过指数地增加(exponentially increasing)尝试之间所要求的时间量来阻止重复的链路密钥(link key)破解尝试。这种技术对于执行脱机攻击( offline attacks)来搜索所有PIN空间的攻击者是无效的。
加密
蓝牙使用称为E0的流密码(stream cipher)加密其数据传输。所使用的密钥流(key stream )是通过以下值作为输入的算法生成的:设备地址,随机数,时隙号和加密密钥(encryption key)。 加密密钥(encryption key)是从作为输入的内部密钥生成器(internal key generator)产生的:链路密钥(link key),随机数和来自认证过程的值。 用于加密每个数据包的密钥流(key stream )在每个数据包的基础上进行更改,因为每个时隙的编号(slot number)不同,但所有其他变量都保持不变。