專利名稱:配置密碼引擎資料區(qū)塊的微處理器及方法
技術(shù)領(lǐng)域:
本發(fā)明是有關(guān)于微電子領(lǐng)域,特別是有關(guān)于一種在一計算裝置中執(zhí)行密碼運算的裝置及方法,其中計算裝置允許數(shù)據(jù)區(qū)塊大小依據(jù)指令階段的程序化而運作。
背景技術(shù):
早期的計算機系統(tǒng)是獨立操作于其它計算機系統(tǒng)之外,據(jù)此,執(zhí)行于此計算機系統(tǒng)中的應用程序所需的輸入數(shù)據(jù),若非儲存于此計算機系統(tǒng),就是由應用程序設計人員在執(zhí)行時提供;而應用程序執(zhí)行結(jié)果及產(chǎn)生的輸出數(shù)據(jù),其形式一般為打印輸出的紙張,或者是寫入磁帶、磁盤或是此計算機系統(tǒng)其它類型的儲存裝置的檔案。輸出檔案可當成之后在相同計算機系統(tǒng)中執(zhí)行的應用程序的輸入檔案,或者,當輸出數(shù)據(jù)先前被儲存成檔案于可移除或可輸送的儲存裝置時,其也可以提供給不同但兼容的計算機系統(tǒng)的應用程序使用。在這些早期的系統(tǒng),保護機密信息的需求是公認,并且在其它信息安全措施中,密碼應用程序被發(fā)展及應用以防止機密信息未被授權(quán)揭露。這些密碼程序一般是以加密或解密的方式在儲存裝置中儲存成檔案的輸出數(shù)據(jù)。
其后沒幾年,使用者開始發(fā)現(xiàn)由網(wǎng)絡將計算機連接可以提供信息共享存取的好處,因此網(wǎng)絡架構(gòu)、操作系統(tǒng)、以及數(shù)據(jù)傳輸協(xié)議等均發(fā)展成不僅支持存取共享數(shù)據(jù)的能力,更是其顯著的特征。例如使用者的計算機工作站可以在不同工作站或網(wǎng)絡文件服務器存取檔案,或者利用因特網(wǎng)獲得新聞及其它信息,或者對數(shù)以百計的其它計算機傳送及接收電子訊息(如電子郵件),或者與經(jīng)銷商的計算機系統(tǒng)連接并提供信用卡或銀行信息以購買產(chǎn)品,或者在餐廳、機場或其它公共場合利用無線網(wǎng)絡進行上述的任何活動。因此,保護機密數(shù)據(jù)及傳輸免于未授權(quán)揭露的需求已急速的成長,而在某些特定的狀況下,使用者被迫保護其機密數(shù)據(jù)的情況也大大的增加。目前新聞頭條通常集中在計算機信息安全問題,例如垃圾郵件(spam)、黑客、身分盜取、反向工程、惡作劇以及信用卡詐騙等是公眾所關(guān)注的前幾名。而當這些從各方面侵入私人領(lǐng)域的動機由無心的錯誤到有預謀的網(wǎng)絡攻擊,負責的執(zhí)行單位以新法律、嚴厲的執(zhí)行以及公共教育節(jié)目響應。然而,這些響應并未有效遏止危及計算機信息的浪潮。昔日是政府、金融機構(gòu)、軍方所專注關(guān)切之間諜,現(xiàn)在對一般人而言也已成為重要的問題;間諜讀取他們的電子郵件或從他們的家用計算機存取他們檢查賬戶的交易。在商業(yè)之前,熟悉該項技術(shù)者可察知從小到大的社團法人目前應用其資源卓越的部分以保護財產(chǎn)信息。
信息安全領(lǐng)域提供我們技術(shù)及裝置以加密數(shù)據(jù),并使其僅能由指定的個體加以解碼,此為所知的密碼(cryptography)。當特別應用于保護儲存或傳輸于計算機之間的信息時,密碼最常被應用于轉(zhuǎn)換機密數(shù)據(jù)(稱為“明文”;plaintext或cleartext)成為難以理解的形式(稱為“密文”;ciphertext)。轉(zhuǎn)變明文成為密文的轉(zhuǎn)換過程稱為加密(encryption;enciphering;ciphering),而轉(zhuǎn)變密文回明文的反向轉(zhuǎn)換過程稱為解密(decryption;deciphering;inverse ciphering)。
在密碼學的領(lǐng)域中,幾種程序及協(xié)議已發(fā)展到允許使用者不須具備許多知識及努力即可執(zhí)行密碼運算,并且針對這些使用者使其可以傳輸或者提供其加密形式的信息產(chǎn)品給不同的使用者。連同加密信息,傳送者通常會提供接收者一“密碼鑰匙(cryptographic key)”以使接收者可以譯碼所加密的信息,因此使得接收者能夠恢復或者獲得存取未加密的原始信息。熟悉該項技術(shù)者可察知這些程序及協(xié)議一般是以暗語(password)保護、數(shù)學算法以及應用程序特別設計的形式加以實現(xiàn)以加密及解密機密信息。
幾種類型的算法目前使用于加密及解密數(shù)據(jù)。算法根據(jù)上述一類型(例如一種RSA算法,公開鑰匙密碼算法)利用兩密碼鑰匙(一公開鑰匙(publickey)與一私人鑰匙(private key)),加密或解密資料。根據(jù)一些公開鑰匙算法,接收者的公開鑰匙被傳送者用來加密傳送給接收者的數(shù)據(jù),因為有一數(shù)學關(guān)系存在于使用者的公開鑰匙與私人鑰匙之間,因此接收者必須利用其私人鑰匙解密此傳輸以恢復此數(shù)據(jù)。雖然這類型的密碼算法廣泛使用于現(xiàn)今,但其加密及解密的運算卻是極慢甚至于少量的數(shù)據(jù)。一第二類型的算法,如所知的對稱鑰匙算法,提供同量等級的數(shù)據(jù)安全并且可以較快執(zhí)行。這些算法稱為對稱鑰匙算法,因為他們對加密及解密信息使用單一密碼鑰匙。在公開區(qū)段,目前有三種盛行單一鑰匙(single-key)密碼算法數(shù)據(jù)加密標準(Data Encryption Standard;DES)、三重數(shù)據(jù)加密標準(Triple DES)以及進階加密標準(Advanced Encryption Standard;AES)。因為這些算法保護機密數(shù)據(jù)的強度,美國政府機關(guān)目前正使用這些算法,但熟悉該項技術(shù)者預期這些算法中至少一個算法,在不久的將來會變成商業(yè)及非官方交易的標準。根據(jù)所有這些對稱鑰匙算法,明文及密文被劃分在指定大小中的區(qū)塊以進行加密及解密。例如進階加密標準執(zhí)行密碼運算于128位區(qū)塊的大小,并且使用128位、192位以及256位的密碼鑰匙長度。其它對稱鑰匙算法,例如Rijndael Cipher也允許192位以及256位的數(shù)據(jù)區(qū)塊。據(jù)此,就一區(qū)塊加密運算而言,一1024位的明文訊息加密成8個128位的區(qū)塊。
所有對稱鑰匙算法利用相同形式的次運算以加密一區(qū)塊的明文,并且根據(jù)許多更常被應用的對稱鑰匙算法,一初始密碼鑰匙被擴展成復數(shù)個鑰匙(例如一“鑰匙排程”),每一鑰匙用以當成次運算的一對應密碼“回合”且執(zhí)行于明文區(qū)塊。例如鑰匙排程的第一鑰匙用以執(zhí)行次運算的第一密碼回合于明文區(qū)塊,第一回合的結(jié)果用以當成第二回合的輸入,其中第二回合利用鑰匙排程的第二鑰匙以產(chǎn)生第二結(jié)果,并且一具體指定數(shù)量后來的回合執(zhí)行產(chǎn)生一最終回合結(jié)果,即密文本身。根據(jù)進階加密標準算法,在每一回合的次運算參照于文獻中的次位(或S-box)、移列(ShiftRows)、混欄(MixColums)以及加入回合鍵(AddRoundKey)等。一區(qū)塊密文的解密類似的處理并伴隨例外的執(zhí)行在每一回合,且回合的最終結(jié)果是一區(qū)塊的明文,上述的例外是指密文輸入反加密及反次運算執(zhí)行(例如InverseMixColumns、Inverse ShiftRows)。
數(shù)據(jù)加密標準及三重數(shù)據(jù)加密標準算法利用不同特定的次運算,但是這些次運算是類似進階加密標準算法的次運算,因為其利用相似的方式以轉(zhuǎn)換一區(qū)塊的明文成為一區(qū)塊的密文。
執(zhí)行密碼運算于多連續(xù)的文字區(qū)塊,所有對稱鑰匙算法利用相同類別的模式,這些模式包含電子密碼本(electronic code book;ECB)模式、密碼區(qū)塊鏈接(cipher block chaining;CBC)模式、密碼反饋模式(cipher feedback;CFB)以及輸出反饋模式(output feedback;OFB)。這些模式中有些利用一附加初始化向量于執(zhí)行次運算期間,有些使用執(zhí)行于第一區(qū)塊明文的第一位置密碼回合的密文輸出當成附加的輸入給執(zhí)行于第二區(qū)塊明文的第二位置密碼回合。除此,本應用的領(lǐng)域?qū)ΜF(xiàn)今對稱鑰匙密碼算法所應用的每一密碼演算及次運算提供更深層的討論。就具體指定執(zhí)行標準而言,讀者可由美國聯(lián)邦信息處理標準公告46-3(Federal Information ProcessingStandards Publication;FIPS-46-3),1999年10月25日出版,得到數(shù)據(jù)加密標準及三重數(shù)據(jù)加密標準的詳細探討;以及美國聯(lián)邦信息處理標準公告197(FIPS-197),2001年11月26日出版,得到進階加密標準的詳細探討。上述提及的兩種標準是由美國國家標準暨技術(shù)局(National Institute ofStandards and Technology;NIST)所發(fā)布及主張,在此列為參考以供本發(fā)明所有意圖及目的的說明。除上述所提及的標準,教導(tutorial)、白皮書、套件(toolkit)以及資源文章均可透過因特網(wǎng)http//csrc.nist.gov/在NIST的計算機資源安全中心(Computer Security Resource Center;CSRC)獲得。
熟悉該項技術(shù)者可察知有許多的應用程序能夠執(zhí)行在可以執(zhí)行密碼運算(例如加密及解密)的計算機系統(tǒng)。實際上,某些操作系統(tǒng)(例如微軟Window XP、Linux)提供直接加密/解密的服務于密碼基元(primitive)、密碼應用程序接口以及諸如此類的形式。然而,本發(fā)明人已觀察到現(xiàn)今計算機密碼技術(shù)在某些方面的缺陷,因此由圖1強調(diào)及討論這些缺陷。
圖1是現(xiàn)今計算機密碼應用的方塊圖100。方塊圖100描繪第一計算機工作站101連接局域網(wǎng)絡(local area network)105,且局域網(wǎng)絡105也連接第二計算機工作站102、網(wǎng)絡檔案儲存裝置(network file storage device)106、第一路由器(first router)107或其它接口形式到廣域網(wǎng)絡(wide areanetwork,WAN)110(例如因特網(wǎng))以及像是符合IEEE 802.11的無線網(wǎng)絡路由器(wireless network router)1 08,筆記型計算機(1aptop computer)104則是透過無線網(wǎng)絡109與無線路由器108成為接口。在廣域網(wǎng)絡110方面,第二路由器(second router)111提供接口給第三計算機工作站103。
如上概述,現(xiàn)今使用者在工作期間面臨許多次的計算機信息安全問題。例如在現(xiàn)今多任務(multi-tasking)操作系統(tǒng)的控制下,使用者工作站101可以同時執(zhí)行多個任務(task)且每一任務要求密碼運算。使用者工作站101要求執(zhí)行加密/解密應用程序(encryption/decryption application)112(無論是操作系統(tǒng)的一部分或是由操作系統(tǒng)所引動(invoke))以儲存區(qū)域檔案于網(wǎng)絡檔案儲存裝置106,在檔案儲存的同時,使用者可以傳送一加密訊息給在工作站102的第二使用者,其中工作站102也要求執(zhí)行加密/解密應用程序112的一范例,而加密訊息可能是實時(例如實時訊息)或者是非實時(例如電子郵件)。此外,使用者可以透過廣域網(wǎng)絡110從工作站103存取或提供其金融數(shù)據(jù)(例如信用卡號、金融交易等)或者其它形式的機密數(shù)據(jù)。工作站103也可以代表是家庭辦公或其它遠程計算機103,其可以讓工作站101的使用者離開辦公室時用以存取局域網(wǎng)絡105的任何共享資源101、102、106、107、108以及109。上述提及的每一活動均要求引動加密/解密應用程序112的相對范例,并且無線網(wǎng)絡109目前普遍地提供于咖啡店、機場、學校以及其它公眾場所,因而促使使用者筆記型計算機104不僅對其他使用者傳送/接收的訊息進行加密/解密,并且也對透過無線網(wǎng)絡109到無線路由器108的所有通訊進行加密及解密。
熟悉該項技術(shù)者可因此察知在工作站101-104中連同每一要求密碼運算的活動,須有一相對的要求以引動(invoke)加密/解密應用程序112的范例,因此計算機101-104在最近的將來有可能同時執(zhí)行數(shù)以百計的密碼運算。
本發(fā)明人注意到上述計算機系統(tǒng)101-104由引動加密/解密應用程序112的至少一范例以執(zhí)行密碼運算的方法的限制。例如透過程序規(guī)劃的軟件執(zhí)行一指定功能就比透過硬件執(zhí)行相同功能還慢。且每次執(zhí)行加密/解密應用程序112時,正在計算機101-104執(zhí)行的任務就必須暫緩執(zhí)行,并且密碼運算的參數(shù)(例如明文、密文、模式以及鑰匙等)必須透過操作系統(tǒng)傳送給加密/解密應用程序112為完成密碼運算所引動的范例。并且因為密碼演算須在一指定的數(shù)據(jù)區(qū)塊引動許多回合的次運算,加密/解密應用程序112的執(zhí)行引動許多計算機指令的執(zhí)行而對整體系統(tǒng)的處理速度產(chǎn)生不利的影響。熟悉該項技術(shù)者可察知在微軟Outlook傳送少量加密電子郵件訊息的時間會相當于只傳送未加密電子郵件訊息的五倍。
此外,目前技術(shù)受限于操作系統(tǒng)介入的延遲。大部分的應用程序并無提供完整的鑰匙產(chǎn)生或加密/解密組件;其利用操作系統(tǒng)的組件或外掛應用程序以完成上述任務,此外操作系統(tǒng)因中斷及其它正在執(zhí)行應用程序的請求而轉(zhuǎn)移其執(zhí)行。
并且,本發(fā)明人注意到在現(xiàn)今計算機系統(tǒng)101-104的密碼運算相類似于微處理器尚未有浮點單元時的浮點數(shù)學運算。早期的浮點單元運算是由軟件所執(zhí)行,因此執(zhí)行的非常慢;同浮點運算,由軟件執(zhí)行的密碼運算也是極慢。當浮點技術(shù)更進一步發(fā)展,浮點輔助處理器提供浮點指令以供執(zhí)行,這些浮點輔助處理器執(zhí)行浮點運算比軟件執(zhí)行快了許多,但卻增加了系統(tǒng)的成本。相同地,密碼輔助處理器目前以附加在電路板或以外接裝置與主處理器透過并列端口或其它接口總線(例如USB)成為接口的形式存在,這些輔助處理器能使密碼運算的完成比由純軟件所執(zhí)行的快了許多。但密碼共同處理器給系統(tǒng)配置增加了成本,需要額外的電源、而且降低了系統(tǒng)的可靠性。由于數(shù)據(jù)通路不像主微處理器那樣在同一模塊上,所以密碼共同處理器的執(zhí)行更易被監(jiān)聽。
因此本發(fā)明人確認將密碼硬件加入現(xiàn)今微處理器的需要,由此,要求密碼運算的應用程序可由一單獨、基元(atomic)的密碼指令指示微處理器執(zhí)行密碼運算。本發(fā)明人也確認應以此功能限定操作系統(tǒng)介入及管理的要求,并且期望密碼指令可以使用于應用程序的權(quán)限層級(privilege level)以及密碼硬件可相稱(comport with)于現(xiàn)今微處理器的一般架構(gòu),并且密碼硬件及相關(guān)聯(lián)的密碼指令可支持兼容先前的操作系統(tǒng)及應用程序。更期望的是提供執(zhí)行密碼運算的裝置及方法,其可阻止未授權(quán)的監(jiān)視;其可支持及可程序化有關(guān)多密碼演算;其可支持核對及測試實體特定的密碼演算;其可允許使用者提供鑰匙也可自行產(chǎn)生鑰匙;其支持多數(shù)據(jù)區(qū)塊大小及鑰匙長度(key size);以及其提供可程序化區(qū)塊加密/解密模式如電子密碼本模式、密碼區(qū)塊鏈接模式、密碼反饋模式以及輸出反饋模式。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種執(zhí)行密碼運算的裝置,其中包含一密碼指令電路,用以產(chǎn)生一密碼指令,該密碼指令由一計算裝置接收并將其當成執(zhí)行于該計算裝置一指令流的一部分,其中該密碼指令指定復數(shù)個密碼運算其中之一及復數(shù)個數(shù)據(jù)區(qū)塊大小其中之一;以及一執(zhí)行邏輯電路,操作耦合該密碼指令電路,并且配置用以執(zhí)行被指定的密碼運算,該執(zhí)行邏輯電路包含一區(qū)塊大小控制器,在被指定的密碼運算執(zhí)行期間,配置用以使用被指定的數(shù)據(jù)區(qū)塊大小。
其中該密碼運算可以具有下列功能的某一種一加密運算,該加密運算包含復數(shù)個明文區(qū)塊的加密以產(chǎn)生相對復數(shù)個密文區(qū)塊;以及一解密運算,該解密運算包含復數(shù)個密文區(qū)塊的解密,以產(chǎn)生相對復數(shù)個明文區(qū)塊。
其中被指定數(shù)據(jù)區(qū)塊大小至少可以為下列可能變化的某一種128位、192位以及256位。
其中該區(qū)塊大小控制器配置用以轉(zhuǎn)譯由該密碼指令所參照的一控制字組中的一數(shù)據(jù)區(qū)塊大小字段。
其中該密碼指令依據(jù)x86指令格式指定。
其中該密碼指令隱含參照該計算裝置的復數(shù)個緩存器。
其中該些緩存器至少可以為下列可能變化的某一種或其任意組合一第一緩存器,其中該第一緩存器的內(nèi)容包含指向一第一內(nèi)存地址的一第一指針,該第一內(nèi)存地址依據(jù)欲完成的被指定的密碼運算指定內(nèi)存內(nèi)一第一位置以存取復數(shù)個輸入文字區(qū)塊,該些輸入文字區(qū)塊的大小依據(jù)被指定的數(shù)據(jù)區(qū)塊大小而設定;一第二緩存器,其中該第二緩存器的內(nèi)容包含指向一第二內(nèi)存地址的一第二指針,該第二內(nèi)存地址指定內(nèi)存內(nèi)一第二位置以儲存相對復數(shù)個輸出文字區(qū)塊,相對該些輸出文字區(qū)塊依據(jù)復數(shù)個輸入文字區(qū)塊完成被指定的密碼運算而產(chǎn)生,其中該些輸入文字區(qū)塊及該些輸出文字區(qū)塊的大小依據(jù)被指定的數(shù)據(jù)區(qū)塊大小而設定;一第三緩存器,其中該第三緩存器的內(nèi)容指示復數(shù)個輸入文字區(qū)塊內(nèi)復數(shù)個區(qū)塊,其中該些輸入文字區(qū)塊的大小依據(jù)被指定數(shù)據(jù)區(qū)塊大小而設定;一第四緩存器,其中該第四緩存器的內(nèi)容包含指向一第三內(nèi)存地址的一第三指針,該第三內(nèi)存地址指定內(nèi)存內(nèi)一第三位置以存取密碼鑰匙數(shù)據(jù)以用于完成被指定的密碼運算;一第五緩存器,其中該第五緩存器的內(nèi)容包含指向一第四內(nèi)存地址的一第四指針,該第四內(nèi)存地址指定內(nèi)存內(nèi)一第四位置,該第四位置包含一初始向量位置,該初始向量位置的內(nèi)容包含一初始向量或一初始向量等效物以用于完成被指定的密碼運算;以及一第六緩存器,其中該第六緩存器的內(nèi)容包含指向一第五內(nèi)存地址的一第五指針,該第五內(nèi)存地址指定內(nèi)存內(nèi)一第五位置以存取一控制字組以用于完成被指定的密碼運算,其中該控制字組指定被指定的密碼運算的密碼參數(shù),該控制字組包含一數(shù)據(jù)區(qū)塊大小字段,配置用以指定在被指定的密碼運算執(zhí)行期間,使用該數(shù)據(jù)區(qū)塊大小。
其中該執(zhí)行邏輯電路包含一密碼單元,配置用以在每一輸入文字區(qū)塊執(zhí)行復數(shù)個密碼回合以產(chǎn)生每一相對輸出文字區(qū)塊,其中被指定的數(shù)據(jù)區(qū)塊大小由一控制字組指定,且該控制字組提供給該密碼單元的該區(qū)塊大小控制器。
根據(jù)本發(fā)明,還提供一種執(zhí)行密碼運算的裝置,其中包含一組件內(nèi)的一密碼單元,該密碼單元配置用以執(zhí)行復數(shù)個密碼運算其中之一,響應接收一指令流內(nèi)一密碼指令,該密碼指令由一密碼指令電路所提供,而該密碼指令指定被指定的密碼運算,以及在執(zhí)行被指定的密碼運算時指定欲使用的一區(qū)塊大??;以及一區(qū)塊大小邏輯電路,操作耦合于該密碼單元,用以在被指定的密碼運算期間,指定該組件來使用該區(qū)塊大小。
其中被指定的區(qū)塊大小至少可以為下列可能變化的某一種128位、192位以及256位。
其中該區(qū)塊大小邏輯電路配置用以轉(zhuǎn)譯該密碼指令所參照的一控制字組中的一數(shù)據(jù)區(qū)塊大小字段。
其中該密碼指令依據(jù)x86指令格式所指定。
本發(fā)明提供的一種在一裝置執(zhí)行密碼運算的方法,包含接收一密碼指令,該密碼指令在被指定的密碼運算執(zhí)行期間指定使用一數(shù)據(jù)區(qū)塊大?。灰约霸趫?zhí)行被指定的密碼運算時,使用被指定的數(shù)據(jù)區(qū)塊大小。
其中該接收包含由一控制字組的一字段指定被指定的數(shù)據(jù)區(qū)塊大小,其中該控制字組由該密碼指令所參照。
其中該使用包含執(zhí)行被指定的密碼運算依據(jù)進階加密標準的規(guī)則。
其中該接收包含指定該密碼指令依據(jù)x86指令格式。
圖1為現(xiàn)今密碼應用的方塊圖;圖2為執(zhí)行密碼運算技術(shù)的方塊圖;圖3為本發(fā)明實施例中執(zhí)行密碼運算的微處理器裝置的方塊圖;圖4為本發(fā)明實施例中的基元(atomic)密碼指令實施例的方塊圖;圖5為圖4的基元密碼指令區(qū)塊加密模式字段值的范例的表格;
圖6為本發(fā)明在x86兼容微處理器中的密碼單元的方塊圖;圖7為圖6的微處理器中指示密碼次運算的范例微指令字段的方塊圖;圖8為圖7的加載微指令暫存字段值格式的表格;圖9為圖7的儲存微指令暫存字段值格式的表格;圖10為本發(fā)明指定密碼運算參數(shù)的控制字組格式范例的方塊圖;圖11為圖10的控制字組數(shù)據(jù)大小字段值的表格;圖12為本發(fā)明的一較佳實施密碼單元的方塊圖;圖13為本發(fā)明執(zhí)行有關(guān)進階加密標準(AES)算法密碼運算的一區(qū)塊加密邏輯電路實施例的方塊圖;圖14為本發(fā)明在一中斷事件期間保留密碼參數(shù)狀態(tài)的方法流程圖;以及圖15為本發(fā)明在一或多個中斷事件時,在復數(shù)個輸入數(shù)據(jù)區(qū)塊執(zhí)行一密碼運算使用一使用者指定區(qū)塊大小的方法流程圖。
具體實施例方式
以下所述為應用公知技術(shù)而制造或使用文中特定應用及需求知本發(fā)明所列舉的例子。然而,實施例中所提及的各種修改是用以彰顯與公知技術(shù)不同處,此一般原則可應用于其它實施例中。因此,本發(fā)明并非限定于特定實施例。
鑒于上述所討論的密碼運算及現(xiàn)今計算機系統(tǒng)用以加/解密數(shù)據(jù)的相關(guān)技術(shù),這些技術(shù)及其相關(guān)限制將在圖2中繼續(xù)探討,而接下來本發(fā)明也將根據(jù)圖3到圖15加以討論。本發(fā)明提供一種在現(xiàn)今計算機系統(tǒng)中執(zhí)行密碼運算的裝置及方法,其透過主要機制展現(xiàn)優(yōu)秀的性能特征并且更滿足上述所提及的目標,像是限制操作系統(tǒng)的干預、先前(legacy)架構(gòu)的兼容性、算法及模式的可程序性、防止黑客入侵以及可測試性等等。
請參照圖2,方塊圖200描繪當今計算機系統(tǒng)中執(zhí)行密碼運算的技術(shù)。方塊圖200包含一微處理器201,其擷取指令及從系統(tǒng)內(nèi)存中一稱為應用內(nèi)存(application memory)203存取應用程序相關(guān)的數(shù)據(jù),而程控及應用內(nèi)存203中數(shù)據(jù)的存取通常是由屬于系統(tǒng)內(nèi)存保護范圍的操作系統(tǒng)軟件(operating system software)202所管理。如上所述,當一執(zhí)行應用程序(例如電子郵件程序或檔案儲存程序)要求執(zhí)行密碼運算時,此執(zhí)行應用程序必須由指示(direct)微處理器201執(zhí)行相當數(shù)量的指令以完成密碼運算。這些指令可能是執(zhí)行應用程序本身的子程序,也可能是連結(jié)到此執(zhí)行應用程序的外掛應用程序,或者是由操作系統(tǒng)202所提供的服務。姑且不論他們的關(guān)聯(lián)性,熟悉該項技術(shù)者可察知這些指令將駐于某些指定或分派的內(nèi)存范圍。為達到討論目的,這些內(nèi)存范圍顯示在應用內(nèi)存203并且包含一密碼鑰匙產(chǎn)生應用程序(key generation application)204,其中密碼鑰匙產(chǎn)生應用程序204產(chǎn)生或接收一密碼鑰匙并且擴展此鑰匙成一使用于密碼回合運算中的鑰匙排程(key schedule)205。就多區(qū)塊加密運算而言,區(qū)塊加密應用程序(encryption application)206被引動(invoke)。加密應用程序206執(zhí)行存取明文(plaintext)區(qū)塊210、鑰匙排程205以及密碼參數(shù)(cryptographicparameters)209的指令,其中密碼參數(shù)209進一步指示明確的密碼運算,如模式、鑰匙排程位置等,且在要求特定模式時,加密應用程序206也可存取初始向量(initialization vector)208。加密應用206執(zhí)行其內(nèi)的指令以產(chǎn)生對應的密文(ciphertext)區(qū)塊211。同理,區(qū)塊解密應用程序(decryptionapplication)207被引動以執(zhí)行區(qū)塊解密運算。解密應用程序207執(zhí)行存取密文區(qū)塊211、鑰匙排程205以及密碼參數(shù)209的指令,其中密碼參數(shù)209系進一步指示明確的密碼運算,并且在要求特定模式時,也可存取初始向量208。解密應用程序207執(zhí)行其內(nèi)的指令以產(chǎn)生對應的明文區(qū)塊210。
值得注意的是必須執(zhí)行相當數(shù)量的指令以產(chǎn)生密碼鑰匙及加密或解密文字區(qū)塊。上述提及的FIPS說明書包含許多偽碼致能相當數(shù)量指令的范例,因此,熟悉該項技術(shù)者可察知一個簡單的加密運算將要求數(shù)以百計的指令,并且每一指令須經(jīng)由微處理器201執(zhí)行以完成所要求的密碼運算。并且,完成密碼運算的指令執(zhí)行對正在執(zhí)行的應用程序的主目的(例如檔案管理、實時訊息、電子郵件、遠程檔案存取、信用卡交易)而言一般屬多余,結(jié)果讓使用者誤為目前執(zhí)行的應用程序執(zhí)行效率不佳。至于獨立或外掛的加密及解密應用程序206及207,這些應用程序206及207的引動及管理也必須服從操作系統(tǒng)202的其它請求,例如支持中斷、例外(exception)以及更惡化的問題的類似事件。并且計算機系統(tǒng)所要求每一同時的密碼運算,密碼鑰匙產(chǎn)生應用程序204、解密應用程序207及初始向量208的個別實例必須被配置在應用內(nèi)存203,且預期由微處理器201所要求執(zhí)行的同時密碼運算的數(shù)目也將隨時間而增加。
本發(fā)明人注意到目前計算機系統(tǒng)密碼技術(shù)的問題與限制,并且確認在微處理器中提供執(zhí)行密碼運算的裝置及方法的需要。由此,本發(fā)明提供一微處理器及相關(guān)的方法,透過其內(nèi)的密碼單元執(zhí)行密碼運算,此密碼單元系藉由單一密碼指令的程序執(zhí)行密碼運算。本發(fā)明現(xiàn)在將以圖3到圖12為參考加以討論。
請參照圖3,其為本發(fā)明一較佳實施例執(zhí)行密碼運算的微處理器的方塊圖300。方塊圖300描繪一微處理器301,其透過內(nèi)存總線(memory bus)319與系統(tǒng)內(nèi)存(system memory)321耦合連接,且微處理器301包含從指令緩存器接收指令的一轉(zhuǎn)譯邏輯電路(translation logic)303。轉(zhuǎn)譯邏輯電路303包含邏輯電路、裝置或微碼(例如微指令或本機指令),或邏輯電路、裝置或微碼的組合,或用以轉(zhuǎn)譯指令成為指令相關(guān)序列的等效組件。這些在轉(zhuǎn)譯邏輯電路303中執(zhí)行轉(zhuǎn)譯的組件可能與在微處理器301中執(zhí)行其它功能的電路、微碼共享,而根據(jù)本應用的范圍,微碼是對照至少一個微指令的術(shù)語。一微指令(也可參照成一本機指令)系一單元層級執(zhí)行的一指令,例如微指令是由精簡指令集計算機(reduced instruction set computer;RISC)微處理器直接執(zhí)行。至于復雜指令集計算機(complex instruction setcomputer;CISC)微處理器,如x86兼容的微處理器,其x86指令被轉(zhuǎn)譯為關(guān)聯(lián)的微指令并且由復雜指令集計算機微處理器中的單元直接執(zhí)行。轉(zhuǎn)譯邏輯電路303耦合微指令隊列(micro instruction queue)304,且此微指令隊列304具有復數(shù)個微指令信道(micro instruction entries)305、306。微指令由微指令隊列304提供給包含一緩存器組(register file)307的暫存階段邏輯電路,而此緩存器組307包含復數(shù)個緩存器(register)308-313,其內(nèi)容在執(zhí)行一指定的密碼運算前就已建立。緩存器308-313指到系統(tǒng)內(nèi)存321中含有執(zhí)行指定密碼運算數(shù)據(jù)的對應位置323-327。暫存階段耦合到加載邏輯電路(load logic)314,此加載邏輯電路314與取回數(shù)據(jù)以執(zhí)行指定密碼運算的數(shù)據(jù)快取(data cache)315成接口,而此數(shù)據(jù)快取315藉由內(nèi)存總線319耦合到系統(tǒng)內(nèi)存321。執(zhí)行邏輯電路(execution logic)328耦合到加載邏輯電路314并且執(zhí)行由前面階段傳來的微指令所指定的運算。執(zhí)行邏輯電路328包含邏輯電路、裝置或微碼(例如微指令或本機指令),或邏輯電路、裝置或微碼的組合,或用以執(zhí)行由指令指定的運算的等效組件。這些在執(zhí)行邏輯電路328中執(zhí)行運算的組件可能與在微處理器301中執(zhí)行其它功能的電路、微碼共享。執(zhí)行邏輯電路包含密碼單元(cryptography unit)316,此密碼單元316接收從加載邏輯電路314被要求執(zhí)行指定密碼運算的數(shù)據(jù)。微指令指示密碼單元316執(zhí)行指定密碼運算于復數(shù)個輸入文字區(qū)塊(input text)326以產(chǎn)生相對應復數(shù)個輸出文字區(qū)塊(output text)327。密碼單元316包含邏輯電路、裝置或微碼(例如微指令或本機指令),或邏輯電路、裝置或微碼的組合,或用以執(zhí)行密碼運算的等效組件。這些在密碼單元316中執(zhí)行運算的組件可能與在微處理器301中執(zhí)行其它功能的電路、微碼共享。在一實施例中,密碼單元316并列操作與在執(zhí)行邏輯電路328內(nèi)的其它執(zhí)行單元(未繪出),例如整數(shù)單元、浮點數(shù)單元等。在本應用范圍一“單元”的實施包含邏輯電路、裝置或微碼(例如微指令或本機指令),或邏輯電路、裝置或微碼的組合,或用以執(zhí)行指定功能或指定運算的等效組件。這些在特定單元中執(zhí)行指定功能或指定運算的組件可能與在微處理器301中執(zhí)行其它功能的電路、微碼共享。例如一實施例中,一整數(shù)單元包含邏輯電路、裝置或微碼(例如微指令或本機指令),或邏輯電路、裝置或微碼的組合,或用以執(zhí)行整數(shù)指令的等效組件;一浮點單元包含邏輯電路、裝置或微碼(例如微指令或本機指令),或邏輯電路、裝置或微碼的組合,或用以執(zhí)行浮點指令的等效組件;則在整數(shù)單元中執(zhí)行整數(shù)指令的組件可能與在浮點單元中執(zhí)行浮點指令的其它電路、微碼等共享。在一與x86架構(gòu)兼容的實施例中,密碼單元316與整數(shù)單元、浮點單元、多媒體延伸集(Mathematic Matrix Extension,MMX)單元、串流延伸集(Streaming SIMD Extensions,SSE)單元并列操作。根據(jù)本應用范圍,當一實施例可以正確執(zhí)行設計給x86微處理器執(zhí)行的大部分應用程序時,此實施例系與x86架構(gòu)兼容,一應用程序正確執(zhí)行而得到其預期的結(jié)果。替代x86兼容實施例預期密碼單元并列操作與先前提及的x86執(zhí)行單元的子集。密碼單元316耦合到儲存邏輯電路317并且提供相對應復數(shù)個輸出文字區(qū)塊327,而此儲存邏輯電路317也耦合到指定輸出文字數(shù)據(jù)327給系統(tǒng)內(nèi)存321儲存的數(shù)據(jù)快取315。此數(shù)據(jù)快取315耦合到寫回邏輯電路(write back logic)318,而當所指定的密碼運算完成時,寫回邏輯電路318更新在緩存器組307中的緩存器308-313。在一實施例中,微指令與頻率信號電路(未繪出)同步經(jīng)過每一個上述所提及的邏輯電路階段302、303、304、307、314、316-318以使運算可以同時執(zhí)行而相似于在線執(zhí)行運算。
在系統(tǒng)內(nèi)存321中,一要求指定密碼運算的應用程序可以直接指示微處理器30 1透過單一密碼指令322(參照用以說明的密碼指令(XCRYPTinstruction)322)執(zhí)行此運算。在一復雜指令集計算機微處理器實施例中,密碼指令322包含一指定密碼運算的微指令。在一實施例中,密碼指令322利用一存在指令集架構(gòu)中的一空閑或未使用指令運算碼。在一x86架構(gòu)兼容的實施例中,密碼指令322是一4字節(jié)指令包含一x86重復前置(REPprefix)(如0xF3)、兩字節(jié)未使用x86運算碼(opcode)(如0x0FA7)、一字節(jié)有關(guān)于一指定區(qū)塊密碼模式以應用于執(zhí)行一指定密碼運算。在一實施例中,根據(jù)本發(fā)明的密碼指令322可以在系統(tǒng)權(quán)限供給應用程序的層級執(zhí)行,因而可以程序規(guī)劃于指令的程序流以提供給微處理器301不論是由應用程序直接或在操作系統(tǒng)320的控制下。因為僅有一密碼指令322指示微處理器301執(zhí)行指定的密碼運算,而運算的完成對操作系統(tǒng)320應是顯而易見。
在操作中,操作系統(tǒng)320引動一應用程序以執(zhí)行于微處理器301。如部分指令流于應用程序的執(zhí)行期間,一密碼指令322從系統(tǒng)內(nèi)存321提供給擷取邏輯電路(fetch logic)302。然而,在密碼指令322執(zhí)行前,在程序流的指令指示微處理器301初始化緩存器308-312的內(nèi)容以使他們指到系統(tǒng)內(nèi)存321中的位置323-327,其包含一密碼控制字組(cryptographic controlword)323、一初始密碼鑰匙(initial cryptographic key)324或一鑰匙排程(keyschedule)324、一初始向量(initialization vector)325(如果需要)、運算用的輸入文字(input text)326、以及輸出文字(output text)327。在執(zhí)行密碼指令322之前須先初始化緩存器308-312,因為密碼指令322與一附加于緩存器308-312的含有區(qū)塊計數(shù)的緩存器313,其中區(qū)塊計數(shù)在輸入文字326區(qū)塊加密或解密數(shù)據(jù)區(qū)塊的數(shù)目。因此轉(zhuǎn)譯邏輯電路303從擷取邏輯電路302取回密碼指令并且轉(zhuǎn)譯成一序列相對應的微指令以指示微處理器301執(zhí)行指定的密碼運算。一第一復數(shù)個微指令305-306于相對應微指令序列中,指示密碼單元316從加載邏輯電路314加載數(shù)據(jù),并且開始執(zhí)行指定數(shù)目的密碼回合以產(chǎn)生相對應區(qū)塊的輸出數(shù)據(jù),提供由數(shù)據(jù)快取315儲存于系統(tǒng)內(nèi)存321中的輸出文字327給儲存邏輯電路317。一第二復數(shù)個微指令(未繪出)于相對應微指令序列中,指示在微處理器301中其它執(zhí)行單元(未繪出)執(zhí)行其它未完成指定密碼運算所需的運算,例如管理包含暫時結(jié)果及計數(shù)的非架構(gòu)緩存器(未繪出)、更新輸出及輸入文字指針緩存器311-312、更新輸入文字區(qū)塊326的加密/解密初始向量指針緩存器(initialization vector pointer register)310(如果需要)、處理未處理的中斷等等。在一實施例中,緩存器308-313是架構(gòu)性緩存器。架構(gòu)性緩存器308-313是為實現(xiàn)特定微處理器的指令集架構(gòu)(instruction set architecture,ISA)中所定義的一種緩存器。
在一實施例中,密碼單元316分成復數(shù)個階段因此允許相繼輸入文字區(qū)塊326的管線處理。
圖3的方塊圖300教示本發(fā)明所需的組件,因此省略許多在現(xiàn)今微處理器301中的邏輯以求圖標的簡潔。然而,熟悉該項技術(shù)者可察知現(xiàn)今特定實現(xiàn)的微處理器301包含許多階段及邏輯電路,在此為圖標的簡潔而將其部分合并。例如加載邏輯電路314在一快取線對準階段之后可以嵌入隨一快取接口階段的一地址產(chǎn)生階段。然而重要且應注意的是,在復數(shù)個輸入文字區(qū)塊326上的一完全密碼運算,是根據(jù)本發(fā)明由一單一指令322的運算對操作系統(tǒng)320的考慮系顯而易見,并且單一指令322的執(zhí)行是由與微處理器301中其它執(zhí)行單元并聯(lián)操作及協(xié)調(diào)的密碼單元316所完成。本發(fā)明密碼單元316在實施組態(tài)中的替代實施例類似前幾年微處理器中浮點單元的硬件。密碼單元316的操作及相關(guān)密碼指令322完全兼容先前操作系統(tǒng)及程序同時操作,并且也將在之后更加詳細的探討。
請參照圖4,其為本發(fā)明的一基元(atomic)密碼指令400實施例的方塊圖。密碼指令400包含一選項前置字段(optional prefix field)401、一重復前置字段(repeat prefix field)402、一運算碼字段(opcode field)403、一區(qū)塊密碼模式(block cipher mode)字段404。在一實施例中,字段401-404的內(nèi)容相稱于x86指令集架構(gòu),而其替代的實施例可考慮兼容于其它指令集架構(gòu)。
操作上,選項前置字段401在許多指令集架構(gòu)中是用以致能(enable)或禁能(disable)部分主要微處理器的處理特征,像是指示16位或32位的運算、指示處理或存取特定的內(nèi)存區(qū)段等。重復前置字段402是用以指示由密碼指令400所指定的密碼運算在復數(shù)個輸入數(shù)據(jù)區(qū)塊(如明文或密文)完成。重復前置字段402也隱示一相稱微處理器利用其內(nèi)復數(shù)個架構(gòu)緩存器的內(nèi)容當成指針指到系統(tǒng)內(nèi)存中含有完成指定密碼運算所需參數(shù)的位置。如上所述,在一x86相容實施例中,重復前置字段402的值是0xF3,并且根據(jù)x86架構(gòu)協(xié)議,密碼指令與x86重復字符串指令,如REP.MOV,在形式上非常相似。例如當本發(fā)明由一x86兼容微處理器實施例執(zhí)行時,重復前置字段402參照一儲存在架構(gòu)緩存器ECX中的區(qū)塊計數(shù)變量、一儲存在緩存器ESI中的來源地址指針(指到輸入數(shù)據(jù)以供密碼運算)以及一儲存在緩存器EDI中的目的地址指針(指到內(nèi)存中的輸出數(shù)據(jù))。在x86相容的一實施例中,本發(fā)明更擴展傳統(tǒng)重復字符串的指令的概念成為更可參照一儲存在緩存器EDX中的控制字組指針、一儲存在緩存器EBX中的密碼鑰匙指針以及一儲存在緩存器EAX中對一初始向量的指針(如果指定密碼模式要求)。
運算碼字段403指定微處理器完成一密碼運算,此密碼運算由控制字組指標所隱示參照儲存在內(nèi)存中的一控制字組。本發(fā)明認為運算碼值的較佳選擇是存在指令集架構(gòu)中一空閑或未使用的運算碼值,由此在一相稱微處理器中保留與先前操作系統(tǒng)及應用軟件的兼容。例如如上所述,一x86兼容實施例的運算碼字段403使用0x0FA7以指示執(zhí)行指定的的密碼運算。區(qū)塊密碼模式字段404指示特定的區(qū)塊密碼模式以供特定的密碼運算使用,并且將參照圖5加以探討。
圖5是圖4基元密碼運算指令的區(qū)塊密碼模式字段范例值的表格500。值0xC8指示使用電子密碼本方式完成密碼運算;值0xD0指示使用密碼區(qū)塊鏈接方式完成密碼運算;值0xE0指示使用密碼反饋方式完成密碼運算;以及值0xE8指示使用輸出反饋方式完成密碼運算。區(qū)塊密碼模式字段404其它所有的值系保留,而這些模式描述于上述所提及的FIPS的文件中。
請參照圖6,其為本發(fā)明一較佳實施例在一x86兼容微處理器600中較詳細的密碼單元617的實施例方塊圖。微處理器600包含擷取邏輯電路(fetch logic)601用以從內(nèi)存(未繪出)擷取指令以供執(zhí)行。擷取邏輯電路601耦合到轉(zhuǎn)譯邏輯電路(translation logic)602,而轉(zhuǎn)譯邏輯電路602包含邏輯電路、裝置或微碼(例如微指令或本機指令),或邏輯電路、裝置或微碼的組合,或用以轉(zhuǎn)譯指令成為相關(guān)序列微指令的等效組件。這些在轉(zhuǎn)譯邏輯電路602中執(zhí)行轉(zhuǎn)譯的組件可能與在微處理器600中執(zhí)行其它功能的電路、微碼共享。轉(zhuǎn)譯邏輯電路602包含一轉(zhuǎn)譯器(translator)603,而此轉(zhuǎn)譯器603耦合到一微碼只讀存儲器(microcode ROM)604。中斷邏輯電路(interrupt logic)626由總線634耦合到轉(zhuǎn)譯邏輯電路602。復數(shù)個軟件及硬件中斷信號627由指示未處理中斷給轉(zhuǎn)譯邏輯電路602的中斷邏輯電路626處理。轉(zhuǎn)譯邏輯電路602耦合到微處理器600相繼的階段包含一暫存階段(register stage)605、尋址階段(address stage)606、加載階段(load stage)607、執(zhí)行階段(execution stage)608、儲存階段(store stage)618、以及寫回階段(write back stage)619。每一相繼階段包含邏輯電路以完成由擷取邏輯電路601所提供相關(guān)指令執(zhí)行的特定功能,如先前在圖3的微處理器中所討論參照類似名稱的組件。描繪在圖6中x86兼容微處理器600的實施例是以在執(zhí)行階段608中的執(zhí)行邏輯電路(execution logic)632為特征,其包含平行執(zhí)行單元610、612、614、616、617。一整數(shù)單元610從微指令隊列609接收執(zhí)行整數(shù)微指令;一浮點單元612從微指令隊列611接收執(zhí)行浮點數(shù)微指令;一多媒體延伸集單元614從微指令隊列613接收執(zhí)行多媒體延伸集微指令;一串流延伸集單元616從微指令隊列615接收執(zhí)行串流延伸集微指令。在本發(fā)明的一x86實施例,一密碼單元617由一加載總線620、一暫停(stall)信號總線621以及一儲存總線622耦合到串流延伸集單元616。密碼單元617共享串流延伸集單元的微指令隊列615。一替代實施例可將密碼單元617獨立并聯(lián)操作像是單元610、612以及614。整數(shù)單元610耦合到一x86旗標(EFLAGS)緩存器624,此旗標緩存器包含一X位625,而此X位625的狀態(tài)配置用以指示密碼運算是否正在處理。在一實施例中,此X位625是一x86旗標緩存器624的第30位。此外,整數(shù)單元610存取一機器特殊緩存器(machine specific register)628以評估一E位629的狀態(tài),而此E位629的狀態(tài)指示密碼單元617是否位于微處理器600。整數(shù)單元610也存取一D位631于一特征控制緩存器(feature controlregister)630,以致能或禁能密碼單元617。如圖3的微處理器301實施例,圖6的微處理器600以必要組件為特征教示本發(fā)明一x86兼容實施例的內(nèi)容,并且為求附圖簡潔而合并或省略微處理器的其它組件。熟悉該項技術(shù)者可察覺用以完全接口的其它組件,像是數(shù)據(jù)快取、總線接口單元、頻率產(chǎn)生以及分配邏輯電路等均未繪出。
在操作中,指令是由擷取邏輯電路601從內(nèi)存(未繪出)擷取并且與一頻率信號(未繪出)同步提供給轉(zhuǎn)譯邏輯電路602。轉(zhuǎn)譯邏輯電路602轉(zhuǎn)譯每個指令成為一相對應序列的微指令,其與頻率信號同步持續(xù)地提供給微處理器600的后續(xù)階段605-608、618、619。在一序列微指令中的每一個微指令指示一個次運算的執(zhí)行,而次運算被要求完成由一相對指令所指定的一整體運算,例如尋址階段606產(chǎn)生一地址、暫存階段605從指定緩存器(未繪出)恢復的兩操作數(shù)在整數(shù)單元內(nèi)相加、由儲存階段618儲存執(zhí)行單元610、612、614、616、617其中的一所產(chǎn)生的結(jié)果于內(nèi)存等。根據(jù)轉(zhuǎn)譯中的指令,轉(zhuǎn)譯邏輯電路602利用轉(zhuǎn)譯器603直接產(chǎn)生一序列的微指令,或是從微碼只讀存儲器604擷取此序列,或是利用轉(zhuǎn)譯器603直接產(chǎn)生此序列的部份并且從微碼只讀存儲器604擷取此序列剩下的部分。微指令透過微處理器600的相繼階段605-608、618、619持續(xù)地與頻率同步進行。當微指令到達執(zhí)行階段608,執(zhí)行邏輯電路632連同其操作數(shù)(在暫存階段605從緩存器所恢復,或在尋址階段606由邏輯電路所產(chǎn)生,或由加載邏輯電路從數(shù)據(jù)快取所恢復),由放置微指令在一對應的微指令隊列609、611、613、615而將其依指定路線傳送給一指定執(zhí)行單元610、612、614、616、617。執(zhí)行單元610、612、614、616、617執(zhí)行微指令并提供結(jié)果給儲存階段618。在一實施例,微指令包含字段指示其是否可以與其它運算并列執(zhí)行。
響應先前所述的擷取一個密碼指令,轉(zhuǎn)譯邏輯電路602產(chǎn)生相關(guān)微指令,其指示在微處理器600后繼階段605-608,618,619中的邏輯電路執(zhí)行指定的密碼運算。據(jù)此,一第一復數(shù)個相關(guān)微指令直接依路徑傳送至密碼單元617并且指示密碼單元617由加載總線620加載數(shù)據(jù),或加載一區(qū)塊的輸入數(shù)據(jù)并且開始執(zhí)行指定數(shù)目的密碼回合以產(chǎn)生一區(qū)塊的輸出數(shù)據(jù),或由儲存階段618透過儲存總線622將所產(chǎn)生的區(qū)塊輸出數(shù)據(jù)儲存于內(nèi)存。一第二復數(shù)個相關(guān)微指令依其路徑傳送至其它實行單元610、612、614、616以執(zhí)行其它次運算,其等次運算是完成指定密碼運算的必需,例如E位629的測試、致能D位631、設定X位625以指示密碼操作進行中、在暫存階段605更新暫存(例如,計數(shù)緩存器、輸入文字指針緩存器、輸出文字指針緩存器)、由中斷邏輯電路626所指示的中斷信號627的處理等。相關(guān)微指令是用以提供指定密碼運算的最佳執(zhí)行于多區(qū)塊輸入數(shù)據(jù),其由與密碼單元微指令序列中的整數(shù)單元微指令成為接口,因此整數(shù)運算可與密碼單元運算并行完成。微指令系包含于相關(guān)微指令以允許或并從待處理中斷信號627恢復。因為所有對密碼參數(shù)的指針與數(shù)據(jù)提供于x86架構(gòu)緩存器,當執(zhí)行中斷時,其狀態(tài)被保存,并且當從中斷返回,這些狀態(tài)被恢復。當從中斷返回,微指令測試X位625的狀態(tài)以決定是否一密碼運算在進行。如果是,當中斷發(fā)生時,此運算重復于處理中的特別輸入數(shù)據(jù)區(qū)塊。相關(guān)微指令用以允許在處理中斷信號627之前,更新在一序列輸入文字區(qū)塊上的一序列密碼操作的指針緩存器及中間的結(jié)果。
請參照圖7,其為圖6的微處理器中指示密碼次運算的范例微指令700字段的方塊圖。微指令700包含一微運算碼字段(micro opcode field)701,一數(shù)據(jù)緩存器字段(data register field)702,以及一緩存器字段(register field)703。微運算碼字段701指定執(zhí)行一特定次運算并且指定邏輯電路于微處理器600中至少一階段以執(zhí)行次運算。微運算碼字段701的指定值指定根據(jù)本發(fā)明的一密碼單元執(zhí)行指示的微指令。在一實施例,有兩個指定的值。一第一值加載(XLOAD)指定數(shù)據(jù)從一內(nèi)存位置恢復,而其地址由數(shù)據(jù)緩存器字段702內(nèi)容所指稱的一架構(gòu)緩存器的內(nèi)容所指定。這數(shù)據(jù)被加載到由緩存器字段703內(nèi)容所具體指定密碼單元內(nèi)的一緩存器。這恢復的數(shù)據(jù)(例如密碼鑰匙數(shù)據(jù)、控制字組、輸入文字數(shù)據(jù)、初始向量)提供給密碼單元。微運算碼字段701的第二值儲存(XSTOR)指出由密碼單元所產(chǎn)生的數(shù)據(jù)儲存在一記憶位置,而其地址由數(shù)據(jù)緩存器字段702內(nèi)容所指稱的一架構(gòu)緩存器的內(nèi)容所指定。在密碼單元一多階段實施例,緩存器字段703的內(nèi)容指示復數(shù)個輸出數(shù)據(jù)區(qū)塊的一儲存于內(nèi)存。輸出數(shù)據(jù)區(qū)塊由數(shù)據(jù)域位(datafield)704內(nèi)的密碼單元所提供以供儲存邏輯電路存取。根據(jù)本發(fā)明密碼單元所執(zhí)行加載和儲存微指令更具體的細節(jié),將參照圖8及圖9加以討論。
請參照圖8,其為圖7的加載微指令格式700緩存器字段703值的表格。如前所述,一序列微指令產(chǎn)生響應一密碼指令的轉(zhuǎn)譯。此序列微指令包含一第一復數(shù)個微指令,其由密碼單元指示執(zhí)行;以及一第二復數(shù)個微指令,其由微處理器中密碼單元以外的至少一個并列功能單元所執(zhí)行。第二復數(shù)個微指令指示次運算,例如更新計數(shù)器、暫時儲存器、架構(gòu)緩存器、測試并設定狀態(tài)位于機器特殊緩存器等。第一復數(shù)個微指令提供鑰匙數(shù)據(jù)、密碼參數(shù)以及輸入數(shù)據(jù)給密碼單元并且指示密碼單元產(chǎn)生鑰匙排程(或加載從內(nèi)存恢復的鑰匙排程)以加載并加密(或解密)輸入文字數(shù)據(jù),并且儲存輸出文字數(shù)據(jù)。一加載微指令提供給密碼單元以加載控制字組數(shù)據(jù)、加載一密碼鑰匙或鑰匙排程、加載初始向量數(shù)據(jù)、加載輸入文字數(shù)據(jù)并指示密碼單元開始一指定密碼運算。一加載微指令在緩存器字段703的值0b010指示密碼單元加載一控制字組到其內(nèi)部控制字組緩存器。當這微指令進行管線處理,在暫存階段的一架構(gòu)控制字組指針緩存器存取內(nèi)存中儲存控制字組的地址。地址邏輯電路轉(zhuǎn)譯此地址成為一實體地址以供內(nèi)存存取。加載邏輯電路從快取擷取控制字組,然后傳給密碼單元。同樣地,緩存器字段值0b010指示密碼單元加載由數(shù)據(jù)域位704所提供的輸入文字數(shù)據(jù),并且在加載之后開始指定的密碼運算。類似控制字組,輸入數(shù)據(jù)由儲存在架構(gòu)緩存器中所儲存的一緩存器存取。值0b010指示加載由數(shù)據(jù)域位704所提供的輸入數(shù)據(jù)給內(nèi)部緩存器輸入-1。加載到輸入-1緩存器的數(shù)據(jù)不是輸入文字數(shù)據(jù)(當管線處理時)就是一初始向量。值0b110及0b111分別指示密碼單元加載一密碼鑰匙或使用者產(chǎn)生鑰匙排程中一鑰匙的較低及較高位。根據(jù)本應用,使用者定義成執(zhí)行一特定功能或特定運算,而使用者可具體化成一應用程序、一操作系統(tǒng)、一機器或者一個人。因此,在一實施例中,使用者產(chǎn)生鑰匙排程是由一應用程序所產(chǎn)生,而在另一實施例中,使用者產(chǎn)生鑰匙排程是由一個人所產(chǎn)生。
在一實施例中,緩存器字段值0b100及0b101考慮一密碼單元有兩階段,由此,可以管線處理相繼的輸入文字區(qū)塊數(shù)據(jù)。因此對管線處理相繼的輸入資料區(qū)塊而言,一第一加載微指令執(zhí)行提供一第一區(qū)塊的輸入文字數(shù)據(jù)給輸入-1,接著執(zhí)行一第二加載微指令提供一第二區(qū)塊的輸入文字數(shù)據(jù)給輸入-0,并且指示密碼單元開始執(zhí)行指定的密碼運算。當一使用者產(chǎn)生的鑰匙排程被用以執(zhí)行密碼運算時,對應使用者產(chǎn)生的鑰匙排程中鑰匙數(shù)量的加載微指令依設定路徑傳送給密碼單元,此密碼單元指示加載此鑰匙排程中每一回合鑰匙。
在加載微指令中緩存器字段703其它所有的值系保留。
請參照圖9,其為圖7的儲存微指令格式700緩存器字段703的值的表格。一儲存微指令發(fā)布(issue)給密碼單元,以指示其提供所產(chǎn)生的輸出文字區(qū)塊給儲存邏輯電路,儲存于內(nèi)存中由數(shù)據(jù)緩存器字段702所提供的地址。據(jù)此,本發(fā)明的轉(zhuǎn)譯邏輯電路為一特定的輸出文字區(qū)塊所發(fā)布的一儲存微指令在為一其所對應輸入文字區(qū)塊所發(fā)布的一儲存微指令之后。緩存器字段703的值0b100指示密碼單元提供關(guān)聯(lián)其內(nèi)部的輸出-0緩存器給儲存邏輯儲存。輸出-0的內(nèi)容與輸入文字區(qū)塊提供給輸入-0系相關(guān)聯(lián)。同理,參照緩存器字段值0b101的內(nèi)部輸出-1緩存器與輸入文字數(shù)據(jù)提供給輸入-1相關(guān)聯(lián)。據(jù)此,跟隨在鑰匙及控制字組數(shù)據(jù)加載之后,復數(shù)個輸入文字區(qū)塊可以被管線輸送,透過密碼單元依序發(fā)布密碼微指令加載.輸入-1、載入.輸入-0(載入.輸入-0也指示密碼單元開始密碼運算)、儲存.輸出-1、儲存.輸出-0、載入.輸入-1、載入.輸入-0(開始下兩個輸入文字區(qū)塊運算)等等。
請參照圖10,其為本發(fā)明指定密碼運算參數(shù)的范例控制字組1000格式的方塊圖??刂谱纸M1000由使用者程序設計于內(nèi)存,并且在執(zhí)行密碼運算之前,控制字組1000的指針提供給相稱微處理器中的一架構(gòu)緩存器。據(jù)此,當部分序列的微指令對應到一密碼指令時,一加載微指令被發(fā)布以指示微處理器去讀取包含指針的架構(gòu)緩存器、從內(nèi)存(快取)恢復控制字組1000以及加載控制字組1000到密碼單元的內(nèi)部控制字組緩存器??刂谱纸M1000包含一保留(RSVD)字段1001、一數(shù)據(jù)區(qū)塊大小(DSIZE)字段1002、一鑰匙大小(KSIZE)字段1003、一加密/解密(E/D)字段1004、一中間結(jié)果(IRSLT)字段1005、一鑰匙產(chǎn)生(KGEN)字段1006、一演算(ALG)字段1007以及一回合計算(RCNT)字段1008。
保留字段1001所有的值保留。數(shù)據(jù)區(qū)塊大小字段1002的內(nèi)容指示執(zhí)行加密及解密時使用輸入及輸出文字區(qū)塊的大小。在一實施例中,數(shù)據(jù)區(qū)塊大小字段1002不是指示一128位區(qū)塊、一192位區(qū)塊,就是指示一256位區(qū)塊。鑰匙大小字段1003的內(nèi)容指示一用以完成加密或解密的密碼鑰匙的大小。在一實施例中,鑰匙大小字段1003不是指示一128位鑰匙、一192位鑰匙,就是指示一256位鑰匙。加密/解密字段1004指出密碼運算是加密運算或指出密碼運算是解密運算。鑰匙產(chǎn)生字段1006指示在內(nèi)存中是使用者產(chǎn)生的鑰匙排程或在內(nèi)存中是單一密碼鑰匙;如果為單一鑰匙時,微指令發(fā)布給密碼單元與密碼鑰匙以指示單元根據(jù)演算字段1007的內(nèi)容所具體指定的密碼演算以擴展鑰匙成為一鑰匙排程。在一實施例,演算字段1007的特定值具體指示數(shù)據(jù)加密標準算法、三重數(shù)據(jù)加密標準算法或者進階加密標準算法如先前所述的討論。替代實施例可考慮其它密碼算法,例如Rijndael Cipher、Twofish Cipher等?;睾嫌嬎阕侄?008的內(nèi)容指示一數(shù)量的密碼回合,其根據(jù)具體指示的算法完成于每一輸入文字區(qū)塊。雖然上述提及的標準指示每一輸入文字區(qū)塊固定前置數(shù)量的密碼回合,但回合計算字段1008允許一程序設計者從標準指示修改回合的數(shù)量。在一實施例中,程序設計者可指定每一區(qū)塊從0-15回合。最后,中間結(jié)果字段1005指示是否一輸入文字區(qū)塊的加密/解密,是根據(jù)演算字段1007所指定的密碼算法,以回合計算字段1008所指定回合的數(shù)量執(zhí)行,或者加密/解密是根據(jù)演算字段1007所指定的密碼算法,以回合計算字段1008所指定回合的數(shù)量執(zhí)行,而其最終回合的執(zhí)行代表一中間結(jié)果而不是一最終結(jié)果。熟悉該項技術(shù)者可察知許多密碼算法除了最終回合的次運算之外是執(zhí)行相同的次運算于每一回合。因此程序設計中間結(jié)果字段1005提供中間結(jié)果而不是最后結(jié)果,由此,允許程序設計者可核對算法實現(xiàn)的中間的步驟。例如獲得增加的中間值以核對算法實行,假設,執(zhí)行一回合的加密于一文字區(qū)塊,然后執(zhí)行兩回合于相同文字區(qū)塊,然后三回合等。提供可程序化回合及中間值結(jié)果的功能可讓使用者檢查密碼執(zhí)行、除錯以及達到改變鑰匙結(jié)構(gòu)及回合計數(shù)。
請參照圖11,其為圖10中控制字組1000的數(shù)據(jù)區(qū)塊大小字段1002范例值的表格1100。數(shù)據(jù)區(qū)塊大小字段1002的000值指示一計算裝置依據(jù)本發(fā)明執(zhí)行使用一128位區(qū)塊大小的輸入以及輸出區(qū)塊的密碼運算,其中這些區(qū)塊由內(nèi)存提供,且分別由一輸入指針緩存器及一輸出指針緩存器的內(nèi)容所指到。數(shù)據(jù)區(qū)塊大小字段1002的001值指示此計算裝置執(zhí)行使用一192位區(qū)塊大小的輸入以及輸出區(qū)塊的密碼運算。數(shù)據(jù)區(qū)塊大小字段1002的010值指示此計算裝置執(zhí)行使用一256位區(qū)塊大小的輸入以及輸出區(qū)塊的密碼運算。數(shù)據(jù)區(qū)塊大小字段1002的所有其余值保留。
請參照圖12,其為本發(fā)明的一密碼單元1200的較佳實施例方塊圖。密碼單元1200包含一微指令緩存器(micro opcode register)1203,此微指令緩存器1203透過一微指令總線1214接收密碼微指令(例如加載與儲存微指令)。密碼單元1200也包含一控制字組緩存器(control word register)1204、一第一輸入(輸入-0)緩存器1205以及一第二輸入(輸入-1)緩存器1206、一第一鑰匙(鑰匙-0)緩存器1207以及一第二鑰匙(鑰匙-1)緩存器1208。數(shù)據(jù)透過一加載總線(load bus)1211提供給緩存器1204-1208,如微指令緩存器1203中一加載微指令內(nèi)容所指定。密碼單元1200也包含區(qū)塊密碼邏輯電路1201,此區(qū)塊密碼邏輯電路1201耦合到所有的緩存器1203-1208以及也耦合到密碼鑰匙隨機存取內(nèi)存(RAM)1202。區(qū)塊碼邏輯電路1201提供一暫停信號(stall signal)1213并且也提供區(qū)塊結(jié)果給一第一輸出(輸出-0)緩存器1209以及一第二輸出(輸出-1)緩存器1210。輸出緩存器1209-1210透過一儲存總線1212將內(nèi)容依指定路徑傳送給在一相稱微處理器中的相繼階段。在一實施例中,微指令緩存器1203是32位大??;緩存器1204、1207及1208是128位大??;以及緩存器1205-1206及1209-1210系256位大小。
在操作中,密碼微指令與數(shù)據(jù)一起連續(xù)提供給微指令緩存器1203,其中數(shù)據(jù)系指定給控制字組緩存器1204、或輸入緩存器1205-1206的一、或鑰匙緩存器1207-1208的一。在參照圖8及圖9討論的實施例中,控制字組由一加載微指令加載到控制字組緩存器1204。因此密碼鑰匙或鑰匙排程經(jīng)由連續(xù)加載微指令加載。當一128位密碼鑰匙加載時,一加載微指令因此提供給指定的鑰匙-0緩存器1207。當一大于128位密碼鑰匙加載時,一加載微指令因此提供給指定的鑰匙-0緩存器1207,并且連同一加載微指令提供給指定的鑰匙-1緩存器1208。當一使用者產(chǎn)生的鑰匙排程加載時,連續(xù)加載微指令提供給指定鑰匙-0緩存器1207。鑰匙排程中的每一鑰匙被加載且依序被放置在鑰匙隨機存取內(nèi)存1202以供其相對應的密碼回合使用。隨此,輸入文字數(shù)據(jù)(如果沒有要求一初始向量)加載到輸入-1緩存器1206,如果要求一初始向量,則經(jīng)由一加載微指令加載到輸入-1緩存器1206。對輸入-0緩存器1205的一加載微指令指示密碼單元以加載輸入文字數(shù)據(jù)給輸入-0緩存器1205,并且開始在輸入-0緩存器1205內(nèi)的輸入文字數(shù)據(jù)執(zhí)行密碼回合,其根據(jù)控制字組緩存器1204的內(nèi)容所提供的參數(shù)使用在輸入-1或在兩輸入緩存器1205-1206(當輸入數(shù)據(jù)系管線處理)中的初始向量。根據(jù)收到指定輸入-0緩存器1205的加載微指令,區(qū)塊密碼邏輯電路1201開始執(zhí)行由控制字組內(nèi)容所指定的密碼運算。當單一密碼鑰匙要求擴展,區(qū)塊密碼邏輯電路1201產(chǎn)生鑰匙排程中的每一鑰匙并將以儲存在鑰匙隨機存取內(nèi)存1202。姑且不論是否由區(qū)塊密碼邏輯電路1201產(chǎn)生一鑰匙排程或者是從內(nèi)存中加載鑰匙排程,第一回合的鑰匙是快取儲存于區(qū)塊密碼邏輯1201中以使得第一區(qū)塊密碼回合可以不用存取鑰匙隨機存取內(nèi)存1202而處理。一但初始化后,區(qū)塊密碼邏輯電路1201繼續(xù)執(zhí)行指定的密碼運算于至少一個輸入文字區(qū)塊直到運算完成;其連續(xù)從鑰匙隨機存取內(nèi)存1202擷取回合鑰匙如所應用的密碼算法所要求。密碼單元1200執(zhí)行一指定區(qū)塊密碼運算于指定的輸入文字區(qū)塊,而相繼的輸入文字區(qū)塊透過相繼對應的加載及儲存微指令加密/解密。當一儲存微指令執(zhí)行時,如果指定輸出數(shù)據(jù)(例如輸出-0或輸出-1)尚未完全產(chǎn)生,則區(qū)塊密碼邏輯電路1201顯示暫停信號1213。一但輸出數(shù)據(jù)已產(chǎn)生且放置于相對應的輸出緩存器1209-1210時,緩存器1209-1210的內(nèi)容接著傳送到儲存總線1212。
請參照圖13,其為本發(fā)明執(zhí)行有關(guān)進階加密標準算法密碼運算的一區(qū)塊密碼邏輯電路1300實施例的方塊圖。區(qū)塊密碼邏輯電路1300包含一回合引擎(round engine)1320,此回合引擎1320透過總線1311-1314及總線1316-1318耦合到一回合引擎控制器(round engine controller)1310?;睾弦婵刂破?310包含一區(qū)塊大小控制器(block size controller)1330,并且存取一微指令緩存器(micro instruction register)1301、控制字組緩存器(controlword register)1302、第一鑰匙(鑰匙-0)緩存器1303以及第二鑰匙(鑰匙-1)緩存器1304以存取鑰匙數(shù)據(jù)、微指令以及所指示密碼運算的參數(shù)。輸入緩存器1305-1306的內(nèi)容提供給回合引擎1320并且回合引擎1320提供相對應輸出文字給輸出緩存器1307-1308。輸出緩存器1307-1308透過總線1316-1317也耦合到回合引擎控制器1310,以致能回合引擎控制器存取每一相繼密碼回合的結(jié)果,而此結(jié)果透過NEXTIN總線1318提供給回合引擎1320下一密碼回合。鑰匙隨機存取內(nèi)存(未繪出)中的密碼鑰匙系透過鑰匙隨機存取內(nèi)存總線1315存取。加密/解密總線(ENC/DEC bus)1311的信號指示回合引擎利用次運算執(zhí)行不是加密(例如S-Box)就是解密(例如反向S-Box)?;睾嫌嬎憧偩€(RNDCON bus)1312的內(nèi)容指示回合引擎1320執(zhí)行不是一第一進階加密標準回合、一中間進階加密標準回合就是一最后進階加密標準回合。響應指示一密碼鑰匙自動擴展的一控制字組內(nèi)一鑰匙產(chǎn)生字段內(nèi)容,此鑰匙排程控制器1330顯示鑰匙產(chǎn)生總線(GENKEY bus)1314的信號以指示此回合引擎1320根據(jù)鑰匙總線1313所提供的鑰匙產(chǎn)生一鑰匙排程。鑰匙總線1313亦用以提供每一回合鑰匙給回合引擎1320在其對應的回合執(zhí)行時。響應經(jīng)由控制字組緩存器1302提供給回合引擎控制器1310的一控制字組內(nèi)一數(shù)據(jù)區(qū)塊大小字段內(nèi)容,此區(qū)塊大小控制器(block size controller)1330設定區(qū)塊大小總線(BLKSIZE bus)1319的值以指示加密以及解密運算期間所使用輸入及輸出文字區(qū)塊大小。在一實施例中,區(qū)塊大小總線1319的值指示128位區(qū)塊、192位區(qū)塊或256位區(qū)塊。
回合引擎1320包含第一鑰匙互斥或(XOR)邏輯電路1321,此第一鑰匙互斥或邏輯電路1321耦合到一第一緩存器(暫存-0)1322,此第一緩存器1322耦合到S-Box邏輯電路1323,此S-Box邏輯電路1323耦合到移列(Shift Row)邏輯電路1324,此移列邏輯電路1324耦合到一第二緩存器(暫存-1)1325,此第二緩存器1325耦合到混欄(Mix Colum)邏輯電路1326,此混欄邏輯電路1326耦合到一第三緩存器(暫存-2)1327。第一鑰匙互斥或邏輯電路1321、S-Box邏輯電路1323、移列邏輯電路1324以及混欄邏輯電路1326依據(jù)區(qū)塊大小總線1319的值配置用以執(zhí)行次運算于輸入文字數(shù)據(jù),像是具體于先前討論的進階加密標準FIPS標準?;鞕谶壿嬰娐?326在中間回合期間于要求使用藉由鑰匙總線1313所提供的回合鑰匙時,附加配置以執(zhí)行進階加密標準互斥或功能于輸入數(shù)據(jù)。第一鑰匙互斥或邏輯電路1321、S-Box邏輯電路1323、移列邏輯電路1324以及混欄邏輯電路1326在由加密/解密總線(ENC/DEC bus)1311的狀態(tài)指示時,也配置用以執(zhí)行其相對的反向進階加密標準次運算于解密期間。熟悉該項技術(shù)者可察知中間回合數(shù)據(jù)是根據(jù)控制字組緩存器1302內(nèi)容所指定的具體區(qū)塊加密模式而回饋給回合引擎1320。初始向量數(shù)據(jù)(如果要求)透過NEXTIN總線1318提供給回合引擎1320。
在圖13所示的實施例中,回合引擎分為兩階段一第一階段介于第一緩存器(暫存-0)1322與第二緩存器(暫存-1)1325以及一第二階段介于第二緩存器(暫存-1)1325與第三緩存器(暫存-2)1327。中間回合數(shù)據(jù)同步一頻率信號(未繪出)于階段間管線處理。當一區(qū)塊的輸入數(shù)據(jù)完成密碼運算,其關(guān)聯(lián)的輸出數(shù)據(jù)放置于相對應輸出緩存器1307-1308。一儲存微指令的執(zhí)行使得所指定的輸出緩存器1307-1308的內(nèi)容提供至儲存總線(未繪出)。
請參照圖14,其為本發(fā)明一實施例在一中斷事件期間保留密碼參數(shù)的狀態(tài)的方法流程圖。當一微處理器依據(jù)本發(fā)明執(zhí)行一指令流時,方法流程從步驟1402開始。上述的指令流程并不須包含一像此描述的密碼指令。然后方法流程處理至決定步驟1404。
在決定步驟1404,決定是否由一指令流(中斷處理程序)處理一要求改變指令流的中斷事件(例如可屏蔽式中斷、非屏蔽式中斷、分頁錯誤(pagefault)、工作切換(task switch)等)。若是,方法流程處理至步驟1406;若否,方法流程跳至步驟1404,其指令執(zhí)行繼續(xù)直到一中斷事件產(chǎn)生。
在步驟1406,因為一中斷事件已經(jīng)發(fā)生,在傳送控制程序至一對應中斷處理程序之前,中斷邏輯電路依據(jù)本發(fā)明指示清除一旗標緩存器中的X位。X位的清除確保從中斷處理程序返回時,如果一區(qū)塊密碼運算進行中,其指示排除至少一個中斷事件,并指示控制字組數(shù)據(jù)以及鑰匙數(shù)據(jù),必須在輸入指針緩存器的內(nèi)容目前所指的輸入數(shù)據(jù)區(qū)塊繼續(xù)區(qū)塊密碼運算之前重新加載。然后處理至步驟1408。
在步驟1408,所有架構(gòu)緩存器包含本發(fā)明區(qū)塊密碼運算執(zhí)行的相關(guān)指針及計數(shù)均儲存于內(nèi)存。熟悉該項技術(shù)者可知架構(gòu)緩存器的儲存是在轉(zhuǎn)移控制權(quán)給中斷處例程序之前完成于目前數(shù)據(jù)計算裝置。因此本發(fā)明一實施例中探究目前數(shù)據(jù)架構(gòu),以提供中斷事件執(zhí)行輸出量的透明度。在緩存器儲存之后,方法流程處理至步驟1410。
在步驟1410,程序流程轉(zhuǎn)移至中斷處理程序。因此方法流程處理至步驟1412。
在步驟1412,此方法流程完成結(jié)束。熟悉該項技術(shù)者可察知圖14的方法依據(jù)中斷處理程序的返回是從步驟1402再開始。
請參照圖15,其為本發(fā)明一較佳實施例中在至少一個中斷事件時,在復數(shù)個輸入數(shù)據(jù)區(qū)塊執(zhí)行一密碼運算并使用一使用者指定區(qū)塊大小的方法流程圖1500。為求圖標的簡潔,省略依據(jù)區(qū)塊密碼模式執(zhí)行指定密碼運算的流程,其中區(qū)塊密碼模式要求區(qū)塊間初始向量等效物的更新以及儲存(例如輸出反饋模式、密碼反饋模式)。然而本發(fā)明的方法包含其它的區(qū)塊密碼模式。
方法流程從步驟1502開始,其中依據(jù)本發(fā)明的一密碼指令指示一密碼運算開始執(zhí)行。上述的密碼指令執(zhí)行可以第一執(zhí)行或由于一中斷事件的中斷執(zhí)行而跟隨第一執(zhí)行之后執(zhí)行,由此在中斷處理程序執(zhí)行完成后,將程控權(quán)轉(zhuǎn)移回密碼指令。流程處理至步驟1504。
在步驟1504,加載內(nèi)存中的一數(shù)據(jù)區(qū)塊并且開始一指定密碼運算,其中上述的區(qū)塊數(shù)據(jù)是由本發(fā)明實施例的一輸入指針緩存器的內(nèi)容所指定。在一設定實施例中,用以加載數(shù)據(jù)區(qū)塊的區(qū)塊大小是128位。因此,當使用區(qū)塊大小并非為128位時,在發(fā)布密碼指令前,須要求指令執(zhí)行以清除X位。在一x86兼容實施例中,其利用一x86旗標緩存器中的第30位,此X位可以由依序執(zhí)行一PUSHFD指令與一POPFD指令而清除。然而熟悉該項技術(shù)者可得知在另一實施例中,其它用以清除X位的指令。在一實施例中,指定的密碼運算是依據(jù)進階加密標準規(guī)則開始執(zhí)行。然后方法流程處理至決定步驟1506。
在決定步驟1506,決定是否設定一旗標緩存器中的一X位。如果設定X位,其指示目前依據(jù)本發(fā)明加載一密碼單元的控制字組及鑰匙排程是有效(valid)。如果清除X位,其指示目前加載上述的密碼單元的控制字組及鑰匙排程是無效(invalid)。如上述參照圖14的討論,當一中斷事件產(chǎn)生時,X位清除。如果X位設定,方法流程處理至步驟1524;如果X位清除,方法流程處理至步驟1508。
在步驟1508,因為一清除的X位是指示不是一中斷事件產(chǎn)生就是一新的控制字組及/或鑰匙數(shù)據(jù)加載,因此從內(nèi)存加載一控制字組。在一實施例中,加載控制字組停止密碼單元執(zhí)行上述的步驟1504所提及的密碼運算。在此實施例中的步驟1504開始一密碼運算,考慮到使用電子密碼本模式的多128位區(qū)塊的最佳化,其由假設使用目前加載的控制字組及鑰匙數(shù)據(jù),以及假設在128位輸入?yún)^(qū)塊執(zhí)行電子密碼本模式是最為普遍使用的區(qū)塊密碼模式。根據(jù)上述,在決定步驟1506檢查X位的狀態(tài)重置前,加載目前輸入數(shù)據(jù)區(qū)塊并且開始密碼運算。然后方法流程處理至決定步驟1514。
在決定步驟1514,評估在步驟1508所擷取(retrieve)控制字組中的數(shù)據(jù)區(qū)塊大小字段以決定在指定密碼運算執(zhí)行期間所使用的輸入及輸出文字區(qū)塊的大小。如果資料區(qū)塊大小字段的值指定192位區(qū)塊,則方法流程處理至步驟1510。如果資料區(qū)塊大小字段的值指定128位區(qū)塊,則方法流程處理至步驟1516。如果資料區(qū)塊大小字段的值指定256位區(qū)塊,則方法流程處理至步驟1518。
在步驟1510,本發(fā)明的區(qū)塊密碼邏輯電路中的區(qū)塊大小總線設定用以指示其回合引擎執(zhí)行192位數(shù)據(jù)區(qū)塊的密碼運算。然后方法流程處理至步驟1512。
在步驟1512,從內(nèi)存加載密碼鑰匙數(shù)據(jù)。依據(jù)控制字組中的鑰匙產(chǎn)生字段及鑰匙大小字段的狀態(tài),鑰匙數(shù)據(jù)不是全部從內(nèi)存加載(例如一使用者產(chǎn)生鑰匙排程),就是加載一初始鑰匙并擴展成一鑰匙排程。然后方法流程處理至步驟1522。
在步驟1516,因為區(qū)塊密碼邏輯電路中的區(qū)塊大小總線預設為128位數(shù)據(jù)區(qū)塊,因此必須參照如上述的步驟1512所述的加載/擴展密碼鑰匙數(shù)據(jù)。然后方法流程處理至步驟1522。
在步驟1518,本發(fā)明的區(qū)塊密碼邏輯電路中的區(qū)塊大小總線是設定用以指示其回合引擎執(zhí)行256位數(shù)據(jù)區(qū)塊的密碼運算。然后方法流程處理至步驟1520。
在步驟1520,參照上述的步驟1512所述的加載/擴展密碼鑰匙數(shù)據(jù)。然后方法流程處理至步驟1522。
在步驟1518,輸入?yún)^(qū)塊參照步驟1504依據(jù)控制字組中數(shù)據(jù)區(qū)塊大小字段的值所指定的區(qū)塊大小再次加載,且依據(jù)新加載的控制字組以及鑰匙排程開始密碼運算。然后方法流程處理至步驟1524。
在步驟1524,產(chǎn)生大小對應加載的輸入?yún)^(qū)塊的一輸出區(qū)塊,對加密而言,輸入?yún)^(qū)塊是一明文區(qū)塊而輸出區(qū)塊是一對應的密文區(qū)塊;對解密而言,輸入?yún)^(qū)塊是一密文區(qū)塊而輸出區(qū)塊是一對應的明文區(qū)塊。然后方法流程處理至步驟1526。
在步驟1526,將產(chǎn)生的輸出區(qū)塊儲存于內(nèi)存。然后方法流程處理至步驟1528。
在步驟1528,輸入及輸出區(qū)塊指針緩存器的內(nèi)容依據(jù)控制字組中數(shù)據(jù)區(qū)塊大小字段的值而修改以指到下一輸入及輸出數(shù)據(jù)區(qū)塊。另外,修改區(qū)塊計數(shù)緩存器的內(nèi)容以指示目前輸入數(shù)據(jù)區(qū)塊完成的密碼運算。在參照圖15所討論的一實施例,區(qū)塊計數(shù)緩存器是遞減。然而,熟悉該項技術(shù)者可在另一實施例中,思量處理及測試區(qū)塊計數(shù)緩存器的內(nèi)容以考慮輸入文字區(qū)塊的管線執(zhí)行。然后方法流程處理至步驟1530。
在決定步驟1530,決定是否繼續(xù)運算一輸入數(shù)據(jù)區(qū)塊。在用以說明具特征的實施例中,評估區(qū)塊計數(shù)器是否等于零而決定。如果沒有剩下的區(qū)塊可供運算,則方法流程處理至步驟1534;如果剩下區(qū)塊可供運算,則方法流程處理至步驟1532。
在步驟1532,加載下一輸入數(shù)據(jù)區(qū)塊,如輸入指針緩存器的內(nèi)容所指。然后方法流程處理至步驟1524。
在步驟1530,此方法流程完成結(jié)束。
雖然本發(fā)明及其目的、特征與優(yōu)點已詳細描述,但其它實施例也應包含于本發(fā)明。例如本發(fā)明曾根據(jù)兼容x86架構(gòu)的實施例討論長度,然而這些討論已提供此類的方式,因為x86架構(gòu)容易理解且提供足夠的方式以教示本發(fā)明。然而本發(fā)明包含相稱于其它指令集架構(gòu)的實施例,例如PowerPC、MIPS及諸如此類等,此外還有全新的指令集架構(gòu)。
本發(fā)明還包含計算機系統(tǒng)中微處理器外其它組件的密碼運算的執(zhí)行,例如,根據(jù)本發(fā)明的密碼指令可以容易地被應用在一密碼單元的一實施例,此實施例并非如微處理器部分相同的整合電路,其執(zhí)行方式如部分計算機系統(tǒng)。本發(fā)明的如此實施例是為了并入圍繞在微處理器的芯片組(如北橋、南僑),或當一處理器用于執(zhí)行密碼運算時,其密碼指令由主要微處理器移轉(zhuǎn)(hand off)給此處理器。本發(fā)明可應用于內(nèi)嵌控制器、工業(yè)控制器、信號處理器、陣列處理機以及任何相似處理數(shù)據(jù)的裝置。本發(fā)明也包含一實施例僅含有執(zhí)行密碼運算所必需的組件。如此的內(nèi)嵌裝置不僅執(zhí)行密碼運算,也確實提供低成本、低電源,例如通信系統(tǒng)中的加密/解密處理器。為求簡明,本發(fā)明將這些替代的處理組件參照成上述的處理器。
此外,雖然本發(fā)明提及128位區(qū)塊,但是許多不同區(qū)塊的大小可以透過改變緩存器的大小而被應用,其中緩存器傳送輸入數(shù)據(jù)、輸出數(shù)據(jù)、鑰匙以及控制字組。
并且,雖然本應用顯著以數(shù)據(jù)加密標準、三重數(shù)據(jù)加密標準以及進階加密鰾準算法為其特征,但本發(fā)明也包含較少人知的區(qū)塊密碼算法,例如MARS密碼、Rijndael密碼、Twofish密碼、Blowfish密碼、Serpent密碼以及RC6密碼。足以理解的是,本發(fā)明提供在微處理器中用于區(qū)塊密碼的裝置及支持的算法,其基元區(qū)塊密碼運算可透過單一指令的執(zhí)行而引動。
并且,雖然本發(fā)明在此以區(qū)塊密碼演算及其相關(guān)技術(shù)以執(zhí)行區(qū)塊密碼功能為特征,但是除了區(qū)塊密碼的外其它形式的密碼也包含于本發(fā)明應用范圍內(nèi)??勺阋杂^察的是,提供一單一指令,由此,使用者可指示一相稱的微處理器執(zhí)行一密碼運算,例如加密或解密,其中微處理器包含一密碼單元,此密碼單元依指示完成指令所指定的密碼功能。
并且,在此所討論的回合引擎提供一兩階裝置可管線處理兩區(qū)塊的輸入數(shù)據(jù),但其它實施例也可考慮多于兩階段裝置。階段的分配對支持更多輸入數(shù)據(jù)區(qū)塊的管線處理,將發(fā)展協(xié)調(diào)相稱微處理器中其它階段的分配。
最后,雖然本發(fā)明具體討論支持復數(shù)個算法的一單獨密碼單元,但是本發(fā)明也提供理解在一相稱微處理器中與其它執(zhí)行單元并列操作耦合的多密碼單元,而每一多密碼單元是配置用以執(zhí)行一具體指定的密碼演算,例如一第一單元是配置用以執(zhí)行進階加密標準算法、一第二單元是配置用以執(zhí)行數(shù)據(jù)加密標準算法等。
以上所述僅為本發(fā)明的較佳實施例而已,并非用以限定本發(fā)明的申請專利范圍;凡其它為脫離本發(fā)明所揭示的精神下所完成的等效改變或修飾,均應包含在本發(fā)明的申請專利范圍內(nèi)。
權(quán)利要求
1.一種執(zhí)行密碼運算的裝置,包含一密碼指令電路,用以產(chǎn)生一密碼指令,該密碼指令由一計算裝置接收并將其當成執(zhí)行于該計算裝置一指令流的一部分,其中該密碼指令指定復數(shù)個密碼運算其中之一及復數(shù)個數(shù)據(jù)區(qū)塊大小其中之一;以及一執(zhí)行邏輯電路,操作耦合該密碼指令電路,并且配置用以執(zhí)行被指定的密碼運算,該執(zhí)行邏輯電路包含一區(qū)塊大小控制器,在被指定的密碼運算執(zhí)行期間,配置用以使用被指定的數(shù)據(jù)區(qū)塊大小。
2.如權(quán)利要求1所述的裝置,其特征在于,其中該密碼運算可以具有下列功能的某一種一加密運算,該加密運算包含復數(shù)個明文區(qū)塊的加密以產(chǎn)生相對復數(shù)個密文區(qū)塊;以及一解密運算,該解密運算包含復數(shù)個密文區(qū)塊的解密,以產(chǎn)生相對復數(shù)個明文區(qū)塊。
3.如權(quán)利要求1所述的裝置,其特征在于,其中被指定數(shù)據(jù)區(qū)塊大小至少可以為下列可能變化的某一種128位、192位以及256位。
4.如權(quán)利要求1所述的裝置,其特征在于,其中該區(qū)塊大小控制器配置用以轉(zhuǎn)譯由該密碼指令所參照的一控制字組中的一數(shù)據(jù)區(qū)塊大小字段。
5.如權(quán)利要求1所述的裝置,其特征在于,其中該密碼指令依據(jù)x86指令格式指定。
6.如權(quán)利要求1所述的裝置,其特征在于,其中該密碼指令隱含參照該計算裝置的復數(shù)個緩存器。
7.如權(quán)利要求6所述的裝置,其特征在于,其中該些緩存器至少可以為下列可能變化的某一種或其任意組合一第一緩存器,其中該第一緩存器的內(nèi)容包含指向一第一內(nèi)存地址的一第一指針,該第一內(nèi)存地址依據(jù)欲完成的被指定的密碼運算指定內(nèi)存內(nèi)一第一位置以存取復數(shù)個輸入文字區(qū)塊,該些輸入文字區(qū)塊的大小依據(jù)被指定的數(shù)據(jù)區(qū)塊大小而設定;一第二緩存器,其中該第二緩存器的內(nèi)容包含指向一第二內(nèi)存地址的一第二指針,該第二內(nèi)存地址指定內(nèi)存內(nèi)一第二位置以儲存相對復數(shù)個輸出文字區(qū)塊,相對該些輸出文字區(qū)塊依據(jù)復數(shù)個輸入文字區(qū)塊完成被指定的密碼運算而產(chǎn)生,其中該些輸入文字區(qū)塊及該些輸出文字區(qū)塊的大小依據(jù)被指定的數(shù)據(jù)區(qū)塊大小而設定;一第三緩存器,其中該第三緩存器的內(nèi)容指示復數(shù)個輸入文字區(qū)塊內(nèi)復數(shù)個區(qū)塊,其中該些輸入文字區(qū)塊的大小依據(jù)被指定數(shù)據(jù)區(qū)塊大小而設定;一第四緩存器,其中該第四緩存器的內(nèi)容包含指向一第三內(nèi)存地址的一第三指針,該第三內(nèi)存地址指定內(nèi)存內(nèi)一第三位置以存取密碼鑰匙數(shù)據(jù)以用于完成被指定的密碼運算;一第五緩存器,其中該第五緩存器的內(nèi)容包含指向一第四內(nèi)存地址的一第四指針,該第四內(nèi)存地址指定內(nèi)存內(nèi)一第四位置,該第四位置包含一初始向量位置,該初始向量位置的內(nèi)容包含一初始向量或一初始向量等效物以用于完成被指定的密碼運算;以及一第六緩存器,其中該第六緩存器的內(nèi)容包含指向一第五內(nèi)存地址的一第五指針,該第五內(nèi)存地址指定內(nèi)存內(nèi)一第五位置以存取一控制字組以用于完成被指定的密碼運算,其中該控制字組指定被指定的密碼運算的密碼參數(shù),該控制字組包含一數(shù)據(jù)區(qū)塊大小字段,配置用以指定在被指定的密碼運算執(zhí)行期間,使用該數(shù)據(jù)區(qū)塊大小。
8.如權(quán)利要求1所述的執(zhí)行密碼運算的裝置,其特征在于,其中該執(zhí)行邏輯電路包含一密碼單元,配置用以在每一輸入文字區(qū)塊執(zhí)行復數(shù)個密碼回合以產(chǎn)生每一相對輸出文字區(qū)塊,其中被指定的數(shù)據(jù)區(qū)塊大小由一控制字組指定,且該控制字組提供給該密碼單元的該區(qū)塊大小控制器。
9.一種執(zhí)行密碼運算的裝置,包含一組件內(nèi)的一密碼單元,該密碼單元配置用以執(zhí)行復數(shù)個密碼運算其中之一,響應接收一指令流內(nèi)一密碼指令,該密碼指令由一密碼指令電路所提供,而該密碼指令指定被指定的密碼運算,以及在執(zhí)行被指定的密碼運算時指定欲使用的一區(qū)塊大小;以及一區(qū)塊大小邏輯電路,操作耦合于該密碼單元,用以在被指定的密碼運算期間,指定該組件來使用該區(qū)塊大小。
10.如權(quán)利要求9所述的裝置,其特征在于,其中被指定的區(qū)塊大小至少可以為下列可能變化的某一種128位、192位以及256位。
11.如權(quán)利要求9所述的裝置,其特征在于,其中該區(qū)塊大小邏輯電路配置用以轉(zhuǎn)譯該密碼指令所參照的一控制字組中的一數(shù)據(jù)區(qū)塊大小字段。
12.如權(quán)利要求9所述的裝置,其特征在于,其中該密碼指令依據(jù)x86指令格式所指定。
13.一種在一裝置執(zhí)行密碼運算的方法,包含接收一密碼指令,該密碼指令在被指定的密碼運算執(zhí)行期間指定使用一數(shù)據(jù)區(qū)塊大小;以及在執(zhí)行被指定的密碼運算時,使用被指定的數(shù)據(jù)區(qū)塊大小。
14.如權(quán)利要求13所述的方法,其特征在于,其中該接收包含由一控制字組的一字段指定被指定的數(shù)據(jù)區(qū)塊大小,其中該控制字組由該密碼指令所參照。
15.如權(quán)利要求13所述的方法,其特征在于,其中該使用包含執(zhí)行被指定的密碼運算依據(jù)進階加密標準的規(guī)則。
16.如權(quán)利要求13所述的方法,其特征在于,其中該接收包含指定該密碼指令依據(jù)x86指令格式。
全文摘要
本發(fā)明提供一種在處理器內(nèi)復數(shù)個輸入數(shù)據(jù)區(qū)塊執(zhí)行密碼運算的裝置及方法,其中上述輸入數(shù)據(jù)區(qū)塊的大小可程序化。在一實施例中,提供一種執(zhí)行密碼運算的裝置,而此裝置包含一密碼指令電路,用以產(chǎn)生一密碼指令,以及一執(zhí)行邏輯電路。上述密碼指令由一計算裝置接收并將其當成一執(zhí)行于此計算裝置指令流的一部分,并且此密碼指令指定復數(shù)個密碼運算其中之一以及復數(shù)個數(shù)據(jù)區(qū)塊大小其中之一。上述執(zhí)行邏輯電路操作耦合于上述密碼指令電路,此執(zhí)行邏輯電路執(zhí)行上述密碼運算,并且包含一區(qū)塊大小控制器,而此區(qū)塊大小控制器在被指定的密碼運算執(zhí)行期間使用被指定的數(shù)據(jù)區(qū)塊大小。
文檔編號H04L9/06GK1658548SQ200510062490
公開日2005年8月24日 申請日期2005年3月29日 優(yōu)先權(quán)日2004年4月16日
發(fā)明者G·葛蘭亨利, A·克里斯賓 湯瑪斯, 泰瑞帕德斯 申請人:威盛電子股份有限公司