蓝牙的信息安全机制及密钥算法改进
摘要:重点分析了蓝牙的信息安全机制,对其各部分的算法及实现步骤进行了详细讨论。并对现有蓝牙规范安全性做了一定的评估,根据其不足提出了由des算法构建的一种新的安全机制,能够满足安全性要求较高的蓝牙应用。
关键词:蓝牙 密钥 des算法 安全机制
蓝牙作为一种新兴的短距离无线通信技术已经在各个领域得到广泛应用,它提供低成本、低功耗、近距离的无线通信,构成固定与移动设备通信环境中的个人网络,使得近距离内各种信息设备能够实现无缝资源共享。
由于蓝牙通信标准是以无线电波作为媒介,第三方可能轻易截获信息,所以蓝牙技术必须采取一定的安全保护机制,尤其在电子交易应用时。为了提供使用的安全性和信息的可信度,系统必须在应用层和链路层提供安全措施。
本文重点讨论了蓝牙信息安全机制的构成原理及相关算法,并指出其在安全性方面存在的不足与问题。因为对于大多数需要将保密放在首位来考虑的应用来说,蓝牙现行标准所提供的数据安全性是不够的。蓝牙现行规范采用的128位密钥长度的序列的加密在某些情况下可以被破解。本文同时提出了一种蓝牙安全机制的改进方案,即采用des加密体制构建强健的加钥算法,能够在计算上证明此加密算法是安全可靠的。
1 蓝牙的安全机制
蓝牙采取的安全机制适用于对等通信情况,即双方以相同方式实现认证与加密规程。链路层使用4个实体提供安全性:一个公开的蓝牙设备地址,长度为48bit;认证密钥,长度为128bit;加密密钥,长度为8~128bit;随机数,长度为128bit。以下重点讨论蓝牙安全机制的组成及相关算法。
1.1 随机数发生器
随机数发生器在蓝牙标准中有重要应用,例如在生成认证密钥和加密密钥中以及查询-应答方案中等。产生随机数的理想方法是使用具有随机物理特性的真实随机数·发生器,例如某些电子器件的热噪声等,但是在实际应用中通常利用基于软件实现的伪随机数发生器。蓝牙系统对于随机数的要求是“随机生成”和“非重复性”。“随机生成”是指不可能以明显大于零的概率(对于长度为l位的蓝牙加密密钥,概率大于1/2l)估计出随机数值。
目前在众多类型的伪随机数发生器中,线性同余发生器(linear congruential generator)被最广泛地研究与使用。其表达式为:
xn+1=αxn+c(modm) n≥0。
式中α和c为常量,m为模数,均为正整数。αxn+c对m作模运算后得到xn+1。开始时以某种方式给出一个种子数x0;然后使用前一个随机整数xn生成下一个随机整数xn+1,由此产生整数随机数列{xn}。
1.2 密钥管理
蓝牙单元密钥长度不能由单元制造者预置,不能由用户设置。蓝牙基带标准规定不接收由高层软件给出的加密密钥以防止使用者完全控制密钥长度。
1.2.1 密钥类型
链路密钥是一个128位随机数,为通信双方或多方共享的临时性或半永久性密钥。半永久性链路密钥可以用于共享链路单元之间的几个相继认证过程中。临时密钥的典型应用是:在点对多点通信情况下,同一信息需要安全地发往多个接收端,这时采用主单元密钥取代当前链路密钥。蓝牙标准定义了四种链路密钥:①联合密钥kab;②单元密钥ka;③临时密钥kmoster;④初始化密钥kinit。此外还定义了加密密钥kc,由当前链路密钥生成。对蓝牙单元来说,单元密钥ka在单元a中生成,依赖于该单元,很少改变。联合密钥kab。由单元a、b方共同生成。临时密钥kmoster仅在当前会话中使用,也称主单元密钥。初始化密钥kinit是蓝牙初始化过程中使用的链路密钥。该密钥由一个随机数、一个通常为十进制的pin码以及发起单元的蓝牙设备地址bd_addr生成。pin码可由用户选择也可以是随蓝牙一起提供的固定数。目前大多数应用中pin码为4位的10进制数,无法提供较高的安全性。蓝牙基带标准要求pin码长度为1~16位,因此建议尽量使用较长的pin码以增强安全性。
1.2.2 密钥生成与初始化
每一对要实现认证与加密的蓝牙单元都要执行初始化过程,其过程由以下几部分组成:
(1)生成初始化密钥kinit:为初始化过程中临时使用的链路密钥。该密钥由e22算法及相关参数生成,其生成原理图见图1。e22输出的128位初始化密钥kinit用于链路密钥的交换分配过程。如果申请者与证实者没有交换过链路密钥,则kinit用于认证过程,否则不再使用。该过程必须保证能够抵御一定的攻击,例如攻击者使用大量的假蓝牙地址bd_addr来测试大量pin等,如果设备地址固定则每次测试pin码等待间隔应按指数增加。
(2)认证:如果两个单元没有发生过通信联系,则使用初始化密钥作为链路密钥。每次执行认证规程,均发布新随机参数au_randa。在相互认证中,首先在一个方向执行认证规程,成功后再反向执行认证。认证成功将得到一个辅助参数aco,即认证加密偏移量。它将用于生成加密密钥。
(3)生成单元密钥:单元密钥在蓝牙单元首次运行时生成,根据e21算法生成并几乎不改变。初始化时,通信双方通常选用一个内存容量较少的单元中的密钥作为链路密钥。
图3
(4)生成联合密钥:联合密钥是分别在a单元与b单元中生成的两个数字的组合。生成过程是:每个单元生成随机数lk_randa与lk_randb,采用e21算法与各自的随机数、蓝牙地址分别生成另一个随机数lk_ka与lk_kb,并通过其他操作后两个单元得出联合密钥。然后开始互相认证过程以确认交互过程成功。联合密钥交换分配成功后将放弃使用原链路密钥。
(5)生成加密密钥:加密密钥kc根据e3算法,由当前链路密钥、96bit“加密偏移数”cof和一个128bit随机数导出。
(6)点对多点配置情况:实际上,主单元通知几个从单元使用一个公共链路密钥广播加密消息,在多数应用中这个公共链路密钥是临时密钥,记为kmoster。kmoster被从单元接收后便可用它替代原链路密钥kmoster的产生过程为:首先由2个128bit的随机数rand1与rand2生成新链路密钥kmoster:kmoster=e22(rand1,rand2,16)。然后将第3个随机数rano发往从单元,主、从单元根据e22、当前链路密钥及rand计算出128bit扰乱码overlay,主单元将overlay与新链路密钥按位“异或”结果发送给从单元,再计算出kmoster。在后面的认证过程中计算出一个新aco值。
1.3 加密规程
对有效载荷加密通过流密码算法实现,流密码与有效载荷同步,加密原理图如图2所示。流密码系统由三部分组成:执行初始化、生成密钥流比特、执行加密或解密。有效载荷密钥生成器将输入比特流以恰当顺序进行组合并移人密钥流生成器使用的4个线性反馈移位寄存器lfsr。第二部分是主要部分,密钥流比特根据massey与rueppel提出的方法生成,该方法经过一定的分析与研究,证明具有较高的加密性能,但此法可能受到相关攻击,其改进方法在本文后面详细描述。
1.3.1 商定加密密钥长度与加密模式
实现基带标准的蓝牙设备需要定义最大允许密钥字节长度lmax,1≤lmax≤16。在生成加密密钥前,有关单元必须商定密钥实际长度。主单元将建议值l(m)sug发送给从单元。如果l(s)min≤l(m)min并且从单元支持建议值,从单元对此给予确认,l(m)min成为本链路加密密钥长度值。如果不满足上述条件,从单元将向主单元发送新的建议值l(s)min〈l(m)sug,主单元对此建议评估。重复此规程直至达成协议或一方放弃商谈。
1.3.2 加密算法
加密规程使用流密码加密。加密系统使用线性反馈移位寄存器(lfsrs),寄存器系统输出由具有16状态的有限状态机进行组合,状态机输出或是密钥流序列,或是初始化阶段的随机初始值。加密算法需要提供加密密钥、48bit蓝牙地址、主单元时钟比特与128bit随机数rand,加密算法原理如图3所示。
其中,有4个lfsr(lfsr1,…,lfsr4),比特长度分别为l1=25,l2=31,l3=33,l4=39,反馈多项式(抽头多项式,特征多项式)。4个寄存器长度之和是128bit。
这些多项式都是本原多项式,汉明重量都为5,可以兼顾生成序列具有良好的统计特性与减少硬件实现所需要的异或门数两方面的要求。
令xit表示lfsrit时刻输出状态比特,由四元组(x1t,…,x4t)得yt为:
,式中yt为整数,取值为0,1,2,3或4。加法生成器输出由下述方程给出:
式中,t1[.]与t2[.]是gf(4)上两个不同的线性双射。
密钥流生成器工作前需要为4个lfsr(总共128bit)装载初始值并且确定c0与c-14bit值,这些132bit初始值使用密钥流生成器由规定的输入量导出,输入量分别为密钥kc、48bit蓝牙地址和26bit主单元时钟clk26-1。加密算法初始化过程:(1)由128bit加密密钥kc生成有效加密密钥,记为k'c,令l(1≤l≤16)为用8bit组数目表示的有效密钥长度,则k'c(x)=g2(l)(x)(kc(x)modg1(l)(x))。(2)将k'c、蓝牙地址、时钟以及6bit常数111001移入lfsr。加密算法初始化完成后,从加法组合器输出密钥流用于加密/解密。
1.3.2 认证
蓝牙技术认证实体使用所谓查验-应答方案。通过“两步”协议,申请者是否知道秘密密钥使用对称密钥进行证实。这意味着,一个正确的申请者/证实者对,在查验-应答方案中将共享相同密钥kc,证实者对于申请者是否能够认证算法k1认证随机数au_randa,并返回认证结果sers,进行查验。其认证及加密密钥生成函数可以参考相关资料,此处略。
2 蓝牙安全机制的方案改进
现有蓝牙安全机制主要存在两个主要问题。一个是单元密钥的使用问题:在鉴权和加密过程中,由于单元密钥没有改变,第三方利用此密钥来窃取信息。128位密钥长度的e0序列加密在某些情况下可通过不是很复杂的方法破解。另一个是蓝牙单元提供的个人识别码(pin码)的不安全问题:由于大多数应用中pin码是由4位十进制数组成,所以采用穷举法很容易攻击成功。
克服这些安全性问题的解决方法除了增加pin码长度外,关键是要采取更为强健的加密算法,如用数字加密标准des代替序列加密算法。des是一种块加密方法,加密过程是针对一个个数据块进行的。在des算法中,原始信息被分为64位的固定长度数据块,然后利用56位的加密密钥通过置换和组合方法生成64位的加密信息。与蓝牙序列的加密算法不同,数学上可以证明块加密算法是完全安全的。des块密码是高度随机和非线性的,其产生的密文和明文与密钥的每一位都相关。des的可用加密密钥数量非常庞大,应用于每一位明文信息的密钥都是从这个庞大数量的密钥中随机产生的。des算法已经被广泛采用并认为非常可靠。采用des加密算法的蓝牙技术可以将蓝牙应用到安全性较高的应用中去,例如电子金融交易、atm等。
2.1 des算法
1977年美国国家标准局公布了联邦数据加密标准des。由于des算法保密性强,迄今尚无切实可行的破译方法,所以des得到了广泛地应用。des是一种分组密码体制,它将明文按64位一组分成若干组,密钥长为56位。其基本思想是采用变换的组合与迭代,将明文中的各组变为密文组。
在des系统中,乘积变换是加密过程的核心,连续进行16次操作,每次更新一组密钥。移位变换b是移位变换a的逆变换。图4为des体制加密流程,图的右侧表示des系统的密钥生成过程。初始密钥是一串64bit的随机序列。经过反复移位变换,产生16组子密钥(k1~k16),每组子密钥用于一次乘积变换。所谓初始重排(ip)就是打乱输入分组内比特原有排列次序,重新排列,排列方式是固定的。
des的一次乘积变换运算步骤为:(1)把64bit输入码分成左右两组,每组32位比特,分别用li-1和ri-1代表。其中i代表第i次乘积变换,i=1~16。(2)把该次乘积变换输入分组的右组32位比特变为输出分组的左组32位比特,即li=ri-1。(3)输入分组右组32位比特经过扩展操作变为48位比特码组。(4)扩展变换输出的48位比特与子密钥ki的48位比特按模2相加,输出的48位比特分为8组,每组6位。(5)把每组6位比特进行密表(s-盒)替代,产生4位比特。输入的6位比特的第1、6两位决定密表内所要选择的行数,其余4位决定密表内的列数。(6)把8组密表输出合并为32位比特,然后与本次乘积变换输入左组ci-1按位模2相加,即可得到第i次乘积变换的右32位输出ri。
2.2 des算法的特点
des算法具有以下特点:
(1)des的保密性仅仅取决于对密钥的保密,算法公开。
(2)在目前水平下,不知道密钥而在一定的时间内要破译(即解析出密钥k或明文)是不可能的,至少要建立2 56或2 64个项的表,这是现有资源无法实现的。
(3)由于“雪崩效应”,无法分而破之,一位的变化将引起若干位同时变化。
综上所述,由des算法构建的蓝牙安全机制是可靠的,采用穷举方式攻击是不现实的。假设有一台每秒完成一次des加密的机器要用将近1000年的时间才能破译这个密码。
以上算法能够保持数据加密过程中与蓝牙标准所需参数的一致性,它与蓝牙算法产生的单元密钥在时间实现上同处一个数量级别,符合蓝牙规范要求。
本文首先重点讨论了蓝牙信息安全的机制构成,对其各部分的算法及实现步骤进行了详细说明。然后对现有蓝牙规范安全性做了一定的评估,并根据其不足提出了由des算法构建新的安全方案,能够给蓝牙在安全性要求较高的应用上提供一个安全设计的改进参考。