亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

重組透明化區(qū)塊密碼編譯方法及裝置的制作方法

文檔序號:7594952閱讀:348來源:國知局
專利名稱:重組透明化區(qū)塊密碼編譯方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種微電子的領(lǐng)域,尤其涉及一種在微處理器或其它裝置中執(zhí)行重組透明化區(qū)塊密碼編譯運算的方法及裝置。
背景技術(shù)
早期計算機系統(tǒng)間的作業(yè)都是獨立作業(yè)的,因為跑一個應(yīng)用程序所需要的輸入數(shù)據(jù)是內(nèi)建于早期的計算機系統(tǒng)內(nèi)或是由軟件工程師在程序運行時輸入。應(yīng)用程序執(zhí)行后產(chǎn)生的輸出數(shù)據(jù)則通常是以白紙黑字的打印方式呈現(xiàn),或者是以一個文件的型式被寫入磁帶、硬盤或是其它屬于計算機系統(tǒng)一部份的儲存裝置中。這個輸出的文件可以接著被下一個在同一個計算機系統(tǒng)中執(zhí)行的應(yīng)用程序當作輸入文件使用或者如果這個文件是被存入一個可以被移動式的儲存接口,它就能被其它不同但兼容的計算機系統(tǒng)中的應(yīng)用軟件使用。這些早期的系統(tǒng)對保護敏感的數(shù)據(jù)已有認知。其中一樣數(shù)據(jù)保密措施,密碼編譯應(yīng)用軟件也被開發(fā)出來保護敏感的數(shù)據(jù)以免未經(jīng)許可的被公開。這些密碼編譯軟件通常把儲存裝置上的文件做加密或解密的動作。
多年后,使用者們才發(fā)現(xiàn)通過網(wǎng)絡(luò)聯(lián)機多臺計算機來分享數(shù)據(jù)的這個優(yōu)勢。所以,網(wǎng)絡(luò)架構(gòu)、操作系統(tǒng)、數(shù)據(jù)傳送協(xié)議也相對的發(fā)展。至今,除了能支持數(shù)據(jù)分享之外,它們所提供的附加功能也很顯要。例如說,現(xiàn)在的使用者使用一個計算機工作臺去取得另一個工作臺上或另一個網(wǎng)絡(luò)服務(wù)器上的文件,通過因特網(wǎng)取得新聞和其它數(shù)據(jù),與其它數(shù)百臺不同的計算機傳送與接收電子信息,如電子郵件,或是連接供貨商的計算機系統(tǒng)提供信用卡或是銀行數(shù)據(jù)來購買物品,或是在餐廳、機場和其它公共場所通過無線網(wǎng)絡(luò)來做上述的動作,已經(jīng)習以為常了。所以保護敏感數(shù)據(jù)的傳輸也變的非常的重要。使用者通過計算機所傳出去的數(shù)據(jù)需要保護的頻率也日已遽增。新聞頭條常揭發(fā)給社會大眾濫發(fā)郵件,黑客,身分盜用,反向工程,IP(InternetProtocol)位置欺偽和信用卡詐欺等計算機數(shù)據(jù)安全問題。這些侵害隱私的動作的背后動機有時是純屬意外的無心之過,有時則是深思熟慮的網(wǎng)絡(luò)恐怖攻擊行動。相關(guān)單元以制定新法律,嚴格執(zhí)行規(guī)范和教育大眾等行動來響應(yīng)。但是至今這些動作都還是無法成功杜絕侵害計算機數(shù)據(jù)的浪潮。從前只讓政府,金融機構(gòu),軍方和情報單元憂心的問題已經(jīng)變成每一位在家檢查電子郵件,使用網(wǎng)絡(luò)銀行服務(wù)的老百姓最擔心的問題之一了。
信息安全這個領(lǐng)域中一項將數(shù)據(jù)加密,并只提供特定人士譯碼方式的保護技巧就是密碼編譯學。在保護計算機對計算機間數(shù)據(jù)的傳輸上,密碼編譯通常是采用將敏感數(shù)據(jù)(又稱為明文,plaintext或cleartext)轉(zhuǎn)成無法辨識的型式(又稱為密文,ciphertext)。將明文轉(zhuǎn)換成密文的程序被稱為“加密”(encryption、enciphering或ciphering),而將密文轉(zhuǎn)回明文的程序則被稱為“解密”(decryption、deciphering或inverse ciphering)。
在密碼編譯這個領(lǐng)域中,幾項方式和協(xié)議被開發(fā)出以便使用者不需要有太多密碼編譯知識或是花太多力量便能將數(shù)據(jù)以加密過的型式送出給不同的使用者。除了加密的數(shù)據(jù)之外,使用者通常會提供收件者一個用來解密的”密碼密鑰”。密碼密鑰讓接收者能復(fù)原加密數(shù)據(jù)或者取得未加密的原始數(shù)據(jù)。以上所述的步驟,通常是通過密碼保護,數(shù)學算法和加密解密的應(yīng)用程序等方法為敏感數(shù)據(jù)加密和解密。
目前有很多種類型的算法被應(yīng)用于數(shù)據(jù)的加密解密上。某個類型中的一個算法(如公開密鑰加密算法,為RSA Rivest-Shamir-Adelman算法類之一)用了兩個密鑰(cryptographic key),一個公開密鑰(Public Key)和一個私有密鑰(private key)用來加密或解密。根據(jù)一些公開密鑰算法則,接收者的公開密鑰是由寄出者用來將數(shù)據(jù)加密以便送給接收者的。因為使用者的公開和私有密鑰間有某種特定的數(shù)學關(guān)系,接收者一定要用私有密鑰來解開收到的數(shù)據(jù),還原原本的數(shù)據(jù)。雖然此類的加密算法受到廣泛的使用,但是它處理加密和解密的速度十分的慢,就連處理小量的數(shù)據(jù)都十分的慢。還有一類算法,稱作對稱密鑰加密算法(symmetric key algorithms),不但有與第一類算法同等級的數(shù)據(jù)保密性,而且執(zhí)行的速度快上許多。這類算法會叫做對稱密鑰加密算法的原因就是它是用同一組加密編譯鑰來加密和解密。目前主要有三種單一密鑰加密算法(single-key cryptographic algorithms)數(shù)據(jù)加密標準(DataEncryption Standard,DES),三度數(shù)據(jù)加密標準(Triple Data EncryptionStandard,Triple-DES)和高階加密標準(Advanced Encryption Standard,AES)。因為這些算法的保護強度,現(xiàn)在美國政府的相關(guān)單元都采用這三種算法來保密數(shù)據(jù)。相信不久的將來,這其中一項或一項以上也會成為商業(yè)和私人交易中使用的標準。根據(jù)這些對稱密鑰加密算法則,明文和密文都被裁成一定大小的區(qū)塊以進行加密和解密。例如高階加密標準(AES)對128位大小的區(qū)塊進行加密,并使用128、192和256位大小的加密編譯鑰。
所有的對稱密鑰加密算法(symmetric key algorithms)將明文加密的次要運算(sub-operation)步驟都是相同的。根據(jù)那些比較常使用的對稱密鑰加密算法,一個初始的密碼編譯鑰會被擴張至數(shù)個的密鑰(也就是密鑰程序表,keyschedule),每個密鑰都會被用在密碼編譯時將一段明文加密程序中次要運算中的其中一回合(round)。第一回合運算完的結(jié)果變成是第二回合的輸入數(shù)據(jù)(input text)。第二回合運算就使用密鑰程序表中第二個密鑰做運算,然后產(chǎn)生第二個結(jié)果。明文在經(jīng)過特定的幾回合后就成為密文。在高階加密標準(AES)運算法中,每一回合中的次要運算中的運算在相關(guān)文獻數(shù)據(jù)中可被稱為子位(SubByte,或S-box),移列(ShiftRows),混欄(MixColums),和回合密鑰(round key)加入(AddRoundKey)。為一段密文解碼的步驟事實上和加密是很相似的,就是把加密文當作輸入值,并且在每一回合進行反向譯碼和反向運算,最后一回合的輸出值就是明文。
數(shù)據(jù)加密標準(DES)和三度數(shù)據(jù)加密標準(Triple-DES)應(yīng)用的次要運算在小細節(jié)上不太相同,但是它們與高階加密標準(AES)運算法基本上是十分類似,因為它們用相似方式將明文片段轉(zhuǎn)為一段段的密文。
所有對稱密鑰加密算法將多個連續(xù)片段數(shù)據(jù)加密的模式都是一樣的。這些包括了加密塊鏈模式(cipher block chaining mode,CBC),電子密碼本(electronic code book,ECB),加密反饋模式(cipher feedback mode,CFB)和輸出反饋模式(output feedback mode,OFB)。其中有些模式需要一個另外的初始化向量(initialization vector)才能進行次項運算,有些則是會將第一組加密編譯后的密文加入第二組明文加密的運算中。若深入探討每一個密碼編譯算法和當下對稱密鑰加密算法中每個次項運算步驟則就已超出本發(fā)明應(yīng)用的范圍了。關(guān)于數(shù)據(jù)加密標準DES和三度數(shù)據(jù)加密標準Triple-DES詳細的實施規(guī)范探討,讀者們可以參考1999年10月25日的Federal InformationProcessing Standards Publication 46-3(FIPS-46-3),2001年11月26日的Federal Information Processing Standards Publication 197(FIPS-197)中則有AES詳細的探討。上述的刊物都是由National Institute of Standards andTechnology(NIST)所發(fā)行編譯的,在此附為參考讀物,所涵蓋的近乎范圍。除了這些刊物外,NIST的Computer Security Resource Center(CSRC)網(wǎng)站http//csrc.nist.gov/內(nèi)也提供單元教學、白皮書、toolkits和相關(guān)文章等。
本領(lǐng)域的技術(shù)人員應(yīng)該都了解計算機系統(tǒng)上有很多軟件都能用來執(zhí)行密碼編譯的動作(也就是加密和解密)。事實上,有些操作系統(tǒng)(例如微軟窗口XP,Linux)通過密碼編譯基元(cryptographic primitives),密碼編譯應(yīng)用軟件接口(cryptographic application program interface)和其它類似接口提供直接加密/解密服務(wù)。但是現(xiàn)今計算機編譯密碼技巧上在多方面有許多缺陷。請參考圖1,圖中標示出這些缺陷,以下將探討這些問題。
圖1為公知計算機密碼編譯應(yīng)用的方框圖。方框圖1顯示了第一臺計算機101連接到局域網(wǎng)絡(luò)105、另外連接到局域網(wǎng)絡(luò)105的還有第二臺計算機102、網(wǎng)絡(luò)文件儲存裝置106、第一個路由器107或是以其它形式的接口,比如說網(wǎng)絡(luò),連接至廣域網(wǎng)絡(luò)110(wide area network,WAN),和一個無線網(wǎng)絡(luò)路由器108,例如符合IEEE 802.11規(guī)范的無線路由器。
在廣域網(wǎng)絡(luò)110(wide area network)另一端接的是第二個路由器111,用來提供與第三臺計算機103的接口。
如前文所述,現(xiàn)今使用者在一般使用計算機時會需要保密計算機數(shù)據(jù)的時候越來越頻繁。例如說,在操作系統(tǒng)控制之下,第一臺計算機101的使用者可能同時進行多樣工作,而每樣工作都需要密碼編譯作業(yè)。第一臺計算機101的使用者需要執(zhí)行應(yīng)用程序112來加密/解密(通過操作系統(tǒng)服務(wù)或者是操作系統(tǒng)行使的)將一個文件存入網(wǎng)絡(luò)文件儲存裝置106。在儲存文件的同時,使用者也可能將加密過的信息傳給第二臺計算機102的使用者,這個動作將也需要應(yīng)用程序112執(zhí)行加密和解密的工作。加密傳出的信息有可能是實時的(例如實時信息)或不是實時的(例如電子郵件)。另外,使用者可能是在第三臺計算機103上通過廣域網(wǎng)絡(luò)110在存取個人的金融數(shù)據(jù)(例如信用卡卡號、金融交易等)或是其它重要數(shù)據(jù)。第三臺計算機103也可代表一個家庭辦公室或是遠程計算機103,其中第一臺計算機101的使用者不在辦公室內(nèi),則可以使用廣域網(wǎng)絡(luò)110來存取局域網(wǎng)絡(luò)105上共享資源101、102、106、107、108和109的內(nèi)部數(shù)據(jù)。以上所述的行為都需要呼叫應(yīng)用程序112來執(zhí)行相關(guān)加密和解密的動作。此外,無線網(wǎng)絡(luò)109已被廣泛的布局在咖啡廳、機場、學校等公共場所,所以手提電腦104的使用者除了必須將接收或傳送給別的使用者的數(shù)據(jù)加密或解密外,所有通過無線網(wǎng)絡(luò)109傳給無線網(wǎng)絡(luò)路由器108的數(shù)據(jù)也都要加以加密/解密。
本領(lǐng)域技術(shù)人員可以了解當計算機101-104需要進行密碼編譯的動作時,應(yīng)用程序112會被呼叫,然后進行加密或解密的動作。所以未來計算機101-104有可能必須同時進行上百個密碼編譯運算。
發(fā)明者發(fā)現(xiàn)計算機系統(tǒng)101-104同時呼叫一個或一個以上加密或解密應(yīng)用程序112的做法有下列缺點,例如說,若可以使用一個專門的硬件來處理這些功能,硬件處理的速度會比用軟件快。每次應(yīng)用程序112需要進行加密解密時,計算機101-104正在執(zhí)行的工作就必須先暫停來傳送密碼編譯動作所需的參數(shù)(例如明文、密文、模式及密鑰等)給計算機操作系統(tǒng),然后計算機操作系統(tǒng)再將這些數(shù)據(jù)傳給應(yīng)用程序112來完成密碼編譯動作。由于應(yīng)用程序112在編譯一段數(shù)據(jù)時需要執(zhí)行許多回合的子運算,因此,計算機要執(zhí)行的指令數(shù)目繁多且讓整個操作系統(tǒng)處理的速度顯著下降。本領(lǐng)域技術(shù)人員能了解為什么在微軟Outlook環(huán)境中發(fā)出一封加密電子郵件后所需的傳輸時間會是未加密郵件的五倍多。
介入計算機操作系統(tǒng)的延誤時間也會影響現(xiàn)在使用這項技術(shù)。目前應(yīng)用軟件內(nèi)大多沒有完整的密鑰產(chǎn)生或加密/解密功能,所以都是靠操作系統(tǒng)或是插件軟件(plug-in software)來完成這些作業(yè)。而要獲得操作系統(tǒng)資源,要向操作系統(tǒng)發(fā)出中斷指令(interrupt)或是由正在執(zhí)行的應(yīng)用軟件對操作系統(tǒng)提出要求。
發(fā)明者也發(fā)現(xiàn)計算機系統(tǒng)101-104密碼編譯作業(yè)方式與較早期微處理器內(nèi)處理浮點運算單元還沒成立專門處理單元前是很像的。早期的浮點運算是由軟件處理,所以執(zhí)行速度很慢。密碼編譯通過軟件處理的速度也是很慢。隨著浮點運算的技術(shù)演進,浮點運算指令被整合入中央處理器的輔助處理器。雖然加入浮點數(shù)輔助處理器使得整個系統(tǒng)的價格升高,但是處理浮點數(shù)的速度比軟件快上許多?,F(xiàn)在也有密碼編譯的中央處理器輔助處理硬件,大多是通過并行端口或其它總線接口(如通用性串行總線)插卡式或是外掛式裝置。此類的中央處理器的輔助處理器可縮短計算機系統(tǒng)密碼編譯的工作處理時間。但除了增加系統(tǒng)的價格和耗電量之外,不但整個系統(tǒng)的穩(wěn)定度降低,數(shù)據(jù)安全性成為考慮,因為輔助處理器的和微處理器并不存在同一個芯片上,所以它們之間的連接管道可能被竊聽。
因此一個內(nèi)建于微處理器中的密碼編譯硬件是必要的。這個硬件應(yīng)讓應(yīng)用軟件只需發(fā)一個指令便能完成密碼編譯。發(fā)明者認為這種硬件能減少介入計算機操作系統(tǒng)的必要。理想中此發(fā)明能提供應(yīng)用軟件執(zhí)行密碼編譯指令的優(yōu)先權(quán),除了需要與目前市面上較普遍的微處理器架構(gòu)兼容,還要能支持較老舊的操作系統(tǒng)和應(yīng)用軟件,更要有防止竊聽機制。此硬件應(yīng)該支持多種不同的密碼編譯算法,且能夠認證和測試硬件上的密碼編譯算法。此發(fā)明需要能夠切換本身運作模式,例如允許使用者選擇提供自己的密鑰或選擇由硬件發(fā)行密鑰及支持切換不同大小的數(shù)據(jù)片段及密鑰大小。最后,此硬件所使用的加密/解密模式應(yīng)該都可以被選擇,例如是否用電子密碼本(electronic codebook,ECB),加密塊鏈模式(cipher block chaining mode,CBC),加密反饋模式(cipher feedback mode,CFB)或輸出反饋模式(output feedback mode,OFB)做密碼編譯。

