MY 機器人把一份尚未公開的研究資料存進 SoC。老師請大家先不要急著選 PUF:如果裝置落到別人手上,對方能拿走哪些東西?資料要加密,金鑰也要保護。這堂課從「誰保護那把 key」開始,再一步一步回到晶片的物理來源。
以下是虛構的課堂情境。位元表、電路與形成曲線皆為教學示意,不是這門課進行的晶片量測,也不是安全認證或形式證明。十三節各有完整文字解說;可以搭配漫畫,或切換純文字閱讀。
1. 資料鎖好了,誰來保護金鑰?

先在紙上畫出兩個東西:一份研究資料,以及用來加密它的資料金鑰。資料經過加密後成為密文;合法使用者下次要讀檔,仍然需要取得對應的金鑰。加密完成後,保管工作並沒有消失,而是多了一個必須守住的對象。
本例刻意安排一個錯誤設計:資料密文與明文金鑰,都放在對手能複製的儲存區。對手拿走兩者,就能依公開的解密演算法恢復資料,不必破解加密本身。請注意,問題在於對手有能力讀出那把金鑰;不能因為它們都位於 SoC,或實體位置靠得很近,就推論任何金鑰都能被讀走。受保護的儲存區和一般可讀區,本來就可能具有不同權限。
學生可能提議把金鑰移到另一個檔案。老師可以接著問:同一個對手是否也能讀那個檔案?如果可以,換位置並未改變取得秘密的能力。另一個提議是再用一把金鑰,把資料金鑰加密保護起來。這個方法有實際用途,稱為金鑰包裹,但也讓我們繼續追問:誰保護用來包裹的那把金鑰?包裹的設計要同時照顧金鑰的機密性與完整性。[6]
一路問到根部,大家會希望晶片能提供一個原生秘密,甚至期待它「絕對安全」。PUF 提供了一種從晶片物理差異取得秘密材料的方式。PUFsecurity 的公開用途說明,也包含保護注入晶片的秘密。不過,物理來源、秘密如何取得,以及誰能使用秘密,是不同層次的問題;後面都要逐一檢查。[1]
本課程把兩個用法分開講。第一個用法是保護一把已經存在的金鑰,例如保護事先產生的資料金鑰。第二個用法是支援硬體唯一金鑰 HUK,再依用途衍生金鑰。兩者可以接起來:HUK 衍生出的一把用途金鑰,正好負責包裹資料金鑰。它們不是互斥的產品分類,也不是每顆 SoC 都必須採用的固定階層。
課堂提問:把明文 key 拆成兩個檔案,兩檔都能被同一個對手讀到,就解決問題了嗎?沒有。要評估的是對手最後掌握哪些資訊與操作能力,不能只數我們把秘密分成幾份。下一步先回到晶片,看看可用的物理差異從哪裡來。
2. 同一份設計,為什麼晶片仍不同?

MY 拿出同一款 SoC 的兩顆樣品。設計檔相同,表示它們應完成相同功能,並不表示每個元件的微觀參數完全一樣。數位電路平常要容忍這些差異,在規定條件下仍讀出正確的邏輯值;PUF 則挑選適合的物理效應,讓其中一部分差異參與讀值的形成。
例如 SRAM 啟動行為會受到元件失配影響。這裡的失配可以理解成名義上對稱的兩側,實際參數略有不同。圖中的放大影像只是概念示意,不是顯微鏡量測,也不是說所有 PUF 都靠圖上那一種幾何差異工作。真正的來源要依所選機制與製程說明。[2]
PUF 的常見全名是 Physically Unclonable Function。「晶片指紋」是理解個體差異的比喻:它沒有宣稱晶片裡刻著指紋圖案,也不表示把讀出的位元公開後仍可當秘密。物理特徵在晶片內,讀出電路把它轉成可處理的數位資料;後面的金鑰設計使用的是經過適當處理的材料。
這三件事應分開畫。物理來源決定我們在觀察什麼;量測方法決定如何取得訊號;數位處理決定如何把訊號用到特定任務。如果只看到最後一串 0、1,還不知道它的生成過程、穩定程度及對手的觀察能力,就不能判定它適合保護研究資料。
再把溫度調高,或讓供電條件改變。這些因素可能使同一個讀出路徑產生不同結果,但它們不因此成為晶片固定的身分。對本課程而言,製造差異是來源,環境與操作時序是量測條件。若把兩者混在一起,就會把「今天比較熱」誤當成「這是另一顆晶片」。
課堂提問:兩顆晶片的某八個位元剛好相同,能否證明物理結構相同?不能。有限長的數位觀察只保留部分資訊,不同物理狀態仍可能映成同一段位元。我們需要足夠樣本與明確的評估方法,才能討論區辨性與安全性。
3. 不同、穩定、猜不到,是三個問題

