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