法充分利用多線程的優(yōu)勢,導(dǎo)致效率下降。
[0051]Intel TSX技術(shù)的核是事務(wù)內(nèi)存,程序通過指定一段代碼段作為事務(wù)區(qū)(transact1nal reg1n),可以記錄該段代碼所有的內(nèi)存訪問,如果發(fā)現(xiàn)內(nèi)存訪問沖突,就會發(fā)生abort1n:放棄之前的所有操作,把CPU的狀態(tài)恢復(fù)到進入事務(wù)區(qū)之前的狀態(tài),然后,對于Restricted Transact1nal Memory (RTM)而言,就會直接轉(zhuǎn)跳到指定的代碼區(qū),或者對于Hardware Lock Elis1n (HLE)而言,就會真正加鎖后重新執(zhí)行。如果沒有發(fā)現(xiàn)內(nèi)存訪問沖突,則原子地提交所有對內(nèi)存和寄存器的更新。這樣,在更新完成之前,其他核對該段內(nèi)存的訪問只能訪問其舊的數(shù)據(jù),并且會使更新失敗,造成abort 1n。訪問沖突是指外部線程讀取了一個之前在事務(wù)區(qū)中寫過的內(nèi)存地址,或者外部線程寫了一個之前在事務(wù)區(qū)讀或?qū)戇^的內(nèi)存地址。
[0052]事務(wù)內(nèi)存的實現(xiàn)基礎(chǔ)是CPU的cache —致性協(xié)議。在事務(wù)區(qū)的所有內(nèi)存訪問將只在運算核的cache中發(fā)生,如果其他核訪問了在事務(wù)區(qū)記錄的內(nèi)存地址,或者運算核cache由于空間不夠而必須把cache中的數(shù)據(jù)同步到內(nèi)存,就會被cache —致性協(xié)議發(fā)現(xiàn),并根據(jù)策略產(chǎn)生abort1n。
[0053]本發(fā)明正是利用上述Intel TSX技術(shù)的事務(wù)區(qū),實現(xiàn)高速緩沖存儲器中存儲的敏感數(shù)據(jù)如私鑰明文不被同步到內(nèi)存,并且由于TSX保證內(nèi)存提交的原子性,可以防止系統(tǒng)層的惡意軟件攻擊。
[0054]具體的,本發(fā)明提供了一種抵抗物理攻擊和系統(tǒng)攻擊的密鑰保護方法,如圖1和圖2所示,包括:
[0055]步驟A:設(shè)置多核處理器的每個核使其包含對稱主密鑰;
[0056]步驟B:利用其中任意一個核作為運算核執(zhí)行公鑰密碼運算,且私鑰明文以及運算過程中使用的中間數(shù)據(jù)變量存儲于運算核獨占的高速緩沖存儲器中;
[0057]步驟C:清空所述運算核獨占的高速緩沖存儲器中的私鑰明文以及運算過程中使用的中間數(shù)據(jù)變量;
[0058]當(dāng)執(zhí)行步驟B和步驟C時,多核處理器動態(tài)記錄所述步驟B和步驟C執(zhí)行過程中的所有內(nèi)存訪問;
[0059]當(dāng)所述多核處理器其他核線程試圖和運算核同時訪問同一內(nèi)存地址,且至少有一個寫操作時,或者運算核獨占的高速緩沖存儲器空間不夠,發(fā)生高速緩沖存儲器替換時,運算核放棄已執(zhí)行的步驟B和步驟C的所有操作,重新執(zhí)行步驟B和步驟C,直至步驟B和步驟C執(zhí)行完成,退出事務(wù)區(qū)提交內(nèi)存。
[0060]為了更好的對本發(fā)明進行闡述,下面以在Intel Haswell處理器進行RSA公鑰密碼運算為例。在本實施例中,處理器為擁有4核的intel i74770S,使用的RSA算法可通過中國剩余定理加速、蒙哥馬利模乘加速以及滑動窗口實現(xiàn);其中,使用的滑動窗口大小為32,RSA計算中用到的最大內(nèi)存為4708字節(jié);
[0061]首先,執(zhí)行步驟A,設(shè)置多核處理器的每個核使其包含對稱主密鑰,具體包括:
[0062]如圖3所示,步驟Al:操作系統(tǒng)啟動時彈出提示界面,用戶輸入口令;操作系統(tǒng)通過密鑰生成算法把口令轉(zhuǎn)化為對稱主密鑰;
[0063]步驟A2:對稱主密鑰被復(fù)制到多核處理器中指定的寄存器中存儲,以便用于公鑰密碼運算,其中可以選擇debug寄存器或性能監(jiān)控計數(shù)器(PMC, Performance MonitorCounter)。
[0064]然后,執(zhí)行步驟B:利用其中任意一個核作為運算核執(zhí)行公鑰密碼運算,且私鑰明文以及運算過程中使用的中間數(shù)據(jù)變量存儲于運算核獨占的高速緩沖存儲器中;其中,公鑰密碼運算包括私鑰明文獲取運算和私鑰計算操作運算;
[0065]私鑰明文獲取運算時,參照圖3,步驟B1:運算核從硬盤中讀取以對稱主密鑰加密的私鑰,并復(fù)制到內(nèi)存;運算核利用多核處理器中指定的寄存器中的對稱主密鑰解密以對稱主密鑰加密的私鑰獲得私鑰明文,并將私鑰明文存儲于運算核獨占的高速緩沖存儲器。在實現(xiàn)上述過程時,在本實施例中,如圖4所示,步驟B2:可將debug寄存器或性能監(jiān)控計數(shù)器PMC中的對稱主密鑰寫入高速緩沖存儲器中,通過調(diào)用AES-NI指令,使用SSE寄存器解密以對稱主密鑰加密的私鑰,并把私鑰明文復(fù)制到高速緩沖存儲器中;
[0066]私鑰計算操作運算時,如圖5所示,步驟1:運算核利用私鑰明文進行數(shù)字簽名和/或解密運算;步驟2:將計算過程中產(chǎn)生的中間數(shù)據(jù)變量存儲于運算核獨占的高速緩沖存儲器;步驟3:將計算結(jié)果存儲于運行核獨占的高速緩沖存儲器;
[0067]最后執(zhí)行步驟C:參照圖6,清空所述運算核獨占的高速緩沖存儲器中的私鑰明文以及運算過程中使用的中間數(shù)據(jù)變量,只留下運算結(jié)果;
[0068]其中,當(dāng)執(zhí)行步驟B和步驟C時,多核處理器動態(tài)記錄所述步驟B和步驟C執(zhí)行過程中的所有內(nèi)存訪問;
[0069]當(dāng)所述多核處理器其他核線程試圖和運算核同時訪問同一內(nèi)存地址,且至少有一個寫操作時,或者運算核獨占的高速緩沖存儲器空間不夠,發(fā)生高速緩沖存儲器替換時,運算核放棄已執(zhí)行的步驟B和步驟C的所有操作,重新執(zhí)行步驟B和步驟C。
[0070]其中,可通過Transact1nal Memory機制,如通過Intel TSX機制實現(xiàn)將步驟B和步驟C對應(yīng)的代碼指定為事務(wù)區(qū),當(dāng)進入該事務(wù)區(qū)后,多核處理器動態(tài)記錄事務(wù)區(qū)內(nèi)代碼的所有內(nèi)存訪問;換而言之,即記錄執(zhí)行步驟B和步驟C時的所有內(nèi)存訪問;具體地,可以利用Intel TSX機制的RTM實現(xiàn)當(dāng)多核處理器其他核線程與多核處理器動態(tài)記錄的所有內(nèi)存訪問發(fā)生內(nèi)存訪問沖突時,或者,當(dāng)運算核獨占的高速緩沖存儲器空間不夠,而將數(shù)據(jù)同步到內(nèi)存時,運算核放棄已執(zhí)行的步驟B和步驟C的所有操作,重新執(zhí)行步驟B和步驟C。
[0071]由此可見,由于當(dāng)發(fā)生內(nèi)存訪問沖突或高速緩沖存儲器空間不夠時,運算核放棄操作后跳轉(zhuǎn)到指定的代碼區(qū),因此可使密碼運算過程中一切內(nèi)存寫操作都只發(fā)生在高速緩沖存儲器中,由此可防止存儲在高速緩沖存儲器中的數(shù)據(jù)被同步到內(nèi)存,從而從根源上防止了冷啟動攻擊;而且其他核讀取密鑰時,將導(dǎo)致重新執(zhí)行,而不能獲取密鑰信息。在本申請中,沒有通過限制多核處理器其他核的進程使用高速緩存,并且可以支持多核處理器的每個核均可以進行不同的密碼運算,從而提高了多核處理器的工作效率。
[0072]進一步,為了盡可能增加公鑰密碼運算的成功率,在執(zhí)行步驟B之前,即進入事務(wù)區(qū)之前,在本實施例中還可包括禁止操作系統(tǒng)進程調(diào)度,并屏蔽本地中斷的步驟;在清空所述運算核獨占的高速緩沖存儲器中的數(shù)據(jù)后,即退出事務(wù)區(qū)之后,還包括恢復(fù)操作系統(tǒng)進程調(diào)度和本地中斷的步驟。其中,可通過清除多核處理器的EFLAGS寄存器的IF位實現(xiàn)禁止操作系統(tǒng)進程調(diào)度,并屏蔽本地中斷;以及,通過設(shè)置多核處理器的EFLAGS寄存器的IF位實現(xiàn)恢復(fù)操作系統(tǒng)進程調(diào)度和本地中斷。
[0073]由于在設(shè)定事務(wù)區(qū)及后續(xù)的處理都利用了 Intel TSX技術(shù),事務(wù)區(qū)中的代碼(即私鑰明文獲取運算和私鑰計算操作運算對應(yīng)的代碼)所有的內(nèi)存訪問均被記錄,如果發(fā)現(xiàn)其他非運算核的內(nèi)存訪問與事務(wù)區(qū)記錄的內(nèi)存訪問發(fā)生沖突,就會發(fā)生abort1n:運算核放棄前面的操作,把運算核的狀態(tài)恢復(fù)到進入事務(wù)區(qū)之前的狀態(tài),然后直接轉(zhuǎn)跳到指定的代碼區(qū)(在使用RTM情況下),由此使得進入這個事務(wù)區(qū)后,即開始執(zhí)行步驟B和C時,運算核一切內(nèi)存寫操作都將發(fā)生在運算核的高速緩沖存儲器中,從而實現(xiàn)了整個密鑰保護過程中使用的私鑰明文以及運算時生成的中間變量均不會從運算核獨占的高速緩沖存儲器同步到內(nèi)存中去,且利用Intel