把一串讀值稱為「很隨機」,容易把三個不同問題混在一起。不同晶片的結果能否區分?原來那顆晶片能否重現?對手知道一些資訊後,還能否猜出秘密?這三個問題,對保護資料都有用,卻不能互相代替。
先算一個可手算的例子。A 第一次讀到 10100110,再上電讀到 A′=10100100;B 第一次讀到 11001100。逐位對齊 A 與 A′,只有第 7 位不同,所以漢明距離 HD(A,A′)=1。比較 A 與 B,第 2、3、5、7 位不同,因此 HD(A,B)=4。漢明距離數的是不同位置的數量,不是把二進位數值相減。
同晶片重讀的比較,讓我們觀察重現性的問題;不同晶片間的比較,幫助評估區辨性。這組八位元是課堂設計的數字,不是晶片實測。它不能支持「錯誤率就是八分之一」的產品結論,更不能把四個不同位元直接當成四位安全強度。真實評估要交代晶片數、重讀次數、操作條件與統計分布。
再看公開固定字串 01010101。它有四個 0 和四個 1,看起來很均衡,但知道這個規則的人,下一次仍能完整說出它。這個反例說明:單看一串值的 0、1 比例,沒有回答對手的猜測能力。要談秘密,還得問讀值間是否相關、有哪些偏差,以及輔助資料和介面透露了什麼。
這也說明為何本課程不把「不可複製」當成免驗證的結論。若一種架構允許對手取得大量輸入輸出樣本,對手可能嘗試建立能預測行為的模型;原始研究已展示某些 PUF 家族在特定觀察條件下的建模攻擊。這不等於所有受保護的 PUF 金鑰架構都被同一方法破解,也不能因為物理結構難以重製,就忽略行為是否能被預測。[9]
課堂提問:一串值完全不變,但大家都知道它,適合直接當秘密金鑰嗎?不適合。它可能很穩定,卻沒有我們需要的保密性。接下來比較物理機制時,要一直帶著這三個分開的問題。
4. SRAM、RO、NeoPUF 分別量什麼?

為了替研究資料找一條取鑰路徑,MY 把三種候選方案放到工作台。這些是不同設計選項,不是假定一顆 SoC 需要把三種全部放進去。先問各自量什麼,再問周邊電路、測試與生命週期要付出哪些成本。
SRAM PUF 觀察記憶體單元的上電啟動偏好。它利用記憶體電路的物理失配,不是從已經寫好的檔案讀出祕密。能否使用既有 SRAM,要看是否取得了尚未被初始化程式覆寫的啟動資料,以及那塊記憶體的供電、讀取與隔離是否合適。[2]
RO 是 Ring Oscillator,環形振盪器。概念上,可以在同一段量測時間內,分別計數兩個振盪器,再比較計數大小,讓延遲差異參與輸出。兩個振盪器各自通向自己的計數器,不能畫成 A 的輸出用來驅動 B。量測窗、位置選擇、供電耦合與讀出條件都會影響結果;本頁只是功能方塊,不是可直接下線的電路設計。[10]
本課程的 NeoPUF 範例使用成對 NeoFuse 元件,從氧化層微觀差異出發,經受控形成後再讀出狀態。兩個元件共同構成一個判斷單位,不能把「NeoFuse」和「NeoPUF」當成一對不同元件的名稱,也不能把左右兩側各畫成獨立產生一個 PUF bit。[1][3]
假設 SoC 的 SRAM 很充裕,但啟動軟體會立刻清除全區,原本看似便宜的來源就需要重新安排取得時機。反過來,一個讀取穩定的來源也可能帶來額外製程、形成或測試需求。設計判斷必須把取得來源、保護使用、產品條件和成本一起算進去;只比較元件名稱,無法完成選型。
課堂提問:量到三次都相同的 RO 比較結果,可以直接宣告它比 SRAM 安全嗎?不能。三次觀察沒有涵蓋預測攻擊、操作範圍或金鑰使用介面。先固定相同的產品目標與威脅假設,比較才有意義。
工程師延伸
工程師延伸:weak/strong PUF 通常按可用 challenge-response 空間及其相關特性分類,不能直譯成安全能力的弱與強。物理 challenge 可能是路徑或單元選擇;認證協定的新 nonce 則用來區分本次互動。兩者處在不同層次,不能任意把時間戳直接接進任何 PUF 方塊。[9][10]
5. SRAM 上電,哪一側先拉走狀態?

