專(zhuān)利名稱(chēng):重組透明化區(qū)塊密碼編譯方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種微電子的領(lǐng)域,尤其涉及一種在微處理器或其它裝置中執(zhí)行重組透明化區(qū)塊密碼編譯運(yùn)算的方法及裝置。
背景技術(shù):
早期計(jì)算機(jī)系統(tǒng)間的作業(yè)都是獨(dú)立作業(yè)的,因?yàn)榕芤粋€(gè)應(yīng)用程序所需要的輸入數(shù)據(jù)是內(nèi)建于早期的計(jì)算機(jī)系統(tǒng)內(nèi)或是由軟件工程師在程序運(yùn)行時(shí)輸入。應(yīng)用程序執(zhí)行后產(chǎn)生的輸出數(shù)據(jù)則通常是以白紙黑字的打印方式呈現(xiàn),或者是以一個(gè)文件的型式被寫(xiě)入磁帶、硬盤(pán)或是其它屬于計(jì)算機(jī)系統(tǒng)一部份的儲(chǔ)存裝置中。這個(gè)輸出的文件可以接著被下一個(gè)在同一個(gè)計(jì)算機(jī)系統(tǒng)中執(zhí)行的應(yīng)用程序當(dāng)作輸入文件使用或者如果這個(gè)文件是被存入一個(gè)可以被移動(dòng)式的儲(chǔ)存接口,它就能被其它不同但兼容的計(jì)算機(jī)系統(tǒng)中的應(yīng)用軟件使用。這些早期的系統(tǒng)對(duì)保護(hù)敏感的數(shù)據(jù)已有認(rèn)知。其中一樣數(shù)據(jù)保密措施,密碼編譯應(yīng)用軟件也被開(kāi)發(fā)出來(lái)保護(hù)敏感的數(shù)據(jù)以免未經(jīng)許可的被公開(kāi)。這些密碼編譯軟件通常把儲(chǔ)存裝置上的文件做加密或解密的動(dòng)作。
多年后,使用者們才發(fā)現(xiàn)通過(guò)網(wǎng)絡(luò)聯(lián)機(jī)多臺(tái)計(jì)算機(jī)來(lái)分享數(shù)據(jù)的這個(gè)優(yōu)勢(shì)。所以,網(wǎng)絡(luò)架構(gòu)、操作系統(tǒng)、數(shù)據(jù)傳送協(xié)議也相對(duì)的發(fā)展。至今,除了能支持?jǐn)?shù)據(jù)分享之外,它們所提供的附加功能也很顯要。例如說(shuō),現(xiàn)在的使用者使用一個(gè)計(jì)算機(jī)工作臺(tái)去取得另一個(gè)工作臺(tái)上或另一個(gè)網(wǎng)絡(luò)服務(wù)器上的文件,通過(guò)因特網(wǎng)取得新聞和其它數(shù)據(jù),與其它數(shù)百臺(tái)不同的計(jì)算機(jī)傳送與接收電子信息,如電子郵件,或是連接供貨商的計(jì)算機(jī)系統(tǒng)提供信用卡或是銀行數(shù)據(jù)來(lái)購(gòu)買(mǎi)物品,或是在餐廳、機(jī)場(chǎng)和其它公共場(chǎng)所通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)來(lái)做上述的動(dòng)作,已經(jīng)習(xí)以為常了。所以保護(hù)敏感數(shù)據(jù)的傳輸也變的非常的重要。使用者通過(guò)計(jì)算機(jī)所傳出去的數(shù)據(jù)需要保護(hù)的頻率也日已遽增。新聞?lì)^條常揭發(fā)給社會(huì)大眾濫發(fā)郵件,黑客,身分盜用,反向工程,IP(InternetProtocol)位置欺偽和信用卡詐欺等計(jì)算機(jī)數(shù)據(jù)安全問(wèn)題。這些侵害隱私的動(dòng)作的背后動(dòng)機(jī)有時(shí)是純屬意外的無(wú)心之過(guò),有時(shí)則是深思熟慮的網(wǎng)絡(luò)恐怖攻擊行動(dòng)。相關(guān)單元以制定新法律,嚴(yán)格執(zhí)行規(guī)范和教育大眾等行動(dòng)來(lái)響應(yīng)。但是至今這些動(dòng)作都還是無(wú)法成功杜絕侵害計(jì)算機(jī)數(shù)據(jù)的浪潮。從前只讓政府,金融機(jī)構(gòu),軍方和情報(bào)單元憂(yōu)心的問(wèn)題已經(jīng)變成每一位在家檢查電子郵件,使用網(wǎng)絡(luò)銀行服務(wù)的老百姓最擔(dān)心的問(wèn)題之一了。
信息安全這個(gè)領(lǐng)域中一項(xiàng)將數(shù)據(jù)加密,并只提供特定人士譯碼方式的保護(hù)技巧就是密碼編譯學(xué)。在保護(hù)計(jì)算機(jī)對(duì)計(jì)算機(jī)間數(shù)據(jù)的傳輸上,密碼編譯通常是采用將敏感數(shù)據(jù)(又稱(chēng)為明文,plaintext或cleartext)轉(zhuǎn)成無(wú)法辨識(shí)的型式(又稱(chēng)為密文,ciphertext)。將明文轉(zhuǎn)換成密文的程序被稱(chēng)為“加密”(encryption、enciphering或ciphering),而將密文轉(zhuǎn)回明文的程序則被稱(chēng)為“解密”(decryption、deciphering或inverse ciphering)。
在密碼編譯這個(gè)領(lǐng)域中,幾項(xiàng)方式和協(xié)議被開(kāi)發(fā)出以便使用者不需要有太多密碼編譯知識(shí)或是花太多力量便能將數(shù)據(jù)以加密過(guò)的型式送出給不同的使用者。除了加密的數(shù)據(jù)之外,使用者通常會(huì)提供收件者一個(gè)用來(lái)解密的”密碼密鑰”。密碼密鑰讓接收者能復(fù)原加密數(shù)據(jù)或者取得未加密的原始數(shù)據(jù)。以上所述的步驟,通常是通過(guò)密碼保護(hù),數(shù)學(xué)算法和加密解密的應(yīng)用程序等方法為敏感數(shù)據(jù)加密和解密。
目前有很多種類(lèi)型的算法被應(yīng)用于數(shù)據(jù)的加密解密上。某個(gè)類(lèi)型中的一個(gè)算法(如公開(kāi)密鑰加密算法,為RSA Rivest-Shamir-Adelman算法類(lèi)之一)用了兩個(gè)密鑰(cryptographic key),一個(gè)公開(kāi)密鑰(Public Key)和一個(gè)私有密鑰(private key)用來(lái)加密或解密。根據(jù)一些公開(kāi)密鑰算法則,接收者的公開(kāi)密鑰是由寄出者用來(lái)將數(shù)據(jù)加密以便送給接收者的。因?yàn)槭褂谜叩墓_(kāi)和私有密鑰間有某種特定的數(shù)學(xué)關(guān)系,接收者一定要用私有密鑰來(lái)解開(kāi)收到的數(shù)據(jù),還原原本的數(shù)據(jù)。雖然此類(lèi)的加密算法受到廣泛的使用,但是它處理加密和解密的速度十分的慢,就連處理小量的數(shù)據(jù)都十分的慢。還有一類(lèi)算法,稱(chēng)作對(duì)稱(chēng)密鑰加密算法(symmetric key algorithms),不但有與第一類(lèi)算法同等級(jí)的數(shù)據(jù)保密性,而且執(zhí)行的速度快上許多。這類(lèi)算法會(huì)叫做對(duì)稱(chēng)密鑰加密算法的原因就是它是用同一組加密編譯鑰來(lái)加密和解密。目前主要有三種單一密鑰加密算法(single-key cryptographic algorithms)數(shù)據(jù)加密標(biāo)準(zhǔn)(DataEncryption Standard,DES),三度數(shù)據(jù)加密標(biāo)準(zhǔn)(Triple Data EncryptionStandard,Triple-DES)和高階加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES)。因?yàn)檫@些算法的保護(hù)強(qiáng)度,現(xiàn)在美國(guó)政府的相關(guān)單元都采用這三種算法來(lái)保密數(shù)據(jù)。相信不久的將來(lái),這其中一項(xiàng)或一項(xiàng)以上也會(huì)成為商業(yè)和私人交易中使用的標(biāo)準(zhǔn)。根據(jù)這些對(duì)稱(chēng)密鑰加密算法則,明文和密文都被裁成一定大小的區(qū)塊以進(jìn)行加密和解密。例如高階加密標(biāo)準(zhǔn)(AES)對(duì)128位大小的區(qū)塊進(jìn)行加密,并使用128、192和256位大小的加密編譯鑰。
所有的對(duì)稱(chēng)密鑰加密算法(symmetric key algorithms)將明文加密的次要運(yùn)算(sub-operation)步驟都是相同的。根據(jù)那些比較常使用的對(duì)稱(chēng)密鑰加密算法,一個(gè)初始的密碼編譯鑰會(huì)被擴(kuò)張至數(shù)個(gè)的密鑰(也就是密鑰程序表,keyschedule),每個(gè)密鑰都會(huì)被用在密碼編譯時(shí)將一段明文加密程序中次要運(yùn)算中的其中一回合(round)。第一回合運(yùn)算完的結(jié)果變成是第二回合的輸入數(shù)據(jù)(input text)。第二回合運(yùn)算就使用密鑰程序表中第二個(gè)密鑰做運(yùn)算,然后產(chǎn)生第二個(gè)結(jié)果。明文在經(jīng)過(guò)特定的幾回合后就成為密文。在高階加密標(biāo)準(zhǔn)(AES)運(yùn)算法中,每一回合中的次要運(yùn)算中的運(yùn)算在相關(guān)文獻(xiàn)數(shù)據(jù)中可被稱(chēng)為子位(SubByte,或S-box),移列(ShiftRows),混欄(MixColums),和回合密鑰(round key)加入(AddRoundKey)。為一段密文解碼的步驟事實(shí)上和加密是很相似的,就是把加密文當(dāng)作輸入值,并且在每一回合進(jìn)行反向譯碼和反向運(yùn)算,最后一回合的輸出值就是明文。
數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)和三度數(shù)據(jù)加密標(biāo)準(zhǔn)(Triple-DES)應(yīng)用的次要運(yùn)算在小細(xì)節(jié)上不太相同,但是它們與高階加密標(biāo)準(zhǔn)(AES)運(yùn)算法基本上是十分類(lèi)似,因?yàn)樗鼈冇孟嗨品绞綄⒚魑钠无D(zhuǎn)為一段段的密文。
所有對(duì)稱(chēng)密鑰加密算法將多個(gè)連續(xù)片段數(shù)據(jù)加密的模式都是一樣的。這些包括了加密塊鏈模式(cipher block chaining mode,CBC),電子密碼本(electronic code book,ECB),加密反饋模式(cipher feedback mode,CFB)和輸出反饋模式(output feedback mode,OFB)。其中有些模式需要一個(gè)另外的初始化向量(initialization vector)才能進(jìn)行次項(xiàng)運(yùn)算,有些則是會(huì)將第一組加密編譯后的密文加入第二組明文加密的運(yùn)算中。若深入探討每一個(gè)密碼編譯算法和當(dāng)下對(duì)稱(chēng)密鑰加密算法中每個(gè)次項(xiàng)運(yùn)算步驟則就已超出本發(fā)明應(yīng)用的范圍了。關(guān)于數(shù)據(jù)加密標(biāo)準(zhǔn)DES和三度數(shù)據(jù)加密標(biāo)準(zhǔn)Triple-DES詳細(xì)的實(shí)施規(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詳細(xì)的探討。上述的刊物都是由National Institute of Standards andTechnology(NIST)所發(fā)行編譯的,在此附為參考讀物,所涵蓋的近乎范圍。除了這些刊物外,NIST的Computer Security Resource Center(CSRC)網(wǎng)站http//csrc.nist.gov/內(nèi)也提供單元教學(xué)、白皮書(shū)、toolkits和相關(guān)文章等。
本領(lǐng)域的技術(shù)人員應(yīng)該都了解計(jì)算機(jī)系統(tǒng)上有很多軟件都能用來(lái)執(zhí)行密碼編譯的動(dòng)作(也就是加密和解密)。事實(shí)上,有些操作系統(tǒng)(例如微軟窗口XP,Linux)通過(guò)密碼編譯基元(cryptographic primitives),密碼編譯應(yīng)用軟件接口(cryptographic application program interface)和其它類(lèi)似接口提供直接加密/解密服務(wù)。但是現(xiàn)今計(jì)算機(jī)編譯密碼技巧上在多方面有許多缺陷。請(qǐng)參考圖1,圖中標(biāo)示出這些缺陷,以下將探討這些問(wèn)題。
圖1為公知計(jì)算機(jī)密碼編譯應(yīng)用的方框圖。方框圖1顯示了第一臺(tái)計(jì)算機(jī)101連接到局域網(wǎng)絡(luò)105、另外連接到局域網(wǎng)絡(luò)105的還有第二臺(tái)計(jì)算機(jī)102、網(wǎng)絡(luò)文件儲(chǔ)存裝置106、第一個(gè)路由器107或是以其它形式的接口,比如說(shuō)網(wǎng)絡(luò),連接至廣域網(wǎng)絡(luò)110(wide area network,WAN),和一個(gè)無(wú)線(xiàn)網(wǎng)絡(luò)路由器108,例如符合IEEE 802.11規(guī)范的無(wú)線(xiàn)路由器。
在廣域網(wǎng)絡(luò)110(wide area network)另一端接的是第二個(gè)路由器111,用來(lái)提供與第三臺(tái)計(jì)算機(jī)103的接口。
如前文所述,現(xiàn)今使用者在一般使用計(jì)算機(jī)時(shí)會(huì)需要保密計(jì)算機(jī)數(shù)據(jù)的時(shí)候越來(lái)越頻繁。例如說(shuō),在操作系統(tǒng)控制之下,第一臺(tái)計(jì)算機(jī)101的使用者可能同時(shí)進(jìn)行多樣工作,而每樣工作都需要密碼編譯作業(yè)。第一臺(tái)計(jì)算機(jī)101的使用者需要執(zhí)行應(yīng)用程序112來(lái)加密/解密(通過(guò)操作系統(tǒng)服務(wù)或者是操作系統(tǒng)行使的)將一個(gè)文件存入網(wǎng)絡(luò)文件儲(chǔ)存裝置106。在儲(chǔ)存文件的同時(shí),使用者也可能將加密過(guò)的信息傳給第二臺(tái)計(jì)算機(jī)102的使用者,這個(gè)動(dòng)作將也需要應(yīng)用程序112執(zhí)行加密和解密的工作。加密傳出的信息有可能是實(shí)時(shí)的(例如實(shí)時(shí)信息)或不是實(shí)時(shí)的(例如電子郵件)。另外,使用者可能是在第三臺(tái)計(jì)算機(jī)103上通過(guò)廣域網(wǎng)絡(luò)110在存取個(gè)人的金融數(shù)據(jù)(例如信用卡卡號(hào)、金融交易等)或是其它重要數(shù)據(jù)。第三臺(tái)計(jì)算機(jī)103也可代表一個(gè)家庭辦公室或是遠(yuǎn)程計(jì)算機(jī)103,其中第一臺(tái)計(jì)算機(jī)101的使用者不在辦公室內(nèi),則可以使用廣域網(wǎng)絡(luò)110來(lái)存取局域網(wǎng)絡(luò)105上共享資源101、102、106、107、108和109的內(nèi)部數(shù)據(jù)。以上所述的行為都需要呼叫應(yīng)用程序112來(lái)執(zhí)行相關(guān)加密和解密的動(dòng)作。此外,無(wú)線(xiàn)網(wǎng)絡(luò)109已被廣泛的布局在咖啡廳、機(jī)場(chǎng)、學(xué)校等公共場(chǎng)所,所以手提電腦104的使用者除了必須將接收或傳送給別的使用者的數(shù)據(jù)加密或解密外,所有通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)109傳給無(wú)線(xiàn)網(wǎng)絡(luò)路由器108的數(shù)據(jù)也都要加以加密/解密。
本領(lǐng)域技術(shù)人員可以了解當(dāng)計(jì)算機(jī)101-104需要進(jìn)行密碼編譯的動(dòng)作時(shí),應(yīng)用程序112會(huì)被呼叫,然后進(jìn)行加密或解密的動(dòng)作。所以未來(lái)計(jì)算機(jī)101-104有可能必須同時(shí)進(jìn)行上百個(gè)密碼編譯運(yùn)算。
發(fā)明者發(fā)現(xiàn)計(jì)算機(jī)系統(tǒng)101-104同時(shí)呼叫一個(gè)或一個(gè)以上加密或解密應(yīng)用程序112的做法有下列缺點(diǎn),例如說(shuō),若可以使用一個(gè)專(zhuān)門(mén)的硬件來(lái)處理這些功能,硬件處理的速度會(huì)比用軟件快。每次應(yīng)用程序112需要進(jìn)行加密解密時(shí),計(jì)算機(jī)101-104正在執(zhí)行的工作就必須先暫停來(lái)傳送密碼編譯動(dòng)作所需的參數(shù)(例如明文、密文、模式及密鑰等)給計(jì)算機(jī)操作系統(tǒng),然后計(jì)算機(jī)操作系統(tǒng)再將這些數(shù)據(jù)傳給應(yīng)用程序112來(lái)完成密碼編譯動(dòng)作。由于應(yīng)用程序112在編譯一段數(shù)據(jù)時(shí)需要執(zhí)行許多回合的子運(yùn)算,因此,計(jì)算機(jī)要執(zhí)行的指令數(shù)目繁多且讓整個(gè)操作系統(tǒng)處理的速度顯著下降。本領(lǐng)域技術(shù)人員能了解為什么在微軟Outlook環(huán)境中發(fā)出一封加密電子郵件后所需的傳輸時(shí)間會(huì)是未加密郵件的五倍多。
介入計(jì)算機(jī)操作系統(tǒng)的延誤時(shí)間也會(huì)影響現(xiàn)在使用這項(xiàng)技術(shù)。目前應(yīng)用軟件內(nèi)大多沒(méi)有完整的密鑰產(chǎn)生或加密/解密功能,所以都是靠操作系統(tǒng)或是插件軟件(plug-in software)來(lái)完成這些作業(yè)。而要獲得操作系統(tǒng)資源,要向操作系統(tǒng)發(fā)出中斷指令(interrupt)或是由正在執(zhí)行的應(yīng)用軟件對(duì)操作系統(tǒng)提出要求。
發(fā)明者也發(fā)現(xiàn)計(jì)算機(jī)系統(tǒng)101-104密碼編譯作業(yè)方式與較早期微處理器內(nèi)處理浮點(diǎn)運(yùn)算單元還沒(méi)成立專(zhuān)門(mén)處理單元前是很像的。早期的浮點(diǎn)運(yùn)算是由軟件處理,所以執(zhí)行速度很慢。密碼編譯通過(guò)軟件處理的速度也是很慢。隨著浮點(diǎn)運(yùn)算的技術(shù)演進(jìn),浮點(diǎn)運(yùn)算指令被整合入中央處理器的輔助處理器。雖然加入浮點(diǎn)數(shù)輔助處理器使得整個(gè)系統(tǒng)的價(jià)格升高,但是處理浮點(diǎn)數(shù)的速度比軟件快上許多?,F(xiàn)在也有密碼編譯的中央處理器輔助處理硬件,大多是通過(guò)并行端口或其它總線(xiàn)接口(如通用性串行總線(xiàn))插卡式或是外掛式裝置。此類(lèi)的中央處理器的輔助處理器可縮短計(jì)算機(jī)系統(tǒng)密碼編譯的工作處理時(shí)間。但除了增加系統(tǒng)的價(jià)格和耗電量之外,不但整個(gè)系統(tǒng)的穩(wěn)定度降低,數(shù)據(jù)安全性成為考慮,因?yàn)檩o助處理器的和微處理器并不存在同一個(gè)芯片上,所以它們之間的連接管道可能被竊聽(tīng)。
因此一個(gè)內(nèi)建于微處理器中的密碼編譯硬件是必要的。這個(gè)硬件應(yīng)讓?xiě)?yīng)用軟件只需發(fā)一個(gè)指令便能完成密碼編譯。發(fā)明者認(rèn)為這種硬件能減少介入計(jì)算機(jī)操作系統(tǒng)的必要。理想中此發(fā)明能提供應(yīng)用軟件執(zhí)行密碼編譯指令的優(yōu)先權(quán),除了需要與目前市面上較普遍的微處理器架構(gòu)兼容,還要能支持較老舊的操作系統(tǒng)和應(yīng)用軟件,更要有防止竊聽(tīng)機(jī)制。此硬件應(yīng)該支持多種不同的密碼編譯算法,且能夠認(rèn)證和測(cè)試硬件上的密碼編譯算法。此發(fā)明需要能夠切換本身運(yùn)作模式,例如允許使用者選擇提供自己的密鑰或選擇由硬件發(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ù)上面臨的問(wèn)題,提供一個(gè)優(yōu)秀的微處理器內(nèi)建密碼編譯技術(shù)。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種用以執(zhí)行密碼編譯運(yùn)算的裝置,包括一密碼編譯指令,由一計(jì)算裝置來(lái)接收,其為屬于微處理器執(zhí)行的指令流程中的一步驟,其中該密碼指令指示微處理器進(jìn)行一個(gè)特定的密碼編譯運(yùn)算;以及執(zhí)行邏輯器,運(yùn)作上耦接至該密碼編譯指令,組態(tài)為用以執(zhí)行該密碼編譯指令的該密碼編譯運(yùn)算,其中該密碼編譯運(yùn)算包括顯示該密碼編譯運(yùn)算是否已由一中斷事件所中斷。
本發(fā)明還提供一種用以執(zhí)行密碼運(yùn)算的裝置,包括一密碼編譯單元,位于一裝置內(nèi),組態(tài)為接收屬于一指令流程內(nèi)的一密碼編譯指令,并用以響應(yīng)執(zhí)行該密碼指令指示微處理器進(jìn)行的一個(gè)特定的密碼編譯運(yùn)算;以及一位,位于一寄存器內(nèi),運(yùn)作上耦接至該密碼編譯單元,組態(tài)為用以顯示該密碼編譯運(yùn)算是否已由一中斷事件所中斷。
本發(fā)明又提供一種執(zhí)行裝置內(nèi)的密碼運(yùn)算的方法,該方法包括有響應(yīng)于所接收的一密碼編譯指令,而執(zhí)行該密碼編譯指令指定的一密碼編譯運(yùn)算;以及顯示在執(zhí)行該密碼編譯運(yùn)算期間,是否已發(fā)生一中斷事件。
也就是說(shuō),一實(shí)施例中本發(fā)明是一個(gè)微處理器內(nèi)密碼編譯的裝置。裝置內(nèi)包含了密碼編譯指令及執(zhí)行邏輯器。密碼編譯指令由一計(jì)算裝置來(lái)接收,做為用以在該計(jì)算裝置上執(zhí)行的一指令流程的一部份,其中此密碼編譯指令用以指定進(jìn)行這些密碼編譯運(yùn)算中的一個(gè)。執(zhí)行邏輯器運(yùn)作上耦接至該密碼編譯指令,以執(zhí)行該密碼編譯指令所指定的密碼編譯運(yùn)算。該指定的密碼編譯運(yùn)算包括顯示該指定的密碼編譯運(yùn)算是否已由中斷事件所中斷。
本發(fā)明的一實(shí)施例為一個(gè)處理密碼編譯程序的微處理器裝置,此裝置包括位于一裝置內(nèi)的密碼單元,以及位于一寄存器內(nèi)的一位。密碼單元響應(yīng)一被該裝置接收的指令流程內(nèi)的一密碼編譯指令,以執(zhí)行該密碼編譯指令所指定的該密碼編譯運(yùn)算。在寄存器內(nèi)的該位在運(yùn)作上耦接至該密碼單元。此位用以顯示該指定的密碼編譯運(yùn)算的執(zhí)行已由中斷事件所中斷。
本項(xiàng)發(fā)明又一實(shí)施例為一個(gè)在微處理器中執(zhí)行密碼編譯的方法。這個(gè)方法包括了響應(yīng)一密碼編譯指令,而執(zhí)行該密碼編譯指令所指定的一密碼編譯運(yùn)算;以及顯示在此執(zhí)行期間是否已發(fā)生中斷事件。
配合以下的說(shuō)明以及附圖,本發(fā)明的其它目的、特性、以及優(yōu)點(diǎn)將可更深入作一了解。
圖1描述公知密碼編譯應(yīng)用的方框圖。
圖2描述計(jì)算機(jī)系統(tǒng)執(zhí)行密碼編譯的方框圖。
圖3為根據(jù)本發(fā)明一處理密碼編譯運(yùn)算的微處理器裝置的方框圖。
圖4為根據(jù)本發(fā)明一獨(dú)立密碼編譯指令集的方框圖。
圖5為根據(jù)本發(fā)明一區(qū)塊解密模式字段值的對(duì)照表。
圖6是根據(jù)本發(fā)明X86兼容微處理器內(nèi)密碼編譯單元的方框圖。
圖7是根據(jù)本發(fā)明密碼編譯指令中包含字段的示范圖,此指令指示圖6中微處理器進(jìn)行密碼編譯相關(guān)的次項(xiàng)運(yùn)算。
圖8是根據(jù)本發(fā)明XLOAD微指令中寄存器字段值和運(yùn)算動(dòng)作的對(duì)照表,XLOAD微指令的格式如圖7所示。
圖9是根據(jù)本發(fā)明XSTOR微指令中寄存器字段值和運(yùn)算動(dòng)作的對(duì)照表,XSTOR微指令的格式如圖7所示。
圖10是根據(jù)本發(fā)明一個(gè)控制字符格式的例子??刂谱址甘久艽a編譯運(yùn)算的密碼編譯參數(shù)。
圖11是根據(jù)本發(fā)明密碼編譯單元的方框圖。
圖12是根據(jù)本發(fā)明AES區(qū)塊解密邏輯器的方框圖。
圖13為本發(fā)明的一流程圖,其描述一用以保持中斷事件期間的密碼參數(shù)狀態(tài)的方法。
圖14為本發(fā)明的一流程圖,其描述在存在一個(gè)或多個(gè)中斷事件時(shí),對(duì)數(shù)個(gè)輸入數(shù)據(jù)區(qū)塊,執(zhí)行一特定密碼編碼運(yùn)算的方法。
其中,附圖標(biāo)記說(shuō)明如下101、102、103計(jì)算機(jī)工作站 104筆記型計(jì)算機(jī)105局域網(wǎng)絡(luò) 106儲(chǔ)存裝置107第一個(gè)路由器 108無(wú)線(xiàn)路由器109無(wú)線(xiàn)網(wǎng)絡(luò) 110廣域網(wǎng)絡(luò)111第二個(gè)路由器 112加密/解密軟件201微處理器 202操作系統(tǒng)203應(yīng)用程序存儲(chǔ)區(qū) 204產(chǎn)生密鑰的軟件205密鑰程序表 206加密軟件207解密軟件 208初始化向量209密碼編譯參數(shù) 210明文211密文301微處理器 302、322 XCRYPT指令303轉(zhuǎn)譯邏輯器 304微指令隊(duì)列305、306微指令307寄存器文件308、309、310、311、312、313寄存器314加載邏輯器 315數(shù)據(jù)高速緩存
316密碼編譯單元 317儲(chǔ)存邏輯器318寫(xiě)回邏輯器 319內(nèi)存總線(xiàn)320操作系統(tǒng) 321系統(tǒng)內(nèi)存323控制字符 325初始化向量324初始化密鑰/密鑰程序表 326輸入文字327輸出文字400密碼編譯指令 401選擇性前置字段402重復(fù)前置字段 403運(yùn)算碼字段404區(qū)塊解密模式字段500區(qū)塊密碼字段值與微處理器運(yùn)算動(dòng)作對(duì)照表600微處理器601提取邏輯器 602轉(zhuǎn)譯邏輯器603轉(zhuǎn)譯器 604微指令碼只讀存儲(chǔ)器605寄存器階段 606地址階段607加載階段 608執(zhí)行階段609、611、613、615微指令隊(duì)列610整數(shù)單元 612浮點(diǎn)單元614 MMX單元 616 SSE單元617密碼編譯單元 618儲(chǔ)存階段619寫(xiě)回階段 620加載總線(xiàn)621閑置信號(hào) 622儲(chǔ)存總線(xiàn)624 EFLAGS寄存器 625 X位626中斷邏輯器 627微指令628 MSR寄存器 629 E位630 FCR寄存器 631 D位632執(zhí)行邏輯器 623總線(xiàn)700微指令 701微運(yùn)算碼字段702數(shù)據(jù)寄存器字段 703寄存器字段703800 XLOAD值對(duì)照表 900 XSTOR值對(duì)照表1000控制字符 1001 RSVD字段
1002密鑰大小的KSIZE字段 1003加密/解密E/D字段1004中間結(jié)果IRSLT字段 1005密鑰產(chǎn)生KGEN字段1006算法ALG字段 1007回合數(shù)計(jì)數(shù)RCNT字段1100密碼編譯單元 1101區(qū)塊解密邏輯器1102密鑰隨機(jī)存取內(nèi)存 1103微程序碼寄存器1104控制字符寄存器1105 input-0寄存器1106 input-1寄存器1107 key-0寄存器 1108 key-1寄存器1109 output-0寄存器 1110 ouput-1寄存器1111加載總線(xiàn) 1112儲(chǔ)存總線(xiàn)1113停止信號(hào) 1114微指令總線(xiàn)1200 AES算法區(qū)塊解密邏輯器1201微指令寄存器 1202 CW寄存器1203 KEY-0寄存器 1204 KEY-1寄存器1205 IN-0寄存器 1206 IN-1寄存器1207 OUT-01208 OUT-11210回合計(jì)算引擎控制器1211加密/解密總線(xiàn)1212 RNDCON總線(xiàn) 1213密鑰總線(xiàn)1214密鑰產(chǎn)生信號(hào) 1215、1216、1217總線(xiàn)1218 NEXTIN總線(xiàn) 1220回合計(jì)算引擎1221第一密鑰XOR邏輯器 1222寄存器REG-01223 S-Box邏輯器 1224移列邏輯器1225寄存器REG-1 1226混欄邏輯器1227寄存器REG-具體實(shí)施方式
以下內(nèi)容將參考圖2延續(xù)的前密碼編譯運(yùn)算的相關(guān)技術(shù)背景以及其缺陷探討。接下來(lái)請(qǐng)參照?qǐng)D3至圖14。本發(fā)明提供了一個(gè)效能和機(jī)制優(yōu)越的裝置和方法來(lái)執(zhí)行密碼編譯運(yùn)作。此發(fā)明降低介入操作系統(tǒng)的必要性。除此之外,此發(fā)明也滿(mǎn)足了其它要求,如獨(dú)立完整性,與老舊架構(gòu)兼容性,運(yùn)算法及模式切換性,黑客抵御性,以及可測(cè)試性。
現(xiàn)在請(qǐng)看圖2,圖2描繪的是現(xiàn)今計(jì)算機(jī)系統(tǒng)執(zhí)行密碼編譯的方框圖。圖2內(nèi)包含了一個(gè)微處理器201,這個(gè)微處理器201負(fù)責(zé)從系統(tǒng)內(nèi)存中應(yīng)用程序存儲(chǔ)區(qū)203中取得與應(yīng)用程序相關(guān)的指令和存取相關(guān)的數(shù)據(jù)。應(yīng)用程序存儲(chǔ)區(qū)203中的軟件控制和數(shù)據(jù)存取機(jī)制通常都是由系統(tǒng)存儲(chǔ)中操作系統(tǒng)202處理。操作系統(tǒng)202被存放在系統(tǒng)存儲(chǔ)中受到保護(hù)的區(qū)塊中。如前文中描述,一個(gè)應(yīng)用程序在執(zhí)行中需要做譯碼編譯的動(dòng)作時(shí)(例如說(shuō)一個(gè)電子郵件程序或是儲(chǔ)存文件的軟件),必須通知微處理器201,然后由微處理器201完成一連串?dāng)?shù)量龐大的指令才能完成密碼編譯。這些指令有些是這個(gè)執(zhí)行中應(yīng)用程序內(nèi)的子程序,有些是連接到這個(gè)執(zhí)行程序的軟件插件程序,或者也有可能是操作系統(tǒng)202所提供的服務(wù)。無(wú)論這些指令源自何處,都位在內(nèi)存中一個(gè)特定的區(qū)域中。為方便討論,內(nèi)存中這些不同區(qū)域的片段圖中都被包在應(yīng)用程序存儲(chǔ)區(qū)203內(nèi)。應(yīng)用程序存儲(chǔ)區(qū)203中還包含了一個(gè)產(chǎn)生密鑰的軟件204。這個(gè)密鑰產(chǎn)生軟件通常負(fù)責(zé)產(chǎn)生和接受密鑰的工作,也將密鑰展開(kāi)成密鑰程序表205。如果使用的加密模式需要,加密軟件206會(huì)去讀取初始化向量208。加密軟件執(zhí)行內(nèi)部指令來(lái)完成明文加密的動(dòng)作,最后輸出密文211。解密的流程大致上是一樣的,當(dāng)需要解讀一段密文時(shí),解密軟件207被呼叫。解密軟件207執(zhí)行特定的指令來(lái)取得密文211,密鑰程序表205以及密碼編譯參數(shù)209。其中密碼編譯參數(shù)209能提供密碼編譯的詳細(xì)細(xì)節(jié)。如果使用的解密模式有需要,解密軟件207會(huì)去讀取初始化向量208并執(zhí)行那里面的指令來(lái)完成密文解密的動(dòng)作,輸出明文210。
加密,解密和產(chǎn)生密鑰的動(dòng)作應(yīng)該可以用更少的指令就完成。之前提出由FIPS出版的規(guī)范中便有提供幾個(gè)不同的偽碼來(lái)預(yù)估完成一項(xiàng)簡(jiǎn)單密碼編譯工作微電腦處理器所需要執(zhí)行的指令數(shù)量。而現(xiàn)在使用的技術(shù)所需處理編譯密碼的指令數(shù)量高達(dá)上百個(gè)以上。除此之外,從那些執(zhí)行中的應(yīng)用軟件(文件管理,簡(jiǎn)訊,電子郵件,遠(yuǎn)程文件存取,信用卡交易軟件)的角度來(lái)看,執(zhí)行這些密碼編譯既不是軟件本身主要的用途,而且又十分耗時(shí)。甚至?xí)管浖氖褂谜咤e(cuò)覺(jué)應(yīng)用軟件不夠有效率。若加密軟件206,解密軟件207是軟件插件的架構(gòu),則情況會(huì)更糟,因?yàn)橛?jì)算機(jī)操作系統(tǒng)的工作項(xiàng)目又增加了支持呼叫和管理加密軟件206,解密軟件207軟件。操作系統(tǒng)必須支持中斷、例外等其它狀況。除此之外,計(jì)算機(jī)系統(tǒng)上每一個(gè)同時(shí)正在進(jìn)行的密碼編譯都會(huì)需要在應(yīng)用程序存儲(chǔ)區(qū)203內(nèi)安排一些空間給產(chǎn)生密鑰的軟件204,加密軟件206和解密軟件207,而且未來(lái)微處理器201所需處理的密碼編譯工作數(shù)量只會(huì)有增無(wú)減。
發(fā)明者鑒于現(xiàn)今計(jì)算機(jī)系統(tǒng)處理密碼編譯的這個(gè)缺陷,體會(huì)需要一個(gè)內(nèi)建微處理器,并能改善密碼編譯處理速度的裝置及方法的必要性。此單元通過(guò)一個(gè)單一的密碼編譯指令便啟動(dòng)編譯程序。關(guān)于此發(fā)明,我們將參照?qǐng)D3至圖12來(lái)做更深入的解釋。
現(xiàn)在請(qǐng)看圖3,圖3是依照本發(fā)明原理的微處理器密碼編譯運(yùn)算裝置方框圖。圖3顯示微處理器301通過(guò)內(nèi)存總線(xiàn)319與系統(tǒng)內(nèi)存321結(jié)合。微處理器301包含了轉(zhuǎn)譯邏輯器303。轉(zhuǎn)譯邏輯器303從指令寄存器302接收指令。密碼轉(zhuǎn)譯邏輯器303的構(gòu)成可以是一個(gè)邏輯器、電路、裝置、微指令碼(就是微指令或原生指令)或是一個(gè)邏輯器、電路、裝置、微指令碼或其它可以達(dá)到同樣功效組件的結(jié)合,將指令轉(zhuǎn)成對(duì)照的微指令碼的組件。構(gòu)成密碼編譯邏輯器303的組件可以與微處理器301內(nèi)執(zhí)行其它功能的線(xiàn)路、微指令碼等組件共享。根據(jù)本應(yīng)用范圍,微指令碼指的是數(shù)個(gè)微指令。微指令(也可以被稱(chēng)作原生指令)指的是密碼編譯單元層次可執(zhí)行的指令。比方說(shuō),精簡(jiǎn)指令集運(yùn)算處理器都直接執(zhí)行微指令,而加強(qiáng)指令集運(yùn)算處理器,如x86兼容的處理器,則先將指令翻譯成微指令然后再由內(nèi)部一個(gè)或一個(gè)以上的單元執(zhí)行。轉(zhuǎn)譯邏輯器303和指令隊(duì)列304耦接。指令隊(duì)列304中有數(shù)個(gè)微指令305,306,這些微指令是由微指令隊(duì)列304交給寄存器階段邏輯器的。其中寄存器階段邏輯器包含了寄存器文件307。微指令從指令隊(duì)列移動(dòng)至寄存邏輯器區(qū)。寄存邏輯器包含了一個(gè)寄存文件307,寄存文件307內(nèi)有數(shù)個(gè)的寄存器308-313。這些寄存器會(huì)在進(jìn)行編碼編譯運(yùn)算前將運(yùn)算所需要的數(shù)據(jù)加載。每個(gè)寄存器都指向內(nèi)存321中323-327其中含有編譯密碼運(yùn)算所需要的數(shù)據(jù)。寄存區(qū)邏輯器與加載邏輯器314耦接。加載邏輯器與數(shù)據(jù)高速緩存315耦接,從數(shù)據(jù)高速緩存315讀取密碼編譯運(yùn)算所需要的數(shù)據(jù)。數(shù)據(jù)高速緩存通過(guò)內(nèi)存總線(xiàn)319與內(nèi)存耦接并且執(zhí)行收到的指令。執(zhí)行邏輯器328的構(gòu)成可以是一個(gè)邏輯器、電路、裝置、微指令碼(就是微指令或原生指令)或是一個(gè)邏輯器、電路、裝置、微指令碼或其它可以達(dá)到同樣功效組件的結(jié)合,執(zhí)行指令所指示的運(yùn)算。構(gòu)成執(zhí)行邏輯器328組件可以是和微處理器301內(nèi)別的功能共享的。執(zhí)行邏輯器328包含了一個(gè)密碼編譯單元316。密碼編譯單元316從加載邏輯器314接收密碼編譯運(yùn)算所需數(shù)據(jù)。微指令指示密碼編譯單元316對(duì)數(shù)個(gè)輸入文字326片段進(jìn)行密碼編譯,并輸出對(duì)應(yīng)的數(shù)個(gè)輸出文字327片段。密碼編譯單元316的構(gòu)成可以是一個(gè)邏輯器,電路,裝置,微指令碼(就是微指令或原生指令)或是一個(gè)邏輯器,電路,裝置,微指令碼或其它可以達(dá)到同樣功效組件的結(jié)合,處理密碼編譯。構(gòu)成密碼編譯邏輯器316組件可以是和微處理器301內(nèi)執(zhí)行其它功能的線(xiàn)路、微指令碼、等組件共享。一實(shí)施例中密碼編譯單元316與執(zhí)行邏輯器328內(nèi)如浮點(diǎn)單元和整數(shù)單元等執(zhí)行單元平行執(zhí)行(未顯示)。一“單元”的實(shí)施例的構(gòu)成可以是一個(gè)邏輯器、電路、裝置、微指令碼(就是微指令或原生指令)或是一個(gè)邏輯器、電路、裝置、微指令碼或其它可以達(dá)到同樣功效組件的結(jié)合。構(gòu)成此單元的組件可以是和微處理器301內(nèi)執(zhí)行其它功能的線(xiàn)路、微指令碼、等組件共享。一實(shí)施例中,整數(shù)單元的構(gòu)成可以是一個(gè)邏輯器、電路、裝置、微指令碼(就是微指令或原生指令)或是一個(gè)邏輯器、電路、裝置、微指令碼或其它可以達(dá)到同樣功效組件的結(jié)合,執(zhí)行整數(shù)指令。一個(gè)浮點(diǎn)單元的構(gòu)成可以是一個(gè)邏輯器、電路、裝置、微指令碼(就是微指令或原生指令)或是一個(gè)邏輯器、電路、裝置、微指令碼或其它可以達(dá)到同樣功效組件的結(jié)合,執(zhí)行浮點(diǎn)指令。構(gòu)成整數(shù)單元內(nèi)執(zhí)行整數(shù)指令的組件可以是和浮點(diǎn)運(yùn)算單元中處理浮點(diǎn)運(yùn)算指令的組件的線(xiàn)路、微指令碼、等共享。一與x86架構(gòu)兼容的實(shí)施例中,密碼編譯單元316與一x86整數(shù)單元,一x86浮點(diǎn)單元,一x86 MMX單元和一x86 SSE單元平行運(yùn)作。根據(jù)本發(fā)明,一與x86兼容結(jié)構(gòu)的實(shí)施例可以支持大多數(shù)為x86處理器編寫(xiě)的軟件。判斷軟件是否正確被執(zhí)行的方法為檢查執(zhí)行軟件后是否得到正確的結(jié)果。其它與x86兼容的實(shí)施例是將密碼編譯單元視為x86執(zhí)行單元中的一個(gè)子單元。密碼編譯單元316與儲(chǔ)存邏輯器317耦接并提供輸出數(shù)個(gè)對(duì)應(yīng)文字327片段。儲(chǔ)存邏輯器又與數(shù)據(jù)高速緩存耦接315。數(shù)據(jù)高速緩存315將輸出文字327數(shù)據(jù)分送至內(nèi)存321中儲(chǔ)存。儲(chǔ)存邏輯器317與寫(xiě)回邏輯器318耦接。密碼編譯運(yùn)算完成后寫(xiě)回邏輯器318更新寄存器文件307中寄存器308-313的內(nèi)容。一實(shí)施例中微指令配合頻率信號(hào)(未顯示)流向前述的每個(gè)邏輯器階段302、303、304、307、317、316-318,這樣運(yùn)算可以如同生產(chǎn)線(xiàn)作業(yè)般同時(shí)執(zhí)行多個(gè)運(yùn)算。
系統(tǒng)內(nèi)存321內(nèi),一應(yīng)用程序若需要執(zhí)行密碼編譯運(yùn)算,可向微處理器301發(fā)出一個(gè)密碼運(yùn)算指令322,以下稱(chēng)為XCRYPT指令322。在加強(qiáng)指令集運(yùn)算實(shí)施例中,XCRYPT指令322包含了一個(gè)指示密碼編譯運(yùn)算的微指令。在精簡(jiǎn)指令集運(yùn)算實(shí)施例中,XCRYPT指令322包含了一個(gè)指示密碼編譯運(yùn)算的微指令。一實(shí)施例中,XCRYPT指令322用了一個(gè)現(xiàn)有指令集中多出或?yàn)槭褂玫闹噶钸\(yùn)算碼。一x86兼容的實(shí)施例中,XCRYPT指令322是一個(gè)4位指令包含一x86前置(prefix)(也就是0xF3),一指令集內(nèi)為被使用過(guò)的2位運(yùn)算碼(就是0x0FA7),和一一位區(qū)塊解密模式。一實(shí)施例中XCRYPT指令322依照應(yīng)用軟件被允許執(zhí)行的層次,可以直接將XCRYPT指令322直接微處理器301的指令流程或是由操作系統(tǒng)320寫(xiě)入。因?yàn)檐浖虿僮飨到y(tǒng)只需要下一個(gè)指令322就能完成密碼編譯,所以密碼編譯的作業(yè)細(xì)節(jié)對(duì)操作系統(tǒng)都是透明的。
計(jì)算機(jī)系統(tǒng)的運(yùn)作模式,是由操作系統(tǒng)320呼叫執(zhí)行各個(gè)應(yīng)用軟件。應(yīng)用軟件下令執(zhí)行XCRYPT指令322時(shí),根據(jù)計(jì)算機(jī)系統(tǒng)中一般指令流程,這個(gè)指令會(huì)被從內(nèi)存321傳到提取邏輯器內(nèi)。當(dāng)然,軟件里還會(huì)有其它指令指示微處理器301先將內(nèi)存321中323-327的密碼編譯控制字符323,初始化密鑰或密鑰程序表324,初始化向量325(若需要的話(huà))。等著被處理的輸入文字326和輸出文字327會(huì)被復(fù)制至對(duì)應(yīng)的寄存器323-327中。此初始化寄存器308-312的動(dòng)作一定要在執(zhí)行XCRYPT指令322前完成。因?yàn)閳?zhí)行XCRYPT指令322時(shí)會(huì)用到寄存器308-312中所有的數(shù)據(jù)。另外還有一個(gè)寄存器,一個(gè)負(fù)責(zé)紀(jì)錄輸入文字有幾個(gè)片段還需要被加密/解密的寄存器。轉(zhuǎn)譯邏輯器303從提取邏輯器取得指令,轉(zhuǎn)譯成對(duì)應(yīng)的微指令,指示微處理器301完成密碼編譯運(yùn)算。微指令305-306中的第一個(gè)指令會(huì)指示密碼編譯單元316將數(shù)據(jù)從加載邏輯器加載,然后開(kāi)始執(zhí)行指定次數(shù)的密碼編譯。執(zhí)行完成的結(jié)果的輸出文件會(huì)通過(guò)數(shù)據(jù)高速緩存315存入內(nèi)存321中的儲(chǔ)存邏輯器317的文字327區(qū)。第二組數(shù)個(gè)的指令(未顯示)指示微處理器301內(nèi)其它執(zhí)行單元(未顯示)。非架構(gòu)寄存器通常包含臨時(shí)結(jié)果和計(jì)數(shù)器更新輸入和輸出指針寄存器311-312。若有應(yīng)用到初始向量寄存器的更新數(shù)據(jù)。其中一實(shí)施例便是寄存器308-313為架構(gòu)寄存器。
一實(shí)施例中,密碼編譯單元316被分為數(shù)個(gè)階段,允許連續(xù)的輸入文字326片段被管線(xiàn)化。
圖3所顯示的組件為解釋本發(fā)明的必要組件。許多現(xiàn)今的微處理器301內(nèi)部的邏輯器沒(méi)有在圖3內(nèi)中顯示。本領(lǐng)域技術(shù)人員會(huì)發(fā)現(xiàn),為了能清楚說(shuō)明發(fā)明,許多微處理器301內(nèi)包含的邏輯器在圖3中都被簡(jiǎn)化了。這是為了方便敘述。如加載邏輯器314可以包括一個(gè)地址產(chǎn)生步驟,接者一個(gè)高速緩存接口階段。然后再接著一個(gè)高速緩存對(duì)齊階段。但是有一點(diǎn)很重要,本發(fā)明對(duì)數(shù)個(gè)輸入文字326片段進(jìn)行密碼編譯,操作系統(tǒng)只要通過(guò)單一個(gè)指令便能完成。本發(fā)明始密碼編譯工作的細(xì)節(jié)動(dòng)作完全透明化,而且和微處理器301內(nèi)其它執(zhí)行邏輯器同時(shí)進(jìn)行運(yùn)算。密碼編譯單元316和相關(guān)的XCRYPT指令322運(yùn)作完全和現(xiàn)今較老舊操作系統(tǒng)運(yùn)算兼容。
現(xiàn)請(qǐng)參考圖4,這是密碼編譯指令的方框圖。密碼編譯指令400包含了一個(gè)前置字段401,一個(gè)重復(fù)前置字段402,一個(gè)運(yùn)算碼字段403,一個(gè)區(qū)塊解密模式字段404。一實(shí)施例中,字段401-404的內(nèi)容與x86指令結(jié)構(gòu)兼容。
運(yùn)算時(shí),許多指令集結(jié)構(gòu)都采取加入了一個(gè)選擇性的前置字段401。此字段內(nèi)容用來(lái)指示處理器開(kāi)啟或關(guān)閉一些運(yùn)算功能。例如直接作16位或20位運(yùn)算的功能和直接處理或存取特定片段的功能等。重復(fù)前置字段402的內(nèi)容代表密碼編譯動(dòng)作需要被重復(fù)執(zhí)行的次數(shù)。重復(fù)前置字段402也隱含地指示符合的微處理器,使用其中當(dāng)作指針器的數(shù)個(gè)架構(gòu)性寄存器的內(nèi)容,而送到包含完成指定密碼運(yùn)算所需的密碼數(shù)據(jù)及參數(shù)的系統(tǒng)內(nèi)存中的位置。如以上所提及,在x86兼容的實(shí)施例中,重復(fù)前置字段402的值為0xF3。并且,根據(jù)x86架構(gòu)協(xié)議,密碼編譯指令的形式與x86重復(fù)字符串指令(如RFP.MOVS)非常類(lèi)似。例如,當(dāng)由本發(fā)明的x86兼容微處理器實(shí)施例來(lái)執(zhí)行時(shí),重復(fù)前置字段隱含地涉及儲(chǔ)存于架構(gòu)性寄存器ECX中的可變區(qū)塊計(jì)數(shù)、儲(chǔ)存于寄存器ESI中的來(lái)源地址指針器(指向密碼運(yùn)算的輸入數(shù)據(jù))、以及儲(chǔ)存于寄存器EDI中的目的地址指針器(指向內(nèi)存中的輸出數(shù)據(jù)區(qū))。在x86相容實(shí)施例中,本發(fā)明進(jìn)一步會(huì)將傳統(tǒng)的重復(fù)字符串指令概念延伸至進(jìn)一步地涉及儲(chǔ)存于寄存器EDX中的控制字組指針器、儲(chǔ)存于寄存器EBX中的密碼密鑰指針器、以及儲(chǔ)存于寄存器EAX中的初始化向量的指針器(若借助預(yù)定密碼模式所需要的話(huà))。
運(yùn)算碼字段403指微處理器去執(zhí)行控制字符指示的密碼編譯運(yùn)算,這個(gè)控制字符實(shí)際上是被存在內(nèi)存內(nèi),一控制字指針指向控制字在內(nèi)存中的位置。運(yùn)算碼的值會(huì)被設(shè)定為一個(gè)現(xiàn)有指令集內(nèi)少用的值。如此一來(lái),較老舊的操作系統(tǒng)及應(yīng)用軟件也能使用。例如說(shuō),一個(gè)x86兼容系統(tǒng)就可以將此值設(shè)為0x0FA7。區(qū)塊解密模式字段404指示哪一項(xiàng)密碼運(yùn)算作業(yè)需被執(zhí)行。請(qǐng)看圖5。
圖5是一個(gè)區(qū)塊密碼字段值與微處理器運(yùn)算動(dòng)作對(duì)照表例子。如圖所示,若區(qū)塊密碼字段內(nèi)的值為0xC8時(shí),微處理器就會(huì)用電子密碼本(ECB)模式來(lái)完成密碼編譯動(dòng)作。當(dāng)字段內(nèi)的值為0xD0時(shí),微處理器就會(huì)以加密塊鏈(CBC)模式。OxE0表示微處理器應(yīng)使用加密反饋模式(CFB),0xE8表示使用輸出反饋模式(OFB)。以上所述各模式在FIPS文獻(xiàn)中均有詳細(xì)的描述。
請(qǐng)看圖6。圖6所要表現(xiàn)的是一個(gè)在X86兼容的微處理器600中的密碼編譯單元617的發(fā)明實(shí)施例。微處理器600內(nèi)有一個(gè)提取邏輯器601。提取邏輯器601從內(nèi)存(未顯示)取得指令。轉(zhuǎn)譯邏輯器602由一個(gè)邏輯器,電路,微指令碼(microcode)(就是微指令,micro instructions或原生碼,nativeinstruction)裝置或是其它可以將指令轉(zhuǎn)成對(duì)照的微指令碼的組件。轉(zhuǎn)譯邏輯器602內(nèi)的轉(zhuǎn)譯組件可以與微處理器600內(nèi)其它功能組件共享。如圖所示,轉(zhuǎn)譯邏輯器602內(nèi)包含了一個(gè)互相耦接的轉(zhuǎn)譯器603、微指令碼只讀存儲(chǔ)器604和區(qū)段指針器邏輯器640。中斷邏輯器626通過(guò)總線(xiàn)628耦接轉(zhuǎn)譯邏輯器602。軟/硬件所發(fā)出的中斷要求信號(hào)627都由中斷邏輯器626處理。中斷邏輯器626轉(zhuǎn)達(dá)指令轉(zhuǎn)譯邏輯器602中斷。如圖6所示,指令轉(zhuǎn)譯邏輯器與以下連串性階段耦接。包括寄存器階段605,地址階段606,加載階段607,執(zhí)行階段608,儲(chǔ)存階段618以及寫(xiě)回階段619。圖6所描繪的執(zhí)行階段608內(nèi)包含了一個(gè)執(zhí)行邏輯器632。執(zhí)行邏輯器632內(nèi)有多個(gè)同時(shí)作業(yè)的執(zhí)行單元,單元610,612,614,616和617。整數(shù)單元610負(fù)責(zé)執(zhí)行微指令隊(duì)列609內(nèi)的整數(shù)微指令,浮點(diǎn)單元612負(fù)責(zé)執(zhí)行微指令隊(duì)列611內(nèi)的浮點(diǎn)微指令,MMX單元614負(fù)責(zé)執(zhí)行微指令隊(duì)列613內(nèi)的MMX微指令,SSE單元616負(fù)責(zé)執(zhí)行微指令隊(duì)列615內(nèi)的SSE微指令。SSE單元616和密碼編譯單元617耦接。兩單元中間有一個(gè)加載總線(xiàn)620,一個(gè)閑置信號(hào)621和一個(gè)儲(chǔ)存總線(xiàn)622。密碼編譯單元617和SSE單元共享同一個(gè)微指令隊(duì)列615。另一個(gè)實(shí)施例的做法是將密碼編譯單元617設(shè)為一個(gè)如單元610,612及614相同的完全獨(dú)立的單元。整數(shù)單元610和x86 EFLAGS寄存器是耦接的。EFLAGS寄存器包含了一個(gè)X位625。這個(gè)X位內(nèi)的值指示目前是否有密碼編譯運(yùn)算正在作業(yè)。X位625實(shí)施例中的其中一項(xiàng)是x86 EFLAGS寄存器624中的第30個(gè)位。另外,整數(shù)單元610會(huì)讀取寄存器628中數(shù)據(jù)來(lái)分析一個(gè)E位629的狀態(tài)。E位中的值指示密碼編譯單元617是否存在于微處理器600內(nèi)。整數(shù)單元610也會(huì)讀取一個(gè)D位631。這個(gè)位位于特征控制寄存器630內(nèi),用來(lái)開(kāi)啟和關(guān)閉密碼編譯單元617。如圖3微處理器301實(shí)施例,圖6的微處理器600為了能清楚表達(dá)發(fā)明特征,圖中只顯示出一些微處理器的構(gòu)造,其它部分則被匯集在一起或者已被省略。本領(lǐng)域技術(shù)人員可以理解組件,例如負(fù)責(zé)數(shù)據(jù)高速緩存(未顯示)的接口,總線(xiàn)接口單元(未顯示)以及時(shí)鐘發(fā)生器和分散邏輯器等其它微處理器的單元都被省略。
運(yùn)算過(guò)程中,提取邏輯器配合時(shí)鐘信號(hào)(未顯示)將指令從內(nèi)存(未顯示)提至轉(zhuǎn)譯邏輯器602。轉(zhuǎn)譯邏輯器602將指令轉(zhuǎn)編為對(duì)應(yīng)的微指令然后配合時(shí)鐘信號(hào)轉(zhuǎn)供給微處理器600內(nèi)605-608,618及619等單元。每個(gè)指令對(duì)應(yīng)的一連串微指令指示微處理器該做的子動(dòng)作來(lái)完成該項(xiàng)指令。例如一個(gè)由地址階段606執(zhí)行的地址產(chǎn)生指令,就包含了先從寄存器階段605特定的兩個(gè)寄存器(未顯示)內(nèi)取得兩個(gè)操作數(shù),然后再于整數(shù)單元610相加兩個(gè)操作數(shù)。所有執(zhí)行單元610,612,614,616及617所產(chǎn)生的結(jié)果都由儲(chǔ)存邏輯器618負(fù)責(zé)存入內(nèi)存中。轉(zhuǎn)譯邏輯器602會(huì)判斷指令的類(lèi)型,然后使用轉(zhuǎn)譯器603直接產(chǎn)生一連貫的微指令,或是轉(zhuǎn)譯邏輯器602會(huì)由微指令碼只讀存儲(chǔ)器604中提提取一連貫的微指令?;蛘咿D(zhuǎn)譯邏輯器602會(huì)產(chǎn)生部分的微指令,剩下的再?gòu)奈⒅噶畲a只讀存儲(chǔ)中提出。微指令按照時(shí)鐘速度的在微處理器600中遵循605-608,618和619各階段的順序執(zhí)行。當(dāng)微指令移動(dòng)到執(zhí)行階段608時(shí),執(zhí)行邏輯器632將微指令發(fā)送至執(zhí)行單元610,612,614,616,及617所執(zhí)行運(yùn)算產(chǎn)生的結(jié)果接著進(jìn)入儲(chǔ)存階段618。在一實(shí)施例中,微指令包含了標(biāo)明范圍了指令,不論能不能與其它運(yùn)算同時(shí)進(jìn)行。
轉(zhuǎn)譯邏輯器602接收到XCRYPT指令后,產(chǎn)生對(duì)應(yīng)的為指令,指揮微處理器600內(nèi)其它邏輯器605-608,618,619來(lái)執(zhí)行到的密碼編譯運(yùn)算指令。前面幾個(gè)的微指令會(huì)直接被分派到密碼編譯單元617內(nèi)來(lái)指揮單元617從加載總線(xiàn)加載需要的數(shù)據(jù)?;蚴羌虞d一個(gè)片段的輸入數(shù)據(jù),開(kāi)始進(jìn)行指示次數(shù)的密碼編譯回合。也有可能是將一段輸出數(shù)據(jù)流通過(guò)儲(chǔ)存總線(xiàn)622傳到儲(chǔ)存邏輯器618,然后再存入內(nèi)存中。接下來(lái)第二組數(shù)個(gè)指令會(huì)被分送到執(zhí)行單元610,612,614和616來(lái)執(zhí)行其它必要的子運(yùn)算。例如測(cè)試E位629,設(shè)定D位631,將X位625的值設(shè)定為顯示密碼編譯運(yùn)算正在執(zhí)行中,將X位625的值設(shè)定為顯示密碼編譯運(yùn)算正在執(zhí)行中。更新寄存器內(nèi)容(如計(jì)數(shù)寄存器,輸入文字指針寄存器,輸出文字指針寄存器)寄存階段605范圍內(nèi)的工作,處理由中斷邏輯器626送來(lái)的中斷要求627等工作。為了實(shí)現(xiàn)最有效率的密碼編譯相關(guān)指令,微指令的順序會(huì)被特別排列成將整數(shù)單元微指令穿插于密碼編譯微指令中,已達(dá)成整數(shù)運(yùn)算與密碼編譯運(yùn)算平行執(zhí)行。微指令中包含了從中斷要求627中恢復(fù)所需要的微指令。所有指向密碼編譯參數(shù)(cryptographic parameter)和數(shù)據(jù)的指針都位于x86架構(gòu)寄存器內(nèi),收到中斷要求時(shí),指針都會(huì)被儲(chǔ)存,中斷結(jié)束后,數(shù)據(jù)計(jì)參數(shù)會(huì)被恢復(fù)。因此,當(dāng)中斷發(fā)生時(shí),程控會(huì)轉(zhuǎn)移到對(duì)應(yīng)的中斷服務(wù)例程。如程控的此轉(zhuǎn)移的一部份,會(huì)清除X位625,以表示密鑰數(shù)據(jù)及控制字組數(shù)據(jù)不再有效。在從中斷中返回后,程控會(huì)立即轉(zhuǎn)回到XCRYPT指令,以及如其對(duì)應(yīng)的微指令的一部份,特定微指令會(huì)測(cè)試X位625的狀態(tài),以判斷密鑰數(shù)據(jù)及控制字組數(shù)據(jù)是否為有效。若如此,當(dāng)中斷發(fā)生時(shí),會(huì)重復(fù)正進(jìn)行處理的特定區(qū)塊的輸入數(shù)據(jù)的運(yùn)算。若X位625的狀態(tài)表示密鑰數(shù)據(jù)及控制字組數(shù)據(jù)不再為有效,則會(huì)從內(nèi)存中,重新加載伴隨著正進(jìn)行處理的特定區(qū)塊的輸入數(shù)據(jù)的密鑰數(shù)據(jù)及控制字組??傊?,根據(jù)本發(fā)明的XCRYPT指令的指令總是會(huì)涉及X位625的初始測(cè)試,以判斷密碼編譯單元617內(nèi)的密鑰數(shù)據(jù)及控制字組數(shù)據(jù)的有效性。若密鑰數(shù)據(jù)及控制字組數(shù)據(jù)不為有效,則密鑰數(shù)據(jù)及控制字組數(shù)據(jù)會(huì)從內(nèi)存中加載。然后,會(huì)加載借助輸入指針寄存器的內(nèi)容所指向的輸入數(shù)據(jù)區(qū)塊,并且會(huì)對(duì)輸入數(shù)據(jù)區(qū)塊執(zhí)行預(yù)定密碼運(yùn)算。另外的方式是,會(huì)加載輸入數(shù)據(jù)區(qū)塊,并且不會(huì)先加載密鑰數(shù)據(jù)及控制字組數(shù)據(jù),而執(zhí)行預(yù)定密碼運(yùn)算。
若產(chǎn)生新密鑰數(shù)據(jù)或新控制字組,則在執(zhí)行新XCRYPT指令之前,需要清除X位625。也會(huì)考慮到可使用相同的密鑰數(shù)據(jù)及控制字組數(shù)據(jù)來(lái)執(zhí)行連續(xù)的XCRYPT指令。在此種情況中,在加載初始密鑰數(shù)據(jù)及控制字組數(shù)據(jù)之后,不需清除X位625。例如,為了與內(nèi)存總線(xiàn)速度有關(guān)的最佳化目的,使用者可將例如是500個(gè)輸入數(shù)據(jù)區(qū)塊的加密/解密分解成5個(gè)XCRYPT指令,各自處理每一個(gè)的輸入數(shù)據(jù)區(qū)塊。
區(qū)塊指針器邏輯器640可確信對(duì)應(yīng)微指令會(huì)做安排,以允許用于指針寄存器,以及在處理中斷627之前,更新對(duì)一序列輸入文字區(qū)塊的一序列區(qū)塊密碼運(yùn)算的中間結(jié)果。區(qū)塊指針器邏輯器640會(huì)指示將微指令插入對(duì)應(yīng)微指令的流程,以至于在完成對(duì)第一區(qū)塊的輸入數(shù)據(jù)的密碼運(yùn)算時(shí),內(nèi)存中的輸入及輸出數(shù)據(jù)區(qū)塊的指針器會(huì)修改成指向下個(gè)輸入及輸出數(shù)據(jù)區(qū)塊。此外,區(qū)塊指針器邏輯器640會(huì)指示將微指令插入對(duì)應(yīng)微指令的流程,以修改區(qū)塊計(jì)數(shù)器,以表示對(duì)目前區(qū)塊的輸入數(shù)據(jù)的密碼運(yùn)算已完成。再有,在使用區(qū)塊密碼器模式的事件中,當(dāng)對(duì)緊接的區(qū)塊數(shù)據(jù)執(zhí)行密碼運(yùn)算時(shí),需要使用起因于對(duì)目前區(qū)塊的數(shù)據(jù)執(zhí)行密碼運(yùn)算的數(shù)據(jù),然后區(qū)塊指針器邏輯器640也會(huì)指示將微指令插入對(duì)應(yīng)微指令的流程,以保持或產(chǎn)生與保持起因于對(duì)目前區(qū)塊的數(shù)據(jù)執(zhí)行密碼運(yùn)算的數(shù)據(jù)在初始化向量所指定的內(nèi)存的區(qū)域內(nèi),以至于在從中斷事件返回后,對(duì)緊接的區(qū)塊數(shù)據(jù)執(zhí)行密碼運(yùn)算可持續(xù)下去。
請(qǐng)看圖7,圖7是一個(gè)微指令結(jié)構(gòu)的范例。這個(gè)微指令700就是用來(lái)指示像圖6所見(jiàn)的微處理器來(lái)執(zhí)行密碼編譯運(yùn)算的指令。微指令700包含了一個(gè)微運(yùn)算碼字段701,一個(gè)數(shù)據(jù)寄存器字段702和一個(gè)寄存器字段703。微運(yùn)算碼字段701提供了微處理器600該執(zhí)行那些子運(yùn)算程序,和每階段所要使用的邏輯器。在本發(fā)明中,特定的值是被指定到微指令以供譯碼單元運(yùn)作使用。第一個(gè)值(XLOAD)指示從內(nèi)存中數(shù)據(jù)寄存器字段702指向的位置中的數(shù)據(jù)。這個(gè)數(shù)據(jù)應(yīng)被加載寄存器字段703所只是在密碼編譯單元中的位置。這個(gè)提出的數(shù)據(jù)(例如密碼編譯密鑰數(shù)據(jù),控制字,輸入文字?jǐn)?shù)據(jù),初始化向量)是提供給密碼編譯單元用的。第二個(gè)微運(yùn)算碼字段701的值(XSTOR),指示密碼編譯單元運(yùn)算產(chǎn)生的結(jié)果應(yīng)存入內(nèi)存中數(shù)據(jù)寄存器字段702所指向的位置。針對(duì)多階結(jié)構(gòu)的密碼編譯單元,寄存器字段703的內(nèi)容指示在數(shù)個(gè)輸出數(shù)據(jù)片段那一個(gè)應(yīng)該被存入內(nèi)存中。輸出數(shù)據(jù)片段被放在數(shù)據(jù)域位704,供給儲(chǔ)存邏輯器讀取。接下來(lái),參考圖8與圖9,將更進(jìn)一步探討XLOAD和XSTOR在密碼編譯單元中的執(zhí)行流程。
請(qǐng)參考圖8,表格800是如先前所述,微處理器轉(zhuǎn)譯XCRPYT指令得到一組為指令。這組微指令中的前面第一組數(shù)個(gè)微指令由密碼編譯單元直接執(zhí)行,接下來(lái)第二組的數(shù)個(gè)微指令則是由一個(gè)或是多個(gè)其它單元平行執(zhí)行。第二組數(shù)個(gè)微指令所進(jìn)行的動(dòng)作包括更新計(jì)數(shù)器,臨時(shí)寄存器,結(jié)構(gòu)寄存器,測(cè)試和設(shè)定機(jī)械特定寄存器的位狀態(tài)等。第一組數(shù)個(gè)的微指令則提供密鑰數(shù)據(jù),密碼編譯參數(shù),和輸入數(shù)據(jù)給密碼編譯單元,并指揮密碼編譯單元產(chǎn)生密鑰程序表(或加載由內(nèi)存中提出的密鑰程序表),加載或?qū)⑤斎胛淖旨用芑蚪饷埽瑑?chǔ)存輸出文字?jǐn)?shù)據(jù)。一XLOAD微指令指示密碼編譯單元加載控制字?jǐn)?shù)據(jù),加載密碼編譯密鑰或密鑰程序表,加載初始化向量數(shù)據(jù),加載輸入文字?jǐn)?shù)據(jù),和指示開(kāi)始進(jìn)行密碼編譯運(yùn)算。當(dāng)微指令微XLOAD時(shí),寄存器字段703中的值0b010指示密碼編譯單元將控制字加載控制字指針寄存器。隨指這個(gè)指令在管線(xiàn)中前進(jìn),其中會(huì)遇到一個(gè)寄存器內(nèi)存控制字指針。這個(gè)指針指向內(nèi)存中控制字的位置。加載邏輯器從高速緩沖存儲(chǔ)器中提出這個(gè)控制字,放入數(shù)據(jù)域位704。相同的,寄存器字段值0b100指示密碼編譯單元加載數(shù)據(jù)域位704中的輸入文字?jǐn)?shù)據(jù)。然后再進(jìn)行密碼編譯運(yùn)算。如同控制字符,輸入數(shù)據(jù)是通過(guò)一個(gè)存在結(jié)構(gòu)寄存器內(nèi)的指針提出。
一實(shí)施例中,寄存器字段0b100和0b101可被視為一個(gè)兩階段的密碼編譯單元。連續(xù)的輸入文字?jǐn)?shù)據(jù)可被管線(xiàn)化。第一個(gè)XLOAD微指令將第一段輸入文字放入IN-1,第二個(gè)XLOAD微指令將第二段輸入文字放入IN-0,第二個(gè)XLOAD微指令也會(huì)啟動(dòng)密碼編譯單元執(zhí)行密碼編譯運(yùn)算。
如果密碼編譯運(yùn)算所使用的是使用者自行產(chǎn)生的密鑰程序表,則XLOAD微指令的數(shù)目與使用者自行產(chǎn)生的密鑰程序表中密鑰的數(shù)目相對(duì)應(yīng)。使用者自行產(chǎn)生的密鑰程序表會(huì)被分送到密碼編譯單元內(nèi),此單元會(huì)依照密碼編譯進(jìn)行的狀況從密鑰程序表中加載該回合所使用的密鑰。
XLOAD微指令寄存器字段703中其它值都為保留值。
請(qǐng)看圖9,圖9表格中顯示XSTOR微指令寄存器字段703的對(duì)照表。XSTORE指令指示密碼編譯單元將處理好的輸出文字片段(加密過(guò)或解密過(guò)的)存到位置字段702所指示的內(nèi)存內(nèi)的位置。根據(jù)本發(fā)明,翻譯邏輯器先產(chǎn)生一個(gè)XLOAD微指令加載一段輸入文字,然后再發(fā)出XSTOR將該輸入文字所產(chǎn)生的對(duì)應(yīng)輸出文字儲(chǔ)存。寄存器字段703的值0b100指示密碼編譯單元提供內(nèi)部寄存器output-0,OUT-0中的輸出文字片段供給儲(chǔ)存邏輯器做儲(chǔ)存。OUT-0的內(nèi)容是IN-0中輸入文字片段的對(duì)應(yīng)。相同的,寄存字段0b101指向的內(nèi)部寄存器output-1,其內(nèi)容是IN-1中輸入數(shù)據(jù)的對(duì)應(yīng)。加載密鑰和控制字?jǐn)?shù)據(jù)后,下XLOAD.IN-1,數(shù)個(gè)輸入文字片段可以被管線(xiàn)化的加載密碼編譯單元。XLOAD.IN-0微指令(XLOAD.IN-0也是指示密碼編譯單元開(kāi)始執(zhí)行密碼編譯運(yùn)算),XSTOR.OUTPUT-1,XSTOR.OUT-0,XLOAD.IN-1,XLOAD.IN-0(開(kāi)始替下一個(gè)輸入文字片段進(jìn)行運(yùn)算)等等。
請(qǐng)看圖10,圖10是一個(gè)控制字符1000的格式例子??刂谱址邪酥甘久艽a編譯運(yùn)算所用的密碼編譯參數(shù)??刂谱址?000是由使用者編制入內(nèi)存中。在進(jìn)行密碼編譯運(yùn)算前,指向控制字符的指針位于一個(gè)結(jié)構(gòu)寄存器內(nèi)。所以XCRYPT指令對(duì)應(yīng)的一組微指令中,LOAD微指令指示微處理器讀取含有該指針的架構(gòu)寄存器,并將指針轉(zhuǎn)成實(shí)體地址,從內(nèi)存(高速緩存)取出控制字符1000,放入密碼編譯單元內(nèi)部的控制字寄存器??刂谱址?000包含了一個(gè)保留的RSVD字段1001,一表示密鑰大小的KSIZE字段2002,一加密/解密E/D字段1003,一中間結(jié)果IRSLT字段1004,一密鑰產(chǎn)生KGEN字段1005,一算法ALG字段1006和一回合數(shù)計(jì)數(shù)RCNT字段1007。
所有保留字段1001的值都要被保留。KSIZE字段1002的值表示加密或解密所用的密鑰的大小。一實(shí)施例中,KSIZE字段1002指示密鑰究竟是128位,192位還是256位。E/D字段1003注明這個(gè)密碼編譯表達(dá)式加密或是解密運(yùn)算。KGEN字段1005指示內(nèi)存中密鑰是使用者產(chǎn)生的密鑰程序表還是一個(gè)單一密鑰。如果內(nèi)存中的是單一密鑰,則微指令會(huì)把這個(gè)密碼編譯密鑰,根據(jù)ALG字段1006內(nèi)容指定密碼編譯算法展開(kāi)成一密鑰程序表。一實(shí)施例中,ALG字段1006指定AES算法,所以迄今為止,我們所作的討論都是針對(duì)Triple-DES和AES算法。其它應(yīng)用不同密碼編譯算法的實(shí)施例,如RijndaelCipher,Twofish Ciper,等。RCNT字段1007的內(nèi)容指示密碼編譯時(shí)遵循所用的算法對(duì)每個(gè)文字片段所需重復(fù)進(jìn)行密碼編譯的回合數(shù)。雖然以上所述的密碼編譯算法的規(guī)范指示對(duì)不同的輸入文字片段進(jìn)行固定次數(shù)回合的密碼編譯,但是RCNT字段1007允許程序編制員將RCNT字段1007的值設(shè)為可以依照使用的算法而改變。一實(shí)施例中程序編制員指定要對(duì)每段文字進(jìn)行0至15回合密碼編譯。最后,IRSLT字段1004內(nèi)容注明對(duì)輸入文字加密/解密的回合次數(shù)是否參照RCNT字段1007和ALG字段1006注明的算法或是根據(jù)ALG字段1006中注明的算法,RCNT字段1007做的演算數(shù)目產(chǎn)生的只是一個(gè)中間結(jié)果,并不是最后結(jié)果。本領(lǐng)域技術(shù)人員能了解,許多密碼編譯算法會(huì)重復(fù)進(jìn)行同一個(gè)子運(yùn)算,最后一回合時(shí)再做不同的運(yùn)算。所以IRSLT字段1004所提供的是一個(gè)中間結(jié)果,并且允許程序編制員能夠在進(jìn)行下一步動(dòng)作前對(duì)這個(gè)中間結(jié)果先加以確認(rèn)。例如最后結(jié)果是對(duì)中級(jí)結(jié)果增值而來(lái)的,可以先對(duì)文字進(jìn)行一回合加密,然后再對(duì)同樣一個(gè)文字片段進(jìn)行二回合的密碼編譯,然后再進(jìn)行三回合,等等。這個(gè)可以設(shè)定的密碼編譯回合設(shè)定功能和中間結(jié)果功能始使用者能夠評(píng)估密碼編譯的效能,解決問(wèn)題,也是一個(gè)研究不同密鑰結(jié)構(gòu)和回合次數(shù)的工具。
請(qǐng)看圖11,一個(gè)密碼編譯單元1100的方框圖。密碼編譯單元包含了一個(gè)微程序碼寄存器1103。微程序碼寄存器1103通過(guò)微指令總線(xiàn)1114接收微指令。(如XLOAD和XSTOR等微指令)密碼編譯單元1100也包含了一個(gè)控制字符寄存器1104,一input-0寄存器1105,一input-1寄存器1106,一key-0寄存器1107,和一key-1寄存器1108。加載總線(xiàn)1111遵照XLOAD微指令在微指令寄存器1103中的內(nèi)容將數(shù)據(jù)加載存器1104-1108中。密碼編譯單元1100還包含了一個(gè)與所有寄存器1103-1108和密鑰隨機(jī)存取內(nèi)存1102耦接的區(qū)塊解密邏輯器1101。區(qū)塊解密邏輯器提供一停止信號(hào)1113和一區(qū)塊結(jié)果至output-0寄存器1109和ouput-1寄存器1110。輸出寄存器1109-1110會(huì)將內(nèi)部?jī)?nèi)容循序的通過(guò)儲(chǔ)存總線(xiàn)1112送至微處理器。一實(shí)施例中微指令寄存器1103是32位,而其它寄存器1104-1110則是128位。
在運(yùn)算中,密碼編譯微指令依序的被送至微指令寄存器1103,另外,控制字寄存器1104和輸入寄存器1105-1106其中之一或密鑰寄存器1107-1108其中之一也會(huì)被跟著一起送至微指令寄存器內(nèi)。一配合圖8和圖9所討論的實(shí)施例中,控制字先在XLOAD微指令發(fā)出后備加載控制字符寄存器1104內(nèi)。接下來(lái)密碼編譯密鑰或密鑰程序表在接下來(lái)的XLOAD微指令下指揮下也被加載。如果要加載的是一個(gè)128位大小的密碼編譯密鑰,則XLOAD微指令會(huì)安排KEY-01107來(lái)儲(chǔ)存這個(gè)密鑰。若是密鑰大小大于128位,則XLOAD會(huì)安排KEY-01107和KEY-11108來(lái)儲(chǔ)存此密鑰。如果加載的是一使用者產(chǎn)生密鑰,接下來(lái)的XLOAD微指令會(huì)安排KEY-01107。每個(gè)密鑰程序表中的密鑰都會(huì)依序被排列在密鑰隨機(jī)存取內(nèi)存1102中,以供每個(gè)密碼編譯回合中使用。接下來(lái)輸入文字?jǐn)?shù)據(jù)(若不需要初始化向量)會(huì)被加載IN-1寄存器1106。XLOAD中的一個(gè)微指令會(huì)指示IN-0寄存器1105將輸入數(shù)據(jù)加載并且根據(jù)控制字寄存器1104中的內(nèi)容,應(yīng)用在IN-1寄存器或是在兩個(gè)輸入寄存器1105-1106內(nèi)的初始化向量開(kāi)始對(duì)寄存器內(nèi)的數(shù)據(jù)進(jìn)行密碼編譯工作。(如果輸入數(shù)據(jù)被管線(xiàn)化)收到XLOAD微指令指定IN-0寄存器1005后,區(qū)塊解密邏輯器便遵循控制字的內(nèi)容開(kāi)始進(jìn)行密碼編譯。如果需要展開(kāi)單一密碼編譯密鑰,那么區(qū)塊解密邏輯器便會(huì)產(chǎn)生密鑰程序表內(nèi)的每一把密鑰,并且將它們存在密鑰隨機(jī)存取內(nèi)存1102內(nèi)。不管區(qū)塊解密邏輯器是否需要產(chǎn)生密鑰程序表或是密鑰程序表已經(jīng)從內(nèi)存內(nèi)加載,密碼解密第一回合所用到的密鑰一定是被存在區(qū)塊解密邏輯器1101中的高速寄存內(nèi),這樣第一區(qū)塊的密碼解譯回合就可以直接進(jìn)行,無(wú)須再?gòu)拿荑€隨機(jī)存取內(nèi)存1102取得。一但區(qū)塊解密邏輯器開(kāi)始動(dòng)作,便會(huì)對(duì)一塊或一塊以上的輸入文字進(jìn)行密碼編譯運(yùn)算,逐次的從密鑰隨機(jī)內(nèi)存中提取所要用到的密鑰。密碼編譯單元1100對(duì)指定的輸入片段文字進(jìn)行特定的密碼編譯運(yùn)算。下達(dá)XLOAD和XSTOR微指令來(lái)對(duì)輸入文字進(jìn)行加密或解密。執(zhí)行XSTOR微指令時(shí),若輸出數(shù)據(jù)(OUT-0或OUT-1)還沒(méi)準(zhǔn)備好,則區(qū)塊解密邏輯器會(huì)設(shè)一個(gè)停止信號(hào)1113。一但輸出數(shù)據(jù)產(chǎn)生完成并且已被存入對(duì)應(yīng)的寄存器1109-1110內(nèi),那么寄存器里的內(nèi)容就會(huì)被轉(zhuǎn)入儲(chǔ)存總線(xiàn)1112。
請(qǐng)看圖12。圖12是一個(gè)AES算法區(qū)塊解密邏輯器1200的方框圖。區(qū)塊解密邏輯器1200包含了一個(gè)回合計(jì)算引擎(round engine)1220,一個(gè)回合計(jì)算引擎控制器1210。回合計(jì)算引擎1220通過(guò)總線(xiàn)1211-1214和總線(xiàn)1216-1218與回合計(jì)算引擎控制器1210耦接?;睾嫌?jì)算引擎控制器可以存取微指令寄存器1201,KEY-1寄存器1204來(lái)讀取密鑰數(shù)據(jù),微指令和密碼編譯運(yùn)算參數(shù)。寄存器1205-1206中的內(nèi)容,供給回合計(jì)算引擎1220,然后回合計(jì)算引擎1220再將對(duì)應(yīng)的輸出文字傳到輸出寄存器1207-1208內(nèi)。輸出寄存器1207-1208通過(guò)總線(xiàn)1216-1217與回合計(jì)算引擎控制器1210耦接。這樣回合計(jì)算引擎控制器就能讀取每一密碼編譯回合的結(jié)果,再供給回合計(jì)算引擎1220,讓回合計(jì)算引擎1220能通過(guò)總線(xiàn)NEXTIN1218進(jìn)行下一回合的密碼編譯運(yùn)算。密碼編譯密鑰通過(guò)總線(xiàn)1215從密鑰隨機(jī)讀取內(nèi)存(未顯示)中被提出。ENC/DEC 1211信號(hào)指示回合計(jì)算引擎進(jìn)行加密(S-Box)或解密(反向S-Box)。RNDCON總線(xiàn)1212指示回合計(jì)算引擎進(jìn)行第一AES回合或中級(jí)AES回合或是最后一回合的AES。GENKEY信號(hào)1214設(shè)定時(shí)代表回合計(jì)算引擎1220需要將從總線(xiàn)1213取得的密鑰展開(kāi)成密鑰程序表。密鑰總線(xiàn)1213也是用來(lái)提供密鑰的,它會(huì)將每一回合所需要用的密鑰提供給回合計(jì)算引擎1220。
回合計(jì)算引擎1220與第一個(gè)寄存器REG-0 1222耦接,內(nèi)包含了第一密鑰XOR邏輯器1221。第一個(gè)寄存器1222與S-Box邏輯器1223耦接。S-Box邏輯器1223與移列邏輯器1224(Shift Row logic)耦接。移列邏輯器1224與第二個(gè)寄存器REG-1 1225耦接。第二個(gè)寄存器REG-1 1225與混欄(MixColumn)邏輯器1226耦接。而混欄邏輯器與第三個(gè)寄存器REG-2 1227耦接。第一密鑰邏輯器1221,S-Box邏輯器1223,移列邏輯器1224及混欄邏輯器1226作為執(zhí)行名稱(chēng)相子程序運(yùn)算?;鞕谶壿嬈?226用途為對(duì)在進(jìn)行中級(jí)密碼運(yùn)算回合中時(shí)加入的數(shù)據(jù)進(jìn)行AESXOR運(yùn)算,使用密鑰總線(xiàn)1213所提供的回合密鑰。當(dāng)ENC/DNC狀態(tài)指示進(jìn)行解密時(shí)第一密鑰邏輯器1221,S-Box邏輯器1223,移列邏輯器1224及混欄邏輯器1226也用來(lái)進(jìn)行對(duì)應(yīng)的逆AES子程序運(yùn)算。本領(lǐng)域技術(shù)人員可以了解進(jìn)行中級(jí)回合時(shí)數(shù)據(jù)會(huì)根據(jù)控制字符寄存器1202內(nèi)容所指示的區(qū)塊解密模式,將數(shù)據(jù)反饋至回合計(jì)算引擎1220。若需要初始化向量數(shù)據(jù)時(shí),初始化向量會(huì)通過(guò)總線(xiàn)NEXTIN1218被傳回回合計(jì)算引擎1220。
圖12是一實(shí)施例。如圖所示回合計(jì)算引擎被分割為兩個(gè)階段REG-01222和REG-1 1225間的第一階段和REG-1 1225和REG-2 1227間的第二階段。中階回合的數(shù)據(jù)被放在兩個(gè)階段中,配合時(shí)鐘信號(hào)(位顯示)移動(dòng)。當(dāng)密碼編譯運(yùn)算完成一塊輸入數(shù)據(jù),輸出數(shù)據(jù)被存入對(duì)應(yīng)的輸出寄存器1207-1208。執(zhí)行XSTOR微指令會(huì)使寄存器1207-1208將內(nèi)含數(shù)據(jù)傳送至儲(chǔ)存總線(xiàn)(未顯示)。
參照?qǐng)D13,所顯示的流程圖具有用以保持中斷事件期間的密碼參數(shù)的狀態(tài)的根據(jù)本發(fā)明的方法的特性。當(dāng)指令的流程借助根據(jù)本發(fā)明的微處理器來(lái)執(zhí)行時(shí),流程會(huì)從方框1302開(kāi)始。指令的流程包括XCRYPT指令是不必要的,如在此所述。然后流程會(huì)繼續(xù)進(jìn)行判斷方框1304。
在判斷方框1304,會(huì)進(jìn)行估算,以判斷中斷事件(例如,可屏蔽中斷、不可屏蔽中斷、分頁(yè)錯(cuò)誤、工作切換等)是否正發(fā)生,而需要將指令的此流程改變成指令的一種流程(“中斷處理程序”),以處理中斷事件,若如此,則流程會(huì)繼續(xù)進(jìn)行方框1306。若否,則指令執(zhí)行的判斷方框1304上的流程回路會(huì)持續(xù),直到中斷事件發(fā)生。
在方框1306,因?yàn)橹袛嗍录寻l(fā)生,所以在程控轉(zhuǎn)移到對(duì)應(yīng)的中斷處理程序之前,根據(jù)本發(fā)明的中斷邏輯器會(huì)指示清除標(biāo)記寄存器內(nèi)的X位。清除X位可確信在從中斷處理程序返回后,若區(qū)塊密碼器運(yùn)算仍在進(jìn)行,則其將顯示發(fā)生一個(gè)或多個(gè)中斷事件,并且在對(duì)由輸入指針寄存器的內(nèi)容所指示的此區(qū)塊的輸入數(shù)據(jù),持續(xù)區(qū)塊密碼器運(yùn)算之前,必須重新加載控制字組數(shù)據(jù)及密鑰數(shù)據(jù)。然后,流程會(huì)繼續(xù)進(jìn)行方框1308。
在方框1308,包含對(duì)應(yīng)于根據(jù)本發(fā)明的區(qū)塊密碼器運(yùn)算的效能的指針器及計(jì)數(shù)器的所有架構(gòu)性寄存器會(huì)儲(chǔ)存到內(nèi)存。本領(lǐng)域技術(shù)人員將了解到的是,架構(gòu)性寄存器的儲(chǔ)存為在控制轉(zhuǎn)移到中斷處理程序之前,通常會(huì)在目前數(shù)據(jù)計(jì)算裝置中完成的動(dòng)作。因此本發(fā)明利用目前數(shù)據(jù)架構(gòu)的此種觀點(diǎn),來(lái)提供遍及中斷事件的執(zhí)行透明度。在寄存器儲(chǔ)存之后,然后流程會(huì)繼續(xù)進(jìn)行方框1310。
在方框1310,程序流程會(huì)轉(zhuǎn)移到中斷處理程序。然后,流程會(huì)繼續(xù)進(jìn)行方框1312。
在方框1312,此方法會(huì)完成。本領(lǐng)域技術(shù)人員將了解到的是,在從中斷處理程序返回后,圖13的方法會(huì)再次從方框1302開(kāi)始。
請(qǐng)看圖14,所提供的流程圖繪示根據(jù)本發(fā)明的方法出現(xiàn)一個(gè)或多個(gè)中斷事件時(shí),對(duì)數(shù)個(gè)輸入數(shù)據(jù)區(qū)塊,執(zhí)行特定密碼運(yùn)算。
流程會(huì)從方框1402開(kāi)始,其中,根據(jù)本發(fā)明的XCRYPT指令會(huì)開(kāi)始執(zhí)行。XCRYPT指令的執(zhí)行會(huì)最優(yōu)先執(zhí)行,或由于中斷事件的中斷的執(zhí)行,所以其可為緊接于最優(yōu)先執(zhí)行之后的執(zhí)行,以致于在已執(zhí)行中斷處理程序之后,程控會(huì)轉(zhuǎn)回到XCRYPT指令。然后流程會(huì)繼續(xù)進(jìn)行方框1404。
在方框1404,借助根據(jù)本發(fā)明的輸入指針寄存器的內(nèi)容所指示的內(nèi)存中的一區(qū)塊數(shù)據(jù)會(huì)從內(nèi)存中加載,并且預(yù)定密碼運(yùn)算會(huì)開(kāi)始。所使用的特定輸入指針寄存器由指定的特定密碼運(yùn)算(例如,加密或解密),以及由指定的區(qū)塊密碼器模式(例如,ECB、CBC、CFB、或OFB)來(lái)決定。例如,若指定的加密運(yùn)算使用OFB模式,則用來(lái)加載數(shù)據(jù)的輸入指針寄存器為指示內(nèi)存中的初始化向量的寄存器。若指定的解密運(yùn)算使用ECB模式,則用來(lái)加載數(shù)據(jù)的輸入指針寄存器為指示內(nèi)存中的下個(gè)區(qū)塊的密文的寄存器。然后,流程會(huì)繼續(xù)進(jìn)行判斷方框1406。
在判斷方框1406,會(huì)進(jìn)行估算,以判斷標(biāo)記寄存器內(nèi)的X位是否已設(shè)定。若X位已設(shè)定,則其表示目前加載于根據(jù)本發(fā)明的密碼單元元內(nèi)的控制字組及密鑰清單為有效。若X位已清除,則其表示目前加載于密碼單元內(nèi)的控制字組及密鑰清單為無(wú)效。如以上配合圖13所提及的,當(dāng)中斷事件發(fā)生時(shí),會(huì)清除X位。此外,如已所提及,當(dāng)需加載新控制字組或密鑰清單,或二者時(shí),在發(fā)出XCRYPT指令之前,需執(zhí)行清除X位的指令。在使用x86EFLAGS寄存器的位30的x-86兼容實(shí)施例中,X位可借助緊接于POPFD指令的PUSHFD指令來(lái)執(zhí)行清除。然而,本領(lǐng)域技術(shù)人員將了解的是,在另外實(shí)施例中,必須使用其它指令來(lái)清除X位。若X位已設(shè)定,則流程會(huì)繼續(xù)進(jìn)行方框1412。若X位已清除,則流程會(huì)繼續(xù)進(jìn)行方框1408。
在方框1408,因?yàn)榍宄腦位已表示已發(fā)生中斷事件,或已加載新控制字組及/或密鑰數(shù)據(jù),所以控制詞會(huì)從內(nèi)存中加載。在一實(shí)施例中,加載控制字組會(huì)阻止密碼單元執(zhí)行以上配合方框1404所提及的預(yù)定密碼運(yùn)算。在此范例的實(shí)施例中,方框1404中的開(kāi)始密碼運(yùn)算可使借助假設(shè)使用目前加載的控制字組及密鑰數(shù)據(jù)的多個(gè)區(qū)塊密碼器運(yùn)算最佳化。因此,在判斷方框1406中的檢查X位的狀態(tài)之前,會(huì)加載目前區(qū)塊的輸入數(shù)據(jù),并且會(huì)開(kāi)始密碼運(yùn)算。然后,流程會(huì)繼續(xù)進(jìn)行方框1410。
在方框1410,密鑰數(shù)據(jù)(亦即,密碼密鑰或完整密鑰程序表)會(huì)從內(nèi)存中加載。此外,方框1404中所提及的輸入?yún)^(qū)塊會(huì)再次加載,并且會(huì)根據(jù)最新加載的控制字組及密鑰程序表,而使密碼運(yùn)算開(kāi)始。然后,流程會(huì)繼續(xù)進(jìn)行方框1412。
在方框1412,會(huì)產(chǎn)生對(duì)應(yīng)于加載的輸入?yún)^(qū)塊的輸出區(qū)塊。然后,流程會(huì)繼續(xù)進(jìn)行方框1414。
在方框1414,若借助區(qū)塊密碼器模式及預(yù)定密碼運(yùn)算所需要,則會(huì)產(chǎn)生下個(gè)區(qū)塊的輸入數(shù)據(jù)。例如,在配置用于OFB加密的一實(shí)施例中,為了產(chǎn)生下個(gè)區(qū)塊的輸入數(shù)據(jù),需要將目前產(chǎn)生的密文區(qū)塊與目前區(qū)塊的明文進(jìn)行互斥或。執(zhí)行此運(yùn)算會(huì)產(chǎn)生用于下次區(qū)塊運(yùn)算的輸入數(shù)據(jù)(亦即,用于第一輸入?yún)^(qū)塊之后的所有區(qū)塊的“等效初始化向量”)。在此方框內(nèi)所述的步驟需確信將允許隨時(shí)會(huì)中斷的XCRYPT指令的執(zhí)行的狀態(tài)。例如,在一實(shí)施例中,在XCRYPT指令的執(zhí)行期間,分頁(yè)錯(cuò)誤隨時(shí)會(huì)發(fā)生。因此,當(dāng)已完成對(duì)目前輸入數(shù)據(jù)區(qū)塊的預(yù)定密碼運(yùn)算時(shí),需要設(shè)定用以處理下個(gè)輸入數(shù)據(jù)區(qū)塊的等效初始化向量(若借助區(qū)塊密碼器模式所需要)。當(dāng)借助使用的特定區(qū)塊密碼器模式所需要時(shí),等效初始化向量會(huì)儲(chǔ)存到借助初始化向量指針寄存器的內(nèi)容所指示的位置的內(nèi)存。然后,流程會(huì)繼續(xù)進(jìn)行方框1418。
在方框1416,產(chǎn)生的輸出區(qū)塊會(huì)存入內(nèi)存。然后,流程會(huì)繼續(xù)進(jìn)行方框1418。
在方框1418,輸入及輸出區(qū)塊指針寄存器的內(nèi)容會(huì)改為指向下個(gè)輸入及輸出數(shù)據(jù)區(qū)塊。此外,區(qū)塊計(jì)數(shù)寄存器的內(nèi)容會(huì)改為顯示完成對(duì)目前輸入數(shù)據(jù)區(qū)塊的密碼運(yùn)算。在配合圖14所討論的實(shí)施例中,區(qū)塊計(jì)數(shù)寄存器會(huì)減少。然而,本領(lǐng)域技術(shù)人員將了解的是,另外實(shí)施例會(huì)考慮區(qū)塊計(jì)數(shù)寄存器的操控及測(cè)試,而也可使輸入文字區(qū)塊的執(zhí)行管線(xiàn)化。然后,流程會(huì)繼續(xù)進(jìn)行判斷方框1420。
在判斷方框1420,會(huì)進(jìn)行估算,以判斷輸入數(shù)據(jù)區(qū)塊是否仍進(jìn)行運(yùn)算。在此實(shí)施例在此所具有的特性中,為了說(shuō)明的目的,會(huì)估算區(qū)塊計(jì)數(shù)器,以判斷其是否等于0。若沒(méi)有區(qū)塊仍進(jìn)行運(yùn)算,則流程會(huì)繼續(xù)進(jìn)行方框1424。若有區(qū)塊仍進(jìn)行運(yùn)算,則流程會(huì)繼續(xù)進(jìn)行方框1422。
在方框1422,會(huì)加載下個(gè)區(qū)塊的輸入數(shù)據(jù),如由輸入指針寄存器的內(nèi)容所指示的。然后,流程會(huì)繼續(xù)進(jìn)行方框1412。
在方框1424,此方法會(huì)完成。
本領(lǐng)域技術(shù)人員將了解的是,配合方框1412、1414、1416、以及1418所討論的步驟不必依序產(chǎn)生,而可無(wú)次序或并行地產(chǎn)生。
雖然本發(fā)明已以較佳實(shí)施例揭示如上。例如本發(fā)明目前實(shí)施例皆以x86架構(gòu)作為基準(zhǔn),因?yàn)閤86架構(gòu)是一個(gè)較多人熟悉的架構(gòu),因此以x86架構(gòu)講述較方便。本發(fā)明也可以同樣被應(yīng)用在其它架構(gòu)上,如PowerPC,MIPS,或其它指令集架構(gòu)完全不同的系統(tǒng)上。
本發(fā)明可以應(yīng)用于微處理器以外的計(jì)算機(jī)系統(tǒng)密碼編譯運(yùn)算上。本發(fā)明所使用的指令模式可以輕易的被轉(zhuǎn)換利用于別種微處理器以外的計(jì)算機(jī)處理系統(tǒng)上。本發(fā)明可以被包含于微處理器的周邊芯片組內(nèi),如北橋,南橋,或是被制作成一個(gè)與微處理器相連,專(zhuān)門(mén)負(fù)責(zé)處理密碼編譯的密碼編譯微處理器。當(dāng)微處理器看見(jiàn)密碼編譯相關(guān)的動(dòng)作時(shí)就把工作交給這個(gè)密碼編譯微處理器。本發(fā)明可應(yīng)用于嵌入式控制器,工業(yè)用控制器,信號(hào)處理器,陣列處理機(jī),以及其它處理數(shù)據(jù)用的處理器內(nèi)。本發(fā)明可被實(shí)現(xiàn)成一個(gè)只包含實(shí)施密碼編譯運(yùn)算所需的必要原件,而成為一個(gè)低成本和低耗電量的密碼編譯運(yùn)算執(zhí)行器。例如通訊系統(tǒng)內(nèi)處理加密/解密的處理器。為求明確起見(jiàn)其它的處理組件以上一概稱(chēng)微處理器。
另外,本發(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)技巧來(lái)表現(xiàn)本發(fā)明的密碼編譯功能,在此需聲明本發(fā)明可以完全的被應(yīng)用于其它密碼編譯算法上。只要是能夠執(zhí)行一密碼編譯運(yùn)算,加密或解密,并且微處理器內(nèi)包含一個(gè)專(zhuān)門(mén)在收到密碼編譯指令后進(jìn)行密碼編譯功能即可。
另外,針對(duì)以上所討論的回合計(jì)算引擎,但是該回合計(jì)算引擎中管線(xiàn)化處理輸入片段的階段不限于以上所述的兩個(gè)階段。該回合計(jì)算引擎的管線(xiàn)階段可為兩個(gè)或兩個(gè)以上。
最后,雖然目前針對(duì)本發(fā)明的討論目前限于單一個(gè)密碼編譯單元處理數(shù)個(gè)區(qū)塊密碼編譯算法,在此需聲明本發(fā)明可以包含多個(gè)平行密碼編譯單元,與一微處理器中其它執(zhí)行單元耦結(jié)。其中數(shù)個(gè)密碼編譯單元可以是分別處理不同區(qū)塊算法。例如第一個(gè)單元負(fù)責(zé)處理高階加密標(biāo)準(zhǔn)AES算法,第二單元處理數(shù)據(jù)加密標(biāo)準(zhǔn)DES算法等等以此類(lèi)推。
以上所述,僅為本發(fā)明較佳實(shí)施例而已,并非用來(lái)限定本發(fā)明實(shí)施的范圍。即凡依本發(fā)明所作的均等變化與修飾,皆為本發(fā)明專(zhuān)利范圍所涵蓋。
權(quán)利要求
1.一種用以執(zhí)行密碼編譯運(yùn)算的裝置,包括一密碼編譯指令,由一計(jì)算裝置來(lái)接收,其為屬于微處理器執(zhí)行的指令流程中的一步驟,其中該密碼指令指示微處理器進(jìn)行一個(gè)特定的密碼編譯運(yùn)算;以及執(zhí)行邏輯器,運(yùn)作上耦接至該密碼編譯指令,組態(tài)為用以執(zhí)行該密碼編譯指令的該密碼編譯運(yùn)算,其中該密碼編譯運(yùn)算包括顯示該密碼編譯運(yùn)算是否已由一中斷事件所中斷。
2.根據(jù)權(quán)利要求1所述的裝置,其中該密碼編譯運(yùn)算至少包括下列之一或其組合一加密運(yùn)算,將數(shù)個(gè)明文片段轉(zhuǎn)成對(duì)應(yīng)的數(shù)個(gè)密文片段;一解密運(yùn)算,將數(shù)個(gè)密文片段轉(zhuǎn)成對(duì)應(yīng)的數(shù)個(gè)明文片段。
3.根據(jù)權(quán)利要求1所述的裝置,其中該密碼編譯指令會(huì)指定一區(qū)塊密碼器模式,該區(qū)塊密碼器模式用于完成該密碼編譯運(yùn)算。
4.根據(jù)權(quán)利要求3所述的裝置,其中該區(qū)塊密碼器模式選自下列之一或其組合電子密碼本模式、加密塊鏈模式、加密反饋模式、輸出反饋模式。
5.根據(jù)權(quán)利要求1所述的裝置,其中密碼編譯指令指示對(duì)數(shù)個(gè)的文字片段進(jìn)行該密碼編譯運(yùn)算。
6.根據(jù)權(quán)利要求5所述的裝置,其中還包括一位,耦接至該執(zhí)行邏輯器,組態(tài)為用以顯示該密碼編譯運(yùn)算是否已由一中斷事件所中斷。
7.根據(jù)權(quán)利要求6所述的裝置,其中該位包含于一標(biāo)記寄存器中,該標(biāo)記寄存器包括一x86-兼容微處理器內(nèi)的一EFLAGS寄存器,并且其中該位包括該EFLAGS寄存器內(nèi)的位30。
8.根據(jù)權(quán)利要求1所述的裝置,其中該中斷事件包括程控轉(zhuǎn)移到配置用以處理該中斷事件的一程序流程,并且其中對(duì)一目前輸入數(shù)據(jù)區(qū)塊所執(zhí)行的該密碼編譯運(yùn)算會(huì)中斷。
9.根據(jù)權(quán)利要求8所述的裝置,其中在程控返回該密碼編譯指令之后,對(duì)該目前輸入數(shù)據(jù)區(qū)塊,會(huì)立即執(zhí)行該密碼編譯運(yùn)算。
10.根據(jù)權(quán)利要求1所述的裝置,其中還包括區(qū)塊指針器邏輯器,運(yùn)作上耦接至該執(zhí)行邏輯器,組態(tài)為用以指示該計(jì)算裝置,在對(duì)一目前輸入數(shù)據(jù)區(qū)塊,完成該密碼編譯運(yùn)算時(shí),將內(nèi)存中的輸入及輸出數(shù)據(jù)區(qū)塊的指針器修改為指向下個(gè)輸入及輸出數(shù)據(jù)區(qū)塊。
11.根據(jù)權(quán)利要求1所述的裝置,其中還包括區(qū)塊指針器邏輯器,運(yùn)作上耦接至該執(zhí)行邏輯器,組態(tài)為用以指示該計(jì)算裝置,修改一區(qū)塊計(jì)數(shù)寄存器的內(nèi)容,以表示已對(duì)一目前輸入數(shù)據(jù)區(qū)塊,完成該密碼編譯運(yùn)算;以及區(qū)塊指針器邏輯器,運(yùn)作上耦接至該執(zhí)行邏輯器,配置用以指示該計(jì)算裝置,保持,或產(chǎn)生與保持起因于對(duì)一目前區(qū)塊的數(shù)據(jù),執(zhí)行該密碼編譯運(yùn)算的數(shù)據(jù),以致于在從該中斷事件返回之后,對(duì)接下來(lái)的數(shù)據(jù),執(zhí)行該密碼編譯運(yùn)算會(huì)持續(xù)下去。
12.根據(jù)權(quán)利要求1所述的裝置,其中該中斷事件包括一中斷、一例外、一分頁(yè)錯(cuò)誤、及一工作切換。
13.根據(jù)權(quán)利要求1所述的裝置,其中該密碼編譯指令間接指向微處理器內(nèi)數(shù)個(gè)寄存器。
14.根據(jù)權(quán)利要求13所述的裝置,其中這些寄存器至少包括下列之一或其組合一第一寄存器,其中含有第一個(gè)指針指向第一個(gè)內(nèi)存位置,此第一內(nèi)存位置是數(shù)個(gè)輸入文字片段中第一個(gè)文字片段的位置;一第二寄存器,其中含有第二個(gè)指針指向第二個(gè)內(nèi)存位置,此第二內(nèi)存位置是內(nèi)存中儲(chǔ)存數(shù)個(gè)輸出文字片段的位置,這些輸出文字片段是輸入文字片段經(jīng)歷過(guò)密碼編譯運(yùn)算的結(jié)果;一個(gè)第三寄存器,其中是指示輸入文字片段的總數(shù);一個(gè)第四寄存器,其中第四寄存器的內(nèi)容包含了第三指針,指向第三個(gè)內(nèi)存位置,這個(gè)內(nèi)存位置是密碼編譯密鑰在內(nèi)存中的位置;一個(gè)第五寄存器,其中第五寄存器內(nèi)中包含了第四指針,指向第四個(gè)內(nèi)存位置,這個(gè)內(nèi)存位置是初始化向量在內(nèi)存里的位置;以及一個(gè)第六寄存器,其中第六寄存器內(nèi)中包含了第五指針,指向第五個(gè)內(nèi)存位置,這個(gè)內(nèi)存位置是控制字符的位置,此控制字符是密碼編譯參數(shù)之一。
15.根據(jù)權(quán)利要求14所述的裝置,其中該密碼編譯密鑰數(shù)據(jù)下列之一或其組合一密碼密鑰及一密碼密鑰程序表。
16.根據(jù)權(quán)利要求1所述的裝置,其中該執(zhí)行單元包括一密碼編譯單元,組態(tài)為接收第一組數(shù)個(gè)微指令,對(duì)數(shù)個(gè)輸入文字片段分別執(zhí)行數(shù)回合的密碼編譯指令,產(chǎn)生數(shù)個(gè)輸出文字片段,其中數(shù)個(gè)密碼編譯回合由密碼編譯單元中控制字符控制。
17.一種用以執(zhí)行密碼運(yùn)算的裝置,包括一密碼編譯單元,位于一裝置內(nèi),組態(tài)為接收屬于一指令流程內(nèi)的一密碼編譯指令,并用以響應(yīng)執(zhí)行該密碼指令指示微處理器進(jìn)行的一個(gè)特定的密碼編譯運(yùn)算;以及一位,位于一寄存器內(nèi),運(yùn)作上耦接至該密碼編譯單元,組態(tài)為用以顯示該密碼編譯運(yùn)算是否已由一中斷事件所中斷。
18.根據(jù)權(quán)利要求17所述的裝置,其中該中斷事件包括一中斷、一例外、一分頁(yè)錯(cuò)誤、及一工作切換。
19.根據(jù)權(quán)利要求17所述的裝置,其中該中斷事件包括程控轉(zhuǎn)移到配置用以處理該中斷事件的一程序流程,并且其中對(duì)一目前輸入數(shù)據(jù)區(qū)塊所執(zhí)行的該密碼編譯運(yùn)算會(huì)中斷。
20.根據(jù)權(quán)利要求19所述的裝置,其中在程控返回該密碼編譯指令之后,對(duì)該目前輸入數(shù)據(jù)區(qū)塊,會(huì)立即執(zhí)行該密碼編譯運(yùn)算。
21.根據(jù)權(quán)利要求17所述的裝置,其中還至少包括下列之一或其組合區(qū)塊指針器邏輯器,運(yùn)作上耦接至該執(zhí)行邏輯器,配置用以指示該計(jì)算裝置,在對(duì)一目前輸入數(shù)據(jù)區(qū)塊,完成該密碼編譯運(yùn)算時(shí),將內(nèi)存中的輸入及輸出數(shù)據(jù)區(qū)塊的指針器修改為指向下個(gè)輸入及輸出數(shù)據(jù)區(qū)塊;區(qū)塊指針器邏輯器,運(yùn)作上耦接至該執(zhí)行邏輯器,配置用以指示該計(jì)算裝置,修改一區(qū)塊計(jì)數(shù)寄存器的內(nèi)容,以表示已對(duì)一目前輸入數(shù)據(jù)區(qū)塊,完成該密碼編譯運(yùn)算;以及區(qū)塊指針器邏輯器,運(yùn)作上耦接至該執(zhí)行邏輯器,配置用以指示該計(jì)算裝置,保持,或產(chǎn)生與保持起因于對(duì)一目前區(qū)塊的數(shù)據(jù),執(zhí)行該密碼編譯運(yùn)算的數(shù)據(jù),以致于在從該中斷事件返回之后,對(duì)接下來(lái)的數(shù)據(jù),執(zhí)行該密碼編譯運(yùn)算會(huì)持續(xù)下去。
22.一種執(zhí)行裝置內(nèi)的密碼運(yùn)算的方法,該方法包括有響應(yīng)于所接收的一密碼編譯指令,而執(zhí)行該密碼編譯指令指定的一密碼編譯運(yùn)算;以及顯示在執(zhí)行該密碼編譯運(yùn)算期間,是否已發(fā)生一中斷事件。
23.根據(jù)權(quán)利要求22所述的方法,其中該顯示動(dòng)作包括在該執(zhí)行期間,指出是否已發(fā)生一中斷、一例外、一分頁(yè)錯(cuò)誤或一工作切換動(dòng)作之一。
24.根據(jù)權(quán)利要求23所述的方法,其中該顯示動(dòng)作包括修改該裝置內(nèi)的一寄存器中的一位的狀態(tài)。
25.根據(jù)權(quán)利要求23所述的方法,其中還包括將程控轉(zhuǎn)移到配置用以處理該中斷事件的一程序流程,并且使對(duì)一目前輸入數(shù)據(jù)區(qū)塊的該密碼編譯運(yùn)算的該執(zhí)行動(dòng)作中斷。
26.根據(jù)權(quán)利要求25所述的方法,其中還包括在程控返回緊接于該轉(zhuǎn)移的該密碼編譯指令之后,會(huì)立即執(zhí)行對(duì)該目前輸入數(shù)據(jù)區(qū)塊的該執(zhí)行動(dòng)作。
27.根據(jù)權(quán)利要求22所述的方法,其中還包括指示該裝置,在對(duì)一目前輸入數(shù)據(jù)區(qū)塊,完成該密碼編譯運(yùn)算時(shí),將內(nèi)存中的輸入及輸出數(shù)據(jù)區(qū)塊的指針器修改為指向下個(gè)輸入及輸出數(shù)據(jù)區(qū)塊。
28.根據(jù)權(quán)利要求22所述的方法,其中還包括指示該裝置,修改一區(qū)塊計(jì)數(shù)寄存器的內(nèi)容,以表示已對(duì)一目前輸入數(shù)據(jù)區(qū)塊,完成該該密碼編譯運(yùn)算。
29.根據(jù)權(quán)利要求22所述的方法,其中還包括指示該裝置,保持,或產(chǎn)生與保持起因于對(duì)一目前區(qū)塊的數(shù)據(jù),執(zhí)行該密碼編譯運(yùn)算的數(shù)據(jù),以致于在從該中斷事件返回之后,對(duì)接下來(lái)的數(shù)據(jù),執(zhí)行該密碼編譯運(yùn)算會(huì)持續(xù)下去。
30.根據(jù)權(quán)利要求22所述的方法,其中該接收動(dòng)作包括指定一加密運(yùn)算當(dāng)作該密碼編譯運(yùn)算,其中該加密運(yùn)算包括將對(duì)數(shù)片段的明文加密,變成多個(gè)密文片段。
31.根據(jù)權(quán)利要求22所述的方法,其中該接收動(dòng)作包括指定一解密運(yùn)算當(dāng)作該密碼編譯運(yùn)算,其中該解密運(yùn)算包括將對(duì)數(shù)片的密文解密,變成數(shù)片的明文。
32.根據(jù)權(quán)利要求22所述的方法,其中該接收動(dòng)作包括在該密碼編譯指令內(nèi),指定用于完成該密碼編譯運(yùn)算的一區(qū)塊密碼器模式。
33.根據(jù)權(quán)利要求32所述的方法,其中該區(qū)塊密碼器模式選自下列之一或其組合電子密碼本模式、加密塊鏈模式、加密反饋模式、輸出反饋模式。
全文摘要
本發(fā)明涉及一種用以對(duì)處理器內(nèi)的數(shù)個(gè)輸入數(shù)據(jù)區(qū)塊,執(zhí)行密碼運(yùn)算的方法及裝置。在一實(shí)施例中,提出一種用以執(zhí)行密碼運(yùn)算的裝置。此裝置包括密碼編譯指令及執(zhí)行邏輯器。密碼編譯指令由計(jì)算裝置來(lái)接收,其為屬于微處理器執(zhí)行的指令流程中的一步驟,其中該密碼指令指示微處理器進(jìn)行一個(gè)特定的密碼編譯運(yùn)算。執(zhí)行邏輯器運(yùn)作上耦接至密碼編譯指令,組態(tài)為用以執(zhí)行該密碼編譯指令的該密碼編譯運(yùn)算,其中該密碼編譯運(yùn)算包括該密碼編譯運(yùn)算是否已由一中斷事件所中斷。
文檔編號(hào)H04L9/00GK1558591SQ20041005906
公開(kāi)日2004年12月29日 申請(qǐng)日期2004年7月29日 優(yōu)先權(quán)日2003年12月4日
發(fā)明者湯瑪斯·A·克利斯賓, G·葛蘭·亨利, 奧圖羅·馬丁-德-尼古拉, 泰瑞·派克斯, 馬丁-德-尼古拉, 湯瑪斯 A 克利斯賓, 派克斯, 肌ず嗬 申請(qǐng)人:智慧第一公司