NXP-LPC55S69 -PUF——讓密鑰更安全

日期 : 2019-07-20
標籤 :
WPI世平NXP恩智浦IOTLPC55S69MCU

新聞內容

PUF——讓密鑰更安全

劉豪 恩智浦MCU加油站

由於物聯網(IoT)概念的大熱,IoT設備的安全愈發受到大家的重視。大家對安全的要求日益增長,LPC55Sxx系列也應運而生。

對於安全應用,密鑰管理機制至關重要。在傳統的通用MCU中,最普遍的做法是將密鑰的明文存儲在片內的OTP或者Flash中,但是實際上,攻擊者只需要通過比較低的代價就能從片內OTP或者Flash中獲取到密鑰。

安全的攻與防就是矛與盾的關係,當我們的競爭對手或地下產業只需花費極少的代價就可以攻破、山寨我們的產品時,我們也必須要升級我們的防禦措施。而PUF可以在密鑰存儲上為我們提供更強的安全保護。


LPC55Sxx/54Sxx、i.MX RT600內置的PUF(Physical Unclonable Functions)是SRAM PUF。由於SRAM的矽結構特徵,每一個SRAM的數字特徵都是獨一無二的。SRAM PUF的不可克隆特性(Unclonable),就是來源於SRAM獨一無二的數字特徵。

即使是NXP,也不可能製造出兩顆數字特徵一模一樣的SRAM PUF。所以,我們稱晶片內SRAM的獨一無二的數字特徵為晶片的指紋。利用晶片的指紋,就可以生成根密鑰和儲存所需的密鑰。

本文無意引入更多的技術原理和細節,詳情請參考晶片的用戶手冊(UM)和應用筆記LPC55Sxx usage of the PUF and Hash Crypt to AES coding( AN12324)。


下面將舉一個簡單的例子,更形象地為大家介紹PUF。

對於LPC55Sxx/54Sxx、i.MX RT600來說,每一顆晶片的PUF就像是一個獨一無二的“安全管理公司”,在安全管理公司的工作時間內,我們通過註冊(Enroll)後,安全管理公司將會為我們分配一個“安全管理員”,以及安全管理員對應的代號Activation Code(AC)。然後我們可以將我們的密鑰或敏感信息交給我們的安全管理員保管(這個過程叫做Set Key),這個專業的安全管理員會將我們委託保管的信息隨身攜帶形影不離,並給我們一個與被保管信息相對應的Key Code(KC)。當我們需要使用密鑰時,通過AC就可以找到相應的管理員(這個過程叫做Start)。在我們找到這個管理員後,就可以通過KC,來取回我們之前保管的信息(這個過程叫做Get Key)。當安全公司下班以後,安全管理員也會離開公司,此時公司空無一人,也沒有任何信息殘留。

  • 小編剛寫到這裡,背後突然有位大咖冒出一句話:既然PUF的安全不依賴於AC和KC,就是說即使管理員被劫持不得已交出了AC和KC,密鑰的安全也有保障。

在這個例子中,公司下班,就是指晶片斷電。當晶片斷電以後,晶片內的PUF並不保留任何信息,傳統的Crack Fuse/Flash手段也就無效了,自然也就避免了傳統的片內OTP Fuse和Flash在斷電後被暴力讀取的風險。

我們通過安全啟動(Secure boot)等手段,使安全管理公司無法被非法訪問,那麼即使攻擊者獲取到ACKC,由於沒辦法訪問安全管理公司,也就無法獲取到對應的原始敏感信息;由於每個安全管理公司是獨一無二的,所以一個公司的ACKC自然也是無法到另一個公司使用的,也無法通過其他晶片或晶片複製獲得到對應的原始敏感信息。

這就解決了上文所說的傳統密鑰存儲所面臨的問題。



儘管PUF提供了更安全的密鑰存儲機制,但是並不會因為安全強度的增加而增加了使用難度。MCUXpresso SDK中還提供了易用的API,只需要三五個簡單的API調用,就可以安全地存儲密鑰。


PUF不僅僅可以提供安全的密鑰存儲。對於LPC55Sxx系列來說,PUF還有直接連接到PRINCE和AES加密引擎的專用硬體通道(Hardware bus),由於這條硬體通道軟體不可訪問,在保證密鑰存儲安全的同時,也能保證密鑰的訪問安全。


這也就意味著,當我們在生產階段利用PUF完成密鑰配置(key provisioning) ,將AC和KC存儲到Flash/OTP/EEPROM內,產品出廠後,CPU在不知道密鑰的情況下,通過PUF以及AC和KC,就可以將Key通過專用硬體總線配送給AES和PRINCE,後者就可以利用這個密鑰對相應的信息進行加解密等工作。

在此場景下,不僅利用PUF實現了密鑰的存儲安全,也實現了密鑰的訪問安全。

PUF也提供了一些其他更豐富的功能,滿足各種需求的密鑰管理,更多信息請關注用戶手冊有關章節以及相應的應用筆記。








我要聯絡