先看兩個交叉耦合的反相器。反相器把高輸入轉成低輸出,把低輸入轉成高輸出;將每個輸出接回另一個的輸入,便形成回授。把其中一個節點叫 Q,另一個叫 QB,穩定時可能是 Q=1、QB=0,也可能相反。
本頁用功能符號畫儲存核心,沒有畫完整電晶體網路。常見 6T SRAM cell 的四個電晶體構成兩個反相器,另外兩個存取電晶體由 wordline 控制,把 Q/QB 接到 bitline pair。省略存取支路有助於先看懂回授,但必須把省略說出來,否則讀者會把四個核心元件誤認為完整六電晶體電路。
電源上升時,電路從未供電的狀態進入可工作的條件。若兩側完全對稱,直覺上沒有哪一側必然勝出;實際元件失配與雜訊會影響啟動方向。假設 Q 先略高一些,它經過對面的反相器,讓 QB 往低走;較低的 QB 又支持 Q 往高走。正回授使初始差異放大,最後落到可保持的狀態。[2]
「偏好」這個詞很重要。它描述在特定條件下較容易出現的結果,沒有許諾每次都完全一致。大量 cell 的啟動狀態排在一起,可以提供晶片相關的讀值;其中某些位置比較容易變動,下一頁就會處理這件事。此刻也不能把一個 cell 的兩個互補節點當成兩份獨立熵,因為知道 Q 後,QB 在穩定狀態下已被關係限制。
如果 MY 在一般操作時把 Q 寫成 1,接下來一直讀到 1,那是記憶體保留寫入資料的功能。它沒有重新觀察上電競爭。要研究 SRAM PUF 的啟動行為,必須安排適當斷電、放電、再上電與及時讀取;讀取位置也不能先被韌體初始化覆蓋。
課堂提問:一次上電後連讀一千次,和重新上電一千次,是否在測同一件事?不是。前者主要觀察已保持的狀態與讀取路徑,後者才反覆測試啟動結果。測試計畫如果沒寫清楚這個差別,漂亮的重複讀取紀錄也可能沒有回答重建金鑰的需求。
6. 同一顆重開機,為何有幾位不同?

MY 對同一顆晶片做三次上電。課堂表格的第 7 位依序出現 1、0、1,其餘示意位置保持不變。看到這裡,先別急著說這顆晶片壞了。PUF 讀值反映物理行為;我們真正要問的是,這種變動是否在設計可處理的範圍內。
失配較明顯的 cell,啟動方向可能比較不容易受到小擾動改變;接近平衡的 cell,則更容易受雜訊影響。天平圖只是幫助理解偏好與擾動,並不是說 SRAM 裡有兩個機械砝碼。實際電路的啟動行為涉及元件特性、電源上升與內部節點動態。[2]
把溫度、供電與老化條件加入測試,是為了接近資料未來實際被使用的情況。研究資料可能在產品出廠多年後仍需解密。若根秘密只能在當年的室溫測試重建,卻無法涵蓋產品實際條件,資料保護路徑就缺少可靠度上的證據。
穩定位元篩選是一種可用措施,但不是免費的:丟掉部分位置後,可用容量變少;測試更多條件,生產時間也會增加。篩選記錄可能需要保存,並成為整套資訊洩漏評估的一部分。不能從「我們只用比較穩的 bit」直接跳到「以後永遠不會錯」,更不應替所有製程寫一個沒有來源的穩定比例。
對資料金鑰保護而言,最麻煩的不是畫面上多了一個紅色格子,而是新讀值如果產生另一把 KEK,原來包裹的 DEK 就可能無法正確解開。這也使可用性與保密性必須同時考慮:讓對手猜不到,卻讓合法使用者也再也取不回資料,仍不符合這個產品的目標。
課堂提問:把測過會翻轉的位置全部排除,是否就不必設計錯誤處理?仍然需要。過去觀察有限,將來還可能遇到未涵蓋的條件或其他故障。下一頁會把「量到一串讀值」與「重建可使用的秘密」分成兩個步驟。
7. 有雜訊,怎樣重建同一個秘密?

