背景技術:
旁信道分析(sca)是一種可用來觀察密碼過程(例如公鑰/私鑰加密或解密過程)的若干部分的技術。通過觀察在硬件中實施的密碼過程的運算特性(例如運算時序、電力消耗或電磁簽名)來進行sca,以確定所述密碼過程的參數。可監視進行密碼過程的處理器,來檢測例如與密碼過程中所涉及的運算有關的電磁脈沖。sca攻擊密碼過程分析,例如來自進行密碼過程的處理器的電磁脈沖,以推導加密密鑰的內容。具有sca攻擊的加密密鑰的確定可使得加密不安全。
通常使用公鑰/私鑰對加密或解密、rsa運算和ecc運算,對經由網絡的通信實施兩個不同的密碼過程。rsa過程(rsa表示基礎算法的創建者羅納德·里韋斯特(ronrivest)、阿迪·沙米爾(adishamir)和倫納德·阿德爾曼(leonardadleman)的縮寫)使用表示計算中所使用的指數的加密密鑰來對符號塊進行加密或解密。為了執行效率,進行運算來實施rsa過程的處理器通常經配置以對將運算數求平方的運算與使運算數相乘的運算之間的運算進行分組。求平方運算和相乘運算由執行rsa過程的處理器以不同方式處理。通常,求平方可在處理器內比相乘更高效地進行,且可使用sca來觀察運算中的差異。對rsa過程的sca攻擊通常力圖確定何時進行求平方或相乘運算中的任一者,且接著使那些運算與密碼過程相關。在rsa過程中進行的求平方或相乘運算的選擇對形成加密密鑰的位敏感。可監視進行rsa過程的處理器來尋找若干參數,例如信號時序、電力消耗或電磁簽名,來檢測求平方或相乘運算,并推導導致所述運算進行的加密密鑰的位。舉例來說,參看圖1,可通過監視處理器來檢測從進行rsa密碼過程的處理器觀察到電磁輻射的跡線100。如果檢測到,那么可將以s或m標注的跡線的若干部分解釋為指示處理器分別執行了求平方(s)運算或相乘(m)運算。
類似于rsa過程,ecc(橢圓曲線密碼術)過程使用公鑰密碼術。然而,實施ecc過程的處理器通常執行若干加倍和相加運算來進行加密或解密。加倍運算在所述處理器上通常比相加運算更高效地執行,且使用sca可觀察所述差異。eec過程執行中的加倍或相加運算的選擇常常對加密密鑰的位敏感。ecc過程上的sca攻擊通常力圖確定何時進行加倍或相加運算中的任一者,且接著使那些運算與ecc過程以及形成加密密鑰的位有關。可監視進行ecc過程的處理器來尋找若干參數,例如信號時序、電力消耗或電磁簽名,來檢測加倍或相加運算,并推導與正進行的運算有關的加密密鑰的位。
技術實現要素:
實例實施方案提供一種用于實施密碼過程的設備,其包括:第一運算模塊,其經配置以執行第一運算或第二運算中的一者,所述第一運算不同于所述第二運算;第二運算模塊,其經配置以執行所述第一運算或所述第二運算中的另一者;以及控制模塊,其以通信方式耦合到所述第一操作模塊和所述第二運算模塊,且經配置以將第一信息提供到第一操作模塊或第二運算模塊中的一者,使得在密碼過程期間,所述第一操作或所述第二運算中的至少一者至少執行一次,以產生不相關數據。
另一實例實施方案提供一種用于實施密碼過程的方法,所述方法包括:確定第一運算或第二運算中的選定一者來接收第一信息,以執行所述第一運算或所述第二運算中的相應一者,使得在密碼過程期間,所述第一運算或所述第二運算中的至少一者至少執行一次以產生不相關數據;使用所述第一信息來執行第一運算或第二運算中的選定一者;以及與第一運算或第二運算中的選定一者同時執行第一運算或第二運算中的另一者。
另一實例實施方案提供一種包括指令的非暫時性機器可讀媒體,所述指令用于實施密碼過程,且其經配置以致使機器:確定第一運算或第二運算中的選定一者來接收第一信息,以執行所述第一運算或所述第二運算中的相應一個,使得在所述密碼過程期間,第一運算或第二運算中的至少一者至少執行一次,以產生不相關數據;使用所述第一信息來執行第一運算或第二運算中的選定一者;且與第一運算或第二運算中的選定一者同時執行第一運算或第二運算中的另一者。
另一實例實施方案提供一種用于實施密碼過程的設備,所述方法包括:用于確定第一運算或第二運算中的選定一者來接收第一信息,以執行所述第一運算或所述第二運算中的相應一者,使得在密碼過程期間,所述第一運算或所述第二運算中的至少一者至少執行一次以產生不相關數據的裝置;用于使用所述第一信息來執行第一運算或第二運算中的選定一者的裝置;以及用于與第一運算或第二運算中的選定一者同時執行第一運算或第二運算中的另一者的裝置。
附圖說明
圖1是旁信道分析期間的處理器活動的跡線;
圖2是計算機系統的框圖;
圖3是說明用于防旁信道分析的實例過程的流的過程流程圖;
圖4是用于防旁信道分析的實例過程的流程圖;
圖5是用于防旁信道分析的另一實例過程的流程圖;
圖6是用于防旁信道分析的另一實例過程的流程圖;
圖7是用于防旁信道分析的另一實例過程的流程圖;
圖8是圖2中所示的計算機系統的功能框圖;以及
圖9是用于防旁信道分析的另一實例過程的流程圖。
具體實施方式
呈現用于實施密碼過程的分布式技術。此類技術中的一或多者的一些實施方案包含對有效數據和不相關數據兩者并行執行運算,以幫助防止基于加密密鑰內容來辨別所述運算。有效數據是指輸入到密碼過程中,且根據用于實施密碼過程來操縱(例如經加密/解密)以產生所要的、預期或有效結果的算法的數據。不相關數據是指輸入到產生不相關的中間結果或并不促進產生最終所要、預期或有效結果的運算中并由所述運算產生的數據。有效數據可用以形成所述不相關數據,例如通過使用產生并不促成獲得最終有效結果的結果的運算中的有效數據。還可使用任意數據或任意數據源來形成不相關數據,或可與非任意或計劃的數據一起形成。可提供控制實體,其準許至少兩個中央處理單元(cpu)中的每一者在密碼過程期間的不同時間存取有效數據或不相關數據,取決于加密密鑰內容。一個cpu可存取有效或不相關數據,而另一cpu可在密碼過程的給定重復循環中存取有效或不相關數據。舉例來說,cpu在至少一些重復中并行操作,一個cpu具有有效數據,且一個cpu具有不相關數據。
由cpu中的每一者執行的運算可相同或不同,且可或可不在密碼過程的執行期間變化。cpu所執行的運算可包含求平方和相乘,或加倍和相加,且可基于正執行的密碼過程的類型來選擇。舉例來說,一個cpu可在密碼過程的一部分或全部期間執行求平方運算,而另一cpu可執行同時相乘運算。同時意味著所述運算在密碼過程的相同循環或重復中執行,不管所述運算是否具有時間重疊。執行求平方運算和相乘運算的時間可至少部分地重疊,例如至少部分地并行執行。
所述cpu中的每一者可在密碼過程的執行期間執行多于一個類型的運算。舉例來說,可控制第一cpu來在密碼過程的一些重復期間執行求平方運算,且控制第一cpu來在其它重復期間執行相乘運算。對哪一cpu在密碼過程期間的給定時間執行哪一運算的控制的實施方案是內部過程。所述控制經配置以選擇哪一cpu執行哪一運算,且確保根據適當的運算(例如提供到執行適當運算的適當cpu)來處理有效數據,以實施用于所述密碼過程的算法。所述控制優選關于sca現象比相乘或求平方運算小若干數量級。因此,sca可示出進行相同或不同類型的運算的不同cpu,但不一定示出哪一cpu正對有效數據進行操作。通過此技術,sca可準許在不同cpu之間區分運算,然而,加密密鑰的確定對區分cpu運算不敏感。
將運算指派給一或多個cpu可基于多種基礎中的一或多者來進行。舉例來說,可使用變為可用于實施密碼過程的前兩個cpu,其中一個cpu被指派來執行一個運算,例如相乘,且另一cpu被指派來執行相同或不同運算,例如相乘或求平方。可基于正經配置以高效地執行所述運算來為cpu指派運算。舉例來說,cpu可實施為浮點處理器,且可被指派在此類處理器上更高效地執行的運算。可根據cpu所位于的系統,來在軟件中編程運算對cpu的指派。舉例來說,對其中將實施分布式密碼過程的計算機系統的了解可用以配置軟件來將運算指派給計算機系統中的某些cpu。或者或另外,用以實施分布式密碼過程的軟件可查詢計算機系統,以確定計算機系統的配置,且基于查詢結果來為運算的指派選擇cpu。可提供控制來改變在密碼過程的執行期間的不同部分或重復中正由給定cpu執行的運算。所述控制可在多種基礎上操作,包含針對cpu運算使用隨機產生的和/或預設的改變。所述控制跟蹤在其上正處理有效數據的cpu,以確保獲得有效的最終結果。
可將運算指派給多于一個cpu,以利用并行執行或多任務能力。將運算指派給一或多個cpu準許實現某些設計目標時的顯著靈活性,例如運算的同步、不同能力的cpu質檢的負載平衡,以及可輔助實施高效且遮蔽分布式密碼過程的其它準則。
可在密碼過程的一些重復中或每一重復中,將有效數據提供到一或多個cpu。歸因于將對有效數據執行的運算,哪一cpu接收有效數據由加密密鑰的值確定。如果加密密鑰的值需要求平方運算,那么所述有效數據被引導到對指派給求平方運算的cpu。如果加密密鑰的值需要相乘運算,那么所述有效數據被引導到指派給相乘運算的cpu。并不對有效數據進行運算的cpu可對不相關數據進行運算。或者或另外,兩個cpu可同時對有效數據進行運算,或可同時對不相關數據進行運算。對有效數據或對不相關數據進行的運算的結果可適當地存儲或丟棄。舉例來說,對有效數據進行的運算的結果可用于覆寫用作另一運算中的運算數的不相關數據。有效數據結果可存儲在為有效數據保留的指定位置,或先前保持不相關數據的位置。密碼過程的給定重復中的運算可針對相應運算數僅使用有效數據,僅不相關數據或有效與不相關數據的組合。舉例來說,密碼過程可包含一或多個不相關的重復,其中此類重復中的運算的結果不用以促成獲得最終的有效結果。在此實例中,用于不相關的重復的運算數可為有效或不相關數據。所述密碼過程可包含比預期多的重復,且因此促成將加密密鑰從被執行的運算解離。在一些重復中,一或多個cpu可不執行運算,或可執行不用于密碼過程中的運算,例如在密碼過程需要求平方和相乘運算時執行相加。
所述控制實體可引導將在何處獲得或提供有效數據以及在何處獲得或提供不相關數據,例如哪一cpu接收哪些數據,且結果存儲在何處。在每一cpu進行分布式密碼過程的一些重復中或每一重復中的單個不可中斷的運算的情況下,根據加密密鑰的內容,相對于正執行的運算的觀察結果,遮蔽旁信道現象。不可中斷的運算是指可獨立于其它運算執行的低等級運算,例如相乘運算或求平方運算。
用于進行分布式密碼過程的實例設備包含多個cpu,使得運算可在cpu之間劃分。可將處理器定義為包含一或多個cpu。舉例來說,處理器可在具有一或多個cpu的一或多個集成電路芯片上的硬件中實施。或者或另外,處理器可虛擬地實施以包含一或多個cpu,例如通過配置將被視為且作為單個處理單元操作的一或多個cpu。還可使用多個處理器,其中的每一者可包含一或多個cpu,來實施分布式技術。可為一或多個cpu或處理器指派某些運算來在密碼過程期間執行。舉例來說,可為一或多個cpu或處理器指派求平方運算,而可為一或多個其它cpu或處理器指派相乘運算。當密碼過程需要求平方運算時,指派給求平方運算的一或多個cpu或處理器執行求平方運算。類似地,需要密碼過程的相乘運算由指派給相乘運算的一或多個cpu或處理器執行。然而,指派給不被要求來執行所指派的運算從而根據密碼過程來促進有效最終結果的產生的給定運算的一或多個cpu或處理器仍可對有效數據或對不相關數據執行所指派的運算。密碼過程中所涉及的cpu或處理器可在密碼過程的每一循環中進行運算,不管cpu還是處理器正對有效密碼數據進行運算。可控制cpu或處理器來避免在密碼過程的一或多個循環中進行運算。
實例設備可包含一或多個處理器,其中每一處理器可包含一或多個cpu,其經配置以對有效密碼數據或不相關數據進行運算。選擇給定處理器來根據加密密鑰的值,在密碼過程期間對有效密碼數據進行運算。舉例來說,當在密碼過程期間處理的加密密鑰的位值指示應發生相乘時,有效密碼數據被引導到提供相乘運算的處理器(或處理器被引導到有效密碼數據)。同時,負責求平方運算的另一處理器具備(或被引導到)用作求平方運算的運算數的有效數據或不相關數據。有效相乘運算和不相關求平方運算可同時發生。
根據實例實施方案,在密碼過程的給定循環或重復中,根據加密密鑰的值,將有效數據提供到被指派了所要運算的適當處理器,或由所述處理器存取。還/或者將有效數據或不相關數據提供到被指派了相同或不同運算的另一處理器或由所述處理器存取。可使用指向分別包含有效密碼數據或包含不相關數據的存儲器位置的指針,將有效數據或不相關數據提供到既定處理器。舉例來說,指向有效數據的指針可維持并提供到適當的處理器,以準許存取有效數據。適當的處理器讀取所述指針,并存取所述指針所指向的存儲器位置,以獲得有效數據。指向不相關數據的指針可維持并提供到既定處理器,以存取所述不相關數據。通過在密碼過程期間將所述指針提供到適當的處理器,有效數據和/或不相關數據可在所涉及的處理器之間有效地切換。或者或另外,如果指派給給定處理器的運算改變,指向有效數據和/或不相關數據的指針也可改變,以準許有效或不相關數據在運算之間切換,即使不在處理器之間切換也是如此。
有效數據和/或不相關數據在處理器之間的切換可根據若干配置來實現。舉例來說,可使用指向存儲器位置的指針,如上文所論述。或者或另外,有效數據和/或不相關數據可由處理器存儲或存儲在所述處理器中,以準許所述處理器直接存取數據或將所述數據供給到另一處理器。舉例來說,所述處理器可彼此交換有效數據和不相關數據。所述數據也可或者存儲在可由若干處理器存取和/或可準許若干處理器同時存取所述數據的多端口存儲器中。可為多端口存儲器維持針對有效數據和不相關數據的指針或地址,以向處理器提供對所要數據的存取權。使用指針來識別存儲器位置和/或用以對有效數據執行運算的處理器可準許使用展現相對較小可觀察的占用面積的相對簡單的機制來使有效數據在處理器之間切換。觀察時序、電力或電磁參數來檢測有效數據在處理器之間的切換比觀察此類參數來檢測處理器執行求平方還是相乘運算顯著更難。
根據一些實例,負責相應運算的不同組的處理器耦合到多端口存儲器。負責密碼過程中的相應運算的每一處理器或每一組處理器可存取所述存儲器以獲得運算數,并將結果寫入到相同存儲器。由于多個處理器可同時存取同一多端口存儲器,因此來自根據密碼過程進行的運算的中間結果可由不同處理器同時存取和運算。多端口存儲器因此可用作輔助密碼過程跨多個處理器的分布以及在處理器之間切換數據的工具。
根據一些實例,有效或不相關數據可用作分布式密碼過程期間的運算數和/或中間結果。舉例來說,一或多個處理器可具備有效或不相關數據作為輸入,并對數據進行運算以產生結果,其接著用作密碼過程的后續循環或重復中的運算數。可使用有效或不相關數據來初始化運算數,對其進行運算以產生有效或不相關結果,接著將其用作下一循環或重復中的運算數。因此可運載有效或不相關數據一起通過密碼過程,且經協調使得在觀察有效或不相關數據時不清楚哪個是哪個。舉例來說,可在特定存儲器位置提供有效或不相關數據,且涉及有效或不相關數據的存儲器交互可大約在同一時間出現。觀察存儲器交互以區分有效和不相關數據的嘗試因此可受妨礙,因為可能不清楚同時存儲器交互中的哪一者是針對有效或不相關數據。在用于不是既定對有效結果進行運算或產生有效結果的運算之后,可丟棄所述有效或不相關數據。或者,使用有效或不相關數據的運算的結果可存儲在多端口存儲器中,以準許進行后續運算的處理器對所述結果的存取。另外或替代地,可在每一循環或重復中新提供有效或不相關數據,作為用于運算的運算數。在一些情況下,在密碼過程開頭或期間提供有效或不相關數據可導致混淆產生有效數據的運算的區別性特征。
可提供控制實體,例如調度程序,來控制有效數據在不同處理器之間的切換,和/或引導哪一(哪些)處理器執行哪一運算。中間數據的處理指派給所述控制實體在密碼過程中的每個階段處的一或多個處理器。控制實體可跟蹤哪一(哪些)處理器正對有效數據執行運算,和/或哪一(哪些)處理器正對任意數據執行運算。所述控制實體可控制將由一或多個處理器執行的運算的選擇。所述控制實體可跟蹤哪一運算正由哪一(哪些)處理器執行,并使用所跟蹤的數據來確定有效數據最終結果的位置。有效數據運算導致獲得所要的加密/解密輸出,同時可丟棄使用所述任意數據獲得的結果。可對密碼過程中的一或多個cpu獲取部分實施所述控制實體,或可對不參與密碼過程的一或多個單獨cpu實施所述控制實體。所述控制實體可實施為指針控制器,使得指向有效數據的指針傳遞到適當的處理器。可使用類似配置來控制指向任意數據的指針供在給定不可中斷的運算中不對有效數據進行運算的處理器使用。針對有效數據或任意數據的指針可指定多端口存儲器中可由所述處理器存取的位置。特定多端口存儲器位置可在整個密碼過程中保持中間有效數據。
本文所提供的技術和實施方案大體上涉及對抗用以發現加密組件的旁信道分析技術,且更具體地說,涉及分割和混淆加密運算來對抗旁信道分析技術的多處理器方法。本文所論述的技術可用以混淆或抵抗旁信道分析,旁信道分析可能原本用來在密碼過程執行期間觀察密碼數據。舉例來說,密碼過程分布在兩個或更多個cpu之間,其中每一cpu分別并行執行不可中斷的運算,任一者對有效密碼數據,或對不相關數據。不可中斷的運算可為單個類型的運算的實例,例如單個相乘或單個求平方運算。觀察到的與時序、電力或電磁輸出有關的旁信道參數可看起來在有效密碼數據與不相關數據之間不可區分。
參看圖2,計算機系統200包含多核心處理器210、無線接口225、控制實體240、網絡接口265和非暫時性存儲器260。計算機系統200經配置以對輸入和輸出密碼信號進行操作。舉例來說,計算機系統200可經由無線或有線網絡連接接收經加密的數據,并對所述經加密的數據進行解密來恢復原始數據。類似地,計算機系統200可對原始數據進行運算,以產生經加密的數據,來經由無線或有線網絡連接進行傳輸。處理器210、無線接口225、存儲器260和網絡接口265通過總線215彼此連接。控制實體240連接到多核心處理器210,以準許雙向信令。多核心處理器210包含若干中央處理單元(cpu)210-a、210-b、210-c和210-d,其可共享資源,且獨立和/或并行操作。存儲器260是供多核心處理器210中的cpu210-a到210-d使用的共享存儲器。可將存儲器260實施為多端口存儲器,其具有可由不同cpu210-a到210-d共同存取的存儲器位置。總線215經配置以支持多個cpu210-a到210-d以及多個存儲器260,以及多端口存儲器。舉例來說,總線215可經配置以具有額外的線來連接到存儲器260中的柵極,以為cpu210-a到210-d中的不同者激活端口。
無線接口225包含無線接收器、發射器、收發器和/或其它元件,其使計算機系統200能夠使用與一或多個無線廣域網(wwan)系統、無線局域網(wlan)和/或可用以發送和/或接收數據的其它類型的無線通信協議相關聯的無線通信協議來發送和/或接收數據。無線接口225通過線232連接到天線234以用于將通信發送到經配置以使用無線通信協議通信的裝置,或從所述裝置接收通信。
網絡接口265經配置以將計算機系統200連接到一或多個有線網絡連接。網絡接口265經配置以準許計算機系統200經由一或多個有線數據連接發射和接收數據。
多核心處理器210可為智能裝置,例如由高通、
存儲器260是可包含隨機存取存儲器(ram)、只讀存儲器(rom)或其組合的非暫時性存儲裝置。存儲器260經配置以存儲含有用于控制多核心處理器210以執行本文中所描述功能的指令的處理器可讀、處理器可執行軟件代碼(盡管所述描述可解讀所述軟件執行所述功能)。所述軟件可通過經由網絡連接下載,從磁盤上載,從圖像提取或使用任何其它類型的數據傳送技術加載而加載到存儲器260。另外,軟件可并非可直接執行的(例如,要求在執行之前進行編譯)。
存儲器260中的軟件經配置以使多核心處理器210能夠執行各種動作,包含抵抗sca攻擊,如本文所述。所述軟件還可在cpu210-a到210-d中的一或多者上執行,個別地或在分布式基礎上。cpu210-a到210-d的分布式運算可由cpu210-a到210-d中的一或多者或由控制實體240控制。
盡管將控制實體240示出為與多核心處理器210分離,但其可在cpu210-a到210-d中的一或多者上實施,或部分或完全與多核心處理器210分離。另外,控制實體240可實施為計算機系統200的遠程組件。控制實體240可在cpu210-a到210-d中的兩個或更多個上作為并行過程或作為經協調的控制來實施。舉例來說,控制實體240可在其上實施所述控制實體以控制過程流的cpu之間接收或發送信號。作為另一實例,控制實體240可在多于一個cpu上獨立執行,其中所述過程流由cpu所接收到的指示密碼過程的執行的信號控制。舉例來說,一旦密碼過程的重復已在兩個cpu上完成,cpu就可彼此發信號通知,通過在每一cpu上獨立地執行控制實體240來讀取所述信號。這樣實施的控制實體240可接著致使cpu針對密碼過程的接下來的重復使用適當的運算數,例如通過指向將由cpu使用的有效數據或不相關數據。
控制實體240可集成到cpu210-a到210-d中的單個或若干個cpu中,以提供對在cpu210-a到210-d中的多于一個上執行的軟件應用程序的控制或管理。另外或替代地,對分布式軟件應用程序的分布式控制或管理可由控制實體240提供,其可實施為可管理對cpu210-a到210-d中的一或多者或存儲器260的控制的單獨核、cpu、微控制器,或任何其它控制裝置。cpu210-a到210-d中的至少兩個用以在共享或分布式基礎上實施密碼運算,且對密碼運算如何共享或分布的控制可由cpu210-a到210-d中的一或多者或由作為單獨控制裝置的控制實體240提供。
參看圖3,過程流程300說明密碼過程的實例。過程流300示出針對rsa算法進行以處理通信c的并行運算310、320,其中n為模數,且d為秘密指數或私鑰。在過程流300執行的計算是根據用于執行rsa密碼過程的以下算法。
在以上算法中,l是私鑰或秘密指數d的長度,r是有效中間結果,且sig是最終結果,通信c是作為密碼運算的標的的消息,所述密碼運算可為例如加密或解密。模數n通常結合公鑰或私鑰提供,例如結合秘密指數d。秘密指數d是用于密碼過程中的私鑰,且保持保密以確保密碼過程的完整性。秘密指數d表示為具有例如位等分量值的向量。每一位可由其在秘密指數d中的位置識別,例如表示為從最高有效位到最低有效位排序的位dl-1、dl-2、...d1、d0。根據所述算法,將有效中間結果r初始化到1。隨著每一重復來對有效中間結果r求平方,作為(r2modn)計算的一部分。如果秘密指數d的當前位是1,那么在(r2modn)計算之后,還通過在(r*cmodn)計算中倍增來修改有效中間結果r。如果秘密指數d的當前位不等于1,那么為所述算法的重復跳過相乘運算。
上方算法的實施方案通常調用若干求平方和相乘運算。過程流300說明求平方運算310正由一或多個cpu執行,其可結合cpu210-a到210-d中的任一者實施。相乘運算320可由一或多個cpu執行,其還可結合不同時進行求平方運算310的cpu210-a到210-d中的任一者實施。舉例來說,通過使求平方和相乘的運算交錯,在單個cpu上實施求平方運算310和相乘運算320也是可能的。
根據過程流300,控制實體,例如控制實體240,接收秘密指數d,且控制有效中間數據r在用以實施密碼過程的可用cpu之間的切換。將通信c和模數n,完全或部分地,提供到進行求平方運算310和相乘運算320的cpu中的每一者。初始化有效中間結果r,其保持有效中間數據,如不相關中間結果r′一樣,其充當不相關中間結果的占位符。舉例來說,將有效中間結果r初始化到1。可將不相關中間結果r′初始化到任意值,包含如所提供來初始化有效中間結果r的相同值。使用秘密指數d的分量來開始通過rsa算法的重復。最初,將秘密指數d的第一分量確定為1。由于將有效中間結果r初始化到1,因此最初不需要實施求平方運算310,因為假定通過對1求平方來獲得1。對有效中間結果r執行的第一運算因此為初始相乘運算321,表示為m。將不相關中間結果r′作為運算數提供到初始求平方運算311,其表示為s′。
名稱s和m用以指示對有效中間結果r的相應求平方或相乘運算。名稱s′和m′用以指示對不相關中間結果r′的相應求平方或相乘運算。一致地應用這些名稱來指代過程流300期間的結果和運算。舉例來說,使用不相關中間結果r′作為運算數的相乘運算表示為m′,且相乘運算的結果存儲在不相關中間結果r′中。因此通過應用于求平方運算s′或相乘運算m′來更新不相關中間結果r′,而通過應用于求平方運算s或相乘運算m來類似地更新有效中間結果r。使用這些名稱,表示為s′的初始求平方運算311更新不相關中間結果r′,而表示為m的初始相乘運算321更新有效中間結果r。在此配置中,執行求平方和相乘運算兩者,盡管對于有效或不相關數據執行一個運算來獲得不相關結果,且對于有效數據執行一個運算來獲得有效結果。
無需對于過程流300中描繪的密碼過程的每一重復都更新不相關的中間結果r′。舉例來說,可在密碼過程的每一重復中,將新的有效或不相關值指派給不相關中間結果r′。在此情形中,可在所述運算的執行之后丟棄執行求平方運算s′或相乘運算m′的結果,而不是用以更新不相關中間結果r′。
在中初始運算之后的重復中,有效中間結果r經受表示為s的求平方運算312,其產生經更新的有效中間結果r。并行地,不相關中間結果r′經受表示為m′的相乘運算322,其產生經更新的不相關中間結果r′。因此,在第二重復中,進行求平方運算310的cpu指向有效中間結果r作為運算數,且執行表示為s的求平方運算312來更新有效中間結果r。進行相乘運算320的cpu指向不相關中間結果r′作為運算數(其可為有效中間結果r),且執行表示為m′的相乘運算322。用箭頭332來說明使cpu指向有效中間結果r或不相關中間結果r′的改變。使用有效中間結果r作為運算數而進行的運算的結果存儲在有效中間結果r中。另外,丟棄使用不相關中間結果r′作為運算數進行的運算的結果,或將其存儲在不相關中間結果r′中。因此,可通過所應用的運算來更新相應的有效和不相關中間結果r和r′,且通過密碼過程的每一重復來運載。
使用此布置,相應的有效和不相關中間結果r和r′在進行相應的求平方運算310和相乘運算320的cpu之間切換。中間結果在cpu之間的切換,以箭頭330說明,可根據各種技術來實現。舉例來說,圖2中所示的控制實體240使用指針來控制相應的有效和不相關中間結果r和r′在cpu之間的切換。有效和不相關中間結果r和r′無需為不同值,且因此在此實例中無需切換。舉例來說,進行相應求平方運算310和相乘運算320的cpu可各自使用有效中間結果r作為運算數。由適當的cpu執行的產生有效或所要結果的運算的結果維持在有效中間結果r中,而其它結果是不相關的,且可丟棄或存儲在不相關中間結果r′中。
控制實體240使執行求平方運算312的cpu指向有效中間結果r,同時還使執行相乘運算322的cpu指向不相關中間結果r′(其可為與有效中間結果r相同的位置)。此配置可使用不同的存儲技術來在適當的求平方運算310或相乘運算320之后,準許相應的有效和不相關中間結果r和r′的快速指針調整、檢索和存儲。舉例來說,控制實體240可控制對兩個不同存儲位置的存取,一個針對有效中間結果r,且另一個針對不相關中間結果r′。控制實體240接著可使適當的cpu指向有效中間結果r或不相關中間結果r′,以獲得用于有效數據運算(s或m)的運算數,或獲得用于不相關數據運算(s′或m′)的運算數。舉例來說,相應的有效和不相關中間結果r和r′的存儲位置可位于多端口存儲器中,其可實施為存儲器260(圖2),以準許多個cpu潛在地同時存取。控制實體240可將多端口存儲器中的地址提供給適當的cpu,以準許對相應的有效和不相關中間結果r和r′的存取。另外或替代地,控制實體240可將相應的有效和不相關中間結果r和r′加載到用于cpu的本地存儲器中,根據相應cpu將對有效數據還是對不相關數據(其可從有效數據獲得)進行運算。許多其它切換方案是可用且可能的,只要可為適當的有效求平方或相乘運算存取有效中間結果r,使得最后可獲得正確的有效結果即可。
在一些重復中,當應用求平方和/或相乘運算時,跟蹤有效中間結果r和不相關中間結果r′中的一者或兩者,使得可通過參考有效中間結果r來獲得正確的結果。另外或替代地,在密碼過程的一些重復中,跟蹤有效中間結果r,且不跟蹤不相關中間結果r′。在此情況下,當用作運算數時,不相關中間結果r′可為有效數據、任意數據或計劃的數據。不相關中間結果r′的內容或值對于獲得密碼過程的有效最終結果來說是不重要的。在一些配置中,無需存儲不相關中間結果,這可避免額外的存儲器運算。在此情況下,可在控制實體240的指導下產生不相關中間結果r′,例如通過發指令給適當的cpu來獲得或產生用于不相關中間結果r′的有效或不相關數據。在其它情況下,控制實體240可致使有效中間結果r和不相關中間結果r′兩者將存儲并檢索和跟蹤,使得相對于作用中cpu所進行的運算,有效數據和不相關數據的管理之間存在極少區別或無區別。
根據另一實例,在所應用的求平方和相乘運算期間,不跟蹤有效中間結果r。在此情況下,使用秘密指數d的分量的值來將適當的cpu引導到作為運算數的有效中間結果r,或將有效中間結果r引導到適當的cpu,且將有效中間結果r的最終值用作密碼過程的所要結果。另外或替代地,如果有效中間結果r的存儲位置在密碼過程期間改變,例如通過與不相關中間結果r′切換,那么可通過跟蹤存儲位置改變,或通過查閱秘密指數d的分量值序列以確定有效中間結果r的最終位置,來確定有效中間結果r的最終位置。
隨著將求平方運算310和相乘運算320在密碼過程期間繼續應用于作為運算數的有效中間結果r和不相關中間結果r′兩者以獲得有效中間結果r和不相關中間結果r′作為結果,sca在有效與不相關運算之間可檢測到極少區別或無區別。隨著以過程流300所描繪的密碼過程來實施,對于每一重復或循環執行求平方運算和相乘運算兩者,使得無法基于sca來容易地區分秘密指數d的值。控制實體所240進行的在適當的cpu之間有效中間結果r和不相關中間結果r′的運算在使用sca來檢測方面比求平方和相乘運算顯著更難。舉例來說,此類切換運算的sca可產生可觀察的現象,其比求平方和/或相乘運算所產生的現象小若干數量級。切換運算在過程流300中已發生的確定因此使用sca非常困難,且正在對有效或不相關數據求平方還是相乘的確定同樣地非常困難。因此,根據過程流300進行的密碼運算非常難以與秘密指數d的分量值關聯,因為每一相應cpu對于每一重復執行求平方或相乘運算中的任一者。秘密指數d的值因此對于過程流300所描繪的配置高度遮蔽,因為監視任何單個cpu將示出一系列求平方運算或一系列相乘運算,且所監視的運算作為有效還是不相關的運算數或結果將不清楚。如下文較詳細論述,給定cpu所執行的運算可改變,且對有效數據的參考可與所述運算改變協調地改變。在此類配置中,秘密指數d的值持續高度遮蔽,因為監視任何單個cpu將示出從秘密指數d的值解離的求平方或相乘運算。
如過程流300中所說明,求平方運算310和相乘運算320繼續對有效數據和不相關數據兩者使用,而控制實體240按需要切換有效中間結果r,以獲得有效計算和有效最終結果。箭頭330說明有效中間結果r何時切換到適當的cpu,以應用求平方運算310或相乘運算320。將有效中間結果r切換到適當的cpu與秘密指數d的當前分量值一致。舉例來說,根據上文所述的rsa算法,每當秘密指數d的當前分量(位)是1時,初求平方運算之外,還執行相乘運算,因此將有效中間結果r切換到相乘運算320,如用對應箭頭330指示。當秘密指數d的當前分量(位)是0時,對有效中間結果r執行至少兩個連續求平方運算310,因為跳過相乘運算320。因此,雖然可存在對有效中間結果r的多個連續求平方運算310,但存在至多單個連續相乘運算320。在過程流300中說明的密碼過程的結論處,一旦已經使用所有適當應用的求平方運算310和相乘運算320,有效中間結果r就保持最終有效結果,其指派給結果sig,其表示經加密或解密的通信。
現參看圖4,流程圖400說明用于分布式密碼運算的過程。流程圖400中所說明的過程可在計算機系統200(圖2)上實施,且以獲得秘密指數d、通信c和模數n開始,如框410中所示。
初始化有效中間結果r、不相關中間結果r′,以及秘密指數d的分量di,如框412中所說明。將分量di初始化到秘密指數d的最高有效位,作為加密/解密過程的開始點。將有效中間結果r的初始值設定成1,而將可與用于有效中間結果r任意值相同的任意值用作不相關中間結果r′的初始值。
框414說明cpu1初始化到第一運算op_a(其為求平方運算),且指向有效中間結果r。另外,框414說明cpu2初始化到第一運算op_b(其為相乘運算),且指向不相關中間結果r′。cpu1和cpu2可各自實施為多核心處理器210,或實施為cpu210-a到210-d(圖2)中的一或多者。cpu1和cpu2可經配置以同時執行運算,和/或可實施為cpu210-a到210-d中的一或多者來在非按時序重疊配置中執行運算,意味著cpu1和cpu2可各自輪流實施為cpu210-a到210-d中的一或多者。流程圖410中所說明的過程可經配置以例如使op_a為相乘運算,且使op_b為求平方運算,在此情況下,cpu1將初始化以指向不相關中間結果r′,且cpu2將初始化以指向有效中間結果r。
框414說明密碼過程期間,用于cpu1和cpu2的參數的設定或復位。舉例來說,控制實體240(圖2)可最初或在密碼過程期間,為cpu1或cpu2中的一者指定op_a和有效中間結果r,且為cpu1或cpu2中的另一者指定op_b和不相關中間結果r′。控制實體240可設定指針來控制cpu1和cpu2中的哪一者指向有效中間結果r,且哪一者指向不相關中間結果r′。以此方式,op_a作為求平方運算,例如求平方運算310(圖3),在密碼過程的重復的開頭,使用有效中間結果r作為運算數,且op_b作為相乘運算,例如運算320(圖3)使用不相關中間結果r′作為運算數。
在cpu1最初設定成執行op_a且指向有效中間結果r,且cpu2最初設定成執行op_b且指向不相關中間結果r′的情況下,致使cpu1對有效中間結果r執行op_a,且致使cpu2執行op_b,如框416中所說明。在初始循環或重復中,op_a是求平方運算,其在cpu1上執行r2modn的計算,且op_b是相乘運算,其在cpu2上執行r′*cmodn。因此,cpu1使用有效中間結果r作為運算數,而cpu2使用不相關中間結果r′作為運算數。
作為以流程圖400說明的密碼過程的一部分,評估秘密指數d的分量di,例如正被檢查的當前位,以確定其是否等于1,如決策框418中所說明。如果秘密指數d的分量不等于1,那么密碼過程進行到下一重復,如由來自決策框418的通往決策框428的否分支說明,其檢查循環退出。如果秘密指數d的當前分量di等于1,那么密碼過程進行到確定op_a如果指派給cpu1,如決策框420中所示。如果op_a(模數求平方)指派給cpu1,如由決策框420的是分支指示,那么cpu1設定成指向不相關中間結果r′,且cpu2設定成指向有效中間結果r,如框424中所說明。如果op_a不指派給cpu1,如由決策框420的否分支所說明,那么cpu1設定成指向有效中間結果r,且cpu2設定成指向不相關中間結果r′,如框422中所說明。決策框420因此說明有效中間結果r到執行相乘運算的cpu的切換。密碼過程可經配置以在由決策框420表示的步驟中檢查op_a是否指派給cpu1,或op_b是否指派給cpu2,其中基于所述結果,相應的cpu指向適當的有效中間結果r或不相關中間結果r′。
框420、422和424說明有效中間結果r與不相關中間結果r′之間的參考的切換,cpu基于此來執行其運算。切換過程可例如由控制實體240實施,所述控制實體提供指向cpu1或cpu2的指針來按需要參考有效中間結果r或不相關中間結果r′。控制實體240可識別cpu1和cpu2中的哪一者正進行op_b或相乘,且因此向用于所述運算的適當cpu提供指向有效中間結果r的指針。控制實體240可識別cpu1和cpu2中的哪一者正進行op_a或求平方,且因此向用于所述運算的適當cpu提供指向不相關中間結果r′的指針。控制實體240可經配置以將指向有效中間結果r的指針提供給cpu1和cpu2兩者,使得兩個cpu均將有效數據更新作為運算數。框426說明cpu1和cpu2正進行op_a或op_b,無論控制實體240將哪個運算指派給相應的cpu。通過此方法,適當的cpu使用不相關中間結果r′作為運算數來執行op_a或(r′)2modn,且另一cpu使用有效中間結果r來執行op_b或r*cmodn。根據這些運算,根據分量di的值將適當的運算應用于適當的運算數,與哪一cpu進行哪一運算無關。op_a和/或op_b也可/或者兩者均使用有效中間結果r作為運算數,其在op_a的此情況下為不相關運算數,且產生不相關結果。
流程圖400中所說明的密碼過程在處理秘密指數d的最后一個分量di時結束,如以決策框428具備是分支來說明,所述是分支響應于最后一個分量di是否已經處理的測試而導致所述過程的結束。通常,對于rsa密碼過程,將處理的秘密指數d的最后一個分量di是最低有效位。如果秘密指數d的進一步分量di保持將被處理,那么選擇秘密指數d的下一分量di來處理,如以決策框428的引向框430的否分支所說明。框430說明選擇秘密指數d的下一分量di來為密碼過程設置算法的下一重復。
作為流程圖400中所說明的密碼過程的另一重復的設置的一部分,做出關于指派給cpu1和cpu2的運算是否應切換的確定。以決策框432來說明此確定,其中否分支通往用于密碼過程的另一重復的框416,且是分支通往決策框434,以檢查哪一cpu正執行哪一運算。
是否切換正由cpu1和cpu2執行的運算的決策可由控制實體240執行。所述決策可基于各種準則,包含用于切換指派給cpu的運算的預定或隨機時序,用于切換的預定或隨機序列或用于切換的事件驅動的觸發,僅舉幾種可能性。預定或隨機時序可用以分別以某些周期性時間間隔或以隨機長度時間間隔提供切換應發生的指示,與密碼過程的循環或重復相比,所述間隔可較短、相同或較長。可使用預定或隨機序列來提供切換應分別以某些重復或以隨機重復發生。可在某一事件的通知后,即刻使用事件驅動的觸發來提供應發生切換的指示,例如通過cpu1或cpu2執行指令、trap報文或中斷。在一些情況下,使用cpu1和/或cpu2而不是控制實體240來做出何時應在cpu之間切換運算的確定。
一旦做出應切換運算的確定,就檢查cpu1或op_a,以確定它們是否指派給彼此,如決策框434中所說明。所述過程還可經配置以檢查cpu2或op_b,以確定它們是否指派給彼此。如果op_a不指派給cpu1,如以決策框434的否分支所說明,那么將op_a指派給cpu1,cpu1指向有效中間結果r,且將op_b指派給cpu2,其指向不相關中間結果r′,如在框414中所說明。如果op_a當前指派給cpu1,那么所述運算在cpu之間切換,使得op_b指派給cpu1,其指向不相關中間結果r′,且op_a指派給cpu2,其指向有效中間結果r,如在框436中所說明。在將運算指派給cpu之后,密碼過程通過cpu1或cpu2中所指派的一者繼續來執行op_a或op_b,如框416中所說明。對于密碼過程的此部分,運算向cpu的指派復位,如cpu向有效中間結果r或不相關中間結果r′的指針指派那樣。
不管運算向cpu的指派如何,在密碼過程的每一重復的第一運算中,有效中間結果r用作op_a或求平方運算的運算數,且不相關中間結果r′用作op_b或相乘運算的運算數。此外,在密碼過程的二級條件性運算(例如,如果di為1)中,有效中間結果r用作op_b或相乘運算的運算數,且不相關中間結果r′用作op_a或求平方運算的運算數。類似于cpu切換為指向運算數,運算在cpu之間的切換產生sca事件,其比求平方或相乘運算的sca事件小若干數量級。因此,與檢測求平方或相乘運算相比,使用sca來檢測切換運算相對來說非常困難。
盡管流程圖400說明在密碼過程的每一重復期間是否使運算在cpu之間切換一次的確定,但其它實施方案是可能的。舉例來說,可在每一重復中進行此切換確定若干次,例如在決策框420中所說明的確定之前,或在每次執行op_a和/或op_b之前或之后。另外或替代地,可在一些重復期間做出切換確定,且在其它重復期間,不做出切換確定。舉例來說,可設定或復位旗標,來指示應在哪一(哪些)重復中做出切換確定。因此,可用比其重復出現的頻率小、相同或大的頻率來執行切換和/或切換確定。
現參看圖5,流程圖500說明用于分布式密碼運算的過程。流程圖500中所說明的過程可在計算機系統200(圖2)上實施,且以獲得秘密指數d、通信c和模數n開始,如框510中所示。
框512說明密碼過程的變量初始化,具有有效中間結果r和不相關中間結果r′的初始化,以及分量di的值的初始化,其表示秘密指數d的第一分量值。在圖5中說明的過程中,將秘密指數d的最高有效位用作加密/解密過程的開始點。將有效中間結果r的初始值設定成1,而將可與用于有效中間結果r任意值相同的任意值用作不相關中間結果r′的初始值。
用指針來參考有效中間結果r作為r2modn運算的運算數,且用指針來參考不相關中間結果r′作為r′*cmodn運算的運算數,如框514中所說明。用于有效中間結果r和不相關中間結果r′的指針可經配置以指向相同存儲器位置,例如有效中間結果r的存儲器位置。密碼過程的在框514中所說明的部分使用以參考有效中間結果r和不相關中間結果r′的指針復位。舉例來說,控制實體240設定指針,使得有效中間結果r指向將執行求平方運算的cpu,且使得不相關中間結果r′指向將執行相乘運算的cpu。以此方式,求平方運算,例如求平方運算310(圖3),在密碼過程的重復的開頭,使用有效中間結果r作為運算數,且相乘運算,例如相乘運算320(圖3)使用不相關中間結果r′作為運算數。
在有效中間結果r和不相關中間結果r′設定成適當值的情況下,執行求平方和相乘運算,如框516中所說明。模數求平方運算r2modn在cpu1上執行,而模數相乘運算r′*cmodn在cpu2上執行。cpu1和cpu2各自在流程圖500中所說明的整個過程中執行相同的相應求平方和相乘運算。如框516中示出,cpu1使用有效中間結果r作為運算數,而cpu2使用不相關中間結果r′作為運算數。
如決策框518中所描繪,評估秘密指數d的分量di,例如正被檢查的當前位,來確定其是否等于1。如果秘密指數d的分量di不等于1,那么密碼過程進行到下一重復,如由來自決策框518的通往決策框524的否分支說明,其說明循環退出的確定。如果秘密指數d的當前分量等于1,那么密碼過程進行到相乘步驟,如以來自決策框518的通往框520的是分支所說明。
框520說明參考在有效中間結果r與不相關中間結果r′之間的切換。舉例來說,控制實體240向cpu1提供指針指向參考不相關中間結果r′作為運算數,且向cpu2提供指針指向參考有效中間結果作為運算數。用于有效中間結果r和不相關中間結果r′的指針可經配置以指向相同存儲器位置,例如有效中間結果r的存儲器位置。框522說明用其相應的運算數進行其相應求平方和相乘運算的cpu1和cpu2。在cpu1上執行的求平方運算的結果存儲在不相關中間結果r′中,且在cpu上執行的相乘運算的結果存儲在有效中間結果r中。或者,在cpu1上執行的求平方運算的結果可丟棄。使用此方法,cpu1使用不相關中間結果r′作為運算數來執行求平方運算(r′)2modn,且cpu2使用有效中間結果r來執行相乘運算r*cmodn。根據這些運算,cpu1和cpu2分別在一致基礎上執行求平方和相乘運算,不管它們正作用于有效還是不相關數據。
當處理了秘密指數d的最后一個分量時,密碼過程結束,如以決策框524具備是分支來說明,所述是分支響應于是否已經處理了最后一個分量di的測試而通往所述過程的結束。通常,對于rsa密碼過程,將處理的秘密指數d的最后一個分量是最低有效位。如果秘密指數d的進一步分量di保持將被處理,那么選擇秘密指數d的下一分量di來處理,如以決策框524的引向框526的否分支所說明。秘密指數d的下一分量di的選擇為密碼過程設定所述算法的下一重復,如由引向框514的框526所說明。框514說明指針復位,使得有效中間結果r可再次供cpu1在求平方運算中使用,且不相關中間結果r′可再次供cpu2在相乘運算中使用。
根據其它實例,兩個或更多個cpu可相對于不同運算(例如求平方和相乘)而同步。舉例來說,與在另一cpu上執行的相乘運算相比,實施求平方運算的cpu可在較短或較長時間范圍內執行那些運算中的每一者。在cpu經配置以實施分布式算法的情況下,可使cpu同步,以準許運算繼續同時或并行進行。根據一些實施例,填補指令(例如nop(無運算)指令)可通過完成比同時執行不同的所指派運算的對應cpu快地執行所指派的運算的cpu執行。以此方式,cpu可因兩者均被引起而同步,以花費大約相同的時間量來執行不同運算。
現參看圖6,流程圖600說明用于分布式密碼運算的另一實例過程。流程圖600中所說明的過程可在計算機系統200(圖2)上實施,且決策、運算執行指派和運算數指派可由控制實體240,或由多核心處理器210,或由cpu210-a到210-d中的一或多者來實施。流程圖600中所說明的過程實例以cpu1和cpu2中的每一者獲得秘密指數d、密碼c、模數n以及有效中間結果r和不相關中間結果r′的地址開始,如框610和660中所說明。密碼c是作為密碼操作(例如加密、簽名或解密)的標的消息。模數n通常結合公鑰或私鑰,例如結合秘密指數d提供。秘密指數d是用于密碼過程中的私鑰,且保持保密以確保密碼過程的完整性。秘密指數d還提供參數l,其反映以秘密指數d的位數來計的長度。可以指針形式提供有效中間結果r和不相關中間結果r′的地址,且可將其設定成相同值,例如有效中間結果r的地址。不相關中間結果r′的地址還可提供作為任意值,或指代任意的存儲器位置。
框612和662說明用于密碼過程的變量的初始化。將有效中間結果r和不相關中間結果r′兩者初始化到值c。將表示秘密指數d的位串表示中的索引的循環計數器ⅰ初始化到值l-1。在此實例中,將秘密指數d的最高有效位用作加密/解密過程的開始點。可建構替代算法,其將從秘密指數d的最低有效位開始,在此情況下,循環計數器ⅰ將初始化到0,且在所述過程期間遞增。
框614和664說明運算向相應cpu的指派,以及指針向相應運算數的提供。框614說明cpu1正被指派運算op_a,其在此實例中為模數求平方運算。并且,cpu1具備指向有效中間結果r的指針或地址。框664說明cpu2正被指派運算op_b,其在此實例中為模數相乘運算。并且,cpu2具備指向不相關中間結果r′的指針或地址。
框616和665說明cpu1和cpu2執行所指派的運算。如下文更詳細地描述,在框616處,可指派cpu1來對分別對有效中間結果r或不相關中間結果r′執行op_a或op_b。在框665處,可指派cpu2來分別對不相關中間結果r′或有效中間結果r執行op_a或op_b。op_a所執行的模數求平方運算是r2modn,而op_b所執行的模數相乘運算是r′*cmodn。使cpu1和cpu2初始化以分別執行op_a和op_b,但可經配置以改變正執行的運算,如下文所述。使cpu1初始化以使用有效中間結果r作為運算數,且初始化cpu2以使用不相關中間結果r′作為運算數。cpu1和cpu2兩者可經配置以總是使用有效數據作為運算數,例如有效中間結果r所參考的值。在此實例中,對不相關的有效數據執行的運算的結果可丟棄,或存儲在不相關中間結果r′中。對相關、既定或所要的有效數據執行的運算的結果存儲在有效中間結果r中。cpu1和cpu2可各自表示一或多個cpu,包含多核cpu、多核處理器、物理上不同的處理器芯片、gpu(圖形處理單元)和專用處理器或處理器核心的組合,或多個cpu的任何其它配置。
因為指派給cpu1和cpu2的運算如框616和665中所說明來執行,因此可任選地實施同步運算來確保cpu1與cpu2之間的同步。舉例來說,如果cpu1所執行的模數求平方運算比cpu2所執行的模數相乘運算早結束,那么進行所述模數求平方運算的cpu1可經配置以執行額外的非運算(nop),直到在cpu2上執行的模數相乘運算結束為止。或者,可將cpu1放入輪詢循環中,其等待cpu2的完成相乘運算的指示。對cpu1或cpu2中的任一者的運算可比其它cpu早或晚結束,使得同步補償可應用于cpu1或cpu2中的任一者或兩者。另外,可實施其它形式的同步,例如通過加速或減緩cpu執行,或通過在概率性基礎上確定運算執行時間,或準許cpu1和cpu2的同步維持密碼過程的分量在給定循環或重復中的同時執行的任何其它形式。可將所述同步應用于執行求平方運算或相乘運算的多個cpu,例如通過使用或添加較多cpu來執行預期或實際上的確比其它運算花費更長的時間來執行的運算。
所述過程通過測試秘密指數d的分量di(例如正被檢查的當前位)來繼續,以確定分量di等于1還是0,如決策框620和670中所說明。如果秘密指數d的分量di等于0,那么密碼過程進行到下一重復,如由來自決策框620和670的通往相應決策框618和668的0分支所說明。如果秘密指數d的分量di等于1,那么密碼過程進行到相乘步驟,如由來自決策框620和670的通往相應決策框622和672的1分支所說明。
決策框622和672說明是否指派來cpu1執行op_a且是否指派cpu2來執行op_b的相應確定。如果指派cpu1來執行op_a,如由來自決策框622的是分支指示,那么cpu1具備對作為到op_a的運算數的不相關中間結果r′的存取權,如框624中所說明。否則,將cpu1理解為被指派來執行op_b,如由來自決策框622的否分支指示,且具備對作為到op_b的運算數的有效中間結果r的存取權,如在框626中所說明。如果指派cpu2來執行op_b,如由來自決策框672的是分支指示,那么cpu2具備對作為到op_b的運算數的有效中間結果r的存取權,如框674中所說明。否則,將cpu2理解為被指派來執行op_a,如由來自決策框672的否分支指示,且具備對作為到op_a的運算數的不相關中間結果r′的存取權,如框676中所說明。
框628和678說明cpu1和cpu2執行所指派的運算。如下文更詳細地描述,在框628處,可指派cpu1來對分別對有效中間結果r或不相關中間結果r′執行op_a或op_b。在框678處,可指派cpu2來分別對不相關中間結果r′或有效中間結果r執行op_a或op_b。op_a所執行的模數求平方運算是r2modn,而op_b所執行的模數相乘運算是r′*cmodn。對于決策框622和672中所說明的測試,可確定被指派給cpu1和cpu2來執行的運算,且可為適當的cpu指派適當的運算數,以確保當框628和678中說明的運算的執行發生時,對有效數據發生模數相乘。
隨著指派給cpu1和cpu2的運算如框628和678中所說明而執行,同步運算,例如上文所論述的那些運算中的任一者,可再次任選地實施,以確保cpu1與cpu2之間的同步。cpu1與cpu2之間的同步可意味著(且可經實施以使得)分別指派的運算同時或在不同時間開始執行。同步可意味著(且可經配置以使得)運算在密碼過程的循環或重復內不重疊,至少部分地重疊,或完全重疊。
一旦執行框628和678中所說明的運算,就做出循環退出確定,如以決策框618和668說明。決策框618和678說明循環計數器ⅰ正遞減并測試,以確定是否應退出所述循環。如果由于正遞減,ⅰ小于零,那么流程圖600中所說明的過程結束。通常,對于rsa密碼過程,將處理的秘密指數d的最后一個分量是最低有效位。否則,如果ⅰ的遞減的值大于或等于0,那么密碼過程如所說明繼續,其中來自決策框618和668的如此標記的分支通往相應的決策框630和680。
如決策框630、680中所說明,做出是否切換指派給cpu1和cpu2來執行的運算的相應確定。可在上文相對于決策框432(圖4)所論述的相同基礎中的一或多者上做出是否在cpu1與cpu2之間切換運算的確定。如果做出不切換運算的確定,如由決策框630、680的否分支指示,那么所述過程以cpu1和cpu2執行所指派的運算繼續,如分別在框616、665中所說明。如果做出切換運算的確定,如由決策框630、680的是分支指示,那么做出相應確定來確定是否指派cpu1來執行op_a,以及是否指派cpu2來執行op_b,如決策框632、682中所說明。
如果確定指派cpu1來執行,如以來自決策框632的是分支所說明,那么指派cpu1來執行op_b,且cpu1具備對不相關中間結果r′的存取權,如框634中所說明。類似地,如果確定指派cpu2來執行op_b,如以來自決策框682的是分支所說明,那么指派cpu2來執行op_a,且cpu2具備對有效中間結果r的存取權,如框684中所說明。一旦做出指派給cpu1和cpu2來執行的運算的改變,cpu1和cpu2就執行其所指派的運算,如從框634、684到達的框616、665中所說明。
如果確定指派cpu1來執行op_b,如以來自決策框632的否分支所說明,那么指派cpu1來執行op_a,且cpu1具備對有效中間結果r的存取權,如以來自決策框632的針對框614的否分支所說明。類似地,如果確定指派cpu2來執行op_a,如以來自決策框682的否分支所說明,那么指派cpu2來執行op_b,且cpu2具備對不相關中間結果r′的存取權,如以來自決策框682的針對框664的否分支所說明。如上文相對于流程圖400(圖4)中所說明的過程所論述,改變運算的指派以供cpu1或cpu2執行可在流程圖600中所說明的密碼過程的每一循環或重復中實施零次、一次或若干次。
現參看圖7,流程圖700說明用于分布式密碼運算的另一實例過程。流程圖700中所說明的過程可在計算機系統200(圖2)上實施,且決策、運算執行指派和運算數指派可由控制實體240,或由多核心處理器210,或由cpu210-a到210-d中的一或多者來實施。cpu1和cpu2中的每一者獲得秘密指數d、密碼c、模數n以及有效中間結果r和不相關中間結果r′的地址,如框710和760中所說明。密碼c是作為密碼操作(例如加密、簽名或解密)的標的消息。模數n通常結合公鑰或私鑰,例如結合秘密指數d提供。秘密指數d是用于密碼過程中的私鑰,且保持保密以確保密碼過程的完整性。秘密指數d還提供參數l,其反映以秘密指數d的位數來計的長度。可以指針形式提供有效中間結果r和不相關中間結果r′的地址,且可將其設定成相同值,例如有效中間結果r的地址。不相關中間結果r′的地址還可提供作為任意值,或指代任意的存儲器位置。
框712和762說明用于密碼過程的變量的初始化。將有效中間結果r和不相關中間結果r′兩者初始化到值c。還將表示秘密指數d的位串表示中的索引的循環計數器ⅰ初始化到值l-1。在此實例中,將秘密指數d的最高有效位用作加密/解密過程的開始點。可建構替代算法,其將從秘密指數d的最低有效位開始,在此情況下,循環計數器ⅰ將初始化到0,且在每一過程重復期間遞增。
框714和764說明密碼過程的一部分,其分別參考有效中間結果r以及不相關中間結果r′。框714中所說明的密碼過程的所述部分致使被命名為指針1的指針變量設定成有效中間結果r的地址。框764說明將被命名為指針2的指針變量設定為不相關中間結果r′的地址。由于框714和764在流程圖700中所說明的重復環內部,因此對于每一重復,使指針(指針1和指針2)復位到有效中間結果r和不相關中間結果r′的相應地址。以此方式,在密碼過程的重復的開頭,求平方運算,例如求平方運算310(圖3),使用有效中間結果r作為運算數。在密碼過程的重復的開頭,相乘運算,例如相乘運算320(圖3),使用不相關中間結果r′作為運算數。
在有效中間結果r和不相關中間結果r′分別由指針1和指針2參考的情況下,對cpu1和cpu2中的相應一者執行求平方和相乘運算,如框716和766中所說明。在框716中執行的求平方運算是r2modn,且對cpu1執行,而在框766中執行的相乘運算是r′*cmodn,且在cpu2上執行。cpu1和cpu2各自在流程圖700中所說明的整個過程中執行相同的相應求平方和相乘運算。在框716中,cpu1使用有效中間結果r作為運算數,而在框766中,cpu2使用不相關中間結果r′作為運算數。cpu1和cpu2可各自表示一或多個cpu,包含多核cpu、多核處理器、物理上不同的處理器芯片、gpu(圖形處理單元)和專用處理器或處理器核心的組合,或多個cpu的任何其它配置。
當如框716和766中所說明執行求平方和相乘運算時,任選地實施同步運算來確保cpu1與cpu2之間的同步。可相對于以流程圖600(圖6)說明并描述的運算,如上文所論述來定義同步。
評估秘密指數d的分量di,例如正被檢查的當前位,以確定分量di是否等于1或0,如決策框720和770中所說明。如果秘密指數d的分量等于0,那么密碼過程進行到下一重復,如由來自決策框720和770的通往相應決策框718和768的0分支所說明。如果秘密指數d的當前分量等于1,那么密碼過程進行到相乘步驟,如由來自決策框720和770的通往相應決策框722和772的1分支所說明。
框722和772說明參考在有效中間結果r與不相關中間結果r′之間的切換。在框722中,將cpu1所使用的指針1設定成參考不相關中間結果r′,作為求平方步驟的運算數。在框772中,cpu2所使用的指針2設定成參考有效中間結果r,作為相乘步驟的運算數。cpu1使用指針1所參考的不相關中間結果r′來進行求平方步驟,如框724中所說明。cpu2使用指針2所參考的有效中間結果r來進行相乘步驟,如框774中所說明。因此,當di為1時,cpu1使用不相關中間結果r′作為運算數來執行模數求平方運算(r′)2modn,且cpu2使用有效中間結果r來執行模數相乘運算r*cmodn。根據這些運算,cpu1和cpu2分別在一致基礎上執行求平方和相乘運算,不管它們正作用于有效還是不相關數據。
當如框724和774中所說明執行相應的求平方和相乘運算時,再次實施同步運算來確保cpu1與cpu2之間的同步。舉例來說,如果在框774中實施的相乘運算比在框724中實施的求平方運算早結束,那么進行所述相乘運算的cpu2可經配置以執行額外的非運算(nop),直到在cpu1上執行的求平方運算結束為止。或者,可將cpu2放入輪詢循環中,其等待cpu1的完成求平方運算的指示。對cpu1或cpu2中的任一者的運算可比其它cpu早或晚結束,使得同步補償可應用于cpu1或cpu2中的任一者或兩者。另外,可實施其它形式的同步,如上文更詳細地論述。
一旦執行在框724和774中說明的運算,就在決策框718和768處做出循環退出確定。決策框718和768說明循環計數器ⅰ正遞減并測試,以確定是否應退出所述循環。如果由于正遞減,ⅰ小于零(<0),那么流程圖700中說明的密碼過程結束。通常,對于rsa密碼過程,將處理的秘密指數d的最后一個分量是最低有效位。如果ⅰ的遞減值大于或等于零(>=0),那么密碼過程繼續另一重復,如由來自決策框718和768的通往相應框714和764的如此標記的分支指示。
可修改流程圖400、500、600和/或700中所說明的過程,例如通過相加、刪除、組合和/或改變步驟或過程。舉例來說,無需使用所描述的指針來參考有效中間結果r和不相關中間結果r′。舉例來說,可使用其它參考技術,例如將運算數存儲在適當的cpu中。另外,無需維持對不相關中間結果r′的參考,因為任意數據可用作替代運算數,所述任意數據可來源于任意資源。此外,不相關中間結果r′的專門定制的值可用于各種目的,例如有助于混淆求平方或相乘運算。其它修改是可能的。
流程圖400、500、600和700是針對經實施來實現使用rsa算法的密碼過程的運算。舉例來說,流程圖400、500、600和700說明以某一序列應用來根據rsa算法對通信/密碼c進行加密/解密的求平方和相乘運算。然而,本文所論述的技術適用于其它密碼過程,包含ecc(橢圓曲線密碼術)算法,其使用類似于rsa過程的公鑰密碼術。ecc過程通常執行若干加倍和相加運算來進行加密或解密,其對應于在rsa算法中所使用的求平方和相乘運算。對rsa過程的sca攻擊通常力圖確定何時進行加倍或相加運算中的任一者,且接著使那些運算與形成加密密鑰的位相關。如同rsa算法,ecc算法使用本發明的架構和技術所提供的分布式方法,其中與形成加密密鑰的位有關的運算劃分在cpu之間。一或多個cpu因此負責加倍運算,而一或多個cpu負責相加運算。加倍運算和相加運算各自由單獨的cpu在ecc算法的每一重復中執行,其中對不相關數據執行加倍運算或相加運算中的任一者。如同上述rsa算法,對旁信道信號的分析揭露一系列加倍運算和相加運算,且因此掩蓋了運算相對于加密密鑰的任何差異。類似于上文所述的rsa算法,ecc算法的分布式cpu實施方案包含在相應加倍或相加運算之后的同步點。如同rsa算法,實施ecc算法的分布式cpu的同步有助于在sca攻擊中混淆加密密鑰的內容。舉例來說,當分布式cpu同步時,可使基于時序的sca攻擊不大可能成功。
盡管流程圖400、500、600和/或700描述使用cpu1和cpu2的密碼過程的運算,但其它變化是可能的和預期的。舉例來說,cpu1和/或cpu2可由若干cpu組成,例如可用對稱多核處理器、芯片多處理器、異構多核(例如cpu加圖形處理單元(gpu),或一般來說cpu加加速器)以及cpu群集來實施。一般來說,cpu是控制和存儲組件的個別集合,其可包含控制器、多用途存儲寄存器、輸入/輸出部分以及算術邏輯單元。因此,可使用分布式架構或應用程序,其中可指令多個cpu來在rsa算法的情況下,計算求平方或相乘運算中的一些或全部,或在ecc算法的情況下,計算加倍或相加運算中的一些或全部。
參看圖8,計算機系統200(圖2)的實例實施方案包含系統配置800,其包含cpu模塊810、cpu模塊820、控制器模塊830和存儲器模塊840。cpu模塊810和cpu模塊820可各自實施為多核處理器,例如處理器210,或可各自實施為一或多個個別cpu,例如cpu210-a到210-d中的一或多者。控制器模塊830可實施為控制實體240,且可實施為多核處理器210上或cpu210-a到210-d中的一或多者上的過程或算法。存儲器模塊840可實施為存儲器260。
cpu模塊810能夠進行若干運算,包含運算812(op_a)和運算814(op_b)。cpu模塊820還能夠進行若干運算,包含運算822(op_a)和運算824(op_b)。運算812可為與運算822相同的類型,且運算814可為與運算824相同的類型。cpu模塊810和cpu模塊820通信連接到控制器模塊830,其能夠選擇不同的運算來在cpu模塊810和模塊cpu820中執行。控制器模塊830可因此致使運算812或運算814被選擇來在cpu模塊810中執行。同樣地,控制器模塊830可致使運算822或運算824被選擇來在cpu模塊820中執行。
存儲器模塊840包含位置842,其用以存儲例如有效中間數據r。存儲器模塊840還包含位置844,其用以存儲例如不相關的中間數據r′。存儲器模塊840通信連接到cpu模塊810和cpu模塊820,其準許cpu模塊810、820中的任一者或兩者檢索數據并將其存儲在位置842、844。控制器模塊830還可通信連接到存儲器模塊840(以虛線示出),且可例如使用指針來參考位置842、844。
控制器模塊830包含指針832(ptr1)和指針834(ptr2),其用以參考存儲器模塊840中的位置842、844。指針832、834可實施為多核處理器210中或存儲器260(圖2)中的存儲器位置。控制器模塊830將輸入提供到cpu模塊810,以選擇運算812或運算814來執行。控制器模塊830也將輸入提供到cpu模塊822,以選擇運算822或運算824來執行。cpu模塊810上的相應運算812、814以及cpu模塊820上的相應運算822、824的選擇可在密碼過程開始時執行一次,或可在密碼過程期間執行多次。舉例來說,cpu模塊820上的選定運算822、824可在密碼過程的執行期間改變。控制器模塊830還將指針832或指針834提供到cpu模塊810或cpu模塊820,以準許cpu模塊810、820參考并存取存儲器模塊840中的位置842、844。控制器模塊830可基于cpu模塊810正執行哪一運算812、814,以及cpu模塊820正執行哪一運算822、824,來確定指針832、834中的哪些將提供到哪一cpu模塊810、820。控制器模塊830可因此致使分布式rsa或ecc算法在系統配置800上執行,其中每一cpu在算法的執行期間進行單個類型的運算,且用于所述運算的運算數在有效數據與不相關數據之間切換。此算法實例在圖5和7中說明。另外,控制器模塊830可致使cpu切換算法執行期間正執行的運算的類型,且可切換用于所述運算中的運算數,以用有效數據來適當地執行所述算法,來實現有效結果。此算法實例在圖4和6中說明。
參看圖9,進一步參看圖1到8,說明用于執行分布式密碼過程的過程900。然而,過程900僅為實例并且無限制性。可例如通過添加、移除、重新布置、組合、同時執行多個階段和/或將單個階段分裂為多個階段來更改過程900。
在階段910,過程900包含基于加密密鑰d的至少一部分來確定第一運算812、822或第二運算814、824中的選定一者,以使用第一運算數,例如有效中間結果r,來執行第一運算812、822或第二運算814、824中的相應一者,所述第二運算814、824不同于第一運算812、822。
在階段912,過程900包含使用第一運算數,例如有效中間結果r,來執行第一運算812、822或第二運算814、824中的選定一者。在階段914,過程900包含使用第二運算數,例如不相關中間結果r′,來執行第一運算812、822或第二運算814、824中的另一者。
與求平方和相乘運算(群集中的數千個指令)相比,控制實體240所產生的旁信道信號是微弱的(單個或原子指令等級)。相應旁信道信號中的差異可為一對數量級,因此有助于將私鑰從密碼運算解離。本文所論述的技術可應用與加密優化,類似于多進制、滑動窗、crt和蒙哥馬利(montgomery)倍增,其具有相同的預期性能和改進的安全性。電力消耗可大約為已知的單個cpu實施方案的電力消耗的雙倍,是許多運算總體的兩倍(約一半的運算是在不相關或假數據上)。然而,所揭示的架構和技術的性能度量可有利地與例如在單個cpu上實施的已知密碼過程的性能度量進行比較,例如大約相同。因此,可實現關于旁信道分析的改進的安全性,而不使性能降級。
取決于應用,可通過各種裝置來實施本文中所描述的方法。舉例來說,這些方法可在硬件、固件、軟件或其任何組合中實施。對于硬件實施方案,處理單元可實施于一或多個專用集成電路(asic)、數字信號處理器(dsp)、數字信號處理裝置(dspd)、可編程邏輯裝置(pld)、現場可編程門陣列(fpga)、處理器、控制器、微控制器、微處理器、電子裝置、經設計以執行本文中所描述功能的其它電子單元,或其組合內。
對于固件和/或軟件實施方案,可用執行本文中所描述的功能的模塊(例如,程序、函數等等)來實施所述方法。在實施本文所描述的方法時,可使用有形地體現指令的任何機器可讀媒體。舉例來說,軟件代碼可存儲在存儲器中,并且由處理器單元執行。存儲器可實施在處理器單元內或處理器單元外部。如本文中所使用術語“存儲器”是指任何類型的長期、短期、易失性、非易失性或其它存儲器,且并不限于任何特定類型的存儲器或特定數目的存儲器或特定類型的媒體。有形媒體包含機器可讀媒體的一或多個物理物品,例如隨機存取存儲器、磁性存儲裝置、光學存儲媒體等等。
如果以固件和/或軟件實施,那么可將所述功能作為一或多個指令或代碼存儲在計算機可讀媒體上。實例包含用數據結構編碼的計算機可讀媒體和用計算機程序編碼的計算機可讀媒體。計算機可讀媒體包含物理計算機存儲媒體。存儲媒體可為可由計算機存取的任何可用的媒體。借助于實例而非限制,此種計算機可讀媒體可包括ram、rom、eeprom、cd-rom或其它光盤存儲器,磁盤存儲器或其它磁性存儲裝置,或任何其它可用于存儲呈指令或數據結構形式的所要程序代碼且可由計算機接入的媒體;如本文中所使用,磁盤和光盤包含壓縮光盤(cd)、激光光盤、光學光盤、數字多功能光盤(dvd),軟性磁盤和藍光光盤,其中磁盤通常以磁性方式再現數據,而光盤用激光以光學方式再現數據。以上各項的組合也包含在計算機可讀媒體的范圍內。此些媒體還提供可為機器可讀的非暫時性媒體的實例,且其中計算機為可從此些非暫時性媒體讀取的機器的實例。
上文所論述的方法、系統和裝置是實例。在適當時,各種配置可省略、取代或添加各種程序或組件。舉例來說,在替代性配置中,可以不同于所描述的順來執行方法,和/或可添加、省略和/或組合各種階段。并且,可以各種其它配置來組合想對于某些配置所描述的特征。可以類似方式組合配置的不同方面和元件。并且,技術發展,且因此元件中的許多是實例,且并不限制本發明或所附權利要求的范圍。