国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種抵抗內(nèi)存泄漏攻擊的密碼算法多核實現(xiàn)方法及裝置與流程

      文檔序號:11877889閱讀:447來源:國知局
      一種抵抗內(nèi)存泄漏攻擊的密碼算法多核實現(xiàn)方法及裝置與流程

      本發(fā)明涉及計算機安全領域,特別涉及一種抵抗內(nèi)存泄漏攻擊的密碼算法多核實現(xiàn)方法及裝置。



      背景技術:

      在CPU平臺,程序使用CPU內(nèi)的計算單元進行計算,使用寄存器或內(nèi)存存儲程序的輸入?yún)?shù)、中間計算結果和輸出結果。CPU指令一般可以對寄存器或者一個內(nèi)存地址進行操作。使用匯編語言編程可以直接指定操作數(shù)存儲的位置,使用C語言或者更高級的語言則更多地由編譯器或者解釋器來決定操作數(shù)具體的存儲位置。高速緩沖存儲器(Cache)是CPU內(nèi)對內(nèi)存的緩存,一個內(nèi)存操作數(shù)可能保存在Cache中或內(nèi)存中,對編程人員是透明的。除非特別的性能考慮,程序一般不關心計算過程中變量存儲的位置,是保存在寄存器中、Cache中還是內(nèi)存中。

      操作系統(tǒng)具有各種內(nèi)存安全保護機制(進程隔離、訪問控制等),過去認為如果操作系統(tǒng)的安全漏洞沒有被攻擊者利用,一個進程保存在內(nèi)存中的數(shù)據(jù)是安全的,不會被攻擊者獲取。但是內(nèi)存泄露攻擊的出現(xiàn)使內(nèi)存中的數(shù)據(jù)不再安全。內(nèi)存泄露攻擊一般是指某種物理攻擊,通過直接接觸要攻擊的主機,繞過操作系統(tǒng)的各種內(nèi)存安全保護機制,獲取內(nèi)存某個區(qū)域的數(shù)據(jù)甚至整個內(nèi)存鏡像。內(nèi)存泄露攻擊包括冷啟動攻擊(Cold boot attack)和DMA攻擊。冷啟動攻擊利用了動態(tài)隨機存儲器(DRAM)的保持效應,即DRAM在掉電以后仍能在一段時間內(nèi)保持數(shù)據(jù),如果在低溫的狀態(tài)下(如用液氮進行降溫)數(shù)據(jù)甚至可以保持幾個小時?;诖?,攻擊者可以實施如下攻擊:直接從目標主機中拔出內(nèi)存條,用液氮降溫,插入自己的主機中,然后用攻擊引導程序啟動主機,獲取整個內(nèi)存鏡像。DMA(Direct Memory Access)即存儲器直接訪問,是指外部設備可以在DMA控制器的控制下直接與內(nèi)存交換數(shù)據(jù),不需要CPU干預,使CPU和輸入輸出可以并行操作。DMA攻擊將攻擊設備通過某種DMA總線(FireWire、ExpressCard、Thunderbolt、PCI Express等)接入目標主機,繞過操作系統(tǒng)的各種安全機制直接讀取或寫入某個內(nèi)存地址,甚至是系統(tǒng)內(nèi)核的內(nèi)存地址。所以,由于內(nèi)存泄露攻擊的存在,現(xiàn)在內(nèi)存中存儲的數(shù)據(jù)都不再是安全的,可能被攻擊者獲取。

      密碼算法包括對稱密碼算法、公鑰密碼算法以及哈希算法等。對稱密碼算法在加密和解密時使用同一個密鑰,公鑰密碼算法使用一個公私鑰對,私鑰用于簽名和解密,公鑰用于驗證簽名和加密。對稱密碼算法的密鑰和公鑰密碼算法的私鑰都是安全敏感信息,需要進行保護,如果被敵手獲取則整個密碼系統(tǒng)沒有任何安全性可言。此外,如果明文不希望被敵手獲知,則也是安全敏感信息。密碼算法要在某種計算平臺上進行實現(xiàn),即通過編碼形成可以在該計算平臺運行的程序,稱為密碼算法實現(xiàn)。密碼算法實現(xiàn)在計算過程中會產(chǎn)生許多中間結果,如果某些中間結果會泄露對稱密鑰或私鑰的信息,則也是安全敏感信息。以上提到的安全敏感信息在密碼計算過程中都要被保護。

      由于內(nèi)存泄露攻擊的存在,所有安全敏感信息在密碼計算過程中都不能明文存儲在內(nèi)存中?,F(xiàn)有的解決方案主要是無內(nèi)存的密碼算法實現(xiàn),即使用攻擊者無法接觸到的資源來存儲安全敏感信息,包括寄存器和Cache。這兩種資源都在CPU內(nèi),所以又稱為CPU界內(nèi)的密碼算法實現(xiàn)。更具體地講,寄存器和L1Cache、L2Cache都在一個CPU核心中,它們對于當前運行在這個CPU核心上的進程是私有的,無法被別的CPU核心上的進程直接訪問,所以存儲在其中的數(shù)據(jù)是安全的。此外,由于現(xiàn)有的CPU大部分都有多個核心,要考慮方案在多個核心上運行時的安全性和計算性能。

      寄存器方案將明文的安全敏感信息保存在寄存器中,所有內(nèi)存中出現(xiàn)的安全敏感信息都是經(jīng)過加密的。對于對稱密碼算法,對稱密鑰存儲在某些不常用的寄存器中,如Debug寄存器,同時禁止用戶態(tài)程序訪問這些寄存器,以保護對稱密鑰。特別的,對于對稱密碼算法AES,寄存器方案可以使用AES-NI指令,將輪密鑰和計算中間狀態(tài)都保存在XMM寄存器中。對于非對稱密碼法,現(xiàn)有已有兩個對2048比特RSA(RSA-2048)安全實現(xiàn)的方案。第一個方案使用高級矢量擴展指令集(AVX)進行2048比特模乘計算,同時使用16個256比特的YMM寄存器存儲中間計算結果,私鑰的密文從內(nèi)存中讀取并使用AES-NI進行解密。該方案存在以下不足:

      1.由于只使用YMM寄存器,2048比特模乘計算過程中的一個中間狀態(tài)變量無法保存在寄存器中,只能被明文保存在內(nèi)存中。雖然該方案證明如果只能獲取一個該中間狀態(tài)變量的鏡像(如冷啟動攻擊)不能獲得私鑰的大部分比特,但是如果可以獲得多個鏡像(如DMA攻擊)則可能獲得整個私鑰。

      2.由于該方案將一個中間狀態(tài)變量明文保存在內(nèi)存中,無法使用中國剩余定理(CRT)對RSA實現(xiàn)進行優(yōu)化,否則p和q的信息就會泄露,從而計算出私鑰d。這使得該方案的速度至少比不考慮內(nèi)存泄露攻擊的實現(xiàn)速度慢四倍。

      3.由于該方案使用一段靜態(tài)內(nèi)存存儲明文的中間結果,為了保證計算結果的正確性,在多核CPU上只能運行一個安全方案的計算進程,極大地降低了性能。

      另一個方案使用CPU內(nèi)的一個核心中可用的寄存器作為數(shù)據(jù)緩存計算整個RSA-2048。該方案吞吐量較高,但是由于整個算法實現(xiàn)要在一個CPU核心上執(zhí)行,不能實現(xiàn)算法內(nèi)并行計算,計算延遲較高。

      Cache方案將公鑰密碼算法的私鑰和計算過程中的中間結果都保存在寄存器和Cache中。Cache的存儲容量比寄存器要大,已有研究成果實現(xiàn)了4096比特的RSA。現(xiàn)在的CPU都有一個多核共享的L3Cache,使得其他CPU核心可以通過刷滿L3Cache,使在Cache中的敏感信息被強制寫回內(nèi)存。所以在密碼算法運行時,必須將其他CPU核心設置為no-fill模式,禁止使用Cache。這樣會其他CPU核心上運行的程序性能大幅降低,影響程序的正常運行。而且只能有一個CPU核心運行該安全方案。

      在多核CPU上,現(xiàn)有方案均存在一定不足,不能在滿足抵抗內(nèi)存泄漏攻擊的基礎上,同時獲得較高的計算性能和較低的計算延遲。



      技術實現(xiàn)要素:

      針對現(xiàn)有技術中的不足,本發(fā)明提供了一種抵抗內(nèi)存泄漏攻擊的密碼算法多核實現(xiàn)方法,將CPU各核心內(nèi)所有允許使用的寄存器作為多核寄存器緩存來存儲密碼計算過程中的敏感信息,將密碼算法能夠并行的部分拆分到多個CPU核心上同時運行,在每個CPU核心上優(yōu)先使用寄存器緩存存儲參數(shù)和中間結果,無法存儲的數(shù)據(jù)加密后保存到內(nèi)存中,各核心的寄存器緩存通過內(nèi)存交換敏感數(shù)據(jù)的密文。該方法充分利用CPU的多核特性,在保證密碼算法在抵抗內(nèi)存泄漏攻擊的同時盡力提高計算吞吐率和降低計算延遲。

      基于該方法,本發(fā)明還提供了一種抵抗內(nèi)存泄漏攻擊的RSA計算裝置。該裝置使用CPU兩個核心的寄存器緩存分別計算兩個蒙哥馬利模冪,并使用其中一個CPU核心的寄存器緩存讀取兩個模冪結果并計算RSA結果。該裝置使用了預計算表、CRT技術等優(yōu)化方法進行加速,使用AES-NI指令進行AES加解密。該裝置RSA-2048的計算速度達到OpenSSL中算法實現(xiàn)的70%以上并降低了計算延遲。

      本發(fā)明首先提出了一種多核寄存器緩存,如圖2所示,其具有如下特征:

      1.將CPU所有核心的可用的寄存器作為敏感數(shù)據(jù)的緩存,稱為多核寄存器緩存。每個CPU核心可用的寄存器構成該核心的寄存器緩存,各個核心的寄存器緩存通過最后一層Cache或內(nèi)存交換敏感數(shù)據(jù),被交換的數(shù)據(jù)必須是加密的。整個多核寄存器緩存是明文區(qū)域,用于存儲密碼計算過程中的敏感信息,一般包括密鑰、與密鑰相關的參數(shù)、可能泄露密鑰信息的中間變量。

      2.對于x86CPU,每個CPU核心的寄存器緩存一般包括如下寄存器:標量指令使用的通用寄存器(GPR)、多媒體擴展指令集(MMX)使用的MM寄存器、單指令多數(shù)據(jù)流擴展指令集(SSE)使用的XMM寄存器、高級矢量擴展指令集(AVX)使用的YMM寄存器。其中YMM寄存器是256比特,是對XMM寄存器的擴展,XMM寄存器是YMM寄存器的低128比特。各指令集的指令要在對應的寄存器上進行操作。如果較老的x86CPU不支持某個指令集,則也沒有對應的寄存器。

      3.每個CPU核心的寄存器緩存分為兩部分:寄存器計算集和寄存器存儲集。寄存器計算集是當前一組計算指令(工作集)對應的一組寄存器。寄存器計算集為工作集提供操作數(shù)并保存計算結果。這里的工作集是指完成某個計算的一組指令。寄存器存儲集是指除寄存器計算集之外的寄存器緩存中所有其他的寄存器。寄存器存儲集用于存儲當前工作集使用不到的參數(shù)和計算中間結果。

      4.隨著工作集的變化,每個CPU核心的寄存器計算集和寄存器存儲集會進行相應的轉換。例如,在Intel Haswell CPU上,當前工作集使用AVX指令在16個YMM寄存器上進行計算,則寄存器計算集包括16個YMM寄存器,寄存器存儲集包括15個通用寄存器和8個MM寄存器。之后的一個工作集使用標量指令在通用寄存器上進行計算,則寄存器計算集包括15個通用寄存器,寄存器存儲集包括16個YMM寄存器和8個MM寄存器。特別的,RSP通用寄存器保存著棧頂指針,不能用于計算或存儲其他數(shù)據(jù)。

      5.Cache和內(nèi)存是密文區(qū)域。任何從每個CPU核心的寄存器緩存保存到Cache或內(nèi)存中的敏感信息,必須首先在寄存器緩存中進行加密,再將密文保存到Cache或內(nèi)存中。任何從Cache或內(nèi)存中讀取的敏感信息都是密文,首先讀取到寄存器緩存中對其進行解密,而后用于計算。

      本發(fā)明提供的一種抵抗內(nèi)存泄漏攻擊的密碼算法多核實現(xiàn)方法,如圖1所示,包括如下步驟:

      步驟A:對密碼算法的計算過程進行分析,將若干輸入和輸出沒有互相依賴的計算部分作為能夠并行計算的部分在不同CPU核心的寄存器緩存中同時進行計算;

      步驟B:保存要使用的各CPU核心寄存器緩存中原有的數(shù)據(jù)并清空這些核心的寄存器緩存;

      步驟C:從內(nèi)存中讀取參數(shù)保存到各CPU核心的寄存器緩存中并進行解密;

      步驟D:進行密碼計算,將敏感信息(參數(shù)和計算過程中的中間變量等)保存在CPU核心的寄存器緩存中;

      步驟E:將無法保存在寄存器緩存中的敏感信息(寄存器緩存存儲不下的敏感信息)進行加密保存到內(nèi)存中;

      步驟F:將計算過程中需要使用的保存在內(nèi)存中的敏感信息讀取到寄存器緩存中并進行解密;

      步驟G:若計算結果是敏感信息,進行加密保存到內(nèi)存中,否則直接保存到內(nèi)存中;

      步驟H:執(zhí)行密碼算法的串行部分,將并行計算過程中各CPU核心寄存器緩存保存到內(nèi)存中的結果讀取到一個CPU核心的寄存器緩存中并進行解密;

      步驟I:清空使用過的各CPU核心的寄存器緩存并恢復數(shù)據(jù)。

      進一步,上述方法中,對密碼算法的計算過程進行分析,將計算過程分為并行部分和串行部分。密碼算法的并行部分在多個CPU核心的寄存器緩存中同時進行計算,并將計算結果加密后保存到內(nèi)存中,具體步驟為:步驟B初始化要使用的各個CPU核心的寄存器緩存,步驟C將各并行部分的計算參數(shù)讀取到各個CPU核心的寄存器緩存中,重復執(zhí)行步驟D、步驟E和步驟F,在各CPU核心的寄存器緩存中完成計算,步驟G將各CPU核心寄存器緩存中的計算結果進行加密,保存到內(nèi)存中。密碼算法的串行部分要在一個CPU核心的寄存器緩存中完成,具體步驟為:步驟H將并行部分的計算結果從內(nèi)存中讀出保存到一個CPU核心的寄存器緩存中并進行解密,重復執(zhí)行步驟D、步驟E和步驟F,完成串行部分的計算,步驟G將整個密碼算法的計算結果保存到內(nèi)存中,步驟I清空并恢復使用過的各CPU核心的寄存器緩存。

      進一步,步驟B根據(jù)并行部分拆分的數(shù)量占用若干CPU核心的寄存器緩存。如果CPU核心的寄存器緩存數(shù)量不夠,在1個或多個CPU核心的寄存器緩存中進行2個或更多的并行部分計算。

      進一步,步驟C分別從內(nèi)存中讀取各密碼計算并行部分需要的參數(shù)保存到各CPU核心的寄存器緩存中并對其解密。

      進一步,步驟D按照當前的工作集(完成某個計算的一組指令)將寄存器緩存劃分為寄存器計算集和寄存器存儲集,在工作集改變時調整寄存器計算集和寄存器存儲集。特別的,應按照最大可能的寄存器計算集(如用AVX向量指令計算,最多只有16個YMM寄存器)劃分工作集,使最常執(zhí)行的工作集需要的存儲空間小于最大可能的寄存器計算集。如蒙哥馬利模乘是RSA的基本運算,可以將一個蒙哥馬利模乘劃分為多個工作集,使每個工作集都能夠完全在寄存器中執(zhí)行。此外,密碼算法實現(xiàn)選用的算法和指令應綜合考慮計算性能和需要的存儲空間大小。如AVX指令數(shù)據(jù)吞吐量大,但是對于同一個數(shù)據(jù)需要更多的存儲空間,標量指令數(shù)據(jù)吞吐量小,但是對于同一數(shù)據(jù)需要較少的存儲空間,應首先保證工作集需要的數(shù)據(jù)都可以存在寄存器中,避免頻繁地與Cache和內(nèi)存交換數(shù)據(jù),而后再考慮哪種指令計算速度更快。

      進一步,步驟E和步驟F使用的加密和解密算法要選擇一種快速的對稱密碼算法;如果該對稱密碼算法的輪密鑰需要大量存儲空間,則選擇輪密鑰即時生成,并將需要加密或解密的數(shù)據(jù)累積起來一起進行加密或解密,以降低重復生成輪密鑰帶來的性能損失。

      進一步,步驟H選擇一個已使用的CPU核心寄存器緩存來計算密碼算法的串行部分。

      進一步,密碼算法運行在系統(tǒng)內(nèi)核態(tài)下,在計算開始前關閉中斷、禁止內(nèi)核搶占,計算結束后打開中斷、允許內(nèi)核搶占,以使計算過程保持原子性,使寄存器緩存中的數(shù)據(jù)不會因進程切換被明文存儲到內(nèi)存中。

      進一步,數(shù)據(jù)在寄存器和Cache、內(nèi)存之間交換時加解密使用的密鑰應保存在一組特殊的寄存器中,這些寄存器只能在內(nèi)核態(tài)被讀取和修改,不能被用戶態(tài)下的進程讀取和修改。這些寄存器不在寄存器緩存中,計算時不能被使用,也不能被清空。

      本發(fā)明還提供一種采用上述方法的抵抗內(nèi)存泄漏攻擊的RSA密碼算法實現(xiàn)裝置,使用CPU兩個核心的寄存器緩存分別計算兩個蒙哥馬利模冪,并使用其中一個CPU核心的寄存器緩存讀取兩個模冪結果并計算RSA結果;該裝置使用預計算表、CRT技術等優(yōu)化方法進行加速,使用AES-NI指令進行AES加解密。

      采用本發(fā)明提供的抵抗內(nèi)存泄漏攻擊的密碼算法多核實現(xiàn)方法,在操作系統(tǒng)內(nèi)核可信的前提下,可以保證密碼算法實現(xiàn)在運行時,不會有敏感信息以明文形式出現(xiàn)在Cache或內(nèi)存中,同時最大限度地利用了CPU的多個核心及其寄存器,提高了計算吞吐率并降低了計算延遲。

      附圖說明

      圖1為本發(fā)明抵抗內(nèi)存泄漏攻擊的密碼算法實現(xiàn)方法的流程示意圖;

      圖2為本發(fā)明多核寄存器緩存的示意圖;

      圖3為Intel Haswell CPU中一個核心的寄存器緩存的示意圖;

      圖4為本發(fā)明RSA-2048計算裝置的雙CPU核心計算過程和數(shù)據(jù)交換示意圖;

      圖5為本發(fā)明1024比特蒙哥馬利模乘一輪計算的過程和數(shù)據(jù)存儲示意圖。

      具體實施方式

      為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明作進一步詳細說明。

      本實施例提供一種抵抗內(nèi)存泄漏攻擊的RSA多核計算裝置。該裝置包括RSA密碼算法的多核安全高速實現(xiàn)方案、Intel Haswell CPU或更新架構的CPU和64位Linux操作系統(tǒng)。

      Intel Haswell CPU具有如下特征:一個CPU內(nèi)有多個核心,每個核心支持AVX2指令集、AES-NI指令集和MULX指令。Intel Haswell CPU內(nèi)的多個核心共享L3Cache,能夠通過L3Cache或內(nèi)存共享數(shù)據(jù)。AVX2指令集是AVX指令集的升級版,支持256位整數(shù)操作。高級加密標準(AES)是一種常用的對稱密碼算法,支持128比特、192比特和256比特密鑰長度。AES-NI指令集支持用匯編指令調用CPU內(nèi)的ASIC AES實現(xiàn),計算速度快,同時抵抗Cache攻擊和時間攻擊等側信道攻擊。MULX是新引入的一個三操作數(shù)標量乘法指令,乘法結果可以不破壞被乘數(shù)和乘數(shù),減少乘法計算中的MOV指令。

      Intel Haswell CPU根據(jù)具體CPU型號有2個或4個核心,如Intel Haswell i7 4770R有4個核心,每個核心都有自己的寄存器緩存。在64位Linux操作系統(tǒng)的支持下,每個核心的寄存器緩存如圖3所示:

      GPR是通用寄存器,在64位模式下是16個64比特寄存器。YMM是AVX2指令集操作的寄存器,在64位模式下是16個256比特寄存器。XMM是YMM寄存器的低128位,在64為模式下是16個128比特寄存器,AES-NI指令集在XMM寄存器上進行操作。MM是MMX指令集操作的寄存器,在64位模式下是8個64比特寄存器。以上所有寄存器的容量之和是5632比特,即704字節(jié)。此外,DR是調試寄存器,共8個64比特寄存器,其中4個寄存器可以使用,用于存儲AES密鑰。CR是控制寄存器,共8個64比特寄存器,不可被占用。所以該裝置共有2個或4個寄存器緩存,每個寄存器緩存的大小是704字節(jié)。

      RSA是一種廣泛使用的公鑰密碼算法,其安全性基于大整數(shù)分解的困難性,主要計算是大整數(shù)模冪,例如RSA-2048的主要計算是一個2048比特的大整數(shù)模冪。中國剩余定理(CRT)是一種RSA計算的優(yōu)化方法,可以將RSA-2048的主要計算轉化為兩個1024比特的大整數(shù)模冪計算,性能提升4倍。

      根據(jù)本發(fā)明提出的抵抗內(nèi)存泄漏攻擊的密碼算法多核實現(xiàn)方法和RSA基于CRT技術計算過程中的并行性實現(xiàn)計算裝置。本裝置要計算的兩個模冪是數(shù)據(jù)無關的,可以同時進行,所以將兩個模冪分別放在CPU的兩個核心的寄存器緩存中進行計算,并將模冪的計算結果加密保存在內(nèi)存中,而后在一個CPU核心的寄存器緩存中讀取兩個模冪的計算結果并計算RSA的結果。計算過程如圖4所示,p和q是模數(shù)N的兩個素因子,Cp=C mod p,Cq=C mod q是底數(shù)C模p和模q的結果,dp=d mod p,dq=d mod q是指數(shù)d模p和模q的結果,兩個CPU核心分別計算兩個模冪Mp和Mq是模冪的計算結果,最后在第二個CPU核心的寄存器緩存中計算出RSA的計算結果M。由于主要計算量是兩個模冪,最后RSA結果的計算量很小,所以我們的方案通過用兩個寄存器緩存同時計算兩個模冪將RSA的計算延遲降低了接近一半。

      模冪用模乘和模平方計算,我們使用蒙哥馬利模乘來計算模乘。在x86CPU上,蒙哥馬利模乘主要有兩種實現(xiàn)方法:標量實現(xiàn)和向量實現(xiàn)。標量實現(xiàn)使用標量乘法指令和標量帶進位加法指令,將蒙哥馬利模乘中的參數(shù)和中間變量都拆分為64比特的字。由于沒有向量的帶進位加法指令,向量實現(xiàn)需要使用冗余表示的方法來存儲參數(shù)和中間變量,用空出的若干高位來累加進位,最后統(tǒng)一處理進位,來解決進位向高位傳播的問題。冗余表示方法需要一倍以上的空間來存儲一個變量。向量實現(xiàn)計算速度快,但是需要的存儲空間大于寄存器緩存的容量,需要與內(nèi)存頻繁交換數(shù)據(jù)。所以,本發(fā)明的裝置使用標量實現(xiàn),使用標量指令和通用寄存器進行計算,使用YMM向量寄存器和MM向量寄存器存儲模冪計算需要的參數(shù)和中間結果,并將1024比特蒙哥馬利模乘的計算過程切分為4個部分,使整個計算過程中需要的計算參數(shù)和中間變量都保存在寄存器緩存中。

      本發(fā)明提出的計算裝置的將RSA的計算過程分為三層:模乘層、模冪層和RSA層。如圖4所示,模冪層調用模乘層進行計算,RSA層使用模冪層的結果進行計算,CPU的兩個核心首先計算模冪層,而后其中一個核心計算RSA層。

      模乘層使用標量指令乘法指令MULX和標量帶進位加法指令ADC實現(xiàn)全寄存器的1024比特蒙哥馬利模乘,共分成4部分計算,每部分都是一個工作集,如圖5所示。該工作集的所有中間狀態(tài)變量和乘法結果都保存在15個64比特通用寄存器中,參數(shù)A、B和M從YMM寄存器獲取,產(chǎn)生的臨時變量q被保存到MM寄存器中供之后的蒙哥馬利模乘部分使用。所以對于這4個工作集,寄存器計算集包括15個通用寄存器,寄存器存儲集包括16個YMM寄存器和8個MM寄存器。圖5描述了1024比特蒙哥馬利模乘一輪計算的過程和數(shù)據(jù)存儲。

      模冪層調用1024比特蒙哥馬利模乘來計算1024比特蒙哥馬利模冪。模冪計算使用了預計算表的加速方法來減少模乘的計算次數(shù)。在模冪的計算過程中首先計算一個25大小的預計算表,AES加密后存儲到內(nèi)存中,而后根據(jù)指數(shù)從預計算表中查找預計算值讀入XMM寄存器進行AES解密。在計算預計算表時由于寄存器緩存大小的限制,計算出每個預計算立刻加密存儲到內(nèi)存中。AES加解密時使用AES-NI指令,從調試寄存器獲得AES密鑰,在XMM寄存器中進行計算,使用即時生成(on-the-fly)的方法產(chǎn)生輪密鑰,并用每一輪的輪密鑰對所有需要加密/解密的數(shù)據(jù)進行操作,即計算一次輪密鑰就完成對所有數(shù)據(jù)的一輪操作。模冪層將計算結果加密后保存在內(nèi)存中。

      RSA層將兩個核心模冪層的計算結果和RSA參數(shù)讀入寄存器緩存并進行解密,使用CRT方法完成RSA計算,將計算結果保存到內(nèi)存中。

      此外,該裝置將RSA-2048實現(xiàn)作為內(nèi)核模塊集成到Linux內(nèi)核中,使其在內(nèi)核態(tài)執(zhí)行。在RSA-2048計算開始之前禁止內(nèi)核搶占和關閉中斷,在RSA-2048計算結束時打開內(nèi)核搶占,打開中斷,這樣保證RSA-2048計算的原子性,不會因為進程調度使寄存器中的數(shù)據(jù)被明文保存到內(nèi)存中。而且,在開機階段通過用戶手動輸入PIN碼的方式生成AES密鑰,并將其保存到各個CPU核心的調試寄存器中,即各CPU核心保持相同的AES密鑰。

      該裝置可以在Intel Haswell CPU i7 4770R的4個核心上同時執(zhí)行兩個獨立的RSA-2048計算,其中每個RSA-2048計算使用兩個CPU核心及其寄存器緩存,兩個RSA-2048計算不會相互影響。

      本發(fā)明提出的實現(xiàn)裝置將RSA-2048的計算放在兩個CPU核心的寄存器緩存中,內(nèi)存中每個CPU核心的寄存器緩存有各自的加密的預計算表,模冪計算完成時一個CPU核心將模冪計算結果加密后通過內(nèi)存?zhèn)鬟f給另一個CPU核心,所以在整個RSA-2048的計算過程中沒有明文的敏感信息出現(xiàn)在內(nèi)存中。而且,由于1024比特蒙哥馬利模乘完全在寄存器中進行,整個RSA的計算過程與內(nèi)存交換數(shù)據(jù)的次數(shù)很少,所以AES加解密次數(shù)也很少,對性能造成的損失也很小。該裝置RSA-2048的計算速度達到OpenSSL中RSA-2048實現(xiàn)的70%以上,在保證安全的同時達到較高的計算吞吐量和較低的計算延遲。

      以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明保護的范圍之內(nèi)。

      當前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1