蓝芽技术的安全机制 □ 郑州信息工程大学 李蒙 熊明全 - 转载或资料收集 - 项立刚

(这条文章已经被阅读了 61 次) 时间:2001-10-13 20:47:42 来源:项立刚 (项立刚) 转载

蓝芽技术的安全机制

□ 郑州信息工程大学 李蒙 熊明全
蓝芽技术提供短距离的对等通信,它在应用层和链路层上都采取了保密措施以保证通信的安全性,所有蓝芽设备都采用相同的认证和加密方式。在链路层,使用4个参数来加强通信的安全性,即蓝芽设备地址BD_ADDR、认证私钥、加密私钥和随机码RAND。 蓝芽设备地址是一个48位的IEEE地址,它唯一地识别蓝芽设备,对所有蓝芽设备都是公开的;认证私钥在设备初始化期间生成,其长度为128比特;加密私钥通常在认证期间由认证私钥生成,其长度根据算法要求选择8-128比特之间的数(8的整数倍),对于目前的绝大多数应用,采用64比特的加密私钥就可保证其安全性;随机码由蓝芽设备的伪随机过程产生,其长度为128比特。
本文重点介绍蓝芽技术中密钥管理和加密认证过程。
一、随机码生成 每个蓝芽设备都有一个伪随机码发生器,它产生的随机数可作为认证私钥和加密私钥。在蓝芽技术中,仅要求随机码是不重复的和随机产生的。”不重复”是指在认证私钥生存期间,该随机码重复的可能性极小,如日期/时间戳;”随机产生”是指在随机码产生前不可能预测码字的实际值。
二、密钥管理 加密私钥的长度是由厂商预先设定的,用户不能更改。为防止用户使用不允许的密钥长度,蓝芽基带处理器不接受高层软件提供的加密私钥。
若想改变连接密钥,必须按基带规范的步骤进行,其具体步骤取决于连接密钥类型。
1.密钥类型 连接密钥是一个128比特的随机数,它由两个或多个成员共享,是成员间进行安全事务的基础,它本身用于认证过程,同时也作为生成加密私钥的参数。
连接密钥可以是半永久的或临时的。半永久连接密钥保存在非易失性存贮器中,即使当前通话结束后也可使用,因此,它可作为数个并发连接的蓝芽设备间的认证码。临时连接密钥仅用于当前通话。在点对多点的通信中,当主设备发送广播信息时,将采用一个公共密钥临时替换各从设备当前的连接密钥。
为适应各种应用,定义如下密钥类型:
·组合密钥KAB ·设备密钥KA ·临时密钥Kmaster ·初始密钥Kinit 此外,Kc表示加密私钥。任何时候执行连接管理器(LM)命令进行加密时,加密私钥就会自动改变。
对蓝芽设备而言,KAB和KA在功能上没有区别,只是生成方法不同而已。KA由设备自身生成,且保持不变;KAB由设备A和设备B提供的信息共同生成,只要有两个设备产生一个新的连接,就会生成一个KAB。
究竟采用KA或KAB,取决于具体应用。对于存贮容量较小的蓝芽设备或者对于处于大用户群中的设备,适合采用KA,此时只需存贮单个密钥。对于要求较高安全级别的应用,适宜采用KAB,但要求设备拥有较大的存贮空间。
Kmaster仅用于当前通话,它可以临时替换连接密钥。
Kinit在初始化期间用作连接密钥,以保证初始化参数的安全传送,它由一个随机数、PIN码的低8位及BD_ADDR生成。
PIN码可以是蓝芽设备提供的一个固定码,也可以由用户任意指定,但两个设备中的PIN码必须匹配。在两个设备中采用用户指定的PIN码比采用设备自身提供的PIN码更安全;即使采用固定的PIN码方式,也应该允许能够改变PIN码,以防止获得该PIN码的用户重新初始化设备。如果找不到可用的PIN码,则使用缺省值0。短PIN码可以满足许多具体应用的安全性要求,但存在不确定的非安全因素;过长的PIN码不利于交换,需要应用层软件的支持。因而,在实际应用中,常采用短的数据串作为PIN码,其长度一般不超过16字节。 2.密钥生成及初始化 蓝芽设备必须生成各种连接密钥,以便认证例程使用。连接密钥有保密性要求,因而不能象设备地址那样公开查询。进行认证和加密的两个设备在初始化阶段单独地交换密钥,初始化过程包括以下五个部分:
·生成Kinit ·认证 ·生成连接密钥 ·交换连接密钥 ·各自生成加密私钥 初始化后,设备间可继续通信,也可断开连接。若想对信息加密,则利用当前连接密钥生成的加密私钥,采用E0算法(本文中提到的E0、E21、E22和E3等算法,均作为名词使用,而不给出具体的公式)进行加密。在两个设备间建立新的连接时,则使用公共连接密钥代替Kinit进行认证。在进行一次新的加密时,将由特定的连接密钥生成一个新的加密私钥。如果没有连接密钥有效,LM将自动开始一个初始化过程。
(1)初始密钥Kinit生成 初始化期间使用的连接密钥称之为Kinit,其长度为128比特,由E22算法生成,算法的输入参数为申请连接的设备地址BD_ADDR、PIN码、PIN码的长度及随机数IN_RANDA。Kinit用于连接密钥生成期间的密钥交换和未登记连接密钥的两设备间的认证,它在连接密钥交换完成后废弃。 Kinit生成后,PIN码将会随着申请设备的BD_ADDR而增长。算法要求PIN码的长度最大不超过16字节,以便确保只有特定的设备才能连接上。非法用户需要试验大量的PIN码,而且每次都必须使用不同的BD_ADDR,否则进行下一次实验需等待的时间间隔将按指数增长,这样可以减小入侵者对合法用户的威胁。
(2)认证 如果两个设备未曾联系过,它们将把Kinit作为连接密钥。在每次认证期间,都会产生一个新的认证随机数AU_RANDA。相互认证时,首先进行单向认证,再进行反方向认证。 当认证成功时,就会计算出一个辅助参数--认证加密偏移量ACO。在相互认证时,一般保留第二次认证时计算出的ACO,如果认证事件在两个设备中同时发生,则两个设备都将使用主设备产生的ACO。
(3)设备密钥KA的生成 KA在蓝芽设备首次工作时由E21算法生成并保存在非易失性存贮器中,以后基本不变。初始化后,若KA发生了变化,则此前已初始化的设备保存的连接密钥将是错误的。初始化期间,应用程序一般选择存贮能力较小的设备的KA作为连接密钥。
(4)组合密钥KAB的生成 组合密钥在初始化期间由设备A和B分别产生的随机数合成。首先,设备A、B分别产生随机数LK_RANDA和LK_RANDB;然后,设备A、B采用如下算法再分别生成随机数LK_KA和LK_KB,即: LK_KA = E21煟蹋耍撸遥粒危模粒BD_ADDRA , 煟牛眩玻保 LK_KB = E21煟蹋耍撸遥粒危模拢BD_ADDRB牐 煟牛眩玻玻 接着,设备A、B分别计算CA=LK_RANDA荩撕停茫拢剑蹋耍撸遥粒危模芦荩耍ㄔ诔跏蓟时,K=Kinit)并交换计算结果;之后,设备A、B分别计算LK_KB(EQ22)和LK_KA(EQ21);最后,设备A、B通过异或运算分别生成128比特的组合密钥KAB和KBA,两者是相等的。 (5)加密私钥Kc的生成 加密私钥Kc由当前的连接密钥、96比特的加密偏移量(COF)、128比特的随机数通过E3算法生成。其中: COF=BD_ADDR串联BD_ADDR 链路密钥为Kmaster时 ACO 其它 (EQ23) 每当LM激活加密进程时,设备都将采用E3算法自动改变加密私钥KC。 (6)点对多点通信 使用加密方式进行点对多点的通信时,主设备可以使用不同的加密私钥与每一个从设备进行通信。如果某个应用要求从设备接收广播信息,从设备却是单独收发信息的,将造成网络通信容量的减小。另外,蓝芽从设备不支持两个或多个密钥的实时交换,因而在蓝芽技术中,主设备通知各从设备采用一个公用密钥Kmaster接收加密的广播信息。对于多数应用来说,此密钥只具有临时意义。 主设备在确认所有从设备都能成功接收后,就发送一条指令,让各从设备用Kmaster替换它们当前的连接密钥。进行加密之前,主设备将产生并分发一个公共的随机数EN_RAND给所有从设备,从设备就使用Kmaster和EN_RAND产生新的加密私钥。 当所有从设备都得到了必要的数据后,主设备将使用新的加密私钥在网络中进行通信联系。显然,拥有Kmaster的从设备不仅能获得发送给自己的信息,还能获取所有加密的广播信息。如有必要,主设备可令所有从设备同时恢复使用以前的连接密钥。 (7)连接密钥的修改 在某些情况下,需要修改基于设备密钥的连接密钥。设备密钥在设备首次使用时创建,由于多个设备可能共享作为连接密钥的同一个设备密钥,因此,一旦创建几乎不再更改,否则将重新初始化所有试图连接的设备。在某些应用中这样做是必要的,如拒绝以前访问过的设备接入。 如果密钥的更改涉及到组合密钥,只需将当前的组合密钥作为连接密钥。这一更改密钥的过程可以在认证和加密开始后的任何时侯进行,其实组合密钥可以在每次连接建立时更改,这还有利于提高系统的安全性。 (8)Kmaster的生成 创建Kmaster时,需要如下步骤: ·主设备采用E22算法,将128比特的随机数RAND1、RAND2作为输入参数,生成新的连接密钥Kmaster = E22(RAND1,RAND2,16)      
·主设备将另一个随机数RAND发送给从设备,用当前连接密钥K和RAND作为E22算法的输入参数,然后主、从设备都计算出一个128比特掩码OVL=E22(K,RAND,16) ·主设备将掩码与当前连接密钥进行异或运算,并将运算结果C=OVL荩耍恚幔螅簦澹蚍⑺透从设备,从设备重新计算Kmaster=OVL荩 ·为确保交换成功,主、从设备将使用新的连接密钥进行认证,所有接收新的连接密钥的从设备都将重复此认证过程,由于在主设备恢复以前的连接密钥时还需要当前的ACO计算密文密钥,因此从相关身分认证过程得到的ACO值不能替代当前ACO ·各从设备重新计算新的加密私钥Kc=E3(Kmaster煟牛危撸遥粒危模COF)
三、加密 采用加密方式可以保护用户信息,但接入码和报头不加密。在蓝芽技术中,用序列加密算法E0加密用户信息。 序列加密算法E0由三部分组成,即载荷密钥生成、密钥比特流生成、加/解密运算。载荷密钥发生器按一定顺序组合输入比特流,并将它们移入密钥比特流发生器的线性反馈移位寄存器(LFSRs);密钥比特流发生器是序列加密体系的核心部分,它采用Massey和Rueppel提出的组合序列密码发生器,该方法已通过全面论证,其性能优异。尽管组合序列密码发生器在抗相干攻击方面存在缺陷,但采用频繁同步的方法可瓦解相干攻击。
1.加密私钥长度协商 每一个蓝芽设备都有参数Lmax,它定义了设备所允许的最大密钥长度,1≤Lmax≤16字节;参数Lmin则定义了某个特定应用中可接受的最小密钥长度。在产生加密私钥前,所有相关设备必须协商密钥的实际长度,其协商过程如下: ·主设备发送一个建议值Lm煟螅酰绺从设备,初始时,建议值设为Lm煟恚幔,如果Ls煟恚椋睢埽蹋恝煟螅酰缜掖由璞钢С纸ㄒ槌ざ龋则从设备确认该长度并将它作为连接中密钥长度。
·若两个条件都不满足,则从设备发送一个新的建议值Ls煟螅酰纾迹蹋恝煟螅酰绺主设备,主设备进行相同的测试。
·重复上述过程,直到主、从设备达成协议或一方放弃时结束。若协商失败,就不能进行连接加密。
由应用程序本身决定是否接受建议值,就不一定能建立起安全连接,但这是十分必要的防范措施,它可以防止非法设备使用短密钥入侵。
2.加密方式 如果从设备拥有半永久连接密钥,即组合密钥或设备密钥,则它只能在指定的时隙收发加密信息。列出了可能采用的加密方式,表中的连接密钥指加/解密时的密钥是从连接密钥获得的。 如果从设备接收到了Kmaster主密钥,将有三种可能的加密组合方式。        
主设备通过发送一条LM命令可以让从设备恢复以前的连接密钥,不管从设备处于何种状态,它们都将返回到未加密方式。
3.加密过程 序列加密算法的加密过程就是将数据流与密钥比特流进行异或运算。对每一分组的有效载荷的加密是单独进行的,它发生在CRC校验之后,FEC编码之前。 加密算法E0的输入参数为主设备地址、时钟CLK26-1和Kc。时钟CLK26-1按时隙递增,在任两次发送中,CLK26-1至少有一位是不同的,因此在每次初始化后都将产生新的密钥流。对占用多个时隙的分组来说,CLK26-1为分组所占的第一个时隙的时钟值。 算法E0产生的密钥流Kcipher与数据流异或产生密文。由于加密是对称的,加/解密使用完全相同的密钥。加密过程的功能描述。
4.加密算法 加密机采用了四个线性反馈移位寄存器(LFSR),依次为LFSR1、LFSR2、LFSR3、LFSR4,其长度分别为25、31、33、39比特。LFSR的性质: 加密机把四个LFSRs的输出结果输入到一个有限状态机中,经有限状态机的组合运算输出密钥流序列,若在初始化阶段则输出一个随机的初始化值。加密算法将使用Kc、BD_ADDR、主时钟CLK26-1及RAND。
5.LFSR初始化 加密机的LFSRs的初始值源于加密算法的四个输入参数,即Kc、RAND,BD_ADDR及主时钟CLK26-1,其过程较为复杂,本文不作介绍。
6.密钥流序列 当初始化完成后,有限状态机的输出就是加/解密使用的密钥流序列。 四、认证 在蓝芽技术中,认证采用口令-应答方式。验证方要求申请者鉴别随机数AU_RAND及认证码E1并返回计算结果SRES,若双方的计算结果相等则认证成功。
在蓝芽技术中,不要求验证方一定是主设备,而是由应用本身指明需要认证的设备,且在某些应用中只须单向认证。在对等通信中,采用相互认证方式,由LM控制认证的方向。当设备A成功认证设备B后,设备B将AU_RANDB(不同于AU_RANDA)发送给设备A,设备B、A使用新的AU_RANDB、BD_ADDRA和连接密钥分别计算出SRES和SRES',若两者相等,则认证成功,并保留ACO值。 若某次认证失败,则必须等待一定的时间间隔才能进行再次认证。如果使用同一BD_ADDR重复认证,则等待的时间间隔将按指数方式增长到最大值;若在一段时间内,所有认证都是成功的,则两次认证间的时间间隔将按指数方式减小到最小值,此方式可以阻止试图使用不同的密钥以重复认证方式登录的入侵者。蓝芽设备保留了每一个已接入设备的认证时间间隔表,以减少遭到攻击的可能性。
总之,蓝芽安全机制的目的在于提供适当级别的安全保护。如果用户有更高级别的保密要求,可采用更有效的传输层和应用层安全机制。

请发表你的意见