發(fā)明內(nèi)容
本發(fā)明的目的為解決先前技術(shù)上面臨的問題,提供一個優(yōu)秀的微處理器內(nèi)建密碼編譯技術(shù)。
為了實現(xiàn)上述目的,本發(fā)明提供一種用以執(zhí)行密碼編譯運算的裝置,包括一密碼編譯指令,由一計算裝置來接收,其為屬于微處理器執(zhí)行的指令流程中的一步驟,其中該密碼指令指示微處理器進行一個特定的密碼編譯運算;以及執(zhí)行邏輯器,運作上耦接至該密碼編譯指令,組態(tài)為用以執(zhí)行該密碼編譯指令的該密碼編譯運算,其中該密碼編譯運算包括顯示該密碼編譯運算是否已由一中斷事件所中斷。
本發(fā)明還提供一種用以執(zhí)行密碼運算的裝置,包括一密碼編譯單元,位于一裝置內(nèi),組態(tài)為接收屬于一指令流程內(nèi)的一密碼編譯指令,并用以響應(yīng)執(zhí)行該密碼指令指示微處理器進行的一個特定的密碼編譯運算;以及一位,位于一寄存器內(nèi),運作上耦接至該密碼編譯單元,組態(tài)為用以顯示該密碼編譯運算是否已由一中斷事件所中斷。
本發(fā)明又提供一種執(zhí)行裝置內(nèi)的密碼運算的方法,該方法包括有響應(yīng)于所接收的一密碼編譯指令,而執(zhí)行該密碼編譯指令指定的一密碼編譯運算;以及顯示在執(zhí)行該密碼編譯運算期間,是否已發(fā)生一中斷事件。
也就是說,一實施例中本發(fā)明是一個微處理器內(nèi)密碼編譯的裝置。裝置內(nèi)包含了密碼編譯指令及執(zhí)行邏輯器。密碼編譯指令由一計算裝置來接收,做為用以在該計算裝置上執(zhí)行的一指令流程的一部份,其中此密碼編譯指令用以指定進行這些密碼編譯運算中的一個。執(zhí)行邏輯器運作上耦接至該密碼編譯指令,以執(zhí)行該密碼編譯指令所指定的密碼編譯運算。該指定的密碼編譯運算包括顯示該指定的密碼編譯運算是否已由中斷事件所中斷。
本發(fā)明的一實施例為一個處理密碼編譯程序的微處理器裝置,此裝置包括位于一裝置內(nèi)的密碼單元,以及位于一寄存器內(nèi)的一位。密碼單元響應(yīng)一被該裝置接收的指令流程內(nèi)的一密碼編譯指令,以執(zhí)行該密碼編譯指令所指定的該密碼編譯運算。在寄存器內(nèi)的該位在運作上耦接至該密碼單元。此位用以顯示該指定的密碼編譯運算的執(zhí)行已由中斷事件所中斷。
本項發(fā)明又一實施例為一個在微處理器中執(zhí)行密碼編譯的方法。這個方法包括了響應(yīng)一密碼編譯指令,而執(zhí)行該密碼編譯指令所指定的一密碼編譯運算;以及顯示在此執(zhí)行期間是否已發(fā)生中斷事件。
配合以下的說明以及附圖,本發(fā)明的其它目的、特性、以及優(yōu)點將可更深入作一了解。