資料解密需要對應的金鑰。若 SRAM 原始讀值會變動,就不能只把每次讀出的資料原樣送入加密引擎,期待它自然變回同一把 key。MY 現在需要的是一套有條件的重建設計:容忍預期的讀值差異,同時保留足夠的秘密性。
註冊時,系統按設計取得基準觀察,產生秘密材料及日後重建所需的輔助資料 helper data。實作可能量測多次、選擇位置或使用不同編碼,並非所有 PUF 都固定「只讀一次,再接同一顆 ECC」。後續取得新的讀值時,重建路徑把它與相應輔助資料一起處理,目標是在符合設計條件時恢復同一份秘密。[4]
這裡有三項工作。錯誤更正或協調處理讀值差異。熵萃取依特定來源假設,產生適合後續使用的秘密材料。KDF 再按用途與情境衍生金鑰。實作可以整合步驟,但三個名詞仍各有責任。雜湊不會辨認並修復翻轉的 SRAM 位元;兩個相近輸入也沒有「一定回到同一摘要」的保證。
本頁後面的互動用八位元回應和四位元教學 key,實際計算 code-offset 重建。SECDED 可以校正一位錯誤、偵測兩位錯誤;翻三位就可能誤校正。這個小例子讓你看到容錯界線,不提供秘密性保證:key 太小,任何人都能窮舉。helper data 的剩餘熵與抗竄改分析,仍要另行完成。
輔助資料可以公開,是某些設計在特定安全模型下的性質,不是說它毫無資訊價值。要計算對手看到它之後還剩多少不確定性,也要考慮它被更換或修改的後果。基本 fuzzy extractor 文獻與針對主動攻擊的 robust fuzzy extractor,處理的威脅條件不同;不能把前者的保證直接擴張到任意篡改。[4][5]
錯誤超出設計能力時,系統也未必自動知道。解碼器可能無法解碼,或得到另一個候選結果;因此還要安排適合的檢查與失敗處理。圖上「檢查→允許使用/停止」代表這項額外設計義務,沒有宣稱任何錯誤都能百分之百被抓到。錯誤的秘密若一路流入下游,也可能表現為包裹金鑰或資料驗證失敗,診斷時不能只怪最後一個運算方塊。
課堂提問:先把新讀值做 SHA-256,是否就取得修正好的穩定金鑰?不能。Hash 沒有替你建立容錯關係,也不會增加原始來源本來沒有的秘密熵。要先說明重建假設、來源品質與檢查路徑,再決定用途金鑰如何取得。
工程師延伸
把基準觀察記為 W,fuzzy extractor 的生成程序可寫成 Gen(W)→(R,P),其中 R 是秘密輸出,P 是輔助資料。重建程序 Rep(W′,P) 在指定距離與來源條件下恢復 R。這是定義層次的描述,不能省略距離上限、統計接近程度或剩餘熵條件。P 可被觀察、P 可被攻擊者任意修改、允許多次重新註冊,是三種不同的分析問題。[4][5]
8. NeoPUF 的差異,藏在哪裡?

學完 SRAM,現在換看另一個候選方案。這個轉場沒有宣告 SRAM 失敗,也沒有替所有產品選定 NeoPUF。目的是比較:如果秘密材料取自另一種物理來源,形成、讀取與測試會怎麼安排。
本課程採用 eMemory/PUFsecurity 公開描述的成對 NeoFuse 範例。兩個元件有相同的名義設計,但氧化層微觀狀態仍有差異。氧化層中的陷阱會影響載子傳輸;公開機制將這些差異與受控形成過程連在一起,用於建立後續可讀的狀態。[1][3]
漫畫把閘極、氧化層與基板分層畫出,是為了讓讀者知道差異位於哪個物理區域。圖中的圓點、路徑和顏色都只是示意,不能拿圓點的數量估計實際陷阱密度,也不能根據畫出的路徑寬度推算電流。若要討論某製程的精確行為,必須有對應的元件結構、偏壓條件與量測。
這裡有兩個常見混淆要先排除。NeoPUF 是我們正在討論的技術/架構名稱;這個範例的一個 bit-cell 使用一對 NeoFuse,不是左邊一顆 NeoFuse、右邊另一種叫 NeoPUF 的元件。另一個混淆是把它畫成替 SRAM 不穩定位元補值的 OTP。這會把兩個不同物理來源混成同一條流程,連後面的 Enrollment 意義都會跟著錯。
為何要分三頁講?因為來源、形成、讀取各回答不同問題。來源回答差異從哪裡來;形成回答如何在受控條件下建立物理狀態;讀取回答後續如何取得數位結果。只畫一支「物理差異→安全 key」的箭頭,會漏掉需要驗證的中間環節。
課堂提問:看見兩側名義結構相同,能否說它們的形成過程也必定完全相同?不能。這個方案正是利用微觀差異參與形成。反過來,看到差異也不能直接推論得到理想均衡的位元分布;偏差仍需量測與分析。
9. Enrollment:哪一側先形成?

