在多層停車場(chǎng)中,用戶用來抬起橫竿的紅外線通行卡就是身份驗(yàn)證設(shè)備的一個(gè)簡(jiǎn)單實(shí)例,它首先發(fā)送自身的序列號(hào),之后再發(fā)送一個(gè)身份驗(yàn)證塊,其中包括與之前序列號(hào)相同的序列號(hào),后跟一個(gè)隨機(jī)數(shù)——?所有這些信息都用該設(shè)備獨(dú)有的密鑰進(jìn)行加密。我們暫不討論如何對(duì)數(shù)據(jù)進(jìn)行加密以及密文應(yīng)該具備什么特性,這里用符號(hào){X}K簡(jiǎn)單地表示用密鑰K對(duì)消息X加密。
以上面的約定為基礎(chǔ),汽車通行卡和停車場(chǎng)之間的協(xié)議可以寫成如下形式:
T→G:T,{T, N}KT
這是標(biāo)準(zhǔn)的協(xié)議工程表示法,剛開始了解時(shí)可能不太明白,所以我們將慢慢地對(duì)其進(jìn)行講解。
汽車內(nèi)的通行卡發(fā)送其名稱T,其后跟加密的T,之后是N,這里N代表“一次性使用的數(shù)字”或Nonce,花括號(hào)內(nèi)的所有信息都是加密的,通過加密,將T與N綁定在一起并使其值難于理解。使用Nonce是為了向接受者保證消息是新鮮(fresh)的,也就是說,不是重放攻擊者觀察到的舊消息。身份驗(yàn)證過程很簡(jiǎn)單:停車場(chǎng)服務(wù)器讀到T,獲得相應(yīng)的密鑰KT,把余下的消息解密,確認(rèn)Nonce N是第一次出現(xiàn),最后確認(rèn)明文中包含T(這種身份驗(yàn)證方式將有效阻止停車場(chǎng)中的竊賊使用連續(xù)的密文猜測(cè)對(duì)所有汽車進(jìn)行并行盜竊嘗試)。
上面的表示法導(dǎo)致很多人混淆的原因之一是,在冒號(hào)左側(cè),T代表主體(用戶的令牌),而在冒號(hào)右側(cè),T代表令牌的名字(序列號(hào))。另一個(gè)原因是,在本書開始討論攻擊協(xié)議時(shí),我們發(fā)現(xiàn)從令牌T發(fā)往停車場(chǎng)G的消息實(shí)際上被中間人F截獲了,并在之后進(jìn)行重放。所以這種表示法在這里并不合適,但是由于一直的習(xí)慣使得現(xiàn)在難以更改。專業(yè)人員一般只把冒號(hào)左邊的T→G簡(jiǎn)單地看成是協(xié)議設(shè)計(jì)者頭腦中的一種示意表示。
術(shù)語Nonce可以指代任何能保證消息新鮮性的信息。根據(jù)不同的上下文,Nonce可以是隨機(jī)數(shù)、序列號(hào)、第三方發(fā)出的隨機(jī)質(zhì)詢信息,甚至可以是時(shí)間戳。這些方法有微小的差別,比如,它們抵抗各種重放攻擊的能力不同,提高系統(tǒng)復(fù)雜性的方式也不同。但在低成本的系統(tǒng)中,前兩種占優(yōu)勢(shì),因?yàn)樗鼈兛梢愿畠r(jià)地建立單工通信信道,并且廉價(jià)設(shè)備通常也沒有時(shí)鐘。
這種設(shè)備的密鑰管理非常簡(jiǎn)單。典型的停車場(chǎng)令牌中,其密鑰就是使用全局主密鑰KM對(duì)其序列號(hào)加密得到的(只有中央服務(wù)器知道KM):
KT={T}KM
這就是密鑰分散化(key diversification)。它給出了實(shí)現(xiàn)訪問令牌的一個(gè)簡(jiǎn)單方法,并在以智能卡為基礎(chǔ)的系統(tǒng)中得到了廣泛應(yīng)用,但仍然有很多地方會(huì)出現(xiàn)錯(cuò)誤。有一種錯(cuò)誤是因?yàn)樾蛄刑?hào)長(zhǎng)度不夠?qū)е碌?,由于這一錯(cuò)誤,人們偶爾會(huì)發(fā)現(xiàn)自己的遙控器可以對(duì)停車場(chǎng)內(nèi)的其他汽車進(jìn)行控制。即便對(duì)16位序列號(hào)進(jìn)行加密得到128位的密鑰,也不能解決這一問題。
弱密碼也是一個(gè)問題。很多汽車制造商在其車鎖與防盜系統(tǒng)的令牌技術(shù)中使用了一種稱為Keeloq的分組密碼,這種密碼是在20世紀(jì)80年代晚期發(fā)明的,使用了最小數(shù)量的門。該算法中包含一個(gè)使用簡(jiǎn)單輪函數(shù)進(jìn)行大量迭代的過程。然而,近些年來,對(duì)這種密碼的攻擊方法已經(jīng)涌現(xiàn)出來,其中就包括Keeloq,要進(jìn)行這種攻擊,需要擁有一個(gè)小時(shí)左右的密鑰訪問權(quán),以便收集攻擊所需的足夠數(shù)據(jù),之后在PC機(jī)上對(duì)其進(jìn)行大概一天時(shí)間的處理,就可以恢復(fù)其中包含的加密密鑰[172]?;蛟S你認(rèn)為這是一種不可行的攻擊,因?yàn)楣粽咭刖邆鋵?duì)密鑰的訪問權(quán),首先要擁有汽車駕駛權(quán)。然而,在有些實(shí)現(xiàn)中,還有嚴(yán)重的協(xié)議漏洞,因?yàn)槊荑€分散化不是使用分組密碼本身實(shí)現(xiàn)的,而是使用異或計(jì)算方法:KT=T?KM。因此,在破解了某種類型汽車的單車密鑰后,就可以馬上計(jì)算出該類型其他汽車的密鑰。發(fā)現(xiàn)這種攻擊者的研究者表示:“很快,密碼破譯者就會(huì)開上好車了”。