圖1描述公知密碼編譯應(yīng)用的方框圖。
圖2描述計算機系統(tǒng)執(zhí)行密碼編譯的方框圖。
圖3為根據(jù)本發(fā)明一處理密碼編譯運算的微處理器裝置的方框圖。
圖4為根據(jù)本發(fā)明一獨立密碼編譯指令集的方框圖。
圖5為根據(jù)本發(fā)明一區(qū)塊解密模式字段值的對照表。
圖6是根據(jù)本發(fā)明X86兼容微處理器內(nèi)密碼編譯單元的方框圖。
圖7是根據(jù)本發(fā)明密碼編譯指令中包含字段的示范圖,此指令指示圖6中微處理器進行密碼編譯相關(guān)的次項運算。
圖8是根據(jù)本發(fā)明XLOAD微指令中寄存器字段值和運算動作的對照表,XLOAD微指令的格式如圖7所示。
圖9是根據(jù)本發(fā)明XSTOR微指令中寄存器字段值和運算動作的對照表,XSTOR微指令的格式如圖7所示。
圖10是根據(jù)本發(fā)明一個控制字符格式的例子??刂谱址甘久艽a編譯運算的密碼編譯參數(shù)。
圖11是根據(jù)本發(fā)明密碼編譯單元的方框圖。
圖12是根據(jù)本發(fā)明AES區(qū)塊解密邏輯器的方框圖。
圖13為本發(fā)明的一流程圖,其描述一用以保持中斷事件期間的密碼參數(shù)狀態(tài)的方法。
圖14為本發(fā)明的一流程圖,其描述在存在一個或多個中斷事件時,對數(shù)個輸入數(shù)據(jù)區(qū)塊,執(zhí)行一特定密碼編碼運算的方法。
其中,附圖標記說明如下101、102、103計算機工作站 104筆記型計算機105局域網(wǎng)絡(luò) 106儲存裝置107第一個路由器 108無線路由器109無線網(wǎng)絡(luò) 110廣域網(wǎng)絡(luò)111第二個路由器 112加密/解密軟件201微處理器 202操作系統(tǒng)203應(yīng)用程序存儲區(qū) 204產(chǎn)生密鑰的軟件205密鑰程序表 206加密軟件207解密軟件 208初始化向量209密碼編譯參數(shù) 210明文211密文301微處理器 302、322 XCRYPT指令303轉(zhuǎn)譯邏輯器 304微指令隊列305、306微指令307寄存器文件308、309、310、311、312、313寄存器314加載邏輯器 315數(shù)據(jù)高速緩存
316密碼編譯單元 317儲存邏輯器318寫回邏輯器 319內(nèi)存總線320操作系統(tǒng) 321系統(tǒng)內(nèi)存323控制字符 325初始化向量324初始化密鑰/密鑰程序表 326輸入文字327輸出文字400密碼編譯指令 401選擇性前置字段402重復(fù)前置字段 403運算碼字段404區(qū)塊解密模式字段500區(qū)塊密碼字段值與微處理器運算動作對照表600微處理器601提取邏輯器 602轉(zhuǎn)譯邏輯器603轉(zhuǎn)譯器 604微指令碼只讀存儲器605寄存器階段 606地址階段607加載階段 608執(zhí)行階段609、611、613、615微指令隊列610整數(shù)單元 612浮點單元614 MMX單元 616 SSE單元617密碼編譯單元 618儲存階段619寫回階段 620加載總線621閑置信號 622儲存總線624 EFLAGS寄存器 625 X位626中斷邏輯器 627微指令628 MSR寄存器 629 E位630 FCR寄存器 631 D位632執(zhí)行邏輯器 623總線700微指令 701微運算碼字段702數(shù)據(jù)寄存器字段 703寄存器字段703800 XLOAD值對照表 900 XSTOR值對照表1000控制字符 1001 RSVD字段
1002密鑰大小的KSIZE字段 1003加密/解密E/D字段1004中間結(jié)果IRSLT字段 1005密鑰產(chǎn)生KGEN字段1006算法ALG字段 1007回合數(shù)計數(shù)RCNT字段1100密碼編譯單元 1101區(qū)塊解密邏輯器1102密鑰隨機存取內(nèi)存 1103微程序碼寄存器1104控制字符寄存器1105 input-0寄存器1106 input-1寄存器1107 key-0寄存器 1108 key-1寄存器1109 output-0寄存器 1110 ouput-1寄存器1111加載總線 1112儲存總線1113停止信號 1114微指令總線1200 AES算法區(qū)塊解密邏輯器1201微指令寄存器 1202 CW寄存器1203 KEY-0寄存器 1204 KEY-1寄存器1205 IN-0寄存器 1206 IN-1寄存器1207 OUT-01208 OUT-11210回合計算引擎控制器1211加密/解密總線1212 RNDCON總線 1213密鑰總線1214密鑰產(chǎn)生信號 1215、1216、1217總線1218 NEXTIN總線 1220回合計算引擎1221第一密鑰XOR邏輯器 1222寄存器REG-01223 S-Box邏輯器 1224移列邏輯器1225寄存器REG-1 1226混欄邏輯器1227寄存器REG-具體實施方式
以下內(nèi)容將參考圖2延續(xù)的前密碼編譯運算的相關(guān)技術(shù)背景以及其缺陷探討。接下來請參照圖3至圖14。本發(fā)明提供了一個效能和機制優(yōu)越的裝置和方法來執(zhí)行密碼編譯運作。此發(fā)明降低介入操作系統(tǒng)的必要性。除此之外,此發(fā)明也滿足了其它要求,如獨立完整性,與老舊架構(gòu)兼容性,運算法及模式切換性,黑客抵御性,以及可測試性。
現(xiàn)在請看圖2,圖2描繪的是現(xiàn)今計算機系統(tǒng)執(zhí)行密碼編譯的方框圖。圖2內(nèi)包含了一個微處理器201,這個微處理器201負責從系統(tǒng)內(nèi)存中應(yīng)用程序存儲區(qū)203中取得與應(yīng)用程序相關(guān)的指令和存取相關(guān)的數(shù)據(jù)。應(yīng)用程序存儲區(qū)203中的軟件控制和數(shù)據(jù)存取機制通常都是由系統(tǒng)存儲中操作系統(tǒng)202處理。操作系統(tǒng)202被存放在系統(tǒng)存儲中受到保護的區(qū)塊中。如前文中描述,一個應(yīng)用程序在執(zhí)行中需要做譯碼編譯的動作時(例如說一個電子郵件程序或是儲存文件的軟件),必須通知微處理器201,然后由微處理器201完成一連串數(shù)量龐大的指令才能完成密碼編譯。這些指令有些是這個執(zhí)行中應(yīng)用程序內(nèi)的子程序,有些是連接到這個執(zhí)行程序的軟件插件程序,或者也有可能是操作系統(tǒng)202所提供的服務(wù)。無論這些指令源自何處,都位在內(nèi)存中一個特定的區(qū)域中。為方便討論,內(nèi)存中這些不同區(qū)域的片段圖中都被包在應(yīng)用程序存儲區(qū)203內(nèi)。應(yīng)用程序存儲區(qū)203中還包含了一個產(chǎn)生密鑰的軟件204。這個密鑰產(chǎn)生軟件通常負責產(chǎn)生和接受密鑰的工作,也將密鑰展開成密鑰程序表205。如果使用的加密模式需要,加密軟件206會去讀取初始化向量208。加密軟件執(zhí)行內(nèi)部指令來完成明文加密的動作,最后輸出密文211。解密的流程大致上是一樣的,當需要解讀一段密文時,解密軟件207被呼叫。解密軟件207執(zhí)行特定的指令來取得密文211,密鑰程序表205以及密碼編譯參數(shù)209。其中密碼編譯參數(shù)209能提供密碼編譯的詳細細節(jié)。如果使用的解密模式有需要,解密軟件207會去讀取初始化向量208并執(zhí)行那里面的指令來完成密文解密的動作,輸出明文210。
加密,解密和產(chǎn)生密鑰的動作應(yīng)該可以用更少的指令就完成。之前提出由FIPS出版的規(guī)范中便有提供幾個不同的偽碼來預(yù)估完成一項簡單密碼編譯工作微電腦處理器所需要執(zhí)行的指令數(shù)量。而現(xiàn)在使用的技術(shù)所需處理編譯密碼的指令數(shù)量高達上百個以上。除此之外,從那些執(zhí)行中的應(yīng)用軟件(文件管理,簡訊,電子郵件,遠程文件存取,信用卡交易軟件)的角度來看,執(zhí)行這些密碼編譯既不是軟件本身主要的用途,而且又十分耗時。甚至會使軟件的使用者錯覺應(yīng)用軟件不夠有效率。若加密軟件206,解密軟件207是軟件插件的架構(gòu),則情況會更糟,因為計算機操作系統(tǒng)的工作項目又增加了支持呼叫和管理加密軟件206,解密軟件207軟件。操作系統(tǒng)必須支持中斷、例外等其它狀況。除此之外,計算機系統(tǒng)上每一個同時正在進行的密碼編譯都會需要在應(yīng)用程序存儲區(qū)203內(nèi)安排一些空間給產(chǎn)生密鑰的軟件204,加密軟件206和解密軟件207,而且未來微處理器201所需處理的密碼編譯工作數(shù)量只會有增無減。
發(fā)明者鑒于現(xiàn)今計算機系統(tǒng)處理密碼編譯的這個缺陷,體會需要一個內(nèi)建微處理器,并能改善密碼編譯處理速度的裝置及方法的必要性。此單元通過一個單一的密碼編譯指令便啟動編譯程序。關(guān)于此發(fā)明,我們將參照圖3至圖12來做更深入的解釋。
現(xiàn)在請看圖3,圖3是依照本發(fā)明原理的微處理器密碼編譯運算裝置方框圖。圖3顯示微處理器301通過內(nèi)存總線319與系統(tǒng)內(nèi)存321結(jié)合。微處理器301包含了轉(zhuǎn)譯邏輯器303。轉(zhuǎn)譯邏輯器303從指令寄存器302接收指令。密碼轉(zhuǎn)譯邏輯器303的構(gòu)成可以是一個邏輯器、電路、裝置、微指令碼(就是微指令或原生指令)或是一個邏輯器、電路、裝置、微指令碼或其它可以達到同樣功效組件的結(jié)合,將指令轉(zhuǎn)成對照的微指令碼的組件。構(gòu)成密碼編譯邏輯器303的組件可以與微處理器301內(nèi)執(zhí)行其它功能的線路、微指令碼等組件共享。根據(jù)本應(yīng)用范圍,微指令碼指的是數(shù)個微指令。微指令(也可以被稱作原生指令)指的是密碼編譯單元層次可執(zhí)行的指令。比方說,精簡指令集運算處理器都直接執(zhí)行微指令,而加強指令集運算處理器,如x86兼容的處理器,則先將指令翻譯成微指令然后再由內(nèi)部一個或一個以上的單元執(zhí)行。轉(zhuǎn)譯邏輯器303和指令隊列304耦接。指令隊列304中有數(shù)個微指令305,306,這些微指令是由微指令隊列304交給寄存器階段邏輯器的。其中寄存器階段邏輯器包含了寄存器文件307。微指令從指令隊列移動至寄存邏輯器區(qū)。寄存邏輯器包含了一個寄存文件307,寄存文件307內(nèi)有數(shù)個的寄存器308-313。這些寄存器會在進行編碼編譯運算前將運算所需要的數(shù)據(jù)加載。每個寄存器都指向內(nèi)存321中323-327其中含有編譯密碼運算所需要的數(shù)據(jù)。寄存區(qū)邏輯器與加載邏輯器314耦接。加載邏輯器與數(shù)據(jù)高速緩存315耦接,從數(shù)據(jù)高速緩存315讀取密碼編譯運算所需要的數(shù)據(jù)。數(shù)據(jù)高速緩存通過內(nèi)存總線319與內(nèi)存耦接并且執(zhí)行收到的指令。執(zhí)行邏輯器328的構(gòu)成可以是一個邏輯器、電路、裝置、微指令碼(就是微指令或原生指令)或是一個邏輯器、電路、裝置、微指令碼或其它可以達到同樣功效組件的結(jié)合,執(zhí)行指令所指示的運算。構(gòu)成執(zhí)行邏輯器328組件可以是和微處理器301內(nèi)別的功能共享的。執(zhí)行邏輯器328包含了一個密碼編譯單元316。密碼編譯單元316從加載邏輯器314接收密碼編譯運算所需數(shù)據(jù)。微指令指示密碼編譯單元316對數(shù)個輸入文字326片段進行密碼編譯,并輸出對應(yīng)的數(shù)個輸出文字327片段。密碼編譯單元316的構(gòu)成可以是一個邏輯器,電路,裝置,微指令碼(就是微指令或原生指令)或是一個邏輯器,電路,裝置,微指令碼或其它可以達到同樣功效組件的結(jié)合,處理密碼編譯。構(gòu)成密碼編譯邏輯器316組件可以是和微處理器301內(nèi)執(zhí)行其它功能的線路、微指令碼、等組件共享。一實施例中密碼編譯單元316與執(zhí)行邏輯器328內(nèi)如浮點單元和整數(shù)單元等執(zhí)行單元平行執(zhí)行(未顯示)。一“單元”的實施例的構(gòu)成可以是一個邏輯器、電路、裝置、微指令碼(就是微指令或原生指令)或是一個邏輯器、電路、裝置、微指令碼或其它可以達到同樣功效組件的結(jié)合。構(gòu)成此單元的組件可以是和微處理器301內(nèi)執(zhí)行其它功能的線路、微指令碼、等組件共享。一實施例中,整數(shù)單元的構(gòu)成可以是一個邏輯器、電路、裝置、微指令碼(就是微指令或原生指令)或是一個邏輯器、電路、裝置、微指令碼或其它可以達到同樣功效組件的結(jié)合,執(zhí)行整數(shù)指令。一個浮點單元的構(gòu)成可以是一個邏輯器、電路、裝置、微指令碼(就是微指令或原生指令)或是一個邏輯器、電路、裝置、微指令碼或其它可以達到同樣功效組件的結(jié)合,執(zhí)行浮點指令。構(gòu)成整數(shù)單元內(nèi)執(zhí)行整數(shù)指令的組件可以是和浮點運算單元中處理浮點運算指令的組件的線路、微指令碼、等共享。一與x86架構(gòu)兼容的實施例中,密碼編譯單元316與一x86整數(shù)單元,一x86浮點單元,一x86 MMX單元和一x86 SSE單元平行運作。根據(jù)本發(fā)明,一與x86兼容結(jié)構(gòu)的實施例可以支持大多數(shù)為x86處理器編寫的軟件。判斷軟件是否正確被執(zhí)行的方法為檢查執(zhí)行軟件后是否得到正確的結(jié)果。其它與x86兼容的實施例是將密碼編譯單元視為x86執(zhí)行單元中的一個子單元。密碼編譯單元316與儲存邏輯器317耦接并提供輸出數(shù)個對應(yīng)文字327片段。儲存邏輯器又與數(shù)據(jù)高速緩存耦接315。數(shù)據(jù)高速緩存315將輸出文字327數(shù)據(jù)分送至內(nèi)存321中儲存。儲存邏輯器317與寫回邏輯器318耦接。密碼編譯運算完成后寫回邏輯器318更新寄存器文件307中寄存器308-313的內(nèi)容。一實施例中微指令配合頻率信號(未顯示)流向前述的每個邏輯器階段302、303、304、307、317、316-318,這樣運算可以如同生產(chǎn)線作業(yè)般同時執(zhí)行多個運算。
系統(tǒng)內(nèi)存321內(nèi),一應(yīng)用程序若需要執(zhí)行密碼編譯運算,可向微處理器301發(fā)出一個密碼運算指令322,以下稱為XCRYPT指令322。在加強指令集運算實施例中,XCRYPT指令322包含了一個指示密碼編譯運算的微指令。在精簡指令集運算實施例中,XCRYPT指令322包含了一個指示密碼編譯運算的微指令。一實施例中,XCRYPT指令322用了一個現(xiàn)有指令集中多出或為使用的指令運算碼。一x86兼容的實施例中,XCRYPT指令322是一個4位指令包含一x86前置(prefix)(也就是0xF3),一指令集內(nèi)為被使用過的2位運算碼(就是0x0FA7),和一一位區(qū)塊解密模式。一實施例中XCRYPT指令322依照應(yīng)用軟件被允許執(zhí)行的層次,可以直接將XCRYPT指令322直接微處理器301的指令流程或是由操作系統(tǒng)320寫入。因為軟件或操作系統(tǒng)只需要下一個指令322就能完成密碼編譯,所以密碼編譯的作業(yè)細節(jié)對操作系統(tǒng)都是透明的。
計算機系統(tǒng)的運作模式,是由操作系統(tǒng)320呼叫執(zhí)行各個應(yīng)用軟件。應(yīng)用軟件下令執(zhí)行XCRYPT指令322時,根據(jù)計算機系統(tǒng)中一般指令流程,這個指令會被從內(nèi)存321傳到提取邏輯器內(nèi)。當然,軟件里還會有其它指令指示微處理器301先將內(nèi)存321中323-327的密碼編譯控制字符323,初始化密鑰或密鑰程序表324,初始化向量325(若需要的話)。等著被處理的輸入文字326和輸出文字327會被復(fù)制至對應(yīng)的寄存器323-327中。此初始化寄存器308-312的動作一定要在執(zhí)行XCRYPT指令322前完成。因為執(zhí)行XCRYPT指令322時會用到寄存器308-312中所有的數(shù)據(jù)。另外還有一個寄存器,一個負責紀錄輸入文字有幾個片段還需要被加密/解密的寄存器。轉(zhuǎn)譯邏輯器303從提取邏輯器取得指令,轉(zhuǎn)譯成對應(yīng)的微指令,指示微處理器301完成密碼編譯運算。微指令305-306中的第一個指令會指示密碼編譯單元316將數(shù)據(jù)從加載邏輯器加載,然后開始執(zhí)行指定次數(shù)的密碼編譯。執(zhí)行完成的結(jié)果的輸出文件會通過數(shù)據(jù)高速緩存315存入內(nèi)存321中的儲存邏輯器317的文字327區(qū)。第二組數(shù)個的指令(未顯示)指示微處理器301內(nèi)其它執(zhí)行單元(未顯示)。非架構(gòu)寄存器通常包含臨時結(jié)果和計數(shù)器更新輸入和輸出指針寄存器311-312。若有應(yīng)用到初始向量寄存器的更新數(shù)據(jù)。其中一實施例便是寄存器308-313為架構(gòu)寄存器。
一實施例中,密碼編譯單元316被分為數(shù)個階段,允許連續(xù)的輸入文字326片段被管線化。
圖3所顯示的組件為解釋本發(fā)明的必要組件。許多現(xiàn)今的微處理器301內(nèi)部的邏輯器沒有在圖3內(nèi)中顯示。本領(lǐng)域技術(shù)人員會發(fā)現(xiàn),為了能清楚說明發(fā)明,許多微處理器301內(nèi)包含的邏輯器在圖3中都被簡化了。這是為了方便敘述。如加載邏輯器314可以包括一個地址產(chǎn)生步驟,接者一個高速緩存接口階段。然后再接著一個高速緩存對齊階段。但是有一點很重要,本發(fā)明對數(shù)個輸入文字326片段進行密碼編譯,操作系統(tǒng)只要通過單一個指令便能完成。本發(fā)明始密碼編譯工作的細節(jié)動作完全透明化,而且和微處理器301內(nèi)其它執(zhí)行邏輯器同時進行運算。密碼編譯單元316和相關(guān)的XCRYPT指令322運作完全和現(xiàn)今較老舊操作系統(tǒng)運算兼容。
現(xiàn)請參考圖4,這是密碼編譯指令的方框圖。密碼編譯指令400包含了一個前置字段401,一個重復(fù)前置字段402,一個運算碼字段403,一個區(qū)塊解密模式字段404。一實施例中,字段401-404的內(nèi)容與x86指令結(jié)構(gòu)兼容。
運算時,許多指令集結(jié)構(gòu)都采取加入了一個選擇性的前置字段401。此字段內(nèi)容用來指示處理器開啟或關(guān)閉一些運算功能。例如直接作16位或20位運算的功能和直接處理或存取特定片段的功能等。重復(fù)前置字段402的內(nèi)容代表密碼編譯動作需要被重復(fù)執(zhí)行的次數(shù)。重復(fù)前置字段402也隱含地指示符合的微處理器,使用其中當作指針器的數(shù)個架構(gòu)性寄存器的內(nèi)容,而送到包含完成指定密碼運算所需的密碼數(shù)據(jù)及參數(shù)的系統(tǒng)內(nèi)存中的位置。如以上所提及,在x86兼容的實施例中,重復(fù)前置字段402的值為0xF3。并且,根據(jù)x86架構(gòu)協(xié)議,密碼編譯指令的形式與x86重復(fù)字符串指令(如RFP.MOVS)非常類似。例如,當由本發(fā)明的x86兼容微處理器實施例來執(zhí)行時,重復(fù)前置字段隱含地涉及儲存于架構(gòu)性寄存器ECX中的可變區(qū)塊計數(shù)、儲存于寄存器ESI中的來源地址指針器(指向密碼運算的輸入數(shù)據(jù))、以及儲存于寄存器EDI中的目的地址指針器(指向內(nèi)存中的輸出數(shù)據(jù)區(qū))。在x86相容實施例中,本發(fā)明進一步會將傳統(tǒng)的重復(fù)字符串指令概念延伸至進一步地涉及儲存于寄存器EDX中的控制字組指針器、儲存于寄存器EBX中的密碼密鑰指針器、以及儲存于寄存器EAX中的初始化向量的指針器(若借助預(yù)定密碼模式所需要的話)。
運算碼字段403指微處理器去執(zhí)行控制字符指示的密碼編譯運算,這個控制字符實際上是被存在內(nèi)存內(nèi),一控制字指針指向控制字在內(nèi)存中的位置。運算碼的值會被設(shè)定為一個現(xiàn)有指令集內(nèi)少用的值。如此一來,較老舊的操作系統(tǒng)及應(yīng)用軟件也能使用。例如說,一個x86兼容系統(tǒng)就可以將此值設(shè)為0x0FA7。區(qū)塊解密模式字段404指示哪一項密碼運算作業(yè)需被執(zhí)行。請看圖5。
圖5是一個區(qū)塊密碼字段值與微處理器運算動作對照表例子。如圖所示,若區(qū)塊密碼字段內(nèi)的值為0xC8時,微處理器就會用電子密碼本(ECB)模式來完成密碼編譯動作。當字段內(nèi)的值為0xD0時,微處理器就會以加密塊鏈(CBC)模式。OxE0表示微處理器應(yīng)使用加密反饋模式(CFB),0xE8表示使用輸出反饋模式(OFB)。以上所述各模式在FIPS文獻中均有詳細的描述。
請看圖6。圖6所要表現(xiàn)的是一個在X86兼容的微處理器600中的密碼編譯單元617的發(fā)明實施例。微處理器600內(nèi)有一個提取邏輯器601。提取邏輯器601從內(nèi)存(未顯示)取得指令。轉(zhuǎn)譯邏輯器602由一個邏輯器,電路,微指令碼(microcode)(就是微指令,micro instructions或原生碼,nativeinstruction)裝置或是其它可以將指令轉(zhuǎn)成對照的微指令碼的組件。轉(zhuǎn)譯邏輯器602內(nèi)的轉(zhuǎn)譯組件可以與微處理器600內(nèi)其它功能組件共享。如圖所示,轉(zhuǎn)譯邏輯器602內(nèi)包含了一個互相耦接的轉(zhuǎn)譯器603、微指令碼只讀存儲器604和區(qū)段指針器邏輯器640。中斷邏輯器626通過總線628耦接轉(zhuǎn)譯邏輯器602。軟/硬件所發(fā)出的中斷要求信號627都由中斷邏輯器626處理。中斷邏輯器626轉(zhuǎn)達指令轉(zhuǎn)譯邏輯器602中斷。如圖6所示,指令轉(zhuǎn)譯邏輯器與以下連串性階段耦接。包括寄存器階段605,地址階段606,加載階段607,執(zhí)行階段608,儲存階段618以及寫回階段619。圖6所描繪的執(zhí)行階段608內(nèi)包含了一個執(zhí)行邏輯器632。執(zhí)行邏輯器632內(nèi)有多個同時作業(yè)的執(zhí)行單元,單元610,612,614,616和617。整數(shù)單元610負責執(zhí)行微指令隊列609內(nèi)的整數(shù)微指令,浮點單元612負責執(zhí)行微指令隊列611內(nèi)的浮點微指令,MMX單元614負責執(zhí)行微指令隊列613內(nèi)的MMX微指令,SSE單元616負責執(zhí)行微指令隊列615內(nèi)的SSE微指令。SSE單元616和密碼編譯單元617耦接。兩單元中間有一個加載總線620,一個閑置信號621和一個儲存總線622。密碼編譯單元617和SSE單元共享同一個微指令隊列615。另一個實施例的做法是將密碼編譯單元617設(shè)為一個如單元610,612及614相同的完全獨立的單元。整數(shù)單元610和x86 EFLAGS寄存器是耦接的。EFLAGS寄存器包含了一個X位625。這個X位內(nèi)的值指示目前是否有密碼編譯運算正在作業(yè)。X位625實施例中的其中一項是x86 EFLAGS寄存器624中的第30個位。另外,整數(shù)單元610會讀取寄存器628中數(shù)據(jù)來分析一個E位629的狀態(tài)。E位中的值指示密碼編譯單元617是否存在于微處理器600內(nèi)。整數(shù)單元610也會讀取一個D位631。這個位位于特征控制寄存器630內(nèi),用來開啟和關(guān)閉密碼編譯單元617。如圖3微處理器301實施例,圖6的微處理器600為了能清楚表達發(fā)明特征,圖中只顯示出一些微處理器的構(gòu)造,其它部分則被匯集在一起或者已被省略。本領(lǐng)域技術(shù)人員可以理解組件,例如負責數(shù)據(jù)高速緩存(未顯示)的接口,總線接口單元(未顯示)以及時鐘發(fā)生器和分散邏輯器等其它微處理器的單元都被省略。
運算過程中,提取邏輯器配合時鐘信號(未顯示)將指令從內(nèi)存(未顯示)提至轉(zhuǎn)譯邏輯器602。轉(zhuǎn)譯邏輯器602將指令轉(zhuǎn)編為對應(yīng)的微指令然后配合時鐘信號轉(zhuǎn)供給微處理器600內(nèi)605-608,618及619等單元。每個指令對應(yīng)的一連串微指令指示微處理器該做的子動作來完成該項指令。例如一個由地址階段606執(zhí)行的地址產(chǎn)生指令,就包含了先從寄存器階段605特定的兩個寄存器(未顯示)內(nèi)取得兩個操作數(shù),然后再于整數(shù)單元610相加兩個操作數(shù)。所有執(zhí)行單元610,612,614,616及617所產(chǎn)生的結(jié)果都由儲存邏輯器618負責存入內(nèi)存中。轉(zhuǎn)譯邏輯器602會判斷指令的類型,然后使用轉(zhuǎn)譯器603直接產(chǎn)生一連貫的微指令,或是轉(zhuǎn)譯邏輯器602會由微指令碼只讀存儲器604中提提取一連貫的微指令?;蛘咿D(zhuǎn)譯邏輯器602會產(chǎn)生部分的微指令,剩下的再從微指令碼只讀存儲中提出。微指令按照時鐘速度的在微處理器600中遵循605-608,618和619各階段的順序執(zhí)行。當微指令移動到執(zhí)行階段608時,執(zhí)行邏輯器632將微指令發(fā)送至執(zhí)行單元610,612,614,616,及617所執(zhí)行運算產(chǎn)生的結(jié)果接著進入儲存階段618。在一實施例中,微指令包含了標明范圍了指令,不論能不能與其它運算同時進行。
轉(zhuǎn)譯邏輯器602接收到XCRYPT指令后,產(chǎn)生對應(yīng)的為指令,指揮微處理器600內(nèi)其它邏輯器605-608,618,619來執(zhí)行到的密碼編譯運算指令。前面幾個的微指令會直接被分派到密碼編譯單元617內(nèi)來指揮單元617從加載總線加載需要的數(shù)據(jù)。或是加載一個片段的輸入數(shù)據(jù),開始進行指示次數(shù)的密碼編譯回合。也有可能是將一段輸出數(shù)據(jù)流通過儲存總線622傳到儲存邏輯器618,然后再存入內(nèi)存中。接下來第二組數(shù)個指令會被分送到執(zhí)行單元610,612,614和616來執(zhí)行其它必要的子運算。例如測試E位629,設(shè)定D位631,將X位625的值設(shè)定為顯示密碼編譯運算正在執(zhí)行中,將X位625的值設(shè)定為顯示密碼編譯運算正在執(zhí)行中。更新寄存器內(nèi)容(如計數(shù)寄存器,輸入文字指針寄存器,輸出文字指針寄存器)寄存階段605范圍內(nèi)的工作,處理由中斷邏輯器626送來的中斷要求627等工作。為了實現(xiàn)最有效率的密碼編譯相關(guān)指令,微指令的順序會被特別排列成將整數(shù)單元微指令穿插于密碼編譯微指令中,已達成整數(shù)運算與密碼編譯運算平行執(zhí)行。微指令中包含了從中斷要求627中恢復(fù)所需要的微指令。所有指向密碼編譯參數(shù)(cryptographic parameter)和數(shù)據(jù)的指針都位于x86架構(gòu)寄存器內(nèi),收到中斷要求時,指針都會被儲存,中斷結(jié)束后,數(shù)據(jù)計參數(shù)會被恢復(fù)。因此,當中斷發(fā)生時,程控會轉(zhuǎn)移到對應(yīng)的中斷服務(wù)例程。如程控的此轉(zhuǎn)移的一部份,會清除X位625,以表示密鑰數(shù)據(jù)及控制字組數(shù)據(jù)不再有效。在從中斷中返回后,程控會立即轉(zhuǎn)回到XCRYPT指令,以及如其對應(yīng)的微指令的一部份,特定微指令會測試X位625的狀態(tài),以判斷密鑰數(shù)據(jù)及控制字組數(shù)據(jù)是否為有效。若如此,當中斷發(fā)生時,會重復(fù)正進行處理的特定區(qū)塊的輸入數(shù)據(jù)的運算。若X位625的狀態(tài)表示密鑰數(shù)據(jù)及控制字組數(shù)據(jù)不再為有效,則會從內(nèi)存中,重新加載伴隨著正進行處理的特定區(qū)塊的輸入數(shù)據(jù)的密鑰數(shù)據(jù)及控制字組。總之,根據(jù)本發(fā)明的XCRYPT指令的指令總是會涉及X位625的初始測試,以判斷密碼編譯單元617內(nèi)的密鑰數(shù)據(jù)及控制字組數(shù)據(jù)的有效性。若密鑰數(shù)據(jù)及控制字組數(shù)據(jù)不為有效,則密鑰數(shù)據(jù)及控制字組數(shù)據(jù)會從內(nèi)存中加載。然后,會加載借助輸入指針寄存器的內(nèi)容所指向的輸入數(shù)據(jù)區(qū)塊,并且會對輸入數(shù)據(jù)區(qū)塊執(zhí)行預(yù)定密碼運算。另外的方式是,會加載輸入數(shù)據(jù)區(qū)塊,并且不會先加載密鑰數(shù)據(jù)及控制字組數(shù)據(jù),而執(zhí)行預(yù)定密碼運算。
若產(chǎn)生新密鑰數(shù)據(jù)或新控制字組,則在執(zhí)行新XCRYPT指令之前,需要清除X位625。也會考慮到可使用相同的密鑰數(shù)據(jù)及控制字組數(shù)據(jù)來執(zhí)行連續(xù)的XCRYPT指令。在此種情況中,在加載初始密鑰數(shù)據(jù)及控制字組數(shù)據(jù)之后,不需清除X位625。例如,為了與內(nèi)存總線速度有關(guān)的最佳化目的,使用者可將例如是500個輸入數(shù)據(jù)區(qū)塊的加密/解密分解成5個XCRYPT指令,各自處理每一個的輸入數(shù)據(jù)區(qū)塊。
區(qū)塊指針器邏輯器640可確信對應(yīng)微指令會做安排,以允許用于指針寄存器,以及在處理中斷627之前,更新對一序列輸入文字區(qū)塊的一序列區(qū)塊密碼運算的中間結(jié)果。區(qū)塊指針器邏輯器640會指示將微指令插入對應(yīng)微指令的流程,以至于在完成對第一區(qū)塊的輸入數(shù)據(jù)的密碼運算時,內(nèi)存中的輸入及輸出數(shù)據(jù)區(qū)塊的指針器會修改成指向下個輸入及輸出數(shù)據(jù)區(qū)塊。此外,區(qū)塊指針器邏輯器640會指示將微指令插入對應(yīng)微指令的流程,以修改區(qū)塊計數(shù)器,以表示對目前區(qū)塊的輸入數(shù)據(jù)的密碼運算已完成。再有,在使用區(qū)塊密碼器模式的事件中,當對緊接的區(qū)塊數(shù)據(jù)執(zhí)行密碼運算時,需要使用起因于對目前區(qū)塊的數(shù)據(jù)執(zhí)行密碼運算的數(shù)據(jù),然后區(qū)塊指針器邏輯器640也會指示將微指令插入對應(yīng)微指令的流程,以保持或產(chǎn)生與保持起因于對目前區(qū)塊的數(shù)據(jù)執(zhí)行密碼運算的數(shù)據(jù)在初始化向量所指定的內(nèi)存的區(qū)域內(nèi),以至于在從中斷事件返回后,對緊接的區(qū)塊數(shù)據(jù)執(zhí)行密碼運算可持續(xù)下去。
請看圖7,圖7是一個微指令結(jié)構(gòu)的范例。這個微指令700就是用來指示像圖6所見的微處理器來執(zhí)行密碼編譯運算的指令。微指令700包含了一個微運算碼字段701,一個數(shù)據(jù)寄存器字段702和一個寄存器字段703。微運算碼字段701提供了微處理器600該執(zhí)行那些子運算程序,和每階段所要使用的邏輯器。在本發(fā)明中,特定的值是被指定到微指令以供譯碼單元運作使用。第一個值(XLOAD)指示從內(nèi)存中數(shù)據(jù)寄存器字段702指向的位置中的數(shù)據(jù)。這個數(shù)據(jù)應(yīng)被加載寄存器字段703所只是在密碼編譯單元中的位置。這個提出的數(shù)據(jù)(例如密碼編譯密鑰數(shù)據(jù),控制字,輸入文字數(shù)據(jù),初始化向量)是提供給密碼編譯單元用的。第二個微運算碼字段701的值(XSTOR),指示密碼編譯單元運算產(chǎn)生的結(jié)果應(yīng)存入內(nèi)存中數(shù)據(jù)寄存器字段702所指向的位置。針對多階結(jié)構(gòu)的密碼編譯單元,寄存器字段703的內(nèi)容指示在數(shù)個輸出數(shù)據(jù)片段那一個應(yīng)該被存入內(nèi)存中。輸出數(shù)據(jù)片段被放在數(shù)據(jù)域位704,供給儲存邏輯器讀取。接下來,參考圖8與圖9,將更進一步探討XLOAD和XSTOR在密碼編譯單元中的執(zhí)行流程。
請參考圖8,表格800是如先前所述,微處理器轉(zhuǎn)譯XCRPYT指令得到一組為指令。這組微指令中的前面第一組數(shù)個微指令由密碼編譯單元直接執(zhí)行,接下來第二組的數(shù)個微指令則是由一個或是多個其它單元平行執(zhí)行。第二組數(shù)個微指令所進行的動作包括更新計數(shù)器,臨時寄存器,結(jié)構(gòu)寄存器,測試和設(shè)定機械特定寄存器的位狀態(tài)等。第一組數(shù)個的微指令則提供密鑰數(shù)據(jù),密碼編譯參數(shù),和輸入數(shù)據(jù)給密碼編譯單元,并指揮密碼編譯單元產(chǎn)生密鑰程序表(或加載由內(nèi)存中提出的密鑰程序表),加載或?qū)⑤斎胛淖旨用芑蚪饷?,儲存輸出文字?shù)據(jù)。一XLOAD微指令指示密碼編譯單元加載控制字數(shù)據(jù),加載密碼編譯密鑰或密鑰程序表,加載初始化向量數(shù)據(jù),加載輸入文字數(shù)據(jù),和指示開始進行密碼編譯運算。當微指令微XLOAD時,寄存器字段703中的值0b010指示密碼編譯單元將控制字加載控制字指針寄存器。隨指這個指令在管線中前進,其中會遇到一個寄存器內(nèi)存控制字指針。這個指針指向內(nèi)存中控制字的位置。加載邏輯器從高速緩沖存儲器中提出這個控制字,放入數(shù)據(jù)域位704。相同的,寄存器字段值0b100指示密碼編譯單元加載數(shù)據(jù)域位704中的輸入文字數(shù)據(jù)。然后再進行密碼編譯運算。如同控制字符,輸入數(shù)據(jù)是通過一個存在結(jié)構(gòu)寄存器內(nèi)的指針提出。
一實施例中,寄存器字段0b100和0b101可被視為一個兩階段的密碼編譯單元。連續(xù)的輸入文字數(shù)據(jù)可被管線化。第一個XLOAD微指令將第一段輸入文字放入IN-1,第二個XLOAD微指令將第二段輸入文字放入IN-0,第二個XLOAD微指令也會啟動密碼編譯單元執(zhí)行密碼編譯運算。
如果密碼編譯運算所使用的是使用者自行產(chǎn)生的密鑰程序表,則XLOAD微指令的數(shù)目與使用者自行產(chǎn)生的密鑰程序表中密鑰的數(shù)目相對應(yīng)。使用者自行產(chǎn)生的密鑰程序表會被分送到密碼編譯單元內(nèi),此單元會依照密碼編譯進行的狀況從密鑰程序表中加載該回合所使用的密鑰。
XLOAD微指令寄存器字段703中其它值都為保留值。
請看圖9,圖9表格中顯示XSTOR微指令寄存器字段703的對照表。XSTORE指令指示密碼編譯單元將處理好的輸出文字片段(加密過或解密過的)存到位置字段702所指示的內(nèi)存內(nèi)的位置。根據(jù)本發(fā)明,翻譯邏輯器先產(chǎn)生一個XLOAD微指令加載一段輸入文字,然后再發(fā)出XSTOR將該輸入文字所產(chǎn)生的對應(yīng)輸出文字儲存。寄存器字段703的值0b100指示密碼編譯單元提供內(nèi)部寄存器output-0,OUT-0中的輸出文字片段供給儲存邏輯器做儲存。OUT-0的內(nèi)容是IN-0中輸入文字片段的對應(yīng)。相同的,寄存字段0b101指向的內(nèi)部寄存器output-1,其內(nèi)容是IN-1中輸入數(shù)據(jù)的對應(yīng)。加載密鑰和控制字數(shù)據(jù)后,下XLOAD.IN-1,數(shù)個輸入文字片段可以被管線化的加載密碼編譯單元。XLOAD.IN-0微指令(XLOAD.IN-0也是指示密碼編譯單元開始執(zhí)行密碼編譯運算),XSTOR.OUTPUT-1,XSTOR.OUT-0,XLOAD.IN-1,XLOAD.IN-0(開始替下一個輸入文字片段進行運算)等等。
請看圖10,圖10是一個控制字符1000的格式例子??刂谱址邪酥甘久艽a編譯運算所用的密碼編譯參數(shù)??刂谱址?000是由使用者編制入內(nèi)存中。在進行密碼編譯運算前,指向控制字符的指針位于一個結(jié)構(gòu)寄存器內(nèi)。所以XCRYPT指令對應(yīng)的一組微指令中,LOAD微指令指示微處理器讀取含有該指針的架構(gòu)寄存器,并將指針轉(zhuǎn)成實體地址,從內(nèi)存(高速緩存)取出控制字符1000,放入密碼編譯單元內(nèi)部的控制字寄存器。控制字符1000包含了一個保留的RSVD字段1001,一表示密鑰大小的KSIZE字段2002,一加密/解密E/D字段1003,一中間結(jié)果IRSLT字段1004,一密鑰產(chǎn)生KGEN字段1005,一算法ALG字段1006和一回合數(shù)計數(shù)RCNT字段1007。
所有保留字段1001的值都要被保留。KSIZE字段1002的值表示加密或解密所用的密鑰的大小。一實施例中,KSIZE字段1002指示密鑰究竟是128位,192位還是256位。E/D字段1003注明這個密碼編譯表達式加密或是解密運算。KGEN字段1005指示內(nèi)存中密鑰是使用者產(chǎn)生的密鑰程序表還是一個單一密鑰。如果內(nèi)存中的是單一密鑰,則微指令會把這個密碼編譯密鑰,根據(jù)ALG字段1006內(nèi)容指定密碼編譯算法展開成一密鑰程序表。一實施例中,ALG字段1006指定AES算法,所以迄今為止,我們所作的討論都是針對Triple-DES和AES算法。其它應(yīng)用不同密碼編譯算法的實施例,如RijndaelCipher,Twofish Ciper,等。RCNT字段1007的內(nèi)容指示密碼編譯時遵循所用的算法對每個文字片段所需重復(fù)進行密碼編譯的回合數(shù)。雖然以上所述的密碼編譯算法的規(guī)范指示對不同的輸入文字片段進行固定次數(shù)回合的密碼編譯,但是RCNT字段1007允許程序編制員將RCNT字段1007的值設(shè)為可以依照使用的算法而改變。一實施例中程序編制員指定要對每段文字進行0至15回合密碼編譯。最后,IRSLT字段1004內(nèi)容注明對輸入文字加密/解密的回合次數(shù)是否參照RCNT字段1007和ALG字段1006注明的算法或是根據(jù)ALG字段1006中注明的算法,RCNT字段1007做的演算數(shù)目產(chǎn)生的只是一個中間結(jié)果,并不是最后結(jié)果。本領(lǐng)域技術(shù)人員能了解,許多密碼編譯算法會重復(fù)進行同一個子運算,最后一回合時再做不同的運算。所以IRSLT字段1004所提供的是一個中間結(jié)果,并且允許程序編制員能夠在進行下一步動作前對這個中間結(jié)果先加以確認。例如最后結(jié)果是對中級結(jié)果增值而來的,可以先對文字進行一回合加密,然后再對同樣一個文字片段進行二回合的密碼編譯,然后再進行三回合,等等。這個可以設(shè)定的密碼編譯回合設(shè)定功能和中間結(jié)果功能始使用者能夠評估密碼編譯的效能,解決問題,也是一個研究不同密鑰結(jié)構(gòu)和回合次數(shù)的工具。
請看圖11,一個密碼編譯單元1100的方框圖。密碼編譯單元包含了一個微程序碼寄存器1103。微程序碼寄存器1103通過微指令總線1114接收微指令。(如XLOAD和XSTOR等微指令)密碼編譯單元1100也包含了一個控制字符寄存器1104,一input-0寄存器1105,一input-1寄存器1106,一key-0寄存器1107,和一key-1寄存器1108。加載總線1111遵照XLOAD微指令在微指令寄存器1103中的內(nèi)容將數(shù)據(jù)加載存器1104-1108中。密碼編譯單元1100還包含了一個與所有寄存器1103-1108和密鑰隨機存取內(nèi)存1102耦接的區(qū)塊解密邏輯器1101。區(qū)塊解密邏輯器提供一停止信號1113和一區(qū)塊結(jié)果至output-0寄存器1109和ouput-1寄存器1110。輸出寄存器1109-1110會將內(nèi)部內(nèi)容循序的通過儲存總線1112送至微處理器。一實施例中微指令寄存器1103是32位,而其它寄存器1104-1110則是128位。
在運算中,密碼編譯微指令依序的被送至微指令寄存器1103,另外,控制字寄存器1104和輸入寄存器1105-1106其中之一或密鑰寄存器1107-1108其中之一也會被跟著一起送至微指令寄存器內(nèi)。一配合圖8和圖9所討論的實施例中,控制字先在XLOAD微指令發(fā)出后備加載控制字符寄存器1104內(nèi)。接下來密碼編譯密鑰或密鑰程序表在接下來的XLOAD微指令下指揮下也被加載。如果要加載的是一個128位大小的密碼編譯密鑰,則XLOAD微指令會安排KEY-01107來儲存這個密鑰。若是密鑰大小大于128位,則XLOAD會安排KEY-01107和KEY-11108來儲存此密鑰。如果加載的是一使用者產(chǎn)生密鑰,接下來的XLOAD微指令會安排KEY-01107。每個密鑰程序表中的密鑰都會依序被排列在密鑰隨機存取內(nèi)存1102中,以供每個密碼編譯回合中使用。接下來輸入文字數(shù)據(jù)(若不需要初始化向量)會被加載IN-1寄存器1106。XLOAD中的一個微指令會指示IN-0寄存器1105將輸入數(shù)據(jù)加載并且根據(jù)控制字寄存器1104中的內(nèi)容,應(yīng)用在IN-1寄存器或是在兩個輸入寄存器1105-1106內(nèi)的初始化向量開始對寄存器內(nèi)的數(shù)據(jù)進行密碼編譯工作。(如果輸入數(shù)據(jù)被管線化)收到XLOAD微指令指定IN-0寄存器1005后,區(qū)塊解密邏輯器便遵循控制字的內(nèi)容開始進行密碼編譯。如果需要展開單一密碼編譯密鑰,那么區(qū)塊解密邏輯器便會產(chǎn)生密鑰程序表內(nèi)的每一把密鑰,并且將它們存在密鑰隨機存取內(nèi)存1102內(nèi)。不管區(qū)塊解密邏輯器是否需要產(chǎn)生密鑰程序表或是密鑰程序表已經(jīng)從內(nèi)存內(nèi)加載,密碼解密第一回合所用到的密鑰一定是被存在區(qū)塊解密邏輯器1101中的高速寄存內(nèi),這樣第一區(qū)塊的密碼解譯回合就可以直接進行,無須再從密鑰隨機存取內(nèi)存1102取得。一但區(qū)塊解密邏輯器開始動作,便會對一塊或一塊以上的輸入文字進行密碼編譯運算,逐次的從密鑰隨機內(nèi)存中提取所要用到的密鑰。密碼編譯單元1100對指定的輸入片段文字進行特定的密碼編譯運算。下達XLOAD和XSTOR微指令來對輸入文字進行加密或解密。執(zhí)行XSTOR微指令時,若輸出數(shù)據(jù)(OUT-0或OUT-1)還沒準備好,則區(qū)塊解密邏輯器會設(shè)一個停止信號1113。一但輸出數(shù)據(jù)產(chǎn)生完成并且已被存入對應(yīng)的寄存器1109-1110內(nèi),那么寄存器里的內(nèi)容就會被轉(zhuǎn)入儲存總線1112。
請看圖12。圖12是一個AES算法區(qū)塊解密邏輯器1200的方框圖。區(qū)塊解密邏輯器1200包含了一個回合計算引擎(round engine)1220,一個回合計算引擎控制器1210?;睾嫌嬎阋?220通過總線1211-1214和總線1216-1218與回合計算引擎控制器1210耦接?;睾嫌嬎阋婵刂破骺梢源嫒∥⒅噶罴拇嫫?201,KEY-1寄存器1204來讀取密鑰數(shù)據(jù),微指令和密碼編譯運算參數(shù)。寄存器1205-1206中的內(nèi)容,供給回合計算引擎1220,然后回合計算引擎1220再將對應(yīng)的輸出文字傳到輸出寄存器1207-1208內(nèi)。輸出寄存器1207-1208通過總線1216-1217與回合計算引擎控制器1210耦接。這樣回合計算引擎控制器就能讀取每一密碼編譯回合的結(jié)果,再供給回合計算引擎1220,讓回合計算引擎1220能通過總線NEXTIN1218進行下一回合的密碼編譯運算。密碼編譯密鑰通過總線1215從密鑰隨機讀取內(nèi)存(未顯示)中被提出。ENC/DEC 1211信號指示回合計算引擎進行加密(S-Box)或解密(反向S-Box)。RNDCON總線1212指示回合計算引擎進行第一AES回合或中級AES回合或是最后一回合的AES。GENKEY信號1214設(shè)定時代表回合計算引擎1220需要將從總線1213取得的密鑰展開成密鑰程序表。密鑰總線1213也是用來提供密鑰的,它會將每一回合所需要用的密鑰提供給回合計算引擎1220。
回合計算引擎1220與第一個寄存器REG-0 1222耦接,內(nèi)包含了第一密鑰XOR邏輯器1221。第一個寄存器1222與S-Box邏輯器1223耦接。S-Box邏輯器1223與移列邏輯器1224(Shift Row logic)耦接。移列邏輯器1224與第二個寄存器REG-1 1225耦接。第二個寄存器REG-1 1225與混欄(MixColumn)邏輯器1226耦接。而混欄邏輯器與第三個寄存器REG-2 1227耦接。第一密鑰邏輯器1221,S-Box邏輯器1223,移列邏輯器1224及混欄邏輯器1226作為執(zhí)行名稱相子程序運算?;鞕谶壿嬈?226用途為對在進行中級密碼運算回合中時加入的數(shù)據(jù)進行AESXOR運算,使用密鑰總線1213所提供的回合密鑰。當ENC/DNC狀態(tài)指示進行解密時第一密鑰邏輯器1221,S-Box邏輯器1223,移列邏輯器1224及混欄邏輯器1226也用來進行對應(yīng)的逆AES子程序運算。本領(lǐng)域技術(shù)人員可以了解進行中級回合時數(shù)據(jù)會根據(jù)控制字符寄存器1202內(nèi)容所指示的區(qū)塊解密模式,將數(shù)據(jù)反饋至回合計算引擎1220。若需要初始化向量數(shù)據(jù)時,初始化向量會通過總線NEXTIN1218被傳回回合計算引擎1220。
圖12是一實施例。如圖所示回合計算引擎被分割為兩個階段REG-01222和REG-1 1225間的第一階段和REG-1 1225和REG-2 1227間的第二階段。中階回合的數(shù)據(jù)被放在兩個階段中,配合時鐘信號(位顯示)移動。當密碼編譯運算完成一塊輸入數(shù)據(jù),輸出數(shù)據(jù)被存入對應(yīng)的輸出寄存器1207-1208。執(zhí)行XSTOR微指令會使寄存器1207-1208將內(nèi)含數(shù)據(jù)傳送至儲存總線(未顯示)。
參照圖13,所顯示的流程圖具有用以保持中斷事件期間的密碼參數(shù)的狀態(tài)的根據(jù)本發(fā)明的方法的特性。當指令的流程借助根據(jù)本發(fā)明的微處理器來執(zhí)行時,流程會從方框1302開始。指令的流程包括XCRYPT指令是不必要的,如在此所述。然后流程會繼續(xù)進行判斷方框1304。
在判斷方框1304,會進行估算,以判斷中斷事件(例如,可屏蔽中斷、不可屏蔽中斷、分頁錯誤、工作切換等)是否正發(fā)生,而需要將指令的此流程改變成指令的一種流程(“中斷處理程序”),以處理中斷事件,若如此,則流程會繼續(xù)進行方框1306。若否,則指令執(zhí)行的判斷方框1304上的流程回路會持續(xù),直到中斷事件發(fā)生。
在方框1306,因為中斷事件已發(fā)生,所以在程控轉(zhuǎn)移到對應(yīng)的中斷處理程序之前,根據(jù)本發(fā)明的中斷邏輯器會指示清除標記寄存器內(nèi)的X位。清除X位可確信在從中斷處理程序返回后,若區(qū)塊密碼器運算仍在進行,則其將顯示發(fā)生一個或多個中斷事件,并且在對由輸入指針寄存器的內(nèi)容所指示的此區(qū)塊的輸入數(shù)據(jù),持續(xù)區(qū)塊密碼器運算之前,必須重新加載控制字組數(shù)據(jù)及密鑰數(shù)據(jù)。然后,流程會繼續(xù)進行方框1308。
在方框1308,包含對應(yīng)于根據(jù)本發(fā)明的區(qū)塊密碼器運算的效能的指針器及計數(shù)器的所有架構(gòu)性寄存器會儲存到內(nèi)存。本領(lǐng)域技術(shù)人員將了解到的是,架構(gòu)性寄存器的儲存為在控制轉(zhuǎn)移到中斷處理程序之前,通常會在目前數(shù)據(jù)計算裝置中完成的動作。因此本發(fā)明利用目前數(shù)據(jù)架構(gòu)的此種觀點,來提供遍及中斷事件的執(zhí)行透明度。在寄存器儲存之后,然后流程會繼續(xù)進行方框1310。
在方框1310,程序流程會轉(zhuǎn)移到中斷處理程序。然后,流程會繼續(xù)進行方框1312。
在方框1312,此方法會完成。本領(lǐng)域技術(shù)人員將了解到的是,在從中斷處理程序返回后,圖13的方法會再次從方框1302開始。
請看圖14,所提供的流程圖繪示根據(jù)本發(fā)明的方法出現(xiàn)一個或多個中斷事件時,對數(shù)個輸入數(shù)據(jù)區(qū)塊,執(zhí)行特定密碼運算。
流程會從方框1402開始,其中,根據(jù)本發(fā)明的XCRYPT指令會開始執(zhí)行。XCRYPT指令的執(zhí)行會最優(yōu)先執(zhí)行,或由于中斷事件的中斷的執(zhí)行,所以其可為緊接于最優(yōu)先執(zhí)行之后的執(zhí)行,以致于在已執(zhí)行中斷處理程序之后,程控會轉(zhuǎn)回到XCRYPT指令。然后流程會繼續(xù)進行方框1404。
在方框1404,借助根據(jù)本發(fā)明的輸入指針寄存器的內(nèi)容所指示的內(nèi)存中的一區(qū)塊數(shù)據(jù)會從內(nèi)存中加載,并且預(yù)定密碼運算會開始。所使用的特定輸入指針寄存器由指定的特定密碼運算(例如,加密或解密),以及由指定的區(qū)塊密碼器模式(例如,ECB、CBC、CFB、或OFB)來決定。例如,若指定的加密運算使用OFB模式,則用來加載數(shù)據(jù)的輸入指針寄存器為指示內(nèi)存中的初始化向量的寄存器。若指定的解密運算使用ECB模式,則用來加載數(shù)據(jù)的輸入指針寄存器為指示內(nèi)存中的下個區(qū)塊的密文的寄存器。然后,流程會繼續(xù)進行判斷方框1406。
在判斷方框1406,會進行估算,以判斷標記寄存器內(nèi)的X位是否已設(shè)定。若X位已設(shè)定,則其表示目前加載于根據(jù)本發(fā)明的密碼單元元內(nèi)的控制字組及密鑰清單為有效。若X位已清除,則其表示目前加載于密碼單元內(nèi)的控制字組及密鑰清單為無效。如以上配合圖13所提及的,當中斷事件發(fā)生時,會清除X位。此外,如已所提及,當需加載新控制字組或密鑰清單,或二者時,在發(fā)出XCRYPT指令之前,需執(zhí)行清除X位的指令。在使用x86EFLAGS寄存器的位30的x-86兼容實施例中,X位可借助緊接于POPFD指令的PUSHFD指令來執(zhí)行清除。然而,本領(lǐng)域技術(shù)人員將了解的是,在另外實施例中,必須使用其它指令來清除X位。若X位已設(shè)定,則流程會繼續(xù)進行方框1412。若X位已清除,則流程會繼續(xù)進行方框1408。
在方框1408,因為清除的X位已表示已發(fā)生中斷事件,或已加載新控制字組及/或密鑰數(shù)據(jù),所以控制詞會從內(nèi)存中加載。在一實施例中,加載控制字組會阻止密碼單元執(zhí)行以上配合方框1404所提及的預(yù)定密碼運算。在此范例的實施例中,方框1404中的開始密碼運算可使借助假設(shè)使用目前加載的控制字組及密鑰數(shù)據(jù)的多個區(qū)塊密碼器運算最佳化。因此,在判斷方框1406中的檢查X位的狀態(tài)之前,會加載目前區(qū)塊的輸入數(shù)據(jù),并且會開始密碼運算。然后,流程會繼續(xù)進行方框1410。
在方框1410,密鑰數(shù)據(jù)(亦即,密碼密鑰或完整密鑰程序表)會從內(nèi)存中加載。此外,方框1404中所提及的輸入?yún)^(qū)塊會再次加載,并且會根據(jù)最新加載的控制字組及密鑰程序表,而使密碼運算開始。然后,流程會繼續(xù)進行方框1412。
在方框1412,會產(chǎn)生對應(yīng)于加載的輸入?yún)^(qū)塊的輸出區(qū)塊。然后,流程會繼續(xù)進行方框1414。
在方框1414,若借助區(qū)塊密碼器模式及預(yù)定密碼運算所需要,則會產(chǎn)生下個區(qū)塊的輸入數(shù)據(jù)。例如,在配置用于OFB加密的一實施例中,為了產(chǎn)生下個區(qū)塊的輸入數(shù)據(jù),需要將目前產(chǎn)生的密文區(qū)塊與目前區(qū)塊的明文進行互斥或。執(zhí)行此運算會產(chǎn)生用于下次區(qū)塊運算的輸入數(shù)據(jù)(亦即,用于第一輸入?yún)^(qū)塊之后的所有區(qū)塊的“等效初始化向量”)。在此方框內(nèi)所述的步驟需確信將允許隨時會中斷的XCRYPT指令的執(zhí)行的狀態(tài)。例如,在一實施例中,在XCRYPT指令的執(zhí)行期間,分頁錯誤隨時會發(fā)生。因此,當已完成對目前輸入數(shù)據(jù)區(qū)塊的預(yù)定密碼運算時,需要設(shè)定用以處理下個輸入數(shù)據(jù)區(qū)塊的等效初始化向量(若借助區(qū)塊密碼器模式所需要)。當借助使用的特定區(qū)塊密碼器模式所需要時,等效初始化向量會儲存到借助初始化向量指針寄存器的內(nèi)容所指示的位置的內(nèi)存。然后,流程會繼續(xù)進行方框1418。
在方框1416,產(chǎn)生的輸出區(qū)塊會存入內(nèi)存。然后,流程會繼續(xù)進行方框1418。
在方框1418,輸入及輸出區(qū)塊指針寄存器的內(nèi)容會改為指向下個輸入及輸出數(shù)據(jù)區(qū)塊。此外,區(qū)塊計數(shù)寄存器的內(nèi)容會改為顯示完成對目前輸入數(shù)據(jù)區(qū)塊的密碼運算。在配合圖14所討論的實施例中,區(qū)塊計數(shù)寄存器會減少。然而,本領(lǐng)域技術(shù)人員將了解的是,另外實施例會考慮區(qū)塊計數(shù)寄存器的操控及測試,而也可使輸入文字區(qū)塊的執(zhí)行管線化。然后,流程會繼續(xù)進行判斷方框1420。
在判斷方框1420,會進行估算,以判斷輸入數(shù)據(jù)區(qū)塊是否仍進行運算。在此實施例在此所具有的特性中,為了說明的目的,會估算區(qū)塊計數(shù)器,以判斷其是否等于0。若沒有區(qū)塊仍進行運算,則流程會繼續(xù)進行方框1424。若有區(qū)塊仍進行運算,則流程會繼續(xù)進行方框1422。
在方框1422,會加載下個區(qū)塊的輸入數(shù)據(jù),如由輸入指針寄存器的內(nèi)容所指示的。然后,流程會繼續(xù)進行方框1412。
在方框1424,此方法會完成。
本領(lǐng)域技術(shù)人員將了解的是,配合方框1412、1414、1416、以及1418所討論的步驟不必依序產(chǎn)生,而可無次序或并行地產(chǎn)生。
雖然本發(fā)明已以較佳實施例揭示如上。例如本發(fā)明目前實施例皆以x86架構(gòu)作為基準,因為x86架構(gòu)是一個較多人熟悉的架構(gòu),因此以x86架構(gòu)講述較方便。本發(fā)明也可以同樣被應(yīng)用在其它架構(gòu)上,如PowerPC,MIPS,或其它指令集架構(gòu)完全不同的系統(tǒng)上。
本發(fā)明可以應(yīng)用于微處理器以外的計算機系統(tǒng)密碼編譯運算上。本發(fā)明所使用的指令模式可以輕易的被轉(zhuǎn)換利用于別種微處理器以外的計算機處理系統(tǒng)上。本發(fā)明可以被包含于微處理器的周邊芯片組內(nèi),如北橋,南橋,或是被制作成一個與微處理器相連,專門負責處理密碼編譯的密碼編譯微處理器。當微處理器看見密碼編譯相關(guān)的動作時就把工作交給這個密碼編譯微處理器。本發(fā)明可應(yīng)用于嵌入式控制器,工業(yè)用控制器,信號處理器,陣列處理機,以及其它處理數(shù)據(jù)用的處理器內(nèi)。本發(fā)明可被實現(xiàn)成一個只包含實施密碼編譯運算所需的必要原件,而成為一個低成本和低耗電量的密碼編譯運算執(zhí)行器。例如通訊系統(tǒng)內(nèi)處理加密/解密的處理器。為求明確起見其它的處理組件以上一概稱微處理器。
另外,本發(fā)明至今雖都以128-位大小的區(qū)塊考慮,但是其它不同大小的區(qū)塊也能應(yīng)用。只要將輸入數(shù)據(jù),輸出數(shù)據(jù),密鑰和控制字符寄存器的大小做調(diào)整即可。
本發(fā)明目前應(yīng)用范圍雖然都屬于較廣泛應(yīng)用的DES,Triple-DES和AES算法,但是較鮮為人知的區(qū)塊密碼模式,如MARS Cipher,Rijndeal cipher,Twofish cipher,Blowfish Cipher,Serpant Cipher和RC6 cipher,也都是本發(fā)明可能的應(yīng)用范圍。
雖然目前討論范圍都以區(qū)塊密碼編譯算法和其算法相關(guān)技巧來表現(xiàn)本發(fā)明的密碼編譯功能,在此需聲明本發(fā)明可以完全的被應(yīng)用于其它密碼編譯算法上。只要是能夠執(zhí)行一密碼編譯運算,加密或解密,并且微處理器內(nèi)包含一個專門在收到密碼編譯指令后進行密碼編譯功能即可。
另外,針對以上所討論的回合計算引擎,但是該回合計算引擎中管線化處理輸入片段的階段不限于以上所述的兩個階段。該回合計算引擎的管線階段可為兩個或兩個以上。
最后,雖然目前針對本發(fā)明的討論目前限于單一個密碼編譯單元處理數(shù)個區(qū)塊密碼編譯算法,在此需聲明本發(fā)明可以包含多個平行密碼編譯單元,與一微處理器中其它執(zhí)行單元耦結(jié)。其中數(shù)個密碼編譯單元可以是分別處理不同區(qū)塊算法。例如第一個單元負責處理高階加密標準AES算法,第二單元處理數(shù)據(jù)加密標準DES算法等等以此類推。
以上所述,僅為本發(fā)明較佳實施例而已,并非用來限定本發(fā)明實施的范圍。即凡依本發(fā)明所作的均等變化與修飾,皆為本發(fā)明專利范圍所涵蓋。
權(quán)利要求
1.一種用以執(zhí)行密碼編譯運算的裝置,包括一密碼編譯指令,由一計算裝置來接收,其為屬于微處理器執(zhí)行的指令流程中的一步驟,其中該密碼指令指示微處理器進行一個特定的密碼編譯運算;以及執(zhí)行邏輯器,運作上耦接至該密碼編譯指令,組態(tài)為用以執(zhí)行該密碼編譯指令的該密碼編譯運算,其中該密碼編譯運算包括顯示該密碼編譯運算是否已由一中斷事件所中斷。
2.根據(jù)權(quán)利要求1所述的裝置,其中該密碼編譯運算至少包括下列之一或其組合一加密運算,將數(shù)個明文片段轉(zhuǎn)成對應(yīng)的數(shù)個密文片段;一解密運算,將數(shù)個密文片段轉(zhuǎn)成對應(yīng)的數(shù)個明文片段。
3.根據(jù)權(quán)利要求1所述的裝置,其中該密碼編譯指令會指定一區(qū)塊密碼器模式,該區(qū)塊密碼器模式用于完成該密碼編譯運算。
4.根據(jù)權(quán)利要求3所述的裝置,其中該區(qū)塊密碼器模式選自下列之一或其組合電子密碼本模式、加密塊鏈模式、加密反饋模式、輸出反饋模式。
5.根據(jù)權(quán)利要求1所述的裝置,其中密碼編譯指令指示對數(shù)個的文字片段進行該密碼編譯運算。
6.根據(jù)權(quán)利要求5所述的裝置,其中還包括一位,耦接至該執(zhí)行邏輯器,組態(tài)為用以顯示該密碼編譯運算是否已由一中斷事件所中斷。
7.根據(jù)權(quán)利要求6所述的裝置,其中該位包含于一標記寄存器中,該標記寄存器包括一x86-兼容微處理器內(nèi)的一EFLAGS寄存器,并且其中該位包括該EFLAGS寄存器內(nèi)的位30。
8.根據(jù)權(quán)利要求1所述的裝置,其中該中斷事件包括程控轉(zhuǎn)移到配置用以處理該中斷事件的一程序流程,并且其中對一目前輸入數(shù)據(jù)區(qū)塊所執(zhí)行的該密碼編譯運算會中斷。
9.根據(jù)權(quán)利要求8所述的裝置,其中在程控返回該密碼編譯指令之后,對該目前輸入數(shù)據(jù)區(qū)塊,會立即執(zhí)行該密碼編譯運算。
10.根據(jù)權(quán)利要求1所述的裝置,其中還包括區(qū)塊指針器邏輯器,運作上耦接至該執(zhí)行邏輯器,組態(tài)為用以指示該計算裝置,在對一目前輸入數(shù)據(jù)區(qū)塊,完成該密碼編譯運算時,將內(nèi)存中的輸入及輸出數(shù)據(jù)區(qū)塊的指針器修改為指向下個輸入及輸出數(shù)據(jù)區(qū)塊。
11.根據(jù)權(quán)利要求1所述的裝置,其中還包括區(qū)塊指針器邏輯器,運作上耦接至該執(zhí)行邏輯器,組態(tài)為用以指示該計算裝置,修改一區(qū)塊計數(shù)寄存器的內(nèi)容,以表示已對一目前輸入數(shù)據(jù)區(qū)塊,完成該密碼編譯運算;以及區(qū)塊指針器邏輯器,運作上耦接至該執(zhí)行邏輯器,配置用以指示該計算裝置,保持,或產(chǎn)生與保持起因于對一目前區(qū)塊的數(shù)據(jù),執(zhí)行該密碼編譯運算的數(shù)據(jù),以致于在從該中斷事件返回之后,對接下來的數(shù)據(jù),執(zhí)行該密碼編譯運算會持續(xù)下去。
12.根據(jù)權(quán)利要求1所述的裝置,其中該中斷事件包括一中斷、一例外、一分頁錯誤、及一工作切換。
13.根據(jù)權(quán)利要求1所述的裝置,其中該密碼編譯指令間接指向微處理器內(nèi)數(shù)個寄存器。
14.根據(jù)權(quán)利要求13所述的裝置,其中這些寄存器至少包括下列之一或其組合一第一寄存器,其中含有第一個指針指向第一個內(nèi)存位置,此第一內(nèi)存位置是數(shù)個輸入文字片段中第一個文字片段的位置;一第二寄存器,其中含有第二個指針指向第二個內(nèi)存位置,此第二內(nèi)存位置是內(nèi)存中儲存數(shù)個輸出文字片段的位置,這些輸出文字片段是輸入文字片段經(jīng)歷過密碼編譯運算的結(jié)果;一個第三寄存器,其中是指示輸入文字片段的總數(shù);一個第四寄存器,其中第四寄存器的內(nèi)容包含了第三指針,指向第三個內(nèi)存位置,這個內(nèi)存位置是密碼編譯密鑰在內(nèi)存中的位置;一個第五寄存器,其中第五寄存器內(nèi)中包含了第四指針,指向第四個內(nèi)存位置,這個內(nèi)存位置是初始化向量在內(nèi)存里的位置;以及一個第六寄存器,其中第六寄存器內(nèi)中包含了第五指針,指向第五個內(nèi)存位置,這個內(nèi)存位置是控制字符的位置,此控制字符是密碼編譯參數(shù)之一。
15.根據(jù)權(quán)利要求14所述的裝置,其中該密碼編譯密鑰數(shù)據(jù)下列之一或其組合一密碼密鑰及一密碼密鑰程序表。
16.根據(jù)權(quán)利要求1所述的裝置,其中該執(zhí)行單元包括一密碼編譯單元,組態(tài)為接收第一組數(shù)個微指令,對數(shù)個輸入文字片段分別執(zhí)行數(shù)回合的密碼編譯指令,產(chǎn)生數(shù)個輸出文字片段,其中數(shù)個密碼編譯回合由密碼編譯單元中控制字符控制。
17.一種用以執(zhí)行密碼運算的裝置,包括一密碼編譯單元,位于一裝置內(nèi),組態(tài)為接收屬于一指令流程內(nèi)的一密碼編譯指令,并用以響應(yīng)執(zhí)行該密碼指令指示微處理器進行的一個特定的密碼編譯運算;以及一位,位于一寄存器內(nèi),運作上耦接至該密碼編譯單元,組態(tài)為用以顯示該密碼編譯運算是否已由一中斷事件所中斷。
18.根據(jù)權(quán)利要求17所述的裝置,其中該中斷事件包括一中斷、一例外、一分頁錯誤、及一工作切換。
19.根據(jù)權(quán)利要求17所述的裝置,其中該中斷事件包括程控轉(zhuǎn)移到配置用以處理該中斷事件的一程序流程,并且其中對一目前輸入數(shù)據(jù)區(qū)塊所執(zhí)行的該密碼編譯運算會中斷。
20.根據(jù)權(quán)利要求19所述的裝置,其中在程控返回該密碼編譯指令之后,對該目前輸入數(shù)據(jù)區(qū)塊,會立即執(zhí)行該密碼編譯運算。
21.根據(jù)權(quán)利要求17所述的裝置,其中還至少包括下列之一或其組合區(qū)塊指針器邏輯器,運作上耦接至該執(zhí)行邏輯器,配置用以指示該計算裝置,在對一目前輸入數(shù)據(jù)區(qū)塊,完成該密碼編譯運算時,將內(nèi)存中的輸入及輸出數(shù)據(jù)區(qū)塊的指針器修改為指向下個輸入及輸出數(shù)據(jù)區(qū)塊;區(qū)塊指針器邏輯器,運作上耦接至該執(zhí)行邏輯器,配置用以指示該計算裝置,修改一區(qū)塊計數(shù)寄存器的內(nèi)容,以表示已對一目前輸入數(shù)據(jù)區(qū)塊,完成該密碼編譯運算;以及區(qū)塊指針器邏輯器,運作上耦接至該執(zhí)行邏輯器,配置用以指示該計算裝置,保持,或產(chǎn)生與保持起因于對一目前區(qū)塊的數(shù)據(jù),執(zhí)行該密碼編譯運算的數(shù)據(jù),以致于在從該中斷事件返回之后,對接下來的數(shù)據(jù),執(zhí)行該密碼編譯運算會持續(xù)下去。
22.一種執(zhí)行裝置內(nèi)的密碼運算的方法,該方法包括有響應(yīng)于所接收的一密碼編譯指令,而執(zhí)行該密碼編譯指令指定的一密碼編譯運算;以及顯示在執(zhí)行該密碼編譯運算期間,是否已發(fā)生一中斷事件。
23.根據(jù)權(quán)利要求22所述的方法,其中該顯示動作包括在該執(zhí)行期間,指出是否已發(fā)生一中斷、一例外、一分頁錯誤或一工作切換動作之一。
24.根據(jù)權(quán)利要求23所述的方法,其中該顯示動作包括修改該裝置內(nèi)的一寄存器中的一位的狀態(tài)。
25.根據(jù)權(quán)利要求23所述的方法,其中還包括將程控轉(zhuǎn)移到配置用以處理該中斷事件的一程序流程,并且使對一目前輸入數(shù)據(jù)區(qū)塊的該密碼編譯運算的該執(zhí)行動作中斷。
26.根據(jù)權(quán)利要求25所述的方法,其中還包括在程控返回緊接于該轉(zhuǎn)移的該密碼編譯指令之后,會立即執(zhí)行對該目前輸入數(shù)據(jù)區(qū)塊的該執(zhí)行動作。
27.根據(jù)權(quán)利要求22所述的方法,其中還包括指示該裝置,在對一目前輸入數(shù)據(jù)區(qū)塊,完成該密碼編譯運算時,將內(nèi)存中的輸入及輸出數(shù)據(jù)區(qū)塊的指針器修改為指向下個輸入及輸出數(shù)據(jù)區(qū)塊。
28.根據(jù)權(quán)利要求22所述的方法,其中還包括指示該裝置,修改一區(qū)塊計數(shù)寄存器的內(nèi)容,以表示已對一目前輸入數(shù)據(jù)區(qū)塊,完成該該密碼編譯運算。
29.根據(jù)權(quán)利要求22所述的方法,其中還包括指示該裝置,保持,或產(chǎn)生與保持起因于對一目前區(qū)塊的數(shù)據(jù),執(zhí)行該密碼編譯運算的數(shù)據(jù),以致于在從該中斷事件返回之后,對接下來的數(shù)據(jù),執(zhí)行該密碼編譯運算會持續(xù)下去。
30.根據(jù)權(quán)利要求22所述的方法,其中該接收動作包括指定一加密運算當作該密碼編譯運算,其中該加密運算包括將對數(shù)片段的明文加密,變成多個密文片段。
31.根據(jù)權(quán)利要求22所述的方法,其中該接收動作包括指定一解密運算當作該密碼編譯運算,其中該解密運算包括將對數(shù)片的密文解密,變成數(shù)片的明文。
32.根據(jù)權(quán)利要求22所述的方法,其中該接收動作包括在該密碼編譯指令內(nèi),指定用于完成該密碼編譯運算的一區(qū)塊密碼器模式。
33.根據(jù)權(quán)利要求32所述的方法,其中該區(qū)塊密碼器模式選自下列之一或其組合電子密碼本模式、加密塊鏈模式、加密反饋模式、輸出反饋模式。
全文摘要
本發(fā)明涉及一種用以對處理器內(nèi)的數(shù)個輸入數(shù)據(jù)區(qū)塊,執(zhí)行密碼運算的方法及裝置。在一實施例中,提出一種用以執(zhí)行密碼運算的裝置。此裝置包括密碼編譯指令及執(zhí)行邏輯器。密碼編譯指令由計算裝置來接收,其為屬于微處理器執(zhí)行的指令流程中的一步驟,其中該密碼指令指示微處理器進行一個特定的密碼編譯運算。執(zhí)行邏輯器運作上耦接至密碼編譯指令,組態(tài)為用以執(zhí)行該密碼編譯指令的該密碼編譯運算,其中該密碼編譯運算包括該密碼編譯運算是否已由一中斷事件所中斷。
文檔編號H04L9/00GK1558591SQ20041005906
公開日2004年12月29日 申請日期2004年7月29日 優(yōu)先權(quán)日2003年12月4日
發(fā)明者湯瑪斯·A·克利斯賓, G·葛蘭·亨利, 奧圖羅·馬丁-德-尼古拉, 泰瑞·派克斯, 馬丁-德-尼古拉, 湯瑪斯 A 克利斯賓, 派克斯, 肌ず嗬 申請人:智慧第一公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1