在這個 NeoPUF 範例中,Enrollment 包含物理形成。依公開說明,成對元件在較高電場條件下出現不同的電流演變,形成路徑由感測與回授加以控制。圖上的停止箭頭表示,感測與回授會控制形成何時停止,並非無限制施加壓力。[3]
可以先想像一對名義對稱的元件,實際微觀狀態卻有差異。形成過程放大這種差異,最後可能由左側或右側形成適合後續判讀的狀態。漫畫把兩個結果分成互斥支線,是同一個 bit-cell 的兩種可能結果,沒有說同一顆 cell 會先形成左邊、下次再任意改成右邊。
本頁的電流曲線是定性的教學圖,不是儀器記錄。沒有標數值的感測門檻,也不能拿來設定實際電壓、脈衝長度或停止條件。產品會有自己的電路、製程與篩選規格;課程所能解釋的是公開機制中的因果關係,而非供讀者直接重製的內部參數。
「形成結果不是由操作員直接指定秘密位元」,也不等於操作條件完全不重要。若系統性偏差使某一側較常出現,輸出分布就需要檢查。左右兩支畫得一樣大,只是版面安排,不是兩者機率恰好各半的實驗證據。控制條件、樣本統計與安全判斷應分開記錄。
此時再對照 SRAM 的 Enrollment:SRAM 那一段主要是在按設計取得基準觀察、選取或建立重建資料;這一段則包含建立物理狀態。相同的英文名稱,可以在不同方案裡涵蓋不同工作。若把 Enrollment 一律解釋成「把參考值存下來」,讀者就看不到這個差別。
課堂提問:圖中有左、右兩個結果,能否把它們接成可重複寫入的 0→1 流程?不能。那會把方案的生命週期改成另一種記憶體操作。形成完成後,下一步應討論如何讀取已建立的狀態。
10. Extraction:較低電壓讀的是什麼?

研究資料今天要讀回,系統需要再次取得秘密材料。對本課程的 NeoPUF 範例,這時使用較低讀取條件,感測已形成的成對元件狀態。它不需要在每次取用時,重新把同一對元件做一遍原來的高電場形成。[3]
先分辨「物理狀態」與「位元表示」。感測電路觀察的是成對元件的電性差異,數位邏輯再把結果編碼。本課程約定左側形成對應 1、右側形成對應 0;設計也可以採另一套一致的編碼。這個 1/0 對應是表示方式,不能寫成左側天生就是邏輯 1 的物理定律。
SRAM 與這個範例採用不同的生命週期。前者在重新上電時觀察啟動偏好,並按設計處理重讀差異;後者先建立可供後續判讀的物理狀態,再在讀取階段取值。兩者都需要取得可信的數位材料,但對電源時序、註冊與讀取電路的安排未必相同。
即使形成後的狀態便於重複讀取,仍要驗證讀取裕量、產品電壓溫度範圍、老化與故障影響。某產品對 ECC 負擔或位元錯誤的主張,必須放回其測試與使用條件。這裡不把廠商的理想特性或特定測試結果,擴張成所有元件都永不出錯、永不老化的承諾。
本頁英文標題的 Extraction 指物理讀出。第 7 節的密碼學熵萃取,則是對來源材料及其不確定性進行處理的另一層工作。名字相似,並不表示低壓讀出電路會自動完成 fuzzy extractor 的全部安全要求。讀值之後要接哪些處理,仍依整體設計決定。
課堂提問:把左、右的數位編碼全部對調,會不會因此增加秘密熵?不會。對已知且一致的編碼做反轉,只改變表示方式。MY 現在有了可討論的取鑰來源與流程,接著把它接回原本那份研究資料。
11. 用法一:誰保護資料金鑰?

