聯(lián)系我們
13482583038認(rèn)證技術(shù)
基于PUF的密鑰生成器:FPGA實(shí)現(xiàn)
本文基于物理不可克隆函數(shù)PUF提出了一個(gè)實(shí)用模塊化的“密鑰生成器”設(shè)計(jì),并且在FPGA設(shè)備上進(jìn)行了完整的實(shí)現(xiàn)和評(píng)估。本文設(shè)計(jì)和實(shí)現(xiàn)的PUFKY,號(hào)稱基于PUF的密鑰生成器的第一次完整實(shí)現(xiàn),包含一個(gè)PUF,一個(gè)糾錯(cuò)碼BCH
decoder和一個(gè)密碼熵累加器cryptographic entropy accumulator。
大多數(shù)密碼應(yīng)用的實(shí)現(xiàn)離不開一個(gè)安全密鑰。安全地生成和存儲(chǔ)密鑰依賴兩點(diǎn)最基本的需求:(1)一個(gè)真的隨機(jī)源,保證生成不可預(yù)測(cè)和唯一的新鮮密鑰;(2)一個(gè)受保護(hù)的存儲(chǔ)空間,用于可靠的儲(chǔ)存生成的密鑰信息,防止其被非授權(quán)方獲取。從實(shí)現(xiàn)的角度來(lái)看,這兩點(diǎn)需求都不容易滿足。首先,不可預(yù)測(cè)的隨機(jī)性通常使用偽隨機(jī)生成器PRNG(Pseudo-Random
Number Generator)來(lái)實(shí)現(xiàn),不過(guò)終究不是真隨機(jī),可以被分析攻破和利用;其次,實(shí)現(xiàn)保護(hù)存儲(chǔ)也是一個(gè)很大的挑戰(zhàn),通常導(dǎo)致增加的實(shí)現(xiàn)開銷以及受限的應(yīng)用,而且即便使用高級(jí)的物理保護(hù)機(jī)制,也無(wú)法防止專業(yè)的攻擊者。
基于PUF的密鑰生成器可以很好的滿足以上兩點(diǎn)需求,其將設(shè)備獨(dú)有的隨機(jī)指紋經(jīng)過(guò)處理后轉(zhuǎn)換為密鑰。首先,這種方法不需要PRNG,隨機(jī)性已經(jīng)可以由設(shè)備本身提供;其次,也不需要一個(gè)保護(hù)的非易失性存儲(chǔ)空間NVM,基于設(shè)備隨機(jī)指紋可以按需重新生成相同的密鑰。不過(guò),PUF響應(yīng)通常存在噪聲(noisy)而且低熵(low-entropy),因此基于PUF的密鑰生成器需要面臨兩個(gè)挑戰(zhàn):消除噪聲,增加可靠性到實(shí)用可接受的要求;壓縮足夠的熵來(lái)達(dá)到固定長(zhǎng)度的密鑰。模糊提取器Fuzzy
Extractor可以很好滿足這兩點(diǎn)。
本文構(gòu)建的PUFKY體系如下圖所示:
該體系采用“Syndrome
Construction”方法來(lái)構(gòu)造Secure Sketching(SS)。這種構(gòu)造方法主要使用二進(jìn)制線性分組碼C(n,k,t)來(lái)進(jìn)行構(gòu)造,該分組碼的校驗(yàn)矩陣為H。如何選取合適的線性分組碼很重要。通常的方式是使用一種分組碼(常用的是BCH碼),如最初的基于SRAM
PUF的SS和FE構(gòu)造;不過(guò)作者通過(guò)對(duì)“Efficient
Helper
Data
Key Extractor on FPGAs (CHES 2008)”的分析發(fā)現(xiàn)使用分組碼的組合級(jí)聯(lián)形式有更大的優(yōu)勢(shì)(在參數(shù)限制方面),于是采用了雙碼級(jí)聯(lián)的方式,使用Repetition
Code(CREP)作為一個(gè)內(nèi)部編碼(an
inner code),然后使用一個(gè)BCH code(CBCH)作為一個(gè)外部編碼(an
outer code)。
另外,基于PUF生成密鑰通常采用模糊提取器FE,即組合一個(gè)SS和一個(gè)強(qiáng)隨機(jī)提取器Ext。這需要對(duì)隨機(jī)源的最小熵作一個(gè)很強(qiáng)的假設(shè),而且使用Ext會(huì)導(dǎo)致熵流失很多,使得密鑰生成不是很實(shí)用。本篇基于另一種方法,即基于偽隨機(jī)數(shù)發(fā)生器實(shí)現(xiàn)熵累加(entropy
accumulator)。NIST SP 800-90A規(guī)范(Sect.
10.4)和NIST sp800-108規(guī)范實(shí)際上都介紹了使用密碼哈希函數(shù)來(lái)進(jìn)行熵的累積,進(jìn)而生成需要長(zhǎng)度的密鑰,要累積的熵至少要達(dá)到生成密鑰的長(zhǎng)度。
具體實(shí)現(xiàn)在一個(gè)低端FPGA(Xilinx Spartan-6)板子上,主要目標(biāo)是為嵌入式系統(tǒng)提供解決方案,因此要求實(shí)現(xiàn)的性能消耗盡可能小。PUF采用的是ROPUF(Ring Oscillator PUF,環(huán)形振蕩器),需要振蕩器的規(guī)模為(a*b)。哈希算法采用比較新的研究成果,即輕量級(jí)的SPONGENT。ROPUF相關(guān)的參數(shù)主要有三個(gè)(l,pe,ρ),其中l(wèi)是PUF輸出響應(yīng)的長(zhǎng)度,pe是PUF的最大比特錯(cuò)誤率,ρ是PUF輸出響應(yīng)的熵密度。最終生成密鑰的需求由兩個(gè)參數(shù)(m,pfail)來(lái)表示,m是目標(biāo)密鑰的長(zhǎng)度,pfail表示失敗率。ROPUF的體系如下圖:
一個(gè)參考實(shí)現(xiàn):
目標(biāo)是生成密鑰m
= 128位,失敗率pfail不大于10-9,實(shí)現(xiàn)參數(shù)過(guò)程大致如下:
(1)選擇(l
= 42, pe = 13%, ρ =
97.95%)的ROPUF,實(shí)現(xiàn)53*16個(gè)振蕩器,即a
= 53,b=16。
(2)SS使用CREP(7,1,3)和CBCH(318,174,17)的級(jí)聯(lián)形式,對(duì)于每42位的PUF響應(yīng),REP碼產(chǎn)生36位的輔助數(shù)據(jù),并輸出6位給BCH,BCH會(huì)生成144位的輔助數(shù)據(jù),并提供318位數(shù)據(jù)給熵累積器(即哈希函數(shù))。
(3)ROPUF生成a*l=2226個(gè)比特位數(shù)據(jù),其中包含a*l*ρ=2180.4位的熵??偣草o助數(shù)據(jù)長(zhǎng)度為53*36+144=2052位,這也是SS過(guò)程損失的熵,因此,SS后剩余的熵為2180.4-2052=128.4位,通過(guò)使用SPONGENT-128哈希函數(shù),可以將這些熵積累在一個(gè)m=128位的密鑰中。
(4)FPGA平臺(tái)上實(shí)現(xiàn)PUFKY共用了1162個(gè)切片(slices),其中82%用于實(shí)現(xiàn)ROPUF,其余18%用于密鑰生成邏輯單元(REP解碼37個(gè),BCH
syndrome計(jì)算72個(gè),BCH解碼112個(gè),SPONGENT128哈希22個(gè),輔助數(shù)據(jù)RAM
38個(gè))。
(5)獲取128位密鑰共花費(fèi)約5.62毫秒(@54MHz),其中PUF輸出花費(fèi)4.59毫秒,其它用時(shí)稍微大一點(diǎn)的是BCH解碼。
這里參考實(shí)現(xiàn)給出的是生成128位的強(qiáng)密鑰,可以采用類似PUFKY的模塊化體系設(shè)計(jì)生成其它密鑰參數(shù)的密鑰生成器。使用基于PUF的密鑰相比傳統(tǒng)密鑰生成方法有很多優(yōu)勢(shì),最明顯的兩個(gè)是:(1)不需要保護(hù)NVM來(lái)長(zhǎng)期存儲(chǔ)密鑰,使用PUF可以在需要時(shí)重新生成;(2)密鑰在本質(zhì)上與特點(diǎn)的平臺(tái)實(shí)體綁定,在防偽或者軟硬件綁定應(yīng)用等方面會(huì)有很大的用處。