# 硬體信任根(HRoT) > 資料來源:[PUFsecurity Corp. Hardware Security Theory and Practices 課程](https://www.youtube.com/watch?v=JspYigs4fqM&list=PLDNrc1OLJC_WGd5nxmkOl_TYV4Jom_mCc&index=1)。 ## Hardware Root-of-Trust ### 硬體資安  舉例-Side-Channel Attack Using Power Analysis:  為何需要硬體資安,有不同面向: - 硬體的實現比軟體還有效率。 - 針對硬體的攻擊防護。 - 需要一個我們「真正可以信任的元件」。 - 物理上的隨機性。 ### RoT(Root-of-Trust)  ### Unpredictability 如圖:  今天 Alice 要產生一把 key $K_A$ 來作加解密運算;Eve 則是想要預測該 key。 則我們會希望 Eve 猜測得到 $K_A$ 的機率越小越好。 透過 **entropy** 來量化 Unpredictability。 如公式 Min-entropy $H_\infty = -log_2(max(Pr(K_A=k)))$ 。 > 與 $K_A$ 最容易出現的值有關。 舉例 Min-entropy 的計算如下:  Full-entropy 意味著「越難被預測」。 故我們會想讓 key 具有 full-entropy 的特性。 ### Entropy  我們不應該用任何演算法來產生 entropy,因其皆是「決定性的」。 True Randomness 應來自於「物理的機制 / 源頭」。 如下圖之晶片上的 Entropy Sources 舉例:  - Dynamic Entropy:會隨時間變化。通常拿來用作 True random number generators。 - Static Entropy:固定,只跟隨設備的不同。用作 **Physically unclonable functions**。 :::info 小總結: RoT 需具有 Unpredictability(Full-entropy)及 Physical security 兩種特性。 ::: ### Why PUF?  PUF 能同時提供「True randomness」和「Physical security」,實現真正的**硬體信任根**。 ## Physically Unclonable Functions ### PUF 定義 PUF 是具有下列特性的「電路」: - Physical unclonability - Evaluability - Uniqueness - Reliability 若具有如上特性,則該電路就能當作 PUF 來使用。 > 此時,PUF 就類似該晶片的「指紋」。 ### Bad: Key 儲存在 NVM  如果將 Key 儲存在 NVM(Non-volatile Memory),會有如下缺點: - Reverse engineering 的威脅。 - 更高的製造成本(因需要額外的電路設計,來保障 NVM 的安全性)。 ### Better: PUF  > 每個晶片都產生一把自己的 Key。 需要使用 Key 時,再透過 PUF 生產即可,故 PUF 需要是「唯一 / 獨特」的。 有個優點就是,若某晶片的 PUF 不幸被盜取,其他晶片也不會有危險。 而 PUF 可經由「Device Variations」產生:  如上圖 Chip1 / Chip2,由於每顆電晶體都有其不同的 Threshold Voltage,組合起來之後,使不同的晶片有各自獨特的 Pattern,可當作「chip-ID」來看待。 ### Circuit Implementation & Applications  - 電路變異:SRAM / 震盪器 / 電路 Delay / ....(不同製程工藝有不同產生方式)。 - 應用:產生 Key / 設備認證 / 防衛機制 / 保護 IP / ...。 ### Two Main Design Methodologies  - **Strong PUF**:Response 呈指數成長。 - **Weak PUF**:Response 呈線性成長。 ## PUF Properties  ### Reliability 事實上,PUF 每次回應時,都可能因「不同時間」或「不同環境」,而產生不同結果。 測量 Reliability:  - Short-term errors:短期使用 PUF 時,其回應「錯誤位元值」的機率,可使用 Bit Error Rate 作為指標量測。 - Long-term errors:使 PUF 運作好幾年,產生的「0->1 / 1->0 位元錯誤」的情況。需使用 Accelerated reliability tests 去加速測量。 故「High Reliability」的指標,即 PUF **沒有 Short-term errors 及 Long-term errors**。 ### Uniqueness  如圖,Uniqueness 的定義即「兩同製程晶片的 response 有多不一樣」。 測量 Uniqueness:  如上圖,主要測量兩 responses 的 Hamming distance。 - Hamming distance:HD(r1, r2)。 - Fractional-HD:HD(r1, r2) / n。 > n = #bits - 理想情況:Hamming distance **越接近預期的 Binomial distribution**,則 Uniqueness 越高。 >  ### Randomness  需透過「統計測試」,現已開發出許多不同方法。 ### Physical Unclonability 攻擊者無法產生類似的 PUF 出來。 ### Mathematical Unclonability 攻擊者大量讀取我們的 PUF 資料,並透過 Machine Learning 等方式,產生類似的 PUF responses。 ### Resistance Against Reverse Engineering 值得注意的是,weak PUF 由於不會產生大量的 responses,故較容易遭大量讀取並 modelling 出相似 PUF。因應此,其設計時通常不會有 External access。 但攻擊者仍可透過「切開晶片,以顯微鏡觀察」等逆向工程,重塑 PUF 出來。 故若某 PUF「不會遭攻擊者透過物理方式掃描出 PUF 資料」的話,其較安全。 ### Resistance Against Tampering  - Resistance:攻擊者無法竄改 PUF。 - Evidence:攻擊者可以竄改 PUF,但會跟原 PUF 相差很多。 ## PUF Implementations ### Aribiter PUF 如下圖,主要基於 Timing 的差異:  - **Strong PUF**:n-bit challenge 後,會產生 $2^n$ responses。 - 中間元件的實作:2 個 Multiplexer。 - Arbiter 實作:1 個 SR Latch。 Strong PUFs 主要應用場景如下圖,起初用來做 Entity Authentication:  - 需要大量 Challenge-Response pairs(CRP;否則攻擊者容易複製)。 - 只有 Strong PUF 能實現。 其實,Aribiter PUF 不是一個理想的 PUF:  - 若給相似的 Challenge,會得到「可預期」的相似 Response! - CRP 關聯性太高-Low entropy。 - 可受 Machine Learning 攻擊。 ### XOR Aribiter PUF  可解決「易預測」問題,但仍有 **Reliability** 的問題。  BER 也會被加總起來,Reliability 會變超低! ### Ring-Oscillator (RO) PUF  然而,其 CRPs 沒有如 Arbiter PUF 那麼多,故也是個爛 Strong PUF。 :::info 2022: 還未有較信服人的 Strong PUF 實現方式。 ::: ### SRAM PUF  - 6 個 transistors 的 SRAM Cell,將這些 cells 擺成 2D 陣列。 - 重要概念 **Mismatch**:於 cross-coupled inverters 之間隨機產生。 - 將 SRAM 上電之後,電路會自然因 mismatch 而產生不同 0/1 結果。 - Volatile:斷電後,PUF 資料就會消失。 Mismatch 概念如下:  問題在於,若有些 cells 的 mismatches 很小,則產生 0/1 的機率趨近於 50 %,那多次上電後,每次產生的 bit 就很常不同-**BER 高**! ### Monostable PUF  - 不像 SRAM PUF 可能會 0/1,此種 PUF cell 總會有一種固定(0/1)的 stable state。 - 訊號較小的 mismatch,透過**類比放大**,來成為 0 或 1。 - 產生 PUF 時,較不受 noise 影響。 但是,當 mismatch 特別小時,類比放大後其實還是可能接近 0.5 值(Bit error),故 Reliability 仍低。 ### NAND chain based PUF  仍有 BER 高的問題。 ## PUF-based Applications ### Key Generation  用 KDF function (如 NIST 的 AES、Hash function)做出更多的 CRPs(更多 Keys);即輸入一 challenge,就能長出多把鑰匙。 而 PUF 在其中的角色,就是當作 KDF 的種子-透過有限的 Challenge,產出多樣的 Responses。 ### Secure Memory 用 static entropy 來保護記憶體。  - **X-Y Scramble**:記憶體儲存時,會有 X-Y 位址(設 `a`)儲存資料,可透過 PUF 對座標作「映射」(設 `b`)的動作。則可對 `a`、`b` 作 XOR,若映射是一對一,就能儲存到不同地方(? 。 - **Shuffle**:假設資料(byte / word)要存在記憶體內,可用 static entropy 去 shuffle X-Y 和 IO 值,就會完全不知道會存到哪裡去。根據晶片不同,實體上儲存的位置都會不同。 - **Masking**:就是對資料作「隨機數混淆」。 ### Key Wrapping 金鑰注入(Key provision)的保存。  傳統上是一對一的 efuse 儲存,不安全因 efuse 可被外界得知。 可用 PUF 去對金鑰作加密,存進來後,除非知道 PUF 確切的值,否則無法還原金鑰。 如下圖,在安全邊界外產生的金鑰,可用 PUF 對稱式加密保護後,再丟到較不安全的環境保存:  ### Firmware Protection 用 PUF 對韌體作加密,來達到一對一的鎖定。  若攻擊者從快閃記憶體(eNVM 等)讀東西出來,除非持有韌體暗藏的金鑰(NeoPUF secrets),否則無法還原資料內容,達到智慧財產的維護。 ### Secure Boot 韌體有可能被改寫,整個產品會遭盜拷。 如下圖:  韌體能先透過 Hash 來算出 digest,並使用 PUF 產生的 $K_{pri}$ 來對該 digest 作簽章,此流程最後會保存以下兩資料: - $K_{pub}$:$K_{pri}$ 經由 ECC 或非對稱式的引擎,所計算出來的。 - Signature:由 $K_{pri}$ 對 digest 作簽章。 開機檢查動作:  - Digets_B:對該韌體作 Hash。 - Digets_A:先前存的 $K_{pub}$ 解開 Signature 所得出。 若兩者不同,表韌體遭改寫,開機動作就會停止。 ## PUF HRoT  HRoT 的基本元素: - **OTP**(One-time Password) - **PUF** - **TRNG**(True Random Number Generator) ### PUFrt  - PUFuid:提供 static entropy 給 OTP 及 TRNG。 - PUFtrng:提供無窮的 dynamic entropy 來保護加密系統。 - PUFkeyst:執行「安全區域」。 :::danger 後面都針對 PUFrt 作深入介紹,有時間再回頭研究。 :::
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.