回到工作台,藍色的資料金鑰叫 DEK,Data Encryption Key。它負責保護研究資料。琥珀色的包裹金鑰叫 KEK,Key Encryption Key,負責保護 DEK。這兩把鑰匙的名字描述工作,不是說它們一定要採用不同的加密演算法,也不是把同一把 key 換個顏色就得到隔離。
本課程選一條具體的教學架構:先有一把透過合適安全亂數機制產生的 DEK,資料在受保護的密碼服務中加密。另一邊,PUF 路徑取得根秘密材料,按設計衍生 KEK,用它包裹那把已存在的 DEK。儲存區留下資料密文與包裹後的 DEK;明文 DEK 和 KEK 不因為要存檔,就一起輸出到一般可讀區。
包裹不是隨意選一個加密模式套在金鑰上。NIST SP 800-38F 說明金鑰包裹的機密性與完整性目的,並定義 AES-KW、AES-KWP 等方法。本課程可用它們理解「資料金鑰也需要被驗證地保護」,不把模式名稱當成完整儲存協定。物件名稱、用途、版本以及誰有權解包,仍需由可信政策或相應的密碼綁定處理。[6]
下一次讀檔,先在受保護邊界內取回對應 KEK,再解包並檢查 DEK。拿到合法的 DEK 之後,才用它驗證與解密資料。若檢查失敗,服務不應把未驗證的候選明文交出去,也不能改用空白 key「試著繼續」。錯誤要回到重建、包裹資料、演算法參數與儲存內容逐段診斷。
資料本身可採適合的認證加密設計,例如依規範使用 AES-GCM。AEAD 讓我們同時檢查加密資料的機密性與完整性,但仍有必要的 nonce 管理與使用限制。對 GCM,同一把 key 下不可重複使用 nonce;重新開機後計數器從零開始,或回滾儲存狀態,都可能破壞這項要求。資料記錄所需的 nonce、tag 與公開中介資料可以保存,但不能把它們當成另一份秘密金鑰。[7]
對手如果只複製走密文、包裹後的 DEK 及公開參數,在我們尚未給它 KEK 或解密權限的假設下,不會因此直接拿到資料。這就是開場問題的一條回答。不過,儲存密文安全不保證使用中的明文安全:服務解密後把資料交給誰,仍是下一層責任。
課堂提問:既然 KEK 保護了 DEK,是否可用 KEK 直接解密研究資料?不可以這樣推論。資料是用 DEK 加密的,讀回路徑要先恢復正確 DEK。不同角色必須沿箭頭追蹤,不能在解包完成後把兩把 key 當成同一個東西。
工程師延伸
工程師延伸:可把教學流程寫成 B=Wrap(KEK,DEK),以及 (C,T)=AEAD_Encrypt(DEK,N,M,A)。B 是包裹資料,C 是資料密文,T 是驗證標記,N 是 nonce,A 是不加密但納入驗證的關聯資料。讀回要先 Unwrap 成功,再按相同參數進行 AEAD 驗證。這些符號不包含完整格式、nonce 持久化、回滾政策或金鑰版本轉移;KW/KWP 與 AEAD 的輸入介面也不能任意混用。完整性不等於新鮮性:以前合法的整份記錄被重放,仍需另有防回滾機制。[6][7]
12. 用法二:PUF 如何支援 HUK?

HUK 是 Hardware Unique Key,硬體唯一金鑰。它在架構裡扮演裝置相關根秘密的角色;PUF 則是取得秘密材料的一種物理途徑。HUK 也可能由其他安全硬體機制支援。把角色與來源分開,就不會看到 HUK 這個名字,便推論底下一定是某一種 PUF。
如果這顆 SoC 選擇 PUF 路徑,原始讀值仍要依來源品質、重現性與密碼設計經過適當處理,才用於根金鑰的工作。圖中的「物理來源→處理→HUK」描述教學層次,不要求每個中間值都長期儲存,也不要求所有實作都在軟體裡看得到它們。
有了根部,為什麼還衍生不同 key?假設儲存服務與金鑰包裹服務共用同一把原始根金鑰,任何一個用途的介面暴露或誤用,都可能直接影響另一項工作。用途分隔讓架構可以替不同服務設定各自的金鑰、演算法與使用政策,避免根秘密直接出現在每個入口。
KDF 會把秘密輸入與用途/情境參數一起處理。HKDF 的 info 可用來綁定應用情境;不同用途要採一致且不歧義的編碼。這些標籤通常不必保密。公開標籤讓系統知道這把金鑰是做什麼,真正的秘密性仍來自根材料與演算法假設;KDF 不會憑空補出來源缺少的熵。[8]
Trusted Firmware-M 的 Protected Storage 設計提供一個實例:儲存服務透過密碼服務,由 HUK 衍生 storage key,使用 key handle 請求運算,而非直接取得所有 key bytes。這個實例支持保護使用路徑與情境分隔的做法,沒有說 TF-M 所有平台都採 PUF,也沒有強制把 storage key 再拿去包裹獨立 DEK。[11]
兩個用法現在可以接起來。在本課程選定的架構中,HUK 的某個用途分支就是第 11 頁的 KEK,用它保護已存在的 DEK;另一個服務則可有其他用途分支。是否採這條階層,要看更新、分享、金鑰輪替、物件數量與產品需求。根一旦失守,分出去的服務仍可能一起受影響,不能把 KDF 畫成消除根部風險的防火牆。
課堂提問:一般軟體知道 wrapping 這個公開標籤,能否因此要求任意根金鑰衍生?不應該。標籤用來分隔用途,不是授權憑證。安全服務仍要檢查呼叫者、允許的用途與輸出方式;否則對手可能不讀出根部,卻利用服務完成它原本不該做的運算。
13. PUF 守住了根,系統就全安全了嗎?

