專利名稱:執(zhí)行透明化密碼區(qū)塊串行模式密碼運(yùn)算的裝置及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微電子學(xué)領(lǐng)域,尤其涉及一種在微處理器或其它設(shè)備中執(zhí)行透明化密碼區(qū)塊串行模式密碼運(yùn)算的裝置及方法。
背景技術(shù):
一早期計(jì)算機(jī)系統(tǒng),與其它計(jì)算機(jī)系統(tǒng)獨(dú)立運(yùn)作,因此一在早期計(jì)算機(jī)系統(tǒng)中執(zhí)行的應(yīng)用程序,所請(qǐng)求的全部輸入數(shù)據(jù),可能位于該計(jì)算機(jī)系統(tǒng),或由一應(yīng)用程序設(shè)計(jì)者于執(zhí)行時(shí)提供。該應(yīng)用程序由輸出數(shù)據(jù)產(chǎn)生,且為執(zhí)行后的結(jié)果,而該輸出數(shù)據(jù)通常以書面輸出,或?yàn)槲募问剑瑢懺谝淮艓C(jī)、磁盤或其它位于該計(jì)算機(jī)系統(tǒng)內(nèi)的大量儲(chǔ)存裝置中。該輸出文件接著可以作為執(zhí)行在同一計(jì)算機(jī)系統(tǒng)中,一系列應(yīng)用程序的輸入文件,或者該輸出數(shù)據(jù)先前就已經(jīng)以一文件形式儲(chǔ)存到一可移除或可運(yùn)輸?shù)拇罅績?chǔ)存裝置,則它可接著被提供到一不同、甚至不兼容的計(jì)算機(jī)系統(tǒng),以供應(yīng)用程序使用。在這些早期的計(jì)算機(jī)系統(tǒng)中,已確認(rèn)保護(hù)敏感數(shù)據(jù)的需求,而在其它信息保全措施中,密碼程序發(fā)展及利用來保護(hù)未授權(quán)揭露的敏感數(shù)據(jù)。一般來說,這些密碼程序?qū)?chǔ)存在大量儲(chǔ)存裝置的輸出數(shù)據(jù)的加密及解密。
幾年前,使用者發(fā)現(xiàn)連結(jié)網(wǎng)絡(luò)計(jì)算機(jī),以提供存取已共享的數(shù)據(jù)。連帶地,網(wǎng)絡(luò)結(jié)構(gòu)、操作系統(tǒng)及數(shù)據(jù)傳輸協(xié)議,同樣地將存取已分享數(shù)據(jù)的能力,發(fā)展到不僅僅是支持,甚至扮演起突起性重要的角色。例如,在今日一計(jì)算機(jī)工作站的使用者,能夠讀取不同工作站或網(wǎng)絡(luò)文件服務(wù)器的文件、使用因特網(wǎng)取得新聞及其它信息、在數(shù)百部計(jì)算機(jī)間傳送及接收電子信息(亦即電子郵件)、連接到供貨商的計(jì)算機(jī)系統(tǒng),提供信用卡或銀行功能信息,以進(jìn)行與供貨商之間的買賣、或在餐廳、機(jī)場(chǎng)或其它公共場(chǎng)所利用無線網(wǎng)絡(luò)進(jìn)行前述活動(dòng),都是相當(dāng)平常的事情。因此,保護(hù)未授權(quán)揭露的敏感數(shù)據(jù)本身及傳輸?shù)男枨髣×业某砷L。一使用者在一給定計(jì)算機(jī)多層協(xié)議期間,有義務(wù)來保護(hù)敏感數(shù)據(jù)的案例越來越多。目前新聞?lì)^條規(guī)律性地加重計(jì)算機(jī)信息安全議題的力道,例如垃圾郵件、黑客攻擊、個(gè)人數(shù)據(jù)外流、還原工程、網(wǎng)絡(luò)詐騙以及信用卡詐欺等公眾議題的最前線。而因?yàn)檫@些預(yù)謀的網(wǎng)絡(luò)恐怖主義,以不正的手段入侵個(gè)人隱私范圍的影響,有關(guān)機(jī)關(guān)已經(jīng)擬定出相對(duì)應(yīng)的新法、嚴(yán)格的執(zhí)行及公眾教育的程序。然而,沒有任何一種反應(yīng)在計(jì)算機(jī)信息妥協(xié)處理趨勢(shì)上表現(xiàn)出作用。原本只有政府關(guān)心的事情,金融制度,軍事及間諜問題,現(xiàn)在變成一般市民從其家用計(jì)算機(jī)讀取電子郵件或執(zhí)行活儲(chǔ)戶頭存取時(shí)一種顯著的主題。在信息安全范疇方面,已逐漸發(fā)展出一些技術(shù)與裝置可以讓信息只會(huì)被特定的對(duì)像所接收了解,即所謂的密碼學(xué)(cryptography)。當(dāng)特別應(yīng)用于保護(hù)信息時(shí),其為在計(jì)算機(jī)間儲(chǔ)存或傳送時(shí),加密使用于傳送敏感的信息(已知如“明文”(cleartext)或“本文”(plaintext)至不能了解的形式(如“密文”(ciphertext))。明文轉(zhuǎn)換至密文的傳送過程稱“加密(encryption)”、“譯成密碼(enciphering)”、或“密碼化(ciphering)”,且密文轉(zhuǎn)換至明文的傳送過程稱“解密(decryption)”、“解除密碼(deciphering)”、或“轉(zhuǎn)換密碼(inverse ciphering)”。
在密碼范疇中,已發(fā)展出數(shù)個(gè)步驟及規(guī)則,來允許使用者不需要高度知識(shí)或努力來完成密碼操作,且使這些使用者能夠傳送或以其它方式如加密形式提供其信息給其它使用者。順著加密信息,傳送者一般提供接受者一個(gè)不能使接受者解除加密信息的“加密密碼”,因此接受者不能夠移除或以其它方式增加未加密原始信息的存取。一種技術(shù)將這些步驟或規(guī)則采取密碼保護(hù),數(shù)學(xué)運(yùn)算及特別設(shè)計(jì)的應(yīng)用程序形式將高敏感度信息加密或解密。
一些運(yùn)算類別使用于將數(shù)據(jù)加密或解密。在此提及的第一類運(yùn)算類別(如公共密鑰加密運(yùn)算RSA運(yùn)算)利用兩種加密密碼(一種公共密鑰(publickey)及一種私人密鑰(private key))來將數(shù)據(jù)加密或解密。提及一些公共密鑰運(yùn)算,一種公共密鑰利用來傳送給接受者的數(shù)據(jù)加密。在使用者公共及私人密鑰兼有一個(gè)數(shù)學(xué)演算關(guān)系,接受者必須利用其私人密鑰將傳送數(shù)據(jù)解密以恢多據(jù)。雖然此類加密運(yùn)算在今日廣泛被使用,但加密及解密操作速度仍然過慢,即使只加密與解密少量數(shù)據(jù)。第二類運(yùn)算,如對(duì)稱密鑰運(yùn)算(symmetric key algorithms),提供數(shù)據(jù)安全相當(dāng)程度,且速度更快。這些運(yùn)算稱為對(duì)稱密鑰運(yùn)算,因?yàn)槠涫褂眉用苊荑€于加密及解密信息。有三種公共公知的主要加密密鑰運(yùn)算數(shù)據(jù)加密標(biāo)準(zhǔn)規(guī)則(data encryption standard、DES),三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn)規(guī)則(Triple DES),及進(jìn)階加密標(biāo)準(zhǔn)規(guī)則(advancedencryption standard、AES)。因?yàn)檫@些演算強(qiáng)度保護(hù)高敏感度數(shù)據(jù),其現(xiàn)在由美國政府及其代理機(jī)構(gòu)使用。但可以預(yù)期,這些技術(shù)中的一個(gè)或多個(gè)將在未來成為商業(yè)或私人傳送標(biāo)準(zhǔn)。根據(jù)這些對(duì)稱密鑰運(yùn)算,明文及密文分別被區(qū)隔于一個(gè)特殊的大小來加密或解密。舉例,在128位大小區(qū)間的進(jìn)階加密標(biāo)準(zhǔn)規(guī)則完整加密操作,且使用128、192及256位的加密密鑰。其它對(duì)稱密鑰運(yùn)算允許192及256位數(shù)據(jù)組的進(jìn)階加密標(biāo)準(zhǔn)。提及分組加密操作,一種1024位明文信息為如八個(gè)128字節(jié)加密。
全部的對(duì)稱密鑰運(yùn)算利用相同形式的次操作,將一明文區(qū)塊加密。且提及一般更常使用的對(duì)稱密鑰運(yùn)算,一種最初加密密鑰擴(kuò)充進(jìn)多種密鑰(如一種“密鑰目錄”),每一個(gè)如符合次操作加密“輪”(round)在明文區(qū)塊中完成。舉例,密鑰目錄的第一密鑰使用來完成在明文區(qū)塊上次操作的第一加密輪,其中第二輪利用密鑰目錄的第二密鑰來產(chǎn)生第二結(jié)果。一種特定數(shù)量的次單元輪被完成來產(chǎn)生一個(gè)密文本身的最終回結(jié)果。進(jìn)階加密標(biāo)準(zhǔn)規(guī)則運(yùn)算的每一輪中的次操作,尚有次位(或S-box)、移列(ShiftRows)、混欄(MixColum)、加輪密鑰(AddRoundKey)等術(shù)語。每一輪期間,一種密文區(qū)塊解密完成,除了完成密文輸入轉(zhuǎn)換密碼以及轉(zhuǎn)換次操作(如混欄,移列),每一輪最終結(jié)果為明文區(qū)塊。
數(shù)據(jù)加密標(biāo)準(zhǔn)規(guī)則及三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn)規(guī)則利用不同特性次操作,但次操作與這些進(jìn)階加密標(biāo)準(zhǔn)規(guī)則同工,因?yàn)槠淅糜陬愃品绞睫D(zhuǎn)換一明文區(qū)塊成一密文區(qū)塊。
在多重連續(xù)測(cè)試組上完成密碼操作,全部對(duì)稱密鑰運(yùn)算利用相同的模式。這些模式包含電子密碼本(electronic code book、ECB)模式、密碼塊鏈(cipher block chaining、CBC)模式、密碼反饋(cipher feedback、CFB)模式、及輸出反饋(output feedback、OFB)模式。在次操作完成期間,一些模式利用一種附加初始化向量且一些使用完成于第一明文區(qū)塊加密第一位置的密文輸出如一種附加輸入至完成于第二明文區(qū)塊的加密第二位置。更多的相關(guān)技術(shù)細(xì)節(jié),可以參見Federal Information Processing Standards Publication46-3(FIPS-46-3),1999年10月25日,其詳細(xì)討論了數(shù)據(jù)加密標(biāo)準(zhǔn)規(guī)則、三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn)規(guī)則;以及參見FIPS-197,2001年11月26日,其對(duì)進(jìn)階加密標(biāo)準(zhǔn)作了詳細(xì)解釋。前述標(biāo)準(zhǔn)規(guī)則系由國家標(biāo)準(zhǔn)科技研究所(NationalInstitute of Standards and Technology、NIST)頒布及主張。此外,個(gè)別的指令、白皮書、套裝工具及對(duì)策可參考國家標(biāo)準(zhǔn)科技研究所的計(jì)算機(jī)安全應(yīng)變中心(CSRC),網(wǎng)址為http//csrc.nist.gov/。
公知技術(shù)者將察覺多數(shù)應(yīng)用程序可以有效的在計(jì)算機(jī)上執(zhí)行以完成加密操作(如加密及去密)。事實(shí)上,一些操作系統(tǒng)(如Microsoft、WindowsXP、Linux)在原始加密形式、加密應(yīng)用程序接口及相似物時(shí),直接提供加密/解密服務(wù)。無論如何,今日計(jì)算機(jī)加密技術(shù)仍存在一些缺陷。請(qǐng)直接參考圖1,借以在下面突顯及討論這些缺陷。
圖1為一種今日計(jì)算機(jī)加密應(yīng)用的方框圖100,描述一個(gè)與局域網(wǎng)絡(luò)105連結(jié)的第一計(jì)算機(jī)工作站101、一個(gè)第二計(jì)算機(jī)工作站102、一個(gè)網(wǎng)絡(luò)文件儲(chǔ)存設(shè)備106、一個(gè)第一路由器107、或其它與廣域網(wǎng)絡(luò)(WAN)110如因特網(wǎng)、及一個(gè)無線網(wǎng)絡(luò)路由器108如IEEE標(biāo)準(zhǔn)802.11形成的接口亦與局域網(wǎng)絡(luò)105連結(jié)。一個(gè)筆記型計(jì)算機(jī)104利用無線網(wǎng)絡(luò)109連接至無線網(wǎng)絡(luò)由器108。廣域網(wǎng)絡(luò)110另一個(gè)重點(diǎn),一個(gè)第二路由器111提供一個(gè)第三計(jì)算機(jī)工作站103接口。
如上提及,今日使用者在工作期間多次面臨計(jì)算機(jī)信息安全性的議題。舉例,在今日多重工作操作系統(tǒng)控制下,一個(gè)工作站101使用者可同步完成數(shù)個(gè)工作,每一個(gè)皆需要密碼操作。工作站101使用者需要進(jìn)行加密/解密應(yīng)用程序112(如部分操作系統(tǒng)提供或由操作系統(tǒng)行駛)已在網(wǎng)絡(luò)文件儲(chǔ)存設(shè)備106上儲(chǔ)存區(qū)域文件。在文件儲(chǔ)存的同時(shí),使用者可傳送加密信息至位于第二計(jì)算機(jī)工作站102的第二使用者,其亦需要執(zhí)行加密/解密應(yīng)用程序112。加密信息可為實(shí)時(shí)(如一種立即信息)或非實(shí)時(shí)(如電子郵件)。另外,使用者還可從第三計(jì)算機(jī)工作站(103)經(jīng)由廣域網(wǎng)絡(luò)110存取或提供他/她最終數(shù)據(jù)(如信用卡號(hào)碼,金融轉(zhuǎn)賬,等)或其它形式的敏感數(shù)據(jù)。當(dāng)走出公司進(jìn)入任何一個(gè)在局域網(wǎng)絡(luò)105上的分享資源101,102,106,107,108,109工作站101,使用者使用第三計(jì)算機(jī)工作站103可代表家用計(jì)算機(jī)或遠(yuǎn)距計(jì)算機(jī)103。每一個(gè)前述動(dòng)作需要一個(gè)符合執(zhí)行加密/解密應(yīng)用程序112的例子。此外,無線網(wǎng)絡(luò)109現(xiàn)在常態(tài)性的提供于咖啡店,機(jī)場(chǎng),學(xué)校,及其它公共場(chǎng)所,因此筆記型計(jì)算機(jī)104使用者一個(gè)加密解密無論是他/她的信息傳送/接收其它使用者立即的需要,且經(jīng)由無線網(wǎng)絡(luò)109至無線網(wǎng)絡(luò)由器108加密或解密所有信息。
公知技術(shù)者可以了解,每一個(gè)上述活動(dòng)都需要在工作站101-104上做加密操作,也就相應(yīng)有執(zhí)行一個(gè)立即的加密/解密應(yīng)用程序112的需求。因此,計(jì)算機(jī)101-104進(jìn)一步可能同時(shí)完成數(shù)百個(gè)加密操作。
無論如何,存在一些在計(jì)算機(jī)系統(tǒng)101-104上執(zhí)行至少一個(gè)以上立即的加密/解密應(yīng)用程序112而完成加密操作方法的限制。舉例,經(jīng)由一個(gè)軟件程序完成一個(gè)前述功能相對(duì)比經(jīng)由硬件完成相同功能執(zhí)行慢。每一個(gè)加密/解密應(yīng)用程序112都需要一段時(shí)間,并且正在計(jì)算機(jī)101-104上執(zhí)行的現(xiàn)行程序可能在這段時(shí)間內(nèi)必須暫停執(zhí)行,且加密操作(如明文,密文,模式,密鑰等)參數(shù)必須通過操作系統(tǒng)至加密/解密應(yīng)用程序112,執(zhí)行加密操作。且因?yàn)榧用苓\(yùn)算必須包含特殊組別數(shù)據(jù)幾回次操作,加密/解密應(yīng)用程序(112)執(zhí)行包含執(zhí)行多個(gè)計(jì)算機(jī)延伸指令,因此全部系統(tǒng)操作速度有不利的影響。如一般公知技術(shù)者所能查覺,在Microsoft Outlook傳送一個(gè)小的加密電子郵件會(huì)較傳送一個(gè)未加密電子郵件慢5倍。
另外,當(dāng)前技術(shù)的局限是由操作系統(tǒng)干涉的延遲所造成的。大多數(shù)應(yīng)用程序并不提供整數(shù)密鑰產(chǎn)生或加密/解密組件,他們執(zhí)行操作系統(tǒng)的組件或內(nèi)嵌應(yīng)用程序,以完成這些任務(wù)。而操作系統(tǒng)系按照其它正在執(zhí)行應(yīng)用程序的需求及中斷進(jìn)行調(diào)度。
甚至,本發(fā)明注意到在當(dāng)前計(jì)算機(jī)系統(tǒng)101-104上密碼運(yùn)算的完成與在微處理器中專用浮點(diǎn)單元出現(xiàn)前浮點(diǎn)數(shù)學(xué)運(yùn)算的完成是類似的。早期的浮點(diǎn)運(yùn)算通過軟件實(shí)現(xiàn),所以執(zhí)行速度很慢。就像浮點(diǎn)運(yùn)算一樣,通過軟件執(zhí)行密碼運(yùn)算是相當(dāng)慢的。隨著浮點(diǎn)技術(shù)的改進(jìn),浮點(diǎn)指令提供在浮點(diǎn)共同處理器上執(zhí)行,共同處理器執(zhí)行浮點(diǎn)運(yùn)算比軟件的實(shí)現(xiàn)要快很多,當(dāng)然它也增加了系統(tǒng)的成本。同樣地,今日密碼共同處理器以擴(kuò)展板或通過并行端口或其它外圍接口(如USB)連接到主處理器的外部設(shè)備的形式。共同處理器當(dāng)然使得密碼運(yùn)算的執(zhí)行比純軟件的實(shí)現(xiàn)要快。但密碼共同處理器給系統(tǒng)配置增加了成本,他需要額外的電源、而且降低了系統(tǒng)的可靠性。由于數(shù)據(jù)通路不像主微處理器那樣在同一個(gè)模塊上,所以密碼共同處理器的執(zhí)行乃更易被監(jiān)聽。
因此,本發(fā)明了解到人們需要在今日的微處理器里有一個(gè)專門的密碼硬件,這樣需要密碼運(yùn)算的應(yīng)用程序可以直接經(jīng)由一條單獨(dú)的、微密碼指令指示微處理器執(zhí)行該密碼運(yùn)算。本發(fā)明也提供這樣的功能,減少對(duì)操作系統(tǒng)的干涉和管理。并且該密碼指令最好能夠在應(yīng)用程序的特權(quán)級(jí)加以使用,指定的密碼硬件能夠與當(dāng)前流行的微處理器兼容。同時(shí)密碼硬件和相關(guān)密碼指令要提供與先前操作系統(tǒng)和程序的兼容的方式。最主要的是提供一種執(zhí)行密碼運(yùn)算的裝置和方法,使有效抵御未授權(quán)的監(jiān)聽,并能支持多種密碼算法,支持對(duì)在其中實(shí)施的特殊密碼算法進(jìn)行驗(yàn)證和測(cè)試,允許用戶提供的密鑰和自行產(chǎn)生的密鑰,支持多重的數(shù)據(jù)塊大小和密鑰長度,提供可編程的區(qū)塊加密/解密模式,即如ECB、CBC、CFB和OFB等,并且在使用上述可編程區(qū)塊加密/解密模式時(shí)能夠?qū)Υ罅繑?shù)據(jù)塊高效執(zhí)行區(qū)塊密碼功能。
發(fā)明內(nèi)容
本發(fā)明用以解決公知技術(shù)的上述以及其它的問題和缺陷。本發(fā)明提供一種較好的技術(shù)以在微處理器內(nèi)執(zhí)行密碼運(yùn)算。
在一個(gè)方案中,在一微處理器內(nèi)提供用以完成密碼運(yùn)算的裝置。該裝置包括一密碼指令電路、密碼區(qū)塊串行區(qū)塊指針邏輯電路和執(zhí)行邏輯電路。密碼指令電路所提供的密碼指令,通過計(jì)算裝置以接收,并作為在計(jì)算裝置上所執(zhí)行指令流的一部分,密碼指令也規(guī)定了一種密碼運(yùn)算。密碼運(yùn)算包括多個(gè)密碼區(qū)塊串行區(qū)塊密碼運(yùn)算,而這些密碼區(qū)塊串行區(qū)塊密碼運(yùn)算則在相對(duì)應(yīng)的多個(gè)輸入內(nèi)文區(qū)塊中被處理。密碼區(qū)塊串行區(qū)塊指針邏輯電路和密碼指令電路結(jié)合在一起。該密碼區(qū)塊串行區(qū)塊指針邏輯電路指示計(jì)算裝置更新指針寄存器及每一個(gè)多個(gè)密碼區(qū)塊串行區(qū)塊密碼運(yùn)算的中間結(jié)果。執(zhí)行邏輯電路和密碼區(qū)塊串行區(qū)塊指針邏輯電路相互結(jié)合,執(zhí)行邏輯電路則執(zhí)行一條密碼指令。
本發(fā)明另一方案為一種執(zhí)行密碼運(yùn)算的裝置,該裝置包括一內(nèi)嵌在一設(shè)備中的密碼單元和密碼區(qū)塊串行區(qū)塊指針邏輯電路。密碼單元對(duì)收到的指令流中指定了一條密碼運(yùn)算的密碼指令作出響應(yīng)并執(zhí)行一種密碼運(yùn)算,此密碼運(yùn)算包括數(shù)個(gè)密碼區(qū)塊串行區(qū)塊密碼運(yùn)算。而密碼區(qū)塊串行區(qū)塊密碼運(yùn)算則于所對(duì)應(yīng)的數(shù)個(gè)輸入內(nèi)文區(qū)塊中被處理。密碼區(qū)塊串行區(qū)塊指針邏輯電路和密碼單元結(jié)合在一起。密碼區(qū)塊串行區(qū)塊指針邏輯電路指示該設(shè)備更新指針寄存器的內(nèi)容,并暫存每一個(gè)密碼區(qū)塊串行區(qū)塊密碼運(yùn)算的結(jié)果。
本發(fā)明又一方案為一種在一設(shè)備內(nèi)執(zhí)行密碼運(yùn)算的方法。該方法包括響應(yīng)收到的密碼指令并執(zhí)行一種密碼運(yùn)算,其中密碼指令規(guī)定了一種密碼運(yùn)算,而該執(zhí)行包括完成數(shù)個(gè)在相對(duì)應(yīng)數(shù)個(gè)輸入文字區(qū)塊中的密碼區(qū)塊串行模式區(qū)塊運(yùn)算。該方法還包括將一個(gè)當(dāng)前輸入文字區(qū)塊寫到一個(gè)初始化向量的位置,以使在下一個(gè)輸入文字區(qū)塊的下一個(gè)密碼區(qū)塊串行模式區(qū)塊運(yùn)算,使用當(dāng)前輸入文字區(qū)塊作為一個(gè)等效的初始化向量。
圖1是說明當(dāng)前密碼應(yīng)用的示意圖。
圖2是描述執(zhí)行密碼運(yùn)算技術(shù)的示意圖。
圖3揭示依據(jù)本發(fā)明用以執(zhí)行密碼運(yùn)算的微處理器裝置的示意圖。
圖4揭示依據(jù)本發(fā)明一微密碼指令實(shí)施例的示意圖。
圖5依據(jù)圖4的微密碼指令說明典型區(qū)塊密碼模式的數(shù)值表。
圖6詳細(xì)描述依據(jù)本發(fā)明在一個(gè)x86兼容微處理器內(nèi)密碼單元的方框圖。
圖7說明在圖6的微處理器內(nèi)執(zhí)行密碼子運(yùn)算的典型微指令的示意圖。
圖8根據(jù)圖7的格式說明一加載微指令寄存器字段的數(shù)值表。
圖9根據(jù)圖7的格式揭示一儲(chǔ)存微指令寄存器字段的數(shù)值表。
圖10依據(jù)本發(fā)明用以規(guī)定密碼運(yùn)算的密碼參數(shù)的典型控制字格式圖。
圖11依據(jù)本發(fā)明密碼單元詳細(xì)描述的方框圖。
圖12依據(jù)本發(fā)明說明一種區(qū)塊密碼邏輯電路實(shí)施例的方框圖,使按照進(jìn)階加密標(biāo)準(zhǔn)執(zhí)行密碼運(yùn)算。
圖13依據(jù)本發(fā)明描述在一中斷事件中用以查看密碼參數(shù)狀態(tài)方法的流程圖。
圖14依據(jù)本發(fā)明描述在至少一個(gè)中斷事件下于數(shù)輸入數(shù)據(jù)區(qū)塊中完成特定密碼區(qū)塊串行模式密碼運(yùn)算的方法的流程圖。
其中,附圖標(biāo)記說明如下100方框圖 101第一計(jì)算機(jī)工作站
102第二計(jì)算機(jī)工作站 103第三計(jì)算機(jī)工作站104筆記本計(jì)算機(jī) 105局域網(wǎng)絡(luò)106網(wǎng)絡(luò)文件儲(chǔ)存設(shè)備 107第一路由器108無線網(wǎng)絡(luò)由器 109無線網(wǎng)絡(luò)110廣域網(wǎng)絡(luò) 111第二路由器112加密/解密應(yīng)用程序 200方框圖201微處理器 202操作系統(tǒng)203應(yīng)用內(nèi)存 204密碼密鑰產(chǎn)生程序205密鑰目錄 206區(qū)塊加密程序207區(qū)塊解密程序 208初始化向量209密碼參數(shù) 210明文區(qū)塊211密文區(qū)塊 300方框圖301微處理器 302指令寄存器303轉(zhuǎn)譯邏輯電路 304微指令隊(duì)列305、306微指令入口 307寄存器組308-313寄存器314加載邏輯電路 315數(shù)據(jù)高速緩存316密碼單元 317儲(chǔ)存邏輯電路318寫回邏輯電路 319內(nèi)存總線320操作系統(tǒng) 321系統(tǒng)內(nèi)存322密碼指令 323初始控制字符324初始密鑰或密鑰目錄325初始化向量326輸入文字區(qū)塊 327輸出文字區(qū)塊328執(zhí)行邏輯電路 400微密碼指令401可選擇性前置字段 402重復(fù)前置字段403運(yùn)算碼字段404區(qū)塊密碼模式字段500表600x86兼容微處理器601獲取邏輯電路 602轉(zhuǎn)譯邏輯電路603轉(zhuǎn)譯器604微碼只讀存儲(chǔ)器605寄存器階段606尋址階段
607加載階段 608執(zhí)行階段609微指令隊(duì)列 610整數(shù)單元611微指令隊(duì)列 612浮點(diǎn)單元613微指令隊(duì)列 614多媒體延伸集單元615微指令隊(duì)列 616串流延伸集單元617密碼單元 618儲(chǔ)存階段619寫回階段 620加載總線621延遲信號(hào) 622儲(chǔ)存總線624標(biāo)志寄存器 625X位626中斷邏輯電路 627軟件及硬件中斷信號(hào)628機(jī)器特定寄存器 629E位630特性控制寄存器 631D位632執(zhí)行邏輯電路 640密碼區(qū)塊串行區(qū)塊指針邏輯電路700微指令 701微運(yùn)算碼字段702數(shù)據(jù)寄存器字段 703寄存器字段704數(shù)據(jù)域位 800表900表 1000控制字符格式1001保留字段1002密鑰大小字段1003加密/解密字段 1004中間結(jié)果字段1005密鑰產(chǎn)生字段1006算法字段1007輪計(jì)數(shù)字段 1100密碼單元1101區(qū)塊密碼邏輯電路1102密鑰隨機(jī)存取內(nèi)存1103微指令寄存器1104控制字符寄存器1105輸入-0寄存器1106輸入-1寄存器1107密鑰-0寄存器1108密鑰-1寄存器1109輸出-0寄存器1110輸出-1寄存器1111加載總線1112儲(chǔ)存總線1113延遲信號(hào)1114微指令總線1200區(qū)塊密碼邏輯電路1201微指令寄存器
1202控制字符寄存器 1203密鑰-0寄存器1204key-1寄存器1205-1206輸入寄存器1207-1208輸出寄存器1210輪引擎控制器 1211-1214總線1216-1218總線1220輪引擎 1221第一密鑰XOR邏輯電路1222第一寄存器暫存-0 1223S-Box邏輯電路1224移列邏輯電路 1225第二寄存器暫存-11226混欄邏輯電路 1227第三寄存器暫存-21302區(qū)塊 1304判斷區(qū)塊1306區(qū)塊 1308區(qū)塊1310區(qū)塊 1312區(qū)塊1402區(qū)塊 1404區(qū)塊1406判斷區(qū)塊 1408區(qū)塊1410區(qū)塊 1412區(qū)塊1414區(qū)塊 1416區(qū)塊1418區(qū)塊 1420區(qū)塊1422區(qū)塊 1426判斷區(qū)塊1428區(qū)塊 1430區(qū)塊具體實(shí)施方式
以下所述為應(yīng)用公知技術(shù)而制造或使用文中特定應(yīng)用及需求的本發(fā)明所列舉的例子。然而,實(shí)施例中所提及的各種修改用于彰顯與公知技術(shù)的不同處,此一般原則可應(yīng)用于其它實(shí)施例中。因此,本發(fā)明并非限定于特定實(shí)施例。
有鑒于上述關(guān)于密碼程序的技術(shù)背景及當(dāng)今計(jì)算機(jī)系統(tǒng)所使用將數(shù)據(jù)加密及解密的相關(guān)技術(shù),我們將參照?qǐng)D2來繼續(xù)探討這些技術(shù)及其限制。接著,將參照?qǐng)D3-14繼續(xù)討論本發(fā)明。
請(qǐng)看圖2,一方框圖200描述了在上述當(dāng)代計(jì)算機(jī)系統(tǒng)上完成密碼運(yùn)算的技術(shù)。方框圖200包括一個(gè)微處理器201,其從一個(gè)應(yīng)用程序?qū)?yīng)的系統(tǒng)內(nèi)存中,被稱作應(yīng)用內(nèi)存203的一部份,進(jìn)行獲取指令和存取數(shù)據(jù)。程序的控制和從該應(yīng)用內(nèi)存203存取數(shù)據(jù)是由駐留在一系統(tǒng)內(nèi)存中已受到保護(hù)的區(qū)域內(nèi)的操作系統(tǒng)202管理。如上述討論,如果一個(gè)正在執(zhí)行的應(yīng)用程序(例如一電子信箱程序或一文件儲(chǔ)存程序)需要執(zhí)行一個(gè)密碼運(yùn)算,正在執(zhí)行的應(yīng)用程序即必須指使微處理器201執(zhí)行特定數(shù)量的指令才能完成密碼運(yùn)算。這些指令也許就是該正在執(zhí)行應(yīng)用程序部份的一個(gè)子程序,它們也可能是鏈接到該正在執(zhí)行應(yīng)用程序的內(nèi)嵌程序,也可能是該操作系統(tǒng)202所提供的服務(wù)。不管它們的結(jié)合,一個(gè)本領(lǐng)域技術(shù)人員將了解這些指令將駐留在一些指定的或是已分配的內(nèi)存區(qū)域中?;谟懻摰哪康?,這些儲(chǔ)存區(qū)域?qū)?huì)被揭示在該應(yīng)用內(nèi)存203中,及包含一個(gè)密碼密鑰產(chǎn)生程序204,其可產(chǎn)生或接收一個(gè)密碼密鑰并可將該密鑰擴(kuò)展成為一密鑰目錄205以供密碼輪運(yùn)算使用。對(duì)于多區(qū)塊的加密運(yùn)算,一區(qū)塊加密程序206將被引動(dòng)。該加密程序206執(zhí)行可存取多個(gè)區(qū)塊的指令,多個(gè)區(qū)塊包含明文區(qū)塊210、密鑰目錄205、諸如模式、密鑰目錄的位置等更為詳細(xì)加密運(yùn)算的密碼參數(shù)209。如果指定的模式需要,一個(gè)初始化向量208也會(huì)借助加密程序206來存取。加密程序206執(zhí)行這些指令使產(chǎn)生相關(guān)的密文區(qū)塊211。同樣地,為了執(zhí)行區(qū)塊解密運(yùn)算,需引動(dòng)一區(qū)塊解密程序207。解密程序207執(zhí)行用來存取多個(gè)區(qū)塊的指令,多個(gè)區(qū)塊包含密文區(qū)塊211、密鑰目錄205、更為詳細(xì)解密運(yùn)算的密碼參數(shù)209,如果模式需要,一初始化向量208也會(huì)被存取。解密程序207執(zhí)行這些指令以產(chǎn)生相對(duì)應(yīng)的明文區(qū)塊210。
值得注意的是需要執(zhí)行特定數(shù)量的指令,以產(chǎn)生密碼密鑰和加密或解密文字區(qū)塊。上述的FIPS規(guī)范包含了許多偽碼范例,使得需確定的指令數(shù)量能夠被估計(jì)出來。因此,一個(gè)本領(lǐng)域技術(shù)人員通曉需要上百個(gè)指令完成一個(gè)簡單的區(qū)塊加密運(yùn)算,其中每個(gè)指令都要借助微處理器201執(zhí)行,才能完成所需的密碼運(yùn)算。進(jìn)一步來說,執(zhí)行這些指令來完成一個(gè)密碼運(yùn)算,對(duì)于當(dāng)前正在執(zhí)行應(yīng)用程序的主要目的(如文件管理,實(shí)時(shí)消息,電子信箱,遠(yuǎn)程文件存取、信用卡交易)來說是多余的運(yùn)算。因此,當(dāng)前正在執(zhí)行應(yīng)用程序的用戶感覺到當(dāng)前所執(zhí)行程序的完成并沒有有效率。在獨(dú)立的或內(nèi)嵌的加密及解密程序206、207的情況下,啟動(dòng)和管理這些程序206、207也要受到操作系統(tǒng)202的其它需求所支配,諸如支持中斷、異常以及惡化問題的事件等。再者,對(duì)于在一計(jì)算機(jī)系統(tǒng)上所需求的每一并行的密碼運(yùn)算,程序204、206、207的一例子就是須分開配置于內(nèi)存203中。及如上所述,可以預(yù)期的是,要求由一微處理器201并行的密碼運(yùn)算數(shù)目,將會(huì)隨著時(shí)間持續(xù)增加。
本發(fā)明的發(fā)明人注意到了這些問題和當(dāng)前計(jì)算機(jī)系統(tǒng)密碼技術(shù)的局限,更確認(rèn)了提供在一不會(huì)對(duì)使用者出現(xiàn)程序延遲的微處理器中,執(zhí)行密碼運(yùn)算的裝置和方法的需求。運(yùn)算因此,本發(fā)明于此提供一微處理器,經(jīng)由專屬的密碼單元,執(zhí)行密碼運(yùn)算的裝置及相關(guān)的方法。當(dāng)啟動(dòng)密碼單元時(shí),以經(jīng)由一單一密碼指令的程序化執(zhí)行密碼運(yùn)算?,F(xiàn)在將參照?qǐng)D3-12討論本發(fā)明。
參照?qǐng)D3,一方框圖300描述了一個(gè)依據(jù)本發(fā)明執(zhí)行密碼運(yùn)算的微處理器裝置。方框圖300描述了一個(gè)微處理器301,其通過一內(nèi)存總線319連到一系統(tǒng)內(nèi)存321上。微處理器301包括從一指令寄存器302接收指令的轉(zhuǎn)譯邏輯電路303。轉(zhuǎn)譯邏輯電路303可以是邏輯電路、裝置或微碼(即微指令或本地指令)、或是一個(gè)邏輯電路、裝置或微碼的組合,或是能夠轉(zhuǎn)譯指令到相關(guān)微指令序列的等效組件。在轉(zhuǎn)譯邏輯電路303中所執(zhí)行轉(zhuǎn)譯的組件可能被其它的電路、微碼等所共享,即在微處理器301內(nèi)執(zhí)行其它的功能。依據(jù)本發(fā)明的目的,微碼是一個(gè)術(shù)語,它表示大量的微指令。一微指令(或稱為本地指令)是一個(gè)執(zhí)行單元級(jí)別的指令。例如,微指令由精簡指令集計(jì)算機(jī)微處理器直接執(zhí)行。對(duì)于一個(gè)復(fù)雜指令集計(jì)算機(jī)微處理器,諸如一x86兼容微處理器,x86指令會(huì)被轉(zhuǎn)譯成相關(guān)的微指令,而這些微指令可以在復(fù)雜指令集計(jì)算機(jī)微處理器內(nèi)由至少一個(gè)單元直接執(zhí)行。轉(zhuǎn)譯邏輯電路303連接到一微指令隊(duì)列304上,微指令隊(duì)列304有數(shù)個(gè)微指令入口305、306。微指令由微指令隊(duì)列304提供給包括一寄存器組307的寄存器階段邏輯電路。寄存器組307具有多個(gè)寄存器308-313,且這些寄存器的內(nèi)容在執(zhí)行一個(gè)指定的密碼運(yùn)算前即被建立。寄存器308-312指向內(nèi)存321中的相應(yīng)位置323-327,這里存放著執(zhí)行指定密碼運(yùn)算所需的數(shù)據(jù)。寄存器階段連接到加載邏輯電路314,其連接到用來檢索完成指定密碼運(yùn)算數(shù)據(jù)的數(shù)據(jù)高速緩存315。數(shù)據(jù)高速緩存315通過內(nèi)存總線319連接到內(nèi)存321上。執(zhí)行邏輯電路328和加載邏輯電路314相接,并通過上一階段傳送下來的微指令執(zhí)行指定的運(yùn)算。執(zhí)行邏輯電路328包含邏輯電路、裝置或微碼(即微指令或本地指令)、或是一個(gè)邏輯電路、裝置或微碼的組合,或是能通過提供給它的微指令執(zhí)行指定運(yùn)算的等效組件。在執(zhí)行邏輯電路328中執(zhí)行運(yùn)算的組件可能被其它的電路、微碼等所共享,即在微處理器301內(nèi)完成其它的功能。執(zhí)行邏輯電路328包括一個(gè)密碼單元316,密碼單元316從加載邏輯電路314接收,用以執(zhí)行指定密碼運(yùn)算所需的數(shù)據(jù)。微指令驅(qū)動(dòng)密碼單元316在多個(gè)輸入文字區(qū)塊326上執(zhí)行指定的密碼運(yùn)算,以生成相關(guān)的多個(gè)輸出文字區(qū)塊327。密碼單元316包含邏輯電路、裝置或微碼(即微指令或本地指令)、或是一個(gè)邏輯電路、裝置或微碼的聯(lián)合體,或是能執(zhí)行密碼運(yùn)算的等效單元。在密碼單元316中執(zhí)行密碼運(yùn)算的組件可能被其它的電路、微碼等所共享,即在微處理器301內(nèi)完成其它的功能。在一實(shí)施例中,密碼單元316和執(zhí)行邏輯電路328的其它執(zhí)行單元(未圖標(biāo)),諸如整數(shù)單元、浮點(diǎn)單元等,并行執(zhí)行。在本發(fā)明范圍中一“單元”的一實(shí)施例包含邏輯電路、裝置或微碼(即微指令或本地指令)、或是一個(gè)邏輯電路、裝置或微碼的聯(lián)合體,或是能執(zhí)行指定運(yùn)算或指定功能的等效組件。這些在一個(gè)特殊單元上執(zhí)行指定運(yùn)算或執(zhí)行指定功能的組件,可能被其它的電路、微碼等所共享,即在微處理器301內(nèi)執(zhí)行其它功能或運(yùn)算。例如,在一個(gè)實(shí)施例中,一整數(shù)單元包含邏輯電路、裝置或微碼(即微指令或本地指令)、或是一個(gè)邏輯電路、裝置或微碼的組合,或是能執(zhí)行整數(shù)指令的等效組件。一浮點(diǎn)單元包含邏輯電路、裝置或微碼(即微指令或本地指令)、或是一個(gè)邏輯電路、裝置或微碼的組合,或是能執(zhí)行浮點(diǎn)指令的等效組件。在整數(shù)單元內(nèi)執(zhí)行整數(shù)指令的組件可以共享電路、微碼等,即在浮點(diǎn)單元內(nèi)執(zhí)行浮點(diǎn)指令。在相容x86體系的一實(shí)施例中,密碼單元316和一x86的整數(shù)單元、一x86的浮點(diǎn)單元、一x86的多媒體延伸單元和一x86的串流延伸單元并行執(zhí)行。根據(jù)本發(fā)明,一兼容x86體系的實(shí)施例是指這個(gè)實(shí)施例能夠正確地執(zhí)行大多數(shù)設(shè)計(jì)用來在一x86微處理器上執(zhí)行的應(yīng)用程序。如果得到一個(gè)正確結(jié)果,應(yīng)用程序能被正準(zhǔn)確地被執(zhí)行??晒┻x擇的x86兼容實(shí)施例期望密碼單元與上述所提到x86執(zhí)行單元的一個(gè)子集并行執(zhí)行。密碼單元316連接到儲(chǔ)存邏輯電路317上,并提供相對(duì)應(yīng)多個(gè)輸出文字區(qū)塊327。儲(chǔ)存邏輯電路317也連接到數(shù)據(jù)高速緩存315,其將輸出文字區(qū)塊327發(fā)送到系統(tǒng)內(nèi)存321處以供儲(chǔ)存。儲(chǔ)存邏輯電路317連接到寫回邏輯電路318上。當(dāng)指定的密碼運(yùn)算完成,寫回邏輯電路318將更新寄存器組307中的寄存器308-313。在一個(gè)實(shí)施例中,微指令與一頻率信號(hào)(未圖標(biāo))同步,流經(jīng)每一個(gè)上述的邏輯階段302、303、304、307、314、316-318,這樣,這些運(yùn)算就可以并行執(zhí)行,就像一條裝配線一樣。
在系統(tǒng)內(nèi)存321中,一應(yīng)用程序需要指定的密碼運(yùn)算,且可經(jīng)由一個(gè)單一密碼指令322,指示微處理器301去執(zhí)行密碼運(yùn)算。在此以一密碼(XCRYPT)指令作為范例說明。在一復(fù)雜指令集計(jì)算機(jī)實(shí)施例中,密碼指令322包含一指定一密碼運(yùn)算的指令。在精簡指令集計(jì)算機(jī)實(shí)施例中,密碼指令322包含一指定一密碼運(yùn)算的微指令。在一實(shí)施例中,密碼指令322利用現(xiàn)有指令集架構(gòu)中多余的或未用的指令編碼。在一x86兼容的實(shí)施例中,密碼指令322為一個(gè)4字節(jié)的指令,其包含x86重復(fù)(REP)前置(即0xF3),接著2字節(jié)未用的x86運(yùn)算碼(例如0x0FA7),再加上1字節(jié),其指定在執(zhí)行一指定密碼運(yùn)算時(shí)使用的一特定區(qū)塊密碼模式。在一個(gè)實(shí)施例中,依據(jù)本發(fā)明密碼指令322可以在提供給應(yīng)用程序的系統(tǒng)權(quán)限級(jí)下執(zhí)行,并因此能在一應(yīng)用程序或在一操作系統(tǒng)320的控制之下,編寫到程序指令流里使提供給微處理器301。由于執(zhí)行指定的密碼運(yùn)算只需一密碼指令322指示微處理器301,這樣,運(yùn)算的完成對(duì)于操作系統(tǒng)320來說將完全是透明化的。
運(yùn)算時(shí),操作系統(tǒng)320引動(dòng)一個(gè)應(yīng)用程序使在微處理器301上執(zhí)行,在執(zhí)行該應(yīng)用程序期間,作為指令流的一部分,一密碼指令322由內(nèi)存321提供給獲取邏輯電路302。然而,在執(zhí)行密碼指令322之前,在程序流中的指令指示該微處理器301,以初始化寄存器308-312的內(nèi)容,以致將其指向在內(nèi)存321中的位置323-327,這些位置包含一密碼控制字符323、一初始密碼密鑰324或一密鑰目錄324、一初始化向量325(如果需要的話),供運(yùn)算的輸入文字326和輸出文字327。在執(zhí)行密碼指令322之前需初始化寄存器308-312,因?yàn)槊艽a指令322需指示寄存器308-312與一附加寄存器313,所以在執(zhí)行密碼指令322之前需初始化寄存器308-312,而附加寄存器313包含一區(qū)塊計(jì)數(shù),其為在輸入文字326中一些被加密或解密的數(shù)據(jù)區(qū)塊。這樣,轉(zhuǎn)譯邏輯電路303從獲取邏輯電路302獲取到密碼指令,及將其轉(zhuǎn)譯至一相對(duì)應(yīng)于微指令序列,以指示微處理器301執(zhí)行指定的密碼運(yùn)算。運(yùn)算一在相對(duì)應(yīng)于微指令電路系列的第一多的微指令電路305-306,特別指示密碼單元316加載由加載邏輯電路314提供的數(shù)據(jù),即開始執(zhí)行已指定密碼輪的數(shù)量,以產(chǎn)生一相對(duì)應(yīng)的輸出數(shù)據(jù)區(qū)塊,及提供相對(duì)應(yīng)的輸出數(shù)據(jù)區(qū)塊至儲(chǔ)存邏輯電路317,經(jīng)由數(shù)據(jù)高速緩存315將其儲(chǔ)存在內(nèi)存321的輸出文字327。在相對(duì)應(yīng)于微指令的序列內(nèi),一第二多微指令(未繪示)指示在微處理器301內(nèi)的其它執(zhí)行單元,執(zhí)行其它必須的運(yùn)算,以完成指定的密碼運(yùn)算,例如管理無架構(gòu)寄存器(未繪示),其包含暫時(shí)結(jié)果及計(jì)數(shù)器,更新輸入及輸出指示器寄存器311-312,及在一輸入文字326的加密/解密后,更新初始向量指針寄存器310(如果需要的話),處理中斷擱置等等。在一實(shí)施例中,寄存器308-313為結(jié)構(gòu)性寄存器。一結(jié)構(gòu)性寄存器308-313定義為在用于特殊微處理器之指令集架構(gòu)(instruction set architecture,ISA)內(nèi)的一寄存器。
運(yùn)算在一個(gè)實(shí)施例中,密碼單元316被分為數(shù)個(gè)階段,借此允許管線化連續(xù)輸入文字326。
圖3的方框圖300提供本發(fā)明的必要組件,也因此,在微處理器301內(nèi)的多數(shù)邏輯電路,為了清楚明了,因而于方框圖300省略。然而一本領(lǐng)域技術(shù)人員將會(huì)理解,微處理器301依據(jù)特定實(shí)施,包含許多階段及邏輯組件,為了清楚明了,將其聚集起來。例如,加載邏輯電路314可以實(shí)施一地址產(chǎn)生階段,緊接著一高速緩存接口階段,接著一高速緩存線對(duì)準(zhǔn)階段。然而重要的是,依據(jù)本發(fā)明,在多個(gè)輸入文字326上的一完整的密碼運(yùn)算,依據(jù)本發(fā)明被指示經(jīng)由一單一密碼指令322,其密碼指令電路的密碼運(yùn)算只考慮到操作系統(tǒng)320,及其密碼指令電路的執(zhí)行經(jīng)由一專屬的密碼單元316,在微處理器301內(nèi)平行運(yùn)算完成。本發(fā)明專注的焦點(diǎn)密碼單元316的另一實(shí)施例,類似于幾年年前,在一微處理器中專屬浮點(diǎn)單元硬件的實(shí)施組態(tài)。密碼單元316及相關(guān)的密碼指令322的運(yùn)算,完全與同時(shí)的舊有操作系統(tǒng)320和應(yīng)用兼容,將在以下做更詳細(xì)的說明。
現(xiàn)在參照?qǐng)D4,一示意圖顯示一依據(jù)本發(fā)明的微密碼指令400的實(shí)施例。微密碼指令400包含一可選擇性前置字段401,其后緊接著一重復(fù)前置字段402,之后又接著一運(yùn)算碼字段403,而后緊接著一區(qū)塊密碼模式字段404。在一實(shí)施例中,這些字段401-404的內(nèi)容與x86指令集架構(gòu)相符合。其它的實(shí)施例普遍與其它指令集架構(gòu)兼容。
運(yùn)算上,可選擇性前置字段401是用在許多指令集架構(gòu),以致能或不致能一主微處理器某些處理特性裝置,例如指示16-位或32-位運(yùn)算,指示處理或存取特定存儲(chǔ)片段等等。重復(fù)前置字段402指示由微密碼指令電路400指定的密碼運(yùn)算在多個(gè)輸入數(shù)據(jù)區(qū)塊上完成(亦即明文或密文)。重復(fù)前置字段402亦暗指一適合的微處理器,以使用多個(gè)架構(gòu)性寄存器的內(nèi)容,作為一在系統(tǒng)內(nèi)存內(nèi)位置的指針,系統(tǒng)內(nèi)存包含特定密碼運(yùn)算的數(shù)據(jù)及參數(shù)。如上所述,在一x86相容的實(shí)施例中,重復(fù)前置字段402的數(shù)值為0xF3。而且,根據(jù)x86的結(jié)構(gòu)協(xié)議,密碼指令與REP.MOVS之類的x86重復(fù)串指令相當(dāng)類似。舉例而言,當(dāng)執(zhí)行本發(fā)明的與x86兼容的微處理器實(shí)施例時(shí),重復(fù)前置字段指令指示儲(chǔ)存在結(jié)構(gòu)寄存器ECX中的區(qū)塊計(jì)算變量、儲(chǔ)存在寄存器ESI中的來源地址指針(指出密碼運(yùn)算所用的輸入數(shù)據(jù))以及儲(chǔ)存在寄存器EDI中的目的地址指針(在內(nèi)存中指出輸出數(shù)據(jù)區(qū)域)。在x86相容的實(shí)施例中,本發(fā)明使公知重復(fù)串指令內(nèi)容,更參照儲(chǔ)存在寄存器EDX中的控制字符指針、儲(chǔ)存在寄存器EBX中的密碼密鑰指針、以及儲(chǔ)存在寄存器EAX中的初始化向量的指針(若指定的芯片模式需要的話)。運(yùn)算碼字段403指定微處理器完成密碼運(yùn)算,其更指定于儲(chǔ)存在內(nèi)存中的控制字符內(nèi),此內(nèi)存通過控制字符指針指示。本發(fā)明計(jì)算出運(yùn)算碼字段403的較佳選擇值以作為現(xiàn)存指令集架構(gòu)內(nèi)備用或未用運(yùn)算碼之一,以便保留舊有操作系統(tǒng)以及應(yīng)用軟件符合的微處理器的一致性。舉例而言,如前所述,運(yùn)算碼字段403施行數(shù)值0x0FA7,以指示執(zhí)行具體說明的密碼運(yùn)算。區(qū)塊密碼模式字段404指定特殊區(qū)塊密碼模式,以在具體說明密碼運(yùn)算期間執(zhí)行,如圖5所示。
圖5繪示了一表500,此表500繪示了根據(jù)圖4的電子結(jié)構(gòu)的示范性區(qū)塊密碼模式字段的數(shù)值。數(shù)值0xC8指定密碼運(yùn)算可借助使用電子密碼本(electronic code book,ECB)信息模式而完成。數(shù)值0xD0指定密碼運(yùn)算可使用密碼塊鏈(cipher block chaining,密碼塊鏈)而完成。數(shù)值0xE0指定密碼運(yùn)算可使用密碼反饋模式(cipher feedback,CFB)而完成。數(shù)值0xE8指定密碼運(yùn)算可使用輸出反饋模式(output feedback,OFB)而完成。區(qū)塊密碼模式字段404的所有其它值會(huì)被保留。這些模式在前述的FIPS文字中有所描述。
接著,圖6繪示了一方框圖,此方框圖描述了根據(jù)本發(fā)明的x86-兼容微處理器600中的密碼單元617。微處理器600包含獲取邏輯電路601,獲取邏輯電路601自內(nèi)存(未繪示)取得用以執(zhí)行的結(jié)構(gòu)。獲取邏輯電路601連接至轉(zhuǎn)譯邏輯電路602。轉(zhuǎn)譯邏輯電路602包含邏輯電路、組件或是微碼(換言之,微結(jié)構(gòu)或是本體結(jié)構(gòu))或者邏輯電路、組件、或微碼的組合,或者使用轉(zhuǎn)譯結(jié)構(gòu)至微結(jié)構(gòu)的相關(guān)順序的等效組件。在轉(zhuǎn)譯邏輯電路602中執(zhí)行轉(zhuǎn)譯的組件可與其它電路、微碼等所共享,這些電路、微碼用以在微處理器600中執(zhí)行其它功能。轉(zhuǎn)譯邏輯電路602包含轉(zhuǎn)譯器603、連接至微碼只讀存儲(chǔ)器604的轉(zhuǎn)譯器603、以及連接至轉(zhuǎn)譯器603和微碼只讀存儲(chǔ)器604的密碼區(qū)塊串行區(qū)塊指針邏輯電路640。中斷邏輯電路626通過總線628連接至轉(zhuǎn)譯邏輯電路602。多數(shù)軟件及硬件中斷信號(hào)627借助中斷邏輯電路626而處理,中斷邏輯電路626指示將中斷傳送至轉(zhuǎn)譯邏輯電路602。轉(zhuǎn)譯邏輯電路602連接至微處理器600的連續(xù)階段,此微處理器600包含一寄存器階段605、尋址階段606、加載階段607、執(zhí)行階段608、儲(chǔ)存階段618以及寫回階段619。連續(xù)階段中的每一個(gè)包含完成特定功能的邏輯電路,這些特定功能與執(zhí)行獲取邏輯電路601提供的指令有關(guān),且這些結(jié)構(gòu)在圖3的微處理器中以類似的名稱描述。圖6所描述的x86兼容實(shí)施例的特色為在執(zhí)行階段608中的執(zhí)行邏輯電路632,執(zhí)行階段608包含平行執(zhí)行單元610、612、614、616、617。一整數(shù)單元610自微指令隊(duì)列609接收整數(shù)微指令電路以執(zhí)行。一浮點(diǎn)單元612自微指令隊(duì)列611接收浮點(diǎn)微指令電路以執(zhí)行。一多媒體延伸集單元614自微指令隊(duì)列614接收多媒體延伸集微指令以執(zhí)行。一串流延伸集單元616自微指令隊(duì)列615接收串流延伸集微指令以執(zhí)行。在示范性x86實(shí)施例中,密碼單元617通過加載總線620、延遲信號(hào)621以及儲(chǔ)存總線622連接至串流延伸集單元616。密碼單元617分享了串流延伸集單元的微指令隊(duì)列615。在另一替代性實(shí)施例中,以類似于單元610、612和614的方式執(zhí)行密碼單元617的獨(dú)立平行運(yùn)算。整數(shù)單元610連接至x86標(biāo)志(EFLAGS)寄存器624。標(biāo)志寄存器包含X位625,其用以指示密碼運(yùn)算是否在處理中。在一實(shí)施例中,X位625為排在x86標(biāo)志寄存器624的第30個(gè)位。此外,整數(shù)單元610接收機(jī)械特定寄存器628以鑒定E位629的狀態(tài)。E位629的狀態(tài)指示密碼單元617是否在微處理器600中呈現(xiàn)。整數(shù)單元在特性控制寄存器630中接收一D位631,以使密碼單元617致能或非致能。如圖3所示的微處理器實(shí)施例301,圖6的微處理器600特別描述了一些組件以清楚的表現(xiàn)x86-兼容實(shí)施例的來龍去脈并清楚的聚集或刪除微處理器的其它組件。本領(lǐng)域技術(shù)人員可輕易知曉完成接口所需要的其它組件如數(shù)據(jù)高速緩存(未繪示)、總線接口單元(未繪示)、頻率產(chǎn)生以及分配邏輯電路(未繪示)等等。
運(yùn)算中,借助獲取邏輯電路601,從內(nèi)存(未繪示)取得指令電路并同步于頻率信號(hào)(未繪示)提供指令給轉(zhuǎn)譯邏輯電路602。轉(zhuǎn)譯邏輯電路602轉(zhuǎn)譯每一指令電路至微指令電路的對(duì)應(yīng)隊(duì)列,這些微指令隊(duì)列同步于一頻率信號(hào),連續(xù)地被提供給微處理器的隨后階段605-608、618和619。微指令序列中的每一微指令電路指示子運(yùn)算的執(zhí)行,此子運(yùn)算需完成全面運(yùn)算,且此全面運(yùn)算借助對(duì)應(yīng)指令電路而指定,這些對(duì)應(yīng)指令可如底下的指令電路借助尋址階段606的地址的產(chǎn)生;整數(shù)單元610中的兩相加運(yùn)算碼,此整數(shù)單元610從寄存器階段605中的指定寄存器(未繪示)而獲得;儲(chǔ)存執(zhí)行單元610、612、614、616、617之一所產(chǎn)生的結(jié)果,此儲(chǔ)存借助儲(chǔ)存階段618所執(zhí)行。根據(jù)被轉(zhuǎn)譯的指令,轉(zhuǎn)譯邏輯電路602將使轉(zhuǎn)譯器603直接產(chǎn)生微指令序列,或者獲得來自微碼只讀存儲(chǔ)器604的序列,或者使轉(zhuǎn)譯器603直接產(chǎn)生序列的一部份并獲得來自微碼只讀存儲(chǔ)器604的現(xiàn)存序列部份。微指令與頻率信號(hào)同步通過隨后階段605-608、618和619而相繼進(jìn)行。在微指令到達(dá)執(zhí)行階段608時(shí),他們與其運(yùn)算碼以及被指定的執(zhí)行單元610、612、614、616、617(在寄存器階段605中自寄存器取得,或者被地址階段606中的邏輯電路所產(chǎn)生,或者借助加載階段607自數(shù)據(jù)高速緩存所取得)一起被執(zhí)行邏輯電路632所安排執(zhí)行,借助被相對(duì)應(yīng)的微指令隊(duì)列609、611、613、615替換微指令而達(dá)成。執(zhí)行單元610、612、614、616、617執(zhí)行微指令并提供結(jié)果給儲(chǔ)存階段618。在一實(shí)施例中,微指令包含指示其是否與其它運(yùn)算平行執(zhí)行的字段。反應(yīng)于前述的取得密碼指令,轉(zhuǎn)譯邏輯電路602產(chǎn)生相關(guān)的微指令,這些微指令在微處理器600的隨后階段605-608、618、619中指出邏輯電路,以施行指定的密碼運(yùn)算。運(yùn)算第一多數(shù)相關(guān)微指令被傳送至密碼單元617并指示密碼單元617加載由加載總線620所提供的數(shù)據(jù),或者加載一區(qū)塊的輸入數(shù)據(jù)并開始執(zhí)行預(yù)定數(shù)量的加密循環(huán),以產(chǎn)生一區(qū)塊的輸出數(shù)據(jù),或者通過儲(chǔ)存總線622,以提供輸出數(shù)據(jù)的產(chǎn)生區(qū)塊,并借助儲(chǔ)存階段618而儲(chǔ)存在內(nèi)存中。第二多數(shù)相關(guān)微指令被傳送至其它執(zhí)行單元610、612、614、616以執(zhí)行其它子運(yùn)算,這些子運(yùn)算需完成預(yù)定密碼運(yùn)算,這些預(yù)定密碼運(yùn)算可為測(cè)試E位629,致能D位631、設(shè)定X位625以指出密碼運(yùn)算是否在執(zhí)行、更新寄存器605中的寄存器(也就是計(jì)算寄存器、輸入文字指針寄存器、輸出文字指針寄存器),處理被中斷邏輯電路626所指示的中斷627。通過交錯(cuò)密碼單元微指令序列中的整數(shù)單元微指令,相關(guān)微指令被提供作為多重輸入數(shù)據(jù)區(qū)塊上特定密碼運(yùn)算之執(zhí)行,以使整數(shù)運(yùn)算能夠和密碼單元運(yùn)算并行完成。微指令包含在相關(guān)的微指令中以允許響應(yīng)中斷627和從中斷627返回。由于所有密碼參數(shù)和數(shù)據(jù)的指針都存放在x86的結(jié)構(gòu)寄存器中,當(dāng)處理中斷時(shí)他們的狀態(tài)將會(huì)被保存,而且等狀態(tài)在從中斷返回時(shí)恢復(fù)。因此,當(dāng)有中斷發(fā)生時(shí),程控將跳轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序。作為程控跳轉(zhuǎn)的一部分,X位625將被清掉,以表示密鑰數(shù)據(jù)和控制字符數(shù)據(jù)不再有效。當(dāng)從中斷返回時(shí),程控被轉(zhuǎn)回到密碼指令,并作為其相關(guān)微指令的一部分,特殊的微指令將測(cè)試X位625的狀態(tài)以決定密鑰數(shù)據(jù)和控制字符數(shù)據(jù)是否有效。如果有效,程序?qū)?duì)在中斷發(fā)生之前的特定輸入數(shù)據(jù)區(qū)塊繼續(xù)進(jìn)行處理,如果X位625的狀態(tài)表明密鑰數(shù)據(jù)和控制字符數(shù)據(jù)不再有效,將會(huì)重新到內(nèi)存,并讀取中斷發(fā)生時(shí)正在處理特定輸入數(shù)據(jù)區(qū)塊的密鑰和控制字符。總之,根據(jù)本發(fā)明,執(zhí)行一密碼指令總是包含X位625的初始測(cè)試以決定在密碼單元617中密鑰數(shù)據(jù)和控制字符數(shù)據(jù)的有效性。如果密鑰數(shù)據(jù)和控制字符數(shù)據(jù)無效,即可從內(nèi)存讀取密鑰數(shù)據(jù)和控制字符數(shù)據(jù)。然后由輸入指針寄存器指向的輸入數(shù)據(jù)區(qū)塊乃被加載,而且指定密碼運(yùn)算系在輸入數(shù)據(jù)區(qū)塊上執(zhí)行。另外,輸入數(shù)據(jù)區(qū)塊的加載和指定密碼運(yùn)算的執(zhí)行并不需要先加載密鑰數(shù)據(jù)和控制字符數(shù)據(jù)。
如果有了一個(gè)新的密鑰和控制字符,那么在執(zhí)行新的密碼指令之前必須清掉該X位625。使用相同密鑰數(shù)據(jù)和控制字?jǐn)?shù)據(jù)的連續(xù)密碼指令也能夠被執(zhí)行。在這種情況下,無需在初始化密鑰數(shù)據(jù)和控制字?jǐn)?shù)據(jù)被輸入后清掉X位625。例如,為了提高內(nèi)存總線的速度,用戶可以將500個(gè)輸入數(shù)據(jù)區(qū)塊的加密/解密分成5個(gè)密碼指令,其每個(gè)指令可處理100個(gè)輸入數(shù)據(jù)區(qū)塊。
利用密碼區(qū)塊串行模式,密碼區(qū)塊串行區(qū)塊指針邏輯電路640將完成密碼運(yùn)算。密碼區(qū)塊串行區(qū)塊指針邏輯電路640確保相關(guān)的微指令工作正常并允許指針寄存器和在系列輸入文字區(qū)塊上的區(qū)塊密碼運(yùn)算序列的中間結(jié)果在處理中斷627之前能夠被更新。密碼區(qū)塊串行區(qū)塊指針邏輯電路640指示插入到微指令流中的微指令電路,這樣在執(zhí)行第一區(qū)塊輸入數(shù)據(jù)的密碼運(yùn)算時(shí),在內(nèi)存中的輸入及輸出數(shù)據(jù)區(qū)塊指針乃被更改指向下一輸入及輸出數(shù)據(jù)區(qū)塊。另外,密碼區(qū)塊串行區(qū)塊指針邏輯電路640指示插入到相應(yīng)的微指令流中的微指令,使更改區(qū)塊計(jì)數(shù)器以表明當(dāng)前輸入數(shù)據(jù)區(qū)塊上的密碼運(yùn)算已經(jīng)完成。一個(gè)本領(lǐng)域技術(shù)人員了解在密碼區(qū)塊串行模式下的加密運(yùn)算使用一個(gè)初始化向量,其被一第一明文區(qū)塊使用以產(chǎn)生一第一密文區(qū)塊。為了生成一第二密文區(qū)塊,第一密文區(qū)塊將被作為第二明文區(qū)塊的等量初始化向量,依次延續(xù)。因此密碼區(qū)塊串行區(qū)塊指針邏輯電路640識(shí)別密碼區(qū)塊串行模式加密并提供一序列微指令以更新該結(jié)構(gòu)寄存器的指針,進(jìn)而確保第一明文區(qū)塊后的區(qū)塊,以使用合適的密文區(qū)塊作為其等量初始化向量。
對(duì)于密碼區(qū)塊串行模式解密,一個(gè)本領(lǐng)域技術(shù)人員了解使用一個(gè)初始化向量和一第一密文區(qū)塊,以產(chǎn)生一第一明文區(qū)塊。為了生成下一個(gè)明文區(qū)塊,第一密文區(qū)塊將被作為該第二密文區(qū)塊的等量初始化向量,依次延續(xù)。因此該密碼區(qū)塊串行區(qū)塊指針邏輯電路640識(shí)別密碼區(qū)塊串行模式解密并提供一序列微指令,當(dāng)相應(yīng)的明文區(qū)塊產(chǎn)生時(shí),暫時(shí)儲(chǔ)存每一密文區(qū)塊,并將暫時(shí)儲(chǔ)存的密文區(qū)塊寫回到初始化向量指針寄存器指向的內(nèi)存區(qū),使得下一個(gè)明文區(qū)塊產(chǎn)生時(shí)得以作為一等量初始化向量。
現(xiàn)在參照?qǐng)D7,圖表舉例說明了一在圖6的微處理器內(nèi)執(zhí)行密碼子運(yùn)算的典型微指令700的結(jié)構(gòu)。微指令700包括一個(gè)微運(yùn)算碼字段701,一個(gè)數(shù)據(jù)寄存器字段702和一個(gè)寄存器字段703。微運(yùn)算碼字段701表明了一個(gè)要被執(zhí)行的特定子運(yùn)算,并且表明了微處理器600執(zhí)行子運(yùn)算的至少一個(gè)階段的邏輯電路。微運(yùn)算碼字段701的特殊值表明指定的微指令通過依據(jù)本發(fā)明的密碼單元來執(zhí)行。在一個(gè)實(shí)施例中,有兩種特殊值。一第一值加載(XLOAD)表明要從內(nèi)存位置獲取數(shù)據(jù),內(nèi)存地址是由數(shù)據(jù)寄存器字段702所表示的結(jié)構(gòu)寄存器的內(nèi)容指定。數(shù)據(jù)將被加載到密碼單元的寄存器中,而寄存器則由寄存器字段703所指定。獲取到的數(shù)據(jù)(例如密碼密鑰數(shù)據(jù)、控制字符、輸入文字?jǐn)?shù)據(jù)、初始化向量)提供給密碼單元。微運(yùn)算碼字段701的一第二值儲(chǔ)存(XSTOR)表明由密碼單元所產(chǎn)生的數(shù)據(jù)將要被儲(chǔ)存到一內(nèi)存位置,其地址由數(shù)據(jù)寄存器字段702所表示的結(jié)構(gòu)寄存器指定。在一個(gè)多階段密碼單元的實(shí)施例中,寄存器字段703指示數(shù)組輸出數(shù)據(jù)區(qū)塊中的一組,用以儲(chǔ)存在內(nèi)存中。輸出數(shù)據(jù)區(qū)塊由密碼單元在數(shù)據(jù)域位704中提供給儲(chǔ)存邏輯電路存取。依據(jù)本發(fā)明,有關(guān)密碼單元執(zhí)行加載和儲(chǔ)存微指令的更詳細(xì)描述將在圖8和圖9中討論。
來看圖8,表800描述了根據(jù)圖7的格式700,一條加載微指令的寄存器字段703的值。如前面的討論,轉(zhuǎn)譯一密碼指令將引起產(chǎn)生一個(gè)微指令序列。微指令序列包含一執(zhí)行密碼單元的第一組微指令和一組被該微處理器內(nèi)密碼單元以外的其它并行功能單元執(zhí)行的第二組微指令。第二組微指令完成,諸如更新計(jì)數(shù)器、暫時(shí)寄存器、結(jié)構(gòu)寄存器、測(cè)試和設(shè)置在機(jī)器特殊寄存器上的狀態(tài)位等子運(yùn)算。第一組指令提供密鑰、密碼參數(shù)、及輸入數(shù)據(jù)到密碼單元并指示密碼單元使生成密鑰目錄(或加載從內(nèi)存所獲取的密鑰目錄),加載并加密(或解密)輸入文字?jǐn)?shù)據(jù),及儲(chǔ)存輸出文字?jǐn)?shù)據(jù)。一加載微指令為密碼單元提供加載控制字符數(shù)據(jù),加載密碼密鑰或密鑰目錄,加載初始化向量數(shù)據(jù),加載輸入文字?jǐn)?shù)據(jù),及加載輸入文字?jǐn)?shù)據(jù)并驅(qū)動(dòng)密碼單元執(zhí)行指定的密碼運(yùn)算。在一加載微指令寄存器字段703中的數(shù)值0b010,指定密碼單元加載一控制字符到自身內(nèi)部控制字符寄存器中。由于這個(gè)指令是在管在線執(zhí)行,寄存器階段的結(jié)構(gòu)控制字符指針寄存器乃被存取,以取得存放了控制字符在內(nèi)存中的地址。尋址邏輯電路將地址轉(zhuǎn)譯成為實(shí)體地址,以供內(nèi)存存取。加載邏輯電路從高速緩存獲取控制字符,并將控制字符放置到數(shù)據(jù)域位704,此時(shí)控制字符已經(jīng)傳送到密碼單元。同樣的,寄存器字段數(shù)值0b100指示密碼單元,以加載在數(shù)據(jù)域位704所提供的輸入文字?jǐn)?shù)據(jù),及隨后的加載、執(zhí)行指定的密碼運(yùn)算。同控制字符一樣,輸入數(shù)據(jù)通過一儲(chǔ)存在結(jié)構(gòu)寄存器里的指針被存取。數(shù)值0b101表示數(shù)據(jù)域位704所提供的輸入數(shù)據(jù)將被加載到內(nèi)部寄存器1輸入-1。加載到輸入-1寄存器的數(shù)據(jù)可以是輸入文字?jǐn)?shù)據(jù)(當(dāng)管線化時(shí)),也可以是一初始化向量。數(shù)值0b110和0b111表示密碼單元分別加載一個(gè)密碼密鑰或是在使用者產(chǎn)生密鑰目錄中一個(gè)密鑰的低位和高位。依據(jù)本發(fā)明,使用者是指完成一個(gè)指定功能或指定運(yùn)算,使用者可以是一應(yīng)用程序、一操作系統(tǒng)、一機(jī)器,或一個(gè)人。因此,在一個(gè)實(shí)施例中,使用者產(chǎn)生密鑰目錄可由應(yīng)用程序建立。在一可選的實(shí)施例中,使用者產(chǎn)生密鑰目錄可由人所建立。
在一個(gè)實(shí)施例中,寄存器字段的數(shù)值0b100和0b101將一個(gè)密碼單元分為兩個(gè)階段,連續(xù)的輸入文字?jǐn)?shù)據(jù)區(qū)塊能被管線化。因此,為了使兩個(gè)連續(xù)的輸入數(shù)據(jù)區(qū)塊進(jìn)行管線化,一第一加載微指令執(zhí)行給輸入-1提供了一第一輸入文字?jǐn)?shù)據(jù)區(qū)塊,隨后執(zhí)行一第二加載微指令給輸入-0提供一第二輸入文字?jǐn)?shù)據(jù)區(qū)塊,同時(shí)指示密碼單元開始執(zhí)行指定的密碼運(yùn)算。
如果一使用者產(chǎn)生密鑰目錄被用來執(zhí)行密碼運(yùn)算,那么和使用者產(chǎn)生密鑰目錄的密鑰數(shù)量相對(duì)應(yīng)的多數(shù)加載微指令將被發(fā)送到密碼單元,其用以加載在密鑰目錄中的每一輪密鑰。
加載微指令的寄存器字段703的所有其它值予以保留。
參照?qǐng)D9,表900繪示根據(jù)圖7的格式700一儲(chǔ)存微指令的寄存器字段703的數(shù)值。儲(chǔ)存微指令指示密碼單元產(chǎn)生(即加密或解密)的輸出文字?jǐn)?shù)據(jù)提供給儲(chǔ)存邏輯電路,將其儲(chǔ)存在尋址字段702指定的內(nèi)存地址。因此,根據(jù)本發(fā)明,轉(zhuǎn)譯邏輯電路在為其相關(guān)輸入文字區(qū)塊發(fā)送一條加載微指令后,為特定的輸出文字區(qū)塊發(fā)送一個(gè)儲(chǔ)存微指令。寄存器字段703的數(shù)值0b100指示密碼單元聯(lián)合其內(nèi)部輸出-0輸出-0寄存器將輸出文字區(qū)塊提供給儲(chǔ)存邏輯電路儲(chǔ)存。輸出-0的內(nèi)容和提供到輸入-0的輸入文字區(qū)塊有關(guān)。同樣,參照寄存器字段數(shù)值0b101,內(nèi)部輸出-1寄存器的內(nèi)容和提供到輸入-1的輸入文字?jǐn)?shù)據(jù)也是關(guān)聯(lián)的。因此,加載密鑰和控制字符數(shù)據(jù)之后,發(fā)送密碼微指令使多個(gè)輸入文字區(qū)塊能通過密碼單元進(jìn)行管線化,這些密碼微指令依序?yàn)橐约虞d.輸入-1、加載.輸入-0(加載.輸入-0也可以指示密碼單元開始執(zhí)行密碼運(yùn)算)、儲(chǔ)存.輸出-1、儲(chǔ)存.輸出-0、加載.輸入-1、加載.輸入-0(開始對(duì)下面兩個(gè)輸入文字區(qū)塊進(jìn)行運(yùn)算)等等?,F(xiàn)在來看圖10,依據(jù)本發(fā)明,圖表著重描述一個(gè)控制字符格式1000,控制字符指定密碼運(yùn)算的密碼參數(shù)。控制字符1000是由使用者程序化到內(nèi)存,而在執(zhí)行密碼運(yùn)算之前,其指針由一適合微處理器的結(jié)構(gòu)寄存器所提供。因此,作為密碼指令相關(guān)的微指令序列的一部分,一加載微指令指示微處理器讀取包含有指針的結(jié)構(gòu)寄存器,將指針轉(zhuǎn)換為一個(gè)實(shí)體地址,從內(nèi)存(高速緩存)讀取控制字符1000并將控制字符1000加載到密碼單元的內(nèi)部控制字符寄存器中。控制字符1000包括一個(gè)保留字段(RSVD)1001,一個(gè)密鑰大小字段(KSIZE)1002,一個(gè)加密/解密字段(E/D)1003,一個(gè)中間結(jié)果字段(IRSLT)1004,一個(gè)密鑰產(chǎn)生字段(KGEN)1005,一個(gè)算法字段(ALG)1006和一個(gè)輪計(jì)數(shù)字段(RCNT)1007。
保留字段1001的所有值都被保留。密鑰大小字段1002的內(nèi)容指定用來完成加密或解密的密碼密鑰大小。在一個(gè)實(shí)施例中,密鑰大小字段或者是一128位密鑰,或者是一192位密鑰,或者是一256位密鑰。加密/解密字段1003指定密碼運(yùn)算是加密運(yùn)算還是解密運(yùn)算。密鑰產(chǎn)生字段1005表明內(nèi)存內(nèi)提供的是一使用者產(chǎn)生密鑰目錄還是一單一的密碼密鑰,如果是一單一密碼密鑰的話,微指令將和密碼密鑰一起發(fā)送到密碼單元,使根據(jù)算法字段1006指定的密碼算法,指示單元將密鑰擴(kuò)展為密鑰目錄。在一個(gè)實(shí)施例中,算法字段1006指定的算法為目前所討論過的數(shù)據(jù)加密標(biāo)準(zhǔn)算法,三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn)算法或是進(jìn)階加密標(biāo)準(zhǔn)算法??商娲膶?shí)施例包含其它的算法,諸如Rijndael密碼算法,Twofish密碼算法等。輪計(jì)數(shù)字段1007的內(nèi)容依據(jù)給定算法完成每一輸入文字區(qū)塊所給定的密碼輪數(shù)。雖然以上的密碼算法標(biāo)準(zhǔn)指定了每一輸入文字區(qū)塊的固定密碼輪數(shù),但是提供輪計(jì)數(shù)字段1007允許程序員更改該標(biāo)準(zhǔn)所指定的輪數(shù)。在一個(gè)實(shí)施例中,程序員可以對(duì)每個(gè)區(qū)塊指定0到15輪。最后,中間結(jié)果字段1004的內(nèi)容指定一個(gè)輸入文字區(qū)塊的加密/解密是否根據(jù)算法字段1006指定的密碼算法標(biāo)準(zhǔn),以輪計(jì)數(shù)字段1007所指定的輪數(shù)執(zhí)行者,或者加密/解密是否根據(jù)算法字段1006指定的算法,以輪計(jì)數(shù)字段1007指定的輪數(shù)執(zhí)行,而最后一輪執(zhí)行結(jié)果是一個(gè)中間值而不是最終結(jié)果。一個(gè)本領(lǐng)域技術(shù)人員將希望在每一輪中,許多密碼算法都執(zhí)行相同的子運(yùn)算,除了最后一輪的執(zhí)行以外。因此,對(duì)中間結(jié)果字段1004編程以提供中間結(jié)果而不是最后結(jié)果,可允許程序員更改施行運(yùn)算法的中間步驟。例如,可以通過在一個(gè)文字區(qū)塊上執(zhí)行一輪加密,然后在相同文字區(qū)塊上執(zhí)行兩輪,然后3輪等,以獲得累加的中間結(jié)果以驗(yàn)證算法的性能。提供可編程輪計(jì)數(shù)和中間結(jié)果的功能讓使用者能夠驗(yàn)證密碼編碼性能,檢測(cè)故障,并探究不同密鑰結(jié)構(gòu)和輪計(jì)數(shù)的效用。
參照?qǐng)D11,方框圖詳細(xì)描述依據(jù)本發(fā)明的密碼單元1100。密碼單元1100包括一個(gè)通過微指令總線1114接收密碼微指令(即加載和儲(chǔ)存微指令)的微指令寄存器1103。密碼單元1100也具有一控制字符寄存器1104、一輸入-0寄存器1105、及一輸入-1寄存器1106、一密鑰-0寄存器1107,一密鑰-1寄存器1108。數(shù)據(jù)通過一加載總線1111提供給寄存器1104-1108,如同在微指令寄存器1103里的加載微指令內(nèi)容所指定。密碼單元1100也包括連接到所有寄存器1103-1108和密鑰隨機(jī)存取內(nèi)存(cryptographic key RAM)1102的區(qū)塊密碼邏輯電路1101。區(qū)塊密碼邏輯電路提供一個(gè)延遲信號(hào)1113,并將區(qū)塊結(jié)果提供到一輸出-0寄存器1109和一輸出-1寄存器1110。輸出寄存器1109-1110通過一儲(chǔ)存總線1112發(fā)送他們的內(nèi)容到一適合微處理器的相繼階段中。在一個(gè)實(shí)施例中,微指令寄存器1103為32位,而其它寄存器1104-1110則皆為128位。
在運(yùn)算中,密碼微指令順序地傳送給微指令寄存器1103,同時(shí)控制字符寄存器1104或輸入寄存器1105-1106中的一個(gè),或密鑰寄存器1107-1108中的一個(gè)所指定數(shù)據(jù)也被發(fā)送。在參照?qǐng)D8和圖9所討論的實(shí)施例中,一控制字符首先通過一加載微指令加載到控制字符寄存器1104中。然后通過后續(xù)加載微指令加載密碼密鑰或密鑰目錄。如果一個(gè)128位的密碼密鑰被裝入,一加載微指令即可提供給指定寄存器密鑰-01107。如果大于128位的密碼密鑰被加載,那么一加載微指令除了提供給指定寄存器密鑰-01107外,亦同時(shí)提供寄存器密鑰-11108所指定的一加載微指令。如果使用者產(chǎn)生密鑰目錄被加載,則寄存器密鑰-01107所指定的后續(xù)加載微指令將被提供。密鑰目錄里所加載的每個(gè)密鑰依次地儲(chǔ)存在密鑰隨機(jī)存取內(nèi)存1102中在他們相應(yīng)的密碼輪中使用。繼這之后,輸入文字?jǐn)?shù)據(jù)(如果不需要初始化向量)將被加載到輸入-1寄存器1106。如果需要初始化向量,它將通過一條加載微指令被裝載到輸入-1寄存器1106。作用于輸入-0寄存器1105的加載微指令指示密碼單元,使加載輸入文字?jǐn)?shù)據(jù)到輸入-0寄存器1105,并開始根據(jù)由控制字符寄存器1104提供的參數(shù),使用輸入-1的初始化向量或兩個(gè)輸入寄存器1105-1106(如果輸入數(shù)據(jù)管線化)以執(zhí)行寄存器輸入-01105輸入文字?jǐn)?shù)據(jù)的密碼輪。在收到輸入-01105所指定的加載微指令之后,區(qū)塊密碼邏輯電路通過控制字符的內(nèi)容,開始執(zhí)行所指定的密碼運(yùn)算。如果一個(gè)單獨(dú)的密碼密鑰需要被擴(kuò)展,區(qū)塊密碼邏輯電路即在密鑰目錄里生成每個(gè)密鑰,并且把他們儲(chǔ)存在密鑰隨機(jī)存取內(nèi)存1102里。無論區(qū)塊密碼邏輯電路1101產(chǎn)生密鑰目錄或是密鑰目錄從內(nèi)存加載,第一輪密鑰被緩存在該區(qū)塊密碼邏輯電路1101內(nèi),以便該第一個(gè)區(qū)塊密碼輪無需要訪問該密鑰隨機(jī)存取內(nèi)存1102即可執(zhí)行。一旦起動(dòng),區(qū)塊密碼邏輯電路乃在至少一個(gè)輸入文字區(qū)塊繼續(xù)執(zhí)行規(guī)定的密碼運(yùn)算直到完成運(yùn)算,像密碼學(xué)算法所要求的那樣從密鑰隨機(jī)存取內(nèi)存1102中連續(xù)截取輪密鑰。密碼單元1100在指定的輸入文字區(qū)塊上執(zhí)行一個(gè)指定的區(qū)塊密碼運(yùn)算。連續(xù)的輸入文字區(qū)塊即可經(jīng)由相應(yīng)且連續(xù)的加載和儲(chǔ)存微指令執(zhí)行加密或解密。當(dāng)一儲(chǔ)存微指令被執(zhí)行后,如果被指定的輸出數(shù)據(jù)(即輸出-0或輸出-1)還沒完全產(chǎn)生,此時(shí)區(qū)塊密碼邏輯電路乃產(chǎn)生延遲信號(hào)1113。當(dāng)輸出數(shù)據(jù)產(chǎn)生并被置入一相應(yīng)的輸出寄存器1109-1110時(shí),寄存器1109-1110的內(nèi)容即被移轉(zhuǎn)至儲(chǔ)存總線1112。
現(xiàn)在看圖12,一方框圖說明了根據(jù)本發(fā)明使用進(jìn)階加密標(biāo)準(zhǔn)執(zhí)行密碼運(yùn)算的一個(gè)區(qū)塊密碼邏輯電路1200的實(shí)施例。區(qū)塊密碼邏輯電路1200包括通過總線1211-1214和總線1216-1218連接到一輪引擎控制器1210的輪引擎1220。輪引擎控制器1210存取一微指令寄存器1201,控制字符寄存器1202,密鑰-0寄存器1203,以及密鑰-1寄存器1204以存取指示密碼運(yùn)算的密鑰數(shù)據(jù)、微指令和參數(shù)等。輸入寄存器1205-1206的內(nèi)容提供到輪引擎1220及輪引擎1220將相應(yīng)的輸出文字提供到輸出寄存器1207-1208。輸出寄存器1207-1208通過總線1216-1217,連接到輪引擎控制器1210,以確保輪引擎控制器能夠存取每個(gè)連續(xù)密碼輪的結(jié)果,其通過總線NEXTIN 1218為一下一個(gè)密碼輪提供到輪引擎1220。密鑰隨機(jī)存取內(nèi)存(未圖標(biāo))的密鑰,通過總線1215被存取。(ENC/DEC)加密/解密信號(hào)1211指示輪引擎使用子運(yùn)算執(zhí)行加密(例如S-Box)或解密(例如反轉(zhuǎn)S-Box)。輪計(jì)數(shù)(RNDCON)總線1212的內(nèi)容驅(qū)動(dòng)輪引擎1220執(zhí)行一第一進(jìn)階加密標(biāo)準(zhǔn)輪,一中間進(jìn)階加密標(biāo)準(zhǔn)輪或者最后的進(jìn)階加密標(biāo)準(zhǔn)輪。單一產(chǎn)生密鑰(GENKEY)信號(hào)1214用來指示輪引擎1220,以根據(jù)總線1213所提供的密鑰生成一密鑰目錄。當(dāng)它的相應(yīng)輪被執(zhí)行時(shí),密鑰總線1213乃提供給輪引擎1220每一輪的密鑰。
輪引擎1220包括連接到一第一寄存器暫存-0 1222上的第一密鑰XOR邏輯電路1221。第一寄存器1222連接到S-Box邏輯電路1223,而S-Box邏輯電路1223則連接到移列邏輯電路1224上。移列邏輯電路1224連接到一第二寄存器暫存-1 1225處。第二寄存器1225則連接到混欄邏輯電路1226,混欄邏輯電路1226連接到一第三寄存器暫存-2 1227。這些在上面討論的進(jìn)階加密標(biāo)準(zhǔn)FIPS中的第一密鑰邏輯電路1221,S-Box邏輯電路1223,移列邏輯電路1224及混欄邏輯電路1226在輸入文字?jǐn)?shù)據(jù)上執(zhí)行像他們名稱一樣的子運(yùn)算?;鞕谶壿嬰娐?226在中間輪期間需要通過密鑰總線1213,使用輪密鑰在輸入數(shù)據(jù)上執(zhí)行進(jìn)階加密標(biāo)準(zhǔn)XOR功能。第一密鑰邏輯電路1221,S-Box邏輯電路1223,移列邏輯電路1224,及混欄邏輯電路1226也用來在解密期間通過加密/解密狀態(tài)1211,用以執(zhí)行他們相應(yīng)的反向進(jìn)階加密標(biāo)準(zhǔn)子運(yùn)算。一位本領(lǐng)域技術(shù)人員了解根據(jù)由控制字符寄存器1202的內(nèi)容指定的特殊區(qū)塊加密模式,使中間輪數(shù)據(jù)被回授到輪引擎1220。初始化向量數(shù)據(jù)(如果需要)系通過總線NEXTIN 1218提供給輪引擎1220。
在圖12所示的實(shí)施例中,輪引擎被分為兩個(gè)階段暫存-0 1222與暫存-1 1225之間第一階段,而暫存-1 1225與暫存-2 1227則第二階段。中間輪數(shù)據(jù)與頻率信號(hào)(未圖標(biāo))同步在階段間管線化傳送。當(dāng)密碼運(yùn)算在一輸入數(shù)據(jù)區(qū)塊上完成時(shí),相關(guān)輸出數(shù)據(jù)即被存放到相應(yīng)的輸出寄存器1207-1208。一微指令儲(chǔ)存的執(zhí)行使得一指定輸出寄存器1207-1208的內(nèi)容被提供至一儲(chǔ)存總線(未圖標(biāo))。
現(xiàn)在看圖13,一流程圖描述了根據(jù)本發(fā)明在一次中斷事件期間保護(hù)密碼參數(shù)狀態(tài)的方法。根據(jù)本發(fā)明,當(dāng)一微處理器執(zhí)行指令流時(shí),流程在區(qū)塊1302處開始執(zhí)行。指令流程并不是一定要包括一個(gè)此處所描述的密碼指令。隨后,流程處理判斷區(qū)塊1304。
在判斷區(qū)塊1304時(shí),做出評(píng)估以確定是否一次中斷事件(例如,可屏蔽中斷,不可屏蔽中斷,錯(cuò)頁,任務(wù)切換,等等)發(fā)生要求在改變當(dāng)前的指令流(″中斷處理器″)去處理該中斷事件。如果是,流程即執(zhí)行區(qū)塊1306。如果不是,流程在判斷區(qū)塊1034循環(huán),在此指令會(huì)繼續(xù)執(zhí)行直到一次中斷事件發(fā)生。
根據(jù)本發(fā)明,在區(qū)塊1306時(shí),因?yàn)橛幸恢袛嗍录l(fā)生,在將程控交給相應(yīng)的中斷處理器之前,中斷邏輯電路指引清掉標(biāo)志寄存器內(nèi)的X位。清除X位確保,當(dāng)從中斷處理器返回時(shí),如果一區(qū)塊密碼運(yùn)算在進(jìn)行,表明至少一個(gè)中斷事件發(fā)生,并且在由輸入指針寄存器內(nèi)容所指向的輸入數(shù)據(jù)區(qū)塊的區(qū)塊密碼運(yùn)算繼續(xù)之前,控制字符數(shù)據(jù)和密鑰數(shù)據(jù)一定要重新加載。隨后流程進(jìn)入到區(qū)塊1308。
在區(qū)塊1308,根據(jù)本發(fā)明,給所有包含與執(zhí)行區(qū)塊密碼運(yùn)算有關(guān)的指針和計(jì)數(shù)器的結(jié)構(gòu)寄存器儲(chǔ)存到內(nèi)存。本領(lǐng)域技術(shù)人員了解在轉(zhuǎn)交程控到中斷處理器之前,儲(chǔ)存結(jié)構(gòu)寄存器是在當(dāng)前數(shù)據(jù)計(jì)算裝置完成的行為。從而,本發(fā)明利用當(dāng)前數(shù)據(jù)結(jié)構(gòu)的目的在整個(gè)中斷事件期間提供執(zhí)行的透明化。當(dāng)寄存器被儲(chǔ)存后,流程即進(jìn)行到區(qū)塊1310。
在區(qū)塊1310,程序流移轉(zhuǎn)到中斷處理器。隨后流程即進(jìn)行到區(qū)塊1312。
在區(qū)塊1312,完成方法。本領(lǐng)域技術(shù)人員了解,圖13的方法從中斷處理器返回后,再次從區(qū)塊1302開始。
現(xiàn)在參考圖14,流程圖描繪了依據(jù)本發(fā)明在至少一次中斷事件發(fā)生的情況下,在數(shù)個(gè)輸入數(shù)據(jù)區(qū)塊上執(zhí)行一指定密碼區(qū)塊串行模式密碼運(yùn)算的方法。
流程在區(qū)塊1402開始,根據(jù)本發(fā)明,在此一密碼指令指引密碼運(yùn)算,讓密碼運(yùn)算使用密碼區(qū)塊串行模式開始執(zhí)行。密碼的執(zhí)行可以是一第一執(zhí)行,也可以是自一第一執(zhí)行之后,由一中斷事件執(zhí)行中斷的結(jié)果,程控在一中斷處理器已執(zhí)行后,傳回到密碼指令處。流程隨后進(jìn)行到區(qū)塊1404。
在區(qū)塊1404,依據(jù)本發(fā)明,內(nèi)存內(nèi)經(jīng)由一輸入指針寄存器的內(nèi)容所指向的一數(shù)據(jù)區(qū)塊,從內(nèi)存加載并啟動(dòng)一指定的密碼運(yùn)算。特定的輸入指針寄存器是由指定的特殊密碼運(yùn)算(例如,加密或解密)和指定的區(qū)塊密碼模式(例如ECB、密碼區(qū)塊串行、CFB、或OFB)所決定者。例如,如果一加密運(yùn)算使用OFB模式,那么用來加載數(shù)據(jù)的輸入指針寄存器即系指向內(nèi)存中一初始化向量的寄存器。如果一解密運(yùn)算使用ECB模式,那么用來加載數(shù)據(jù)的輸入指針寄存器即指向內(nèi)存中下一密碼區(qū)塊的寄存器。如果指定一密碼區(qū)塊串行模式加密運(yùn)算,指向下一明文區(qū)塊的寄存器將被用作輸入指針寄存器,而由初始化向量指針寄存器指向的數(shù)據(jù)區(qū)塊,又被用來生成相應(yīng)的密文區(qū)塊。如果指定一密碼區(qū)塊串行模式解密運(yùn)算,指向下一密文區(qū)塊的寄存器將被用作輸入指針寄存器,而由初始化向量指針寄存器指向的數(shù)據(jù)區(qū)塊又被用來生成相應(yīng)的明文區(qū)塊。流程隨后進(jìn)行到判斷區(qū)塊1406。
在判斷區(qū)塊1406,一評(píng)估被用來決定是否在一標(biāo)志寄存器中設(shè)置X位。如果X位被設(shè)置,即表明目前依據(jù)本發(fā)明加載到一密碼單元的控制字符和密鑰目錄是有效的。如果清除X位,即表明目前加載到密碼單元的控制字符和密鑰目錄無效的。如上述間接提到的那樣,參照?qǐng)D13,當(dāng)一次中斷事件發(fā)生時(shí),X位即被清掉。另外,如上提到的那樣,當(dāng)需要加載一新控制字符或密鑰目錄或兩個(gè)都必須加載時(shí),在發(fā)送密碼指令之前即必須清掉X位。在一使用x86標(biāo)志(EFLAGS)寄存器的第30位的x86兼容實(shí)施例中,通過執(zhí)行一隨后有一個(gè)POPFD指令的PUSHFD指令清掉X位。不過本領(lǐng)域技術(shù)人員了解,在其它可置換實(shí)施例中其它指令必須被用來清掉X位。如果X位被設(shè)置,流程將進(jìn)行到區(qū)塊1412。如果該X位被清掉,流程即進(jìn)行到區(qū)塊1408。
在區(qū)塊1408,由于一被清除的X位已經(jīng)表明一中斷事件已經(jīng)發(fā)生,或者一個(gè)新控制字符和/或密鑰數(shù)據(jù)將被加載,因此一個(gè)控制字符乃從內(nèi)存處加載。在一個(gè)實(shí)施例中,加載控制字符阻止密碼單元執(zhí)行如上述區(qū)塊1404所述的指定密碼運(yùn)算。在這個(gè)典型的實(shí)施例中,在區(qū)塊1404里啟動(dòng)一密碼運(yùn)算,允許通過假定利用目前加載的控制字符和密鑰數(shù)據(jù)對(duì)多區(qū)塊密碼運(yùn)算進(jìn)行最佳化。因此,當(dāng)前輸入數(shù)據(jù)區(qū)塊乃被加載,而且密碼運(yùn)算在檢查判斷區(qū)塊1406中X位的狀況之前就已經(jīng)開始。流程接下來即進(jìn)行到區(qū)塊1410。
在區(qū)塊1410,密鑰數(shù)據(jù)(即一密鑰或一完整的密鑰目錄)從內(nèi)存被加載,另外,依據(jù)新加載的控制字符及密鑰目錄,在區(qū)塊1404所提到的輸入?yún)^(qū)塊及初始化向量(或等效初始化向量)被再次地加載并啟動(dòng)密碼運(yùn)算。流程接下來即進(jìn)行到區(qū)塊1412。
在區(qū)塊1412,一評(píng)估被用來決定是否指定了一密碼區(qū)塊串行加密運(yùn)算或密碼區(qū)塊串行解密運(yùn)算。如果指定為加密,流程即進(jìn)行到區(qū)塊1420,如果指定為解密,流程即進(jìn)行到區(qū)塊1414。
在區(qū)塊1420,一相對(duì)應(yīng)于該被加載輸入?yún)^(qū)塊(明文)的輸出區(qū)塊(密文)被產(chǎn)生。流程隨后進(jìn)行到區(qū)塊1422。
在區(qū)塊1414,在區(qū)塊1404或區(qū)塊1410中加載的輸入數(shù)據(jù)區(qū)塊(當(dāng)前密文區(qū)塊)被儲(chǔ)存到一內(nèi)部寄存器TEMP。流程然后進(jìn)行到區(qū)塊1416。
在區(qū)塊1416,一相對(duì)應(yīng)于被加載輸入?yún)^(qū)塊(密文)的輸出區(qū)塊(明文)被產(chǎn)生。流程隨后處理區(qū)塊1418。
在區(qū)塊1418,內(nèi)部寄存器TEMP(當(dāng)前的密文區(qū)塊)的內(nèi)容被寫給初始化向量指針寄存器內(nèi)容所指向的內(nèi)存位置,以便一后續(xù)密文區(qū)塊的解密,并將使用密文的當(dāng)前區(qū)塊作為一等量的初始化向量。流程然后進(jìn)行到區(qū)塊1422。
區(qū)塊1414、1416及1418內(nèi)所描述的步驟被要求保證在一個(gè)狀態(tài),其允許使用密碼區(qū)塊串行模式所執(zhí)行的一密碼指令隨時(shí)被打斷。例如,在一實(shí)施例中,一錯(cuò)頁在一密碼指令的執(zhí)行期間可在任一點(diǎn)發(fā)生。
在區(qū)塊1422,產(chǎn)生的輸出區(qū)塊被儲(chǔ)存到內(nèi)存。流程然后進(jìn)行到區(qū)塊1424。
在區(qū)塊1424,輸入和輸出區(qū)塊指針寄存器的內(nèi)容被修改成指向下一個(gè)輸入和輸出數(shù)據(jù)區(qū)塊。另外,區(qū)塊計(jì)數(shù)寄存器的內(nèi)容被修改成表明在當(dāng)前輸入數(shù)據(jù)區(qū)塊上密碼運(yùn)算的完成。在圖14所討論的實(shí)施例中,區(qū)塊計(jì)數(shù)寄存器是遞減的。不過本領(lǐng)域技術(shù)人員了解,可置換實(shí)施例使用區(qū)塊計(jì)數(shù)寄存器內(nèi)容的運(yùn)算和測(cè)試,以容許輸入文字區(qū)塊管線化執(zhí)行。流程隨后進(jìn)行判斷區(qū)塊1426。
在判斷區(qū)塊1426,一評(píng)估被用以決定是否一個(gè)輸入數(shù)據(jù)區(qū)塊待被執(zhí)行。在這里描述的實(shí)施例中,為說明性的目的,區(qū)塊計(jì)數(shù)器用以決定它是否等于零。如果沒有區(qū)塊待被執(zhí)行,流程即進(jìn)行到區(qū)塊1430。如果一區(qū)塊待被執(zhí)行,流程乃開始進(jìn)行區(qū)塊1428。
在區(qū)塊1428,當(dāng)經(jīng)由輸入指針寄存器的內(nèi)容指向時(shí),輸入數(shù)據(jù)的下一區(qū)乃被加載。流程然后處理區(qū)塊1412。
在區(qū)塊1430,完成方法。
本領(lǐng)域技術(shù)人員希望區(qū)塊1416、1418、1420、1422及1424所討論的步驟能沿著他們的特殊流動(dòng)路徑,以不同的次序發(fā)生或者他們能并行發(fā)生。
雖然已詳細(xì)描述本發(fā)明和它的目標(biāo)、特征和優(yōu)勢(shì),但是其它實(shí)施例也應(yīng)被本發(fā)明所涵蓋。例如,本發(fā)明對(duì)與x86體系兼容的實(shí)施例已經(jīng)進(jìn)行了詳細(xì)討論。但是,這樣的討論方式,是因?yàn)閤86體系被廣泛地理解,因此提供一充足的手段以學(xué)習(xí)本發(fā)明。本發(fā)明仍然包括諸如PowerPC、MIPS及其類似者的其它指令集架構(gòu)以及其它完全是新的指令集架構(gòu)相適應(yīng)的實(shí)施例。
本發(fā)明尚包含在一計(jì)算系統(tǒng)組件中而非在該微處理器本身中密碼運(yùn)算的執(zhí)行。例如,依據(jù)本發(fā)明密碼指令能容易地在一密碼單元實(shí)施例中使用,那并非像微處理器內(nèi)的集成電路那樣必須作為計(jì)算機(jī)系統(tǒng)一部分使用。預(yù)期本發(fā)明的實(shí)施例將被集成到一微處理器周圍的一個(gè)芯片組(例如,北橋、南橋)或者作為執(zhí)行密碼運(yùn)算的專用處理器,在此密碼指令從一個(gè)主微處理器交給處理器。預(yù)計(jì)本發(fā)明將應(yīng)用于嵌入式控制器、工業(yè)控制器、信號(hào)處理器、陣列處理機(jī)和用于處理數(shù)據(jù)的其它設(shè)備中。本發(fā)明也包括在這里所描述執(zhí)行密碼運(yùn)算所必須的組件組成的實(shí)施例。這樣的一個(gè)設(shè)備作為在一個(gè)通信系統(tǒng)內(nèi)的一加密/解密處理器,的確將提供一低成本、低功率的選擇以執(zhí)行密碼運(yùn)算。為明確起見,本發(fā)明提及的這些可選擇處理組件是上面所述的處理器。
另外,盡管本發(fā)明是以128位區(qū)塊加以描述,但是只需改變輸入數(shù)據(jù)、輸出數(shù)據(jù)、密鑰和控制字符寄存器的大小就可以實(shí)現(xiàn)不同的區(qū)塊大小。
而且,雖然數(shù)據(jù)加密標(biāo)準(zhǔn)、三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn)、和進(jìn)階數(shù)據(jù)加密標(biāo)準(zhǔn)在本發(fā)明中有詳細(xì)的描述,本發(fā)明指出也包括較少人熟知的區(qū)塊密碼算法,諸如MARS密碼算法、Rijndael密碼算法、Twofish密碼算法、Blowfish密碼算法、Serpent密碼算法和RC6密碼算法。本發(fā)明提供指定的區(qū)塊密碼裝置并且在一個(gè)微處理器內(nèi)支持一套實(shí)現(xiàn)的方法,在微區(qū)塊密碼運(yùn)算可以通過一條單獨(dú)指令的執(zhí)行被引動(dòng)。
此外,雖然本發(fā)明按照區(qū)塊密碼算法,以及對(duì)執(zhí)行區(qū)塊密碼功能的相關(guān)技術(shù)進(jìn)行了描述,值得注意本發(fā)明完全包括除了區(qū)塊密碼以外的其它密碼形式。提供一條單獨(dú)指令,憑使用者能指示一兼容的微處理器進(jìn)行一密碼運(yùn)算諸如加密或者解密,在此微處理器包括一個(gè)指定的密碼單元,指定的密碼單元通過指令電路完成被指定的密碼功能。
而且,這里關(guān)于輪引擎的討論提供一個(gè)2階段的裝置,這樣兩輸入數(shù)據(jù)區(qū)塊就可以管線化執(zhí)行。發(fā)明人指出其它的實(shí)施例可能多于2個(gè)階段。預(yù)期更多輸入數(shù)據(jù)區(qū)塊的管線階段劃分乃與一相稱微處理器內(nèi)的其它階段是一致的。
最后,雖然本發(fā)明作為一支持?jǐn)?shù)區(qū)塊密碼算法的單獨(dú)密碼單元已加以討論,本發(fā)明也包括提供和在一兼容微處理器中的其它執(zhí)行單元并行連接的數(shù)個(gè)密碼單元,在此,這些密碼單元中的每一個(gè)用以執(zhí)行一特定的區(qū)塊密碼算法。例如,一第一單元配置成進(jìn)階加密標(biāo)準(zhǔn),一第二單元?jiǎng)t配置成數(shù)據(jù)加密標(biāo)準(zhǔn)等等。
本領(lǐng)域技術(shù)人員應(yīng)了解易使用揭示明確的概念和實(shí)施例,以作為完成本發(fā)明的目的基礎(chǔ)設(shè)計(jì)或者修改其它結(jié)構(gòu),而依此所進(jìn)行的各種改變、替代和變化均未脫離本發(fā)明所界定的精神及范圍。
權(quán)利要求
1.一種用以執(zhí)行密碼運(yùn)算的裝置,包含一密碼指令電路,其產(chǎn)生由一計(jì)算設(shè)備所接收的一密碼指令,該密碼指令作為在該計(jì)算設(shè)備上執(zhí)行的指令流的一部分,該密碼指令指定所述密碼運(yùn)算之一且其中指定的該密碼運(yùn)算包含在一相對(duì)應(yīng)多個(gè)輸入文字區(qū)塊上執(zhí)行多個(gè)區(qū)塊密碼串行區(qū)塊密碼運(yùn)算;一區(qū)塊密碼串行區(qū)塊指針邏輯電路,其連接到該密碼指令電路,用以驅(qū)動(dòng)該計(jì)算設(shè)備,以更新多個(gè)指針寄存器和每一個(gè)所述區(qū)塊密碼串行區(qū)塊密碼運(yùn)算的多個(gè)中間結(jié)果;以及一執(zhí)行邏輯電路,其被連接到該區(qū)塊密碼串行區(qū)塊指針邏輯電路,用以執(zhí)行指定的該密碼運(yùn)算。
2.根據(jù)權(quán)利要求1所述的裝置,其中指定的該密碼運(yùn)算進(jìn)一步包含下列運(yùn)算的至少一個(gè)一區(qū)塊密碼串行模式加密運(yùn)算,其運(yùn)算包含加密多個(gè)明文區(qū)塊,以產(chǎn)生相對(duì)應(yīng)的多個(gè)密文區(qū)塊;以及一區(qū)塊密碼串行模式解密運(yùn)算,其運(yùn)算包含解密多個(gè)密文區(qū)塊,以產(chǎn)生相對(duì)應(yīng)的多個(gè)明文區(qū)塊。
3.根據(jù)權(quán)利要求1所述的裝置,該密碼指令指定用以執(zhí)行指定的該密碼運(yùn)算的一密碼區(qū)塊串行模式。
4.根據(jù)權(quán)利要求1所述的裝置,進(jìn)一步包含一位儲(chǔ)存器,其儲(chǔ)存一位并連接到該執(zhí)行邏輯電路,該位用以表明指定的該密碼運(yùn)算是否已被一中斷事件打斷。
5.根據(jù)權(quán)利要求4所述的裝置,其中該位寄存器位于一標(biāo)志寄存器中。
6.根據(jù)權(quán)利要求4所述的裝置,其中該中斷事件包含轉(zhuǎn)移程控到一處理該中斷事件的程序流,且其中在當(dāng)前輸入文字區(qū)塊的該密碼運(yùn)算的執(zhí)行被中斷。
7.根據(jù)權(quán)利要求6所述的裝置,其中當(dāng)從程控返回該密碼指令時(shí),指定的該密碼運(yùn)算是在該當(dāng)前輸入文字區(qū)塊中被執(zhí)行的。
8.根據(jù)權(quán)利要求1所述的裝置,其中在每一個(gè)相對(duì)應(yīng)所述輸入文字區(qū)塊上的每一個(gè)所述密碼區(qū)塊串行區(qū)塊密碼運(yùn)算完成時(shí),指定的該密碼區(qū)塊串行區(qū)塊指針邏輯電路指引該計(jì)算設(shè)備,來修改該指針寄存器,以指向下一個(gè)輸入和輸出文字區(qū)塊,并將當(dāng)前的輸出文字區(qū)塊儲(chǔ)存到經(jīng)由一初始化向量寄存器的內(nèi)容所指向的內(nèi)存位置處。
9.根據(jù)權(quán)利要求1所述的裝置,其中該密碼指令涉及到在該計(jì)算設(shè)備中的多個(gè)寄存器。
10.根據(jù)權(quán)利要求9所述的裝置,其中所述寄存器包含選自下列之一一第一寄存器,其中該第一寄存器的內(nèi)容包含一指向第一內(nèi)存地址的第一指針,該第一內(nèi)存地址指定了在內(nèi)存中的一第一位置,在指定的該密碼運(yùn)算將被完成時(shí)存取所述輸入文字區(qū)塊;一第二寄存器,其中該第二寄存器的內(nèi)容包含指向一第二內(nèi)存地址的一第二指針,該第二內(nèi)存地址指定在該內(nèi)存中的第二位置以保存相對(duì)應(yīng)的多個(gè)輸出文字區(qū)塊,該相對(duì)應(yīng)的多個(gè)輸出文字區(qū)塊在多個(gè)輸入文字區(qū)塊上完成指定的該密碼運(yùn)算所產(chǎn)生的結(jié)果;一第三寄存器,其中該第三寄存器的內(nèi)容表明在多個(gè)輸入文字區(qū)塊內(nèi)多個(gè)文字區(qū)塊;一第四寄存器,其中該第四寄存器的內(nèi)容包含指向一第三內(nèi)存地址的一第三指針,該第三內(nèi)存地址指定一在內(nèi)存中的第三位置,以供用來完成指定的該密碼運(yùn)算所使用的密碼密鑰數(shù)據(jù)的存?。灰坏谖寮拇嫫鳎渲性摰谖寮拇嫫鞯膬?nèi)容包含一指向一第四內(nèi)存地址的第四指針,該第四內(nèi)存地址指定一在內(nèi)存中的第四位置,以供用來完成指定的該密碼運(yùn)算所使用的一初始化向量的存?。灰约耙坏诹拇嫫?,其中該第六寄存器的內(nèi)容包含指向一第五內(nèi)存地址的一第五指針,該第五內(nèi)存地址指定一在內(nèi)存中的第五位置,以供用來完成指定的該密碼運(yùn)算所使用的控制字符的存取,其中該控制字符為指定的該密碼運(yùn)算的多個(gè)密碼參數(shù)。
11.根據(jù)權(quán)利要求1所述的裝置,其中該執(zhí)行邏輯電路包含一個(gè)密碼單元,其在每一所述輸入文字區(qū)塊上執(zhí)行多個(gè)密碼輪,以在每一所述輸出文字區(qū)塊產(chǎn)生相對(duì)應(yīng)的一輸出文字區(qū)塊,所述密碼輪由與該密碼單元相作用的一控制字符所指定。
12.一種用以執(zhí)行密碼運(yùn)算的裝置,包含一在一設(shè)備內(nèi)的密碼單元,用以在指定的該密碼運(yùn)算的指令流內(nèi)執(zhí)行響應(yīng)到接收一密碼指令的所述密碼運(yùn)算之一,其中指定的該密碼運(yùn)算包含在一相對(duì)應(yīng)多個(gè)輸入文字區(qū)塊上執(zhí)行多個(gè)密碼區(qū)塊串行區(qū)塊密碼運(yùn)算;以及密碼區(qū)塊串行區(qū)塊指針邏輯電路,其連接到該密碼單元,用以指引該裝置,以更新指針寄存器和每一所述密碼區(qū)塊串行區(qū)塊密碼運(yùn)算的中間結(jié)果。
13.根據(jù)權(quán)利要求12所述的裝置,其中一中斷事件使得一程控轉(zhuǎn)移到一處理該中斷事件的程序流,且其中斷在當(dāng)前輸入文字區(qū)塊之中指定的該密碼運(yùn)算的執(zhí)行。
14.根據(jù)權(quán)利要求13所述的裝置,其中當(dāng)從程控返回到該密碼指令時(shí),指定的該密碼運(yùn)算即在該當(dāng)前輸入文字區(qū)塊上執(zhí)行。
15.根據(jù)權(quán)利要求12所述的裝置,其中在每一相對(duì)應(yīng)的多個(gè)輸入文字區(qū)塊上的每一所述密碼區(qū)塊串行區(qū)塊密碼運(yùn)算完成時(shí),指定的該密碼區(qū)塊串行區(qū)塊指針邏輯電路指引該計(jì)算設(shè)備,來修改該指針寄存器,以指向下一個(gè)輸入和輸出文字區(qū)塊,并儲(chǔ)存一當(dāng)前輸出文字區(qū)塊到一經(jīng)由一初始化向量寄存器所指向的內(nèi)存位置。
16.一種在一設(shè)備中執(zhí)行密碼運(yùn)算的方法,該方法包含執(zhí)行所述密碼運(yùn)算之一,以響應(yīng)至接收一密碼指令,其中該密碼指令指示指定的該密碼運(yùn)算,該執(zhí)行包括在一相對(duì)應(yīng)的多個(gè)輸入文字區(qū)塊上執(zhí)行多個(gè)密碼區(qū)塊串行模式區(qū)塊運(yùn)算;以及把一當(dāng)前輸入文字區(qū)塊寫到一初始化向量位置處,以便在下一所述輸入文字區(qū)塊上,使得下一所述密碼區(qū)塊串行模式區(qū)塊運(yùn)算之一使用該當(dāng)前輸入文字區(qū)塊,作為一個(gè)初始化向量的等效物。
17.根據(jù)權(quán)利要求16所述的方法,還包含轉(zhuǎn)移程控到一程序流,用以處理一中斷事件;以及中斷在該當(dāng)前輸入文字區(qū)塊上指定的該密碼運(yùn)算的執(zhí)行。
18.根據(jù)權(quán)利要求17所述的方法,還包含在從程控返回到該轉(zhuǎn)移后的密碼指令時(shí),在該當(dāng)前輸入文字區(qū)塊上進(jìn)行該執(zhí)行。
19.根據(jù)權(quán)利要求16所述的方法,其中該接收包含指定一密碼區(qū)塊串行模式解密運(yùn)算,以作為指定的該密碼運(yùn)算。
20.根據(jù)權(quán)利要求16所述的方法,其中該接收包含在該密碼指令內(nèi)指定一種用以完成指定的該密碼運(yùn)算的密碼區(qū)塊串行模式。
全文摘要
本發(fā)明涉及一種在一處理器內(nèi)的多個(gè)輸入數(shù)據(jù)區(qū)塊中執(zhí)行密碼運(yùn)算的裝置及方法。該裝置包括一密碼指令電路、密碼區(qū)塊串行區(qū)塊指針邏輯電路、和執(zhí)行邏輯電路。密碼指令電路所產(chǎn)生的密碼指令通過一計(jì)算設(shè)備接收,以作為在計(jì)算設(shè)備上執(zhí)行指令流的一部分,且密碼指令指定一種密碼運(yùn)算,包括在一相對(duì)應(yīng)輸入文字區(qū)塊上執(zhí)行多個(gè)密碼區(qū)塊串行區(qū)塊密碼運(yùn)算。密碼區(qū)塊串行區(qū)塊指針邏輯電路連接到密碼指令電路,且指引計(jì)算設(shè)備不斷更新指針寄存器和每個(gè)密碼區(qū)塊串行區(qū)塊密碼運(yùn)算的中間結(jié)果。執(zhí)行邏輯電路連接到密碼區(qū)塊串行區(qū)塊指針邏輯電路,且執(zhí)行一指定的密碼運(yùn)算。
文檔編號(hào)H04L9/00GK1649296SQ200510052690
公開日2005年8月3日 申請(qǐng)日期2005年3月3日 優(yōu)先權(quán)日2004年4月16日
發(fā)明者G·葛連·亨利, 湯姆斯·A·克雷斯平, 泰瑞·派克斯 申請(qǐng)人:威盛電子股份有限公司