文/林璟鏘
Copker——無需訪問內存芯片的公鑰密碼算法實現
文/林璟鏘

林璟鏘
博士,中國科學院信息工程研究所副研究員。2001年畢業于中國科學技術大學,獲得電子信息工程學士學位;2004年和2009年在中國科學院研究生院分別獲得碩士學位(通信與信息系統)和博士學位(信息安全)。主要研究領域是系統安全和應用密碼學,研究成果發表在IEEE S&P、NDSS、ESORICS、CHES、SRDS、ACNS、ISC、SecureComm、ICICS等國際會議和TKDE、TIFS等重要期刊。
冷啟動攻擊(Cold-Boot Attack)是影響范圍極大的物理攻擊。具基本原理是,由于數據延遲消失效應,在斷電之后,內存芯片上的數據仍然會存在一段時間;在低溫下,甚至能夠達到數小時。如果攻擊者可以接觸到正在運行的受害設備(例如,丟失的筆記本電腦和智能手機),就可以插入含惡意代碼的啟動設備(如U盤)、重啟設備,就可以從內存中讀取原有的數據。甚至可以有更簡單的方法:在低溫環境中(如電冰箱),拔下受害設備的內存芯片,插到攻擊者的機器上,就可以讀取原有的內存數據。冷啟動攻擊可以有效地獲取內存中的各種密鑰數據。
對于計算機系統,內存和CPU是最基本的組成部分。當敏感的密鑰數據不能出現在內存芯片時,我們只能考慮將密鑰運算限定在CPU內部。已有方案使用寄存器來完成AES對稱密碼運算。但是,基于寄存器的方案難以推廣到公鑰密碼算法,因為公鑰密碼算法(例如,RSA算法)需要的數據空間遠遠大于對稱密碼算法。
Copker (Computing with Private Keys without RAM)利用CPU的片上Cache來執行公鑰密碼運算。利用最基本的WB模式(即,CPU會盡可能在Cache上執行操作、直至Cache不足才將數據交換到內存芯片),使得計算時密鑰保持在Cache中。同時,合理安排密碼運算的輸入、輸出和動態變量等數據,使得計算過程中不會有Cache沖突。對于多核CPU,還需要設定不處于密碼計算任務的其它核的Cache訪問模式,避免不同核之間的Cache沖突。通過以上措施,能夠有效地將公鑰密碼運算過程中的數據訪問限定的Cache上、不會出現在內存芯片,從而能夠有效防范冷啟動攻擊。
目前有各種攻擊手段能從計算機內存中竊取機密信息,包括各種利用軟件漏洞的攻擊方法(例如OpenSSL HeartBleed)和物理攻擊方法(例如Cold-Boot攻擊和DMA攻擊)。而且,此類攻擊很多時候并不需要破壞計算機系統的代碼完整性,更進一步增加了防御難度。
事務內存Transactional Memory,是高性能計算領域的技術概念,早在1993年提出。其基本想法是由底層的軟硬件跟蹤記錄并行任務的內存訪問,確保聲明為事務的代碼片段的內存讀寫操作原子性。具體為:對于聲明為事務執行的代碼片段,如果在事務執行期間,有任何其它并行的任務也訪問了事務代碼的數據、且其中一方是寫操作,則事務代碼就會自動回滾到事務的開始點、所有執行痕跡都被自動清除。
利用Intel在2013年推出的硬件事務內存特性(稱為TSX),可以構建安全的密碼計算環境:將密碼計算定義為事務,私鑰作為事務執行的寫操作結果,然后再進行密碼計算。能夠獲得如下的安全保障:在密碼計算期間,任何其它的(可能是非法攻擊)任務讀取了私鑰的內存地址,就會觸發事務回滾到開始點、私鑰就被清除,攻擊者只能得到無效數據。
以上方法能夠防范各種類型的、竊取密鑰數據的攻擊:不論攻擊所利用漏洞是什么類型,攻擊都會有最后的讀操作,都會觸發事務回滾;包括軟件攻擊和DMA攻擊都是如此。而且,在現有的硬件事務內存實現中,都是利用了CPU Cache來暫存事務的中間狀態數據,所以上述方案也能夠有效防御Cold-Boot攻擊。
Mimosa: Protecting Private Keys against Memory Disclosure Attacks using Hardware Transactional Memory