開場時,MY 想保護 SoC 裡的研究資料。現在可以說出一條有條件的答案:用 DEK 保護資料,再用受保護邊界內取得的 KEK 包裹 DEK;PUF 可以支援這條路徑的根秘密來源,也可以支援 HUK 角色。一般可讀儲存區即使被複製,對手仍缺少我們假設未洩漏的秘密與使用權限。
接著只改一個條件:攻擊者不拿走儲存晶片,而是利用原 SoC 上有漏洞的程式。假如這個程式有權要求解密,攻擊者就可能透過合法的服務路徑取得明文。PUF 的物理結構沒有被複製,根秘密也未必被直接讀出,系統仍然可能洩漏研究資料。這是使用權限與軟體受侵的問題,不能用「每顆 key 都不同」回答。
Secure Boot 可以按信任政策檢查啟動程式;存取控制決定哪個呼叫者可操作哪些資料;硬體隔離限制秘密出現在哪個範圍。這些工作與 PUF 有關聯,但不會由 PUF 自動完成。合法簽署的程式也可能有漏洞,已通過啟動驗證也不表示之後所有執行都不會受侵。
還要把實體與介面攻擊列入產品評估。除錯入口是否關閉或受控?運算是否洩漏可利用的時間或功耗資訊?故障是否能跳過檢查?重建資料能否遭替換?暴露的 PUF 介面是否讓對手取得足夠樣本做模型?這些問題需要具體設計與測試;不同 PUF 家族、存取介面和威脅能力,不能用同一個「安全/不安全」標籤概括。[5][9]
最後看維修。若資料只能由原晶片的根秘密解開,換一顆相同型號的 SoC,未必能恢復相同金鑰。若原晶片損壞,又沒有事先設計的授權復原路徑,資料可能永久無法救回。備份、金鑰託管或移轉方案可以改變這個結果,同時也會增加必須保護的秘密、權限與外部依賴。不能同時承諾只有原晶片能解,以及原晶片全毀也一定救得回。
課堂轉移題:兩台合法設備需要共享同一份加密研究資料,能否直接把第一台的包裹後 DEK 複製到第二台?若兩台使用不同的裝置 KEK,通常不能直接解包。系統要另設經授權的分發或重新包裹流程;這不要求把 HUK 公開或改成兩台共用的根。共享資料需求與裝置綁定政策,應在設計時一起決定。
現在回看「誰保護最根本的 key」,答案不只是一個元件名稱。要交代物理來源、可靠取得的方法、用途分隔、強制隔離、權限與生命週期。PUF 可以成為其中一個根部來源;每個接上去的功能,都仍有需要說明與驗證的假設。
工程師延伸
工程師延伸:身分認證是另一種可能的應用。裝置可以在受保護範圍內使用身分金鑰,回答適當的新挑戰,並由可信註冊把驗證資料連到預期裝置。那是一個還要設計身分綁定、重播防護與協定情境的問題,不是直接把 raw PUF response 公開傳送。認證成功也不自動證明當下程式可信、量測內容正確或沒有轉送攻擊。本課程將認證保留為延伸,主線的資料保護問題已在前面結案。
五個帶走的重點
- PUF 提供物理秘密來源;名稱中的「不可複製」不等於所有攻擊下都安全。
- 同晶片的重現性、不同晶片的差異與攻擊者的不可預測性,要分開評估。
- SRAM 重建與 NeoPUF 形成/讀取不是同一流程;Hash 不會自動修復雜訊。
- DEK 保護資料,KEK 封裝 DEK;HUK 是根角色,其用途金鑰可包含 KEK。
- 受保護邊界、服務權限、失敗處理與跨裝置復原,必須和 PUF 一起設計。
接著可以讀 Hardware Root of Trust 小教室,把根金鑰、啟動信任與權限邊界接起來;也可以回看 Secure Boot 小教室,思考惡意程式若取得合法金鑰服務的呼叫權限,還需要哪些防護。
名詞表
| 名詞 | 本課意思 |
|---|---|
| PUF | 利用物理差異形成可量測回應的電路;安全性取決於實作、處理方式與威脅模型。 |
| DEK | Data Encryption Key,負責資料加密的金鑰。 |
| KEK | Key Encryption Key,本課用來封裝及解封 DEK。 |
| HUK | Hardware Unique Key,裝置特有根金鑰的角色;PUF 是一種可能的來源。 |
| Helper data | 重建所需的輔助資料;可公開不代表可任意竄改,也不代表可以忽略洩漏分析。 |
| Enrollment | 首次建立後續使用條件的階段;SRAM 的觀察/編碼與 NeoPUF 的受控形成應分開說明。 |
| Extraction | NeoPUF 公開機制中可指讀取已形成狀態;不同於密碼學的熵萃取。 |
| KDF / HKDF | 依輸入材料與用途 context 衍生金鑰;不是錯誤修正,也不憑空增加來源熵。 |
| Key wrapping | 用 KEK 保護另一把金鑰的機密性與完整性,本文以 AES key wrapping 為例。 |
參考資料
- PUFsecurity — NeoPUF: A Reliable and Non-traceable Quantum Tunneling PUF — NeoPUF 公開機制與應用說明;廠商產品主張須按條件驗證。
- Holcomb, Burleson & Fu — Power-Up SRAM State as an Identifying Fingerprint and Source of True Random Numbers — SRAM 上電狀態、偏好與雜訊。
- Charles Hsu / eMemory — The Quantum Tunneling Mechanism of NeoPUF — 氧化層、成對元件、形成控制與讀取;不是本課實測資料。
- Dodis et al. — Fuzzy Extractors: How to Generate Strong Keys from Biometrics and Other Noisy Data — 帶雜訊來源的重建、熵與公開輔助資料之形式條件。
- Kanukurthi & Reyzin — An Improved Robust Fuzzy Extractor — 主動竄改輔助資料的威脅與 robust fuzzy extractor。
- NIST SP 800-38F — Methods for Key Wrapping — 金鑰封裝的保密性與完整性;本文以 AES key wrapping 為例。
- NIST SP 800-38D — Galois/Counter Mode (GCM) and GMAC — 資料認證加密與 nonce/IV 使用條件。
- RFC 5869 — HMAC-based Extract-and-Expand Key Derivation Function (HKDF) — 萃取、展開與用途 context;KDF 不憑空製造來源熵。
- Rührmair et al. — Modeling Attacks on Physical Unclonable Functions — 可查詢回應與特定 PUF 類型的建模攻擊;不能一概套用所有實作。
- Suh & Devadas — Physical Unclonable Functions for Device Authentication and Secret Key Generation — Ring-oscillator PUF、頻率比較與金鑰應用。
- Trusted Firmware-M — Protected Storage Key Management — HUK 與儲存金鑰階層之具體實例;不代表 HUK 必須來自 PUF。
#PUF #SRAM #NeoPUF #DEK #KEK #HUK #HardwareSecurity #ComicClassroom
翻一個位元,再翻兩個:重建會怎樣?
保持 enrollment 回應 165、教學 key 9。雜訊 mask 先用 1,再用 3:前者翻一位,後者翻兩位。逐步看 helper XOR 與 SECDED syndrome。也可試 7,觀察超出保證範圍的誤校正。
8-bit code-offset 重建玩具模型:W=R XOR C(k),SECDED(8,4) 校正一位、偵測兩位;三位以上不保證可靠。只有 4-bit 教學 key,容易窮舉。這不是 PUF 量測或安全 fuzzy extractor,也不證明 helper data 隱私、熵或環境穩定性;正式設計要另外評估。
最後的 key 比較使用教材已知的 enrollment 答案。這讓你辨認誤校正,並不代表實際裝置天然保存或知道原始 key;正式系統仍要設計自己的候選驗證與失敗處理。
學習指南
晶片裡的信任,是怎麼建立的?
查看課程大綱 → · 進度只計入已發布課程
先備知識
- 基本數位邏輯與加密
我學會了什麼
- 沿 DEK、KEK 與可能的 HUK 追蹤資料保護
- 區分物理來源、重建及形成/讀取
- 評估權限、失敗與復原邊界