微處理器以及相關(guān)的操作方法、以及加密方法本申請(qǐng)為申請(qǐng)日為2011年5月25日、申請(qǐng)?zhí)枮?01110136447.8的發(fā)明名稱為“微處理器以及相關(guān)的操作方法、以及加密、解密方法”的申請(qǐng)案的分案申請(qǐng)。技術(shù)領(lǐng)域本發(fā)明涉及微處理器(microprocessor)領(lǐng)域,特別是涉及用于增加微處理器所執(zhí)行的程序的安全性。
背景技術(shù):很多軟件程序在面臨破壞計(jì)算機(jī)系統(tǒng)安全的攻擊時(shí),通常是脆弱不堪的。例如,黑客可藉由攻擊一運(yùn)行中程序的緩沖溢位區(qū)漏洞(bufferoverflowvulnerability)植入不當(dāng)程序碼、并轉(zhuǎn)移主控權(quán)給該不當(dāng)程序碼。如此一來,所植入的程序碼將主導(dǎo)被攻擊的程序。一種防范軟件程序遭攻擊的方案為指令集隨機(jī)化(instructionsetrandomization)。概略解釋之,指令集隨機(jī)化技術(shù)會(huì)先將程序加密(encrypt)為某些形式,再于處理器將該程序自存儲(chǔ)器提取后,于該處理器內(nèi)解密(decrypt)該程序。如此一來,黑客便不易植入惡意指令,因?yàn)樗踩氲闹噶畋仨毐贿m當(dāng)?shù)丶用?例如,使用與所攻擊程序相同的加密密鑰或演算法)方會(huì)被正確地執(zhí)行。例如,參閱文件「CounterCode-InjectionAttackswithInstruction-SetRandomization,byGauravS.Kc,AngelosD.Keromytis,andVassilisPrevelakis,CCS’03,October27-30,2003,Washington,DC,USA,ACM1-58113-738-9/03/0010」,其中敘述Bochs-x86Pentium模擬器(emulator)的改良版本。相關(guān)技術(shù)的缺點(diǎn)已被廣泛討論。例如,參閱數(shù)據(jù)「Where’stheFEEB?TheEffectivenessofInstructionSetRandomization,byAnaNoraSovarel,DavidEvans,andNathanaelPaul,http://www.cs.virginia.edu/feeb」。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明一種實(shí)施方式揭示一微處理器。該微處理器包括一指令高速緩沖存儲(chǔ)器、一指令解碼單元、以及一提取單元。該提取單元用于:(a)自該指令高速緩沖存儲(chǔ)器提取一區(qū)塊的指令數(shù)據(jù);(b)以一數(shù)據(jù)實(shí)體對(duì)該區(qū)塊執(zhí)行一布林異運(yùn)算,以產(chǎn)生純文字指令數(shù)據(jù);以及(c)將上述純文字指令數(shù)據(jù)提供給該指令解碼單元。在一第一狀況下,該區(qū)塊包括加密指令數(shù)據(jù)、且該數(shù)據(jù)實(shí)體為解密密鑰。在一第二狀況下,該區(qū)塊包括非加密指令數(shù)據(jù)、且該數(shù)據(jù)實(shí)體為多個(gè)位的二進(jìn)位零值。無論該區(qū)塊的指令數(shù)據(jù)為加密或非加密,實(shí)行上述內(nèi)容(a)、(b)以及(c)所需要的時(shí)間在該第一狀況下以及該第二狀況下是相同的。本發(fā)明另外一種實(shí)施方式揭示一方法,用以操作具有一指令高速緩沖存儲(chǔ)器的一微處理器。該方法包括:(a)自該指令高速緩沖存儲(chǔ)器提取一區(qū)塊的指令數(shù)據(jù);(b)以一數(shù)據(jù)實(shí)體對(duì)該區(qū)塊進(jìn)行一布林異運(yùn)算,以產(chǎn)生純文字指令數(shù)據(jù);以及(c)供應(yīng)上述純文字指令數(shù)據(jù)給一指令解碼單元。在一第一狀況下,該區(qū)塊包括加密指令數(shù)據(jù)、且該數(shù)據(jù)實(shí)體為解密密鑰。在一第二狀況下,該區(qū)塊包括非加密指令數(shù)據(jù)、且該數(shù)據(jù)實(shí)體為多個(gè)位的二進(jìn)位零值。無論該區(qū)塊的指令數(shù)據(jù)為加密或非加密,實(shí)行上述內(nèi)容(a)、(b)以及(c)所需要的時(shí)間在該第一狀況下以及該第二狀況下是相同的。本發(fā)明一種實(shí)施方式提供一微處理器。該微處理器包括一指令高速緩沖存儲(chǔ)器以及一提取單元。該提取單元會(huì)自該指令高速緩沖存儲(chǔ)器一序列多個(gè)提取地址提取一加密程序一序列多個(gè)區(qū)塊的加密指令。在提取該序列各個(gè)區(qū)塊時(shí),提取單元更以多個(gè)密鑰數(shù)值以及所提取該區(qū)塊的提取地址的部份內(nèi)容為一函數(shù),生成解密密鑰。針對(duì)提取出的該序列各個(gè)區(qū)塊,提取單元還采用對(duì)應(yīng)的解密密鑰解密其中加密指令。該微處理器還包括一密鑰切換指令,在該提取單元自該指令高速緩沖存儲(chǔ)器提取該序列上述多個(gè)區(qū)塊時(shí),指示該微處理器更新該提取單元內(nèi)的這些密鑰數(shù)值。本發(fā)明另外一種實(shí)施方式揭示一種方法,操作具有一指令高速緩沖存儲(chǔ)器的一微處理器。該方法包括自該指令高速緩沖存儲(chǔ)器提取一程序多個(gè)第一加密指令,且將之以一第一解密密鑰解密為多個(gè)第一非加密指令。該方法還包括將該第一解密密鑰以一第二解密密鑰取代,回應(yīng)這些第一非加密指令中的一密鑰切換指令。該方法還包括自該指令高速緩沖存儲(chǔ)器提取該程序的多個(gè)第二加密指令,且將之以該第二解密密鑰解密為多個(gè)第二非加密指令。本發(fā)明另外一種實(shí)施方式揭示一種方法,用于操作一微處理器。該方法包括自一指令高速緩沖存儲(chǔ)器一序列多個(gè)提取地址提取一加密程序一序列多個(gè)區(qū)塊的加密指令。該方法還包括在提取該序列各個(gè)區(qū)塊時(shí),以多個(gè)密鑰數(shù)值以及所提取該區(qū)塊的提取地址的部份內(nèi)容為一函數(shù)生成解密密鑰。該方法還包括針對(duì)該序列內(nèi)各區(qū)塊,使用對(duì)應(yīng)的上述解密密鑰解密其中的加密指令。該方法還包括在提取該序列上述多個(gè)區(qū)塊時(shí),執(zhí)行一密鑰切換指令。執(zhí)行上述密鑰切換指令包括更新用于生成上述解密密鑰的這些密鑰數(shù)值。本發(fā)明一種實(shí)施方式揭示一種微處理器。該微處理器包括一提取單元,使用第一解密密鑰數(shù)據(jù)提取并且解密一分支與切換密鑰指令。該微處理器還包括微代碼。上述微代碼在該分支與切換密鑰指令的方向不被采用的狀況下,令該提取單元采用上述第一解密密鑰數(shù)據(jù)提取并且解密該分支與切換密鑰指令之后的接續(xù)指令。該微代碼還在該分支與切換密鑰指令被采用的狀況下,令該提取單元采用不同于上述第一解密密鑰數(shù)據(jù)的第二解密密鑰數(shù)據(jù)提取并且解密該分支與切換密鑰指令的一目標(biāo)指令。本發(fā)明另外一種實(shí)施方式揭示一方法,以一微處理器處理一加密程序。該方法包括使用第一解密密鑰數(shù)據(jù)提取并且解密一分支與切換密鑰指令。此方法還包括,在該分支與切換密鑰指令的方向不被采取的狀況下,以上述第一解密密鑰數(shù)據(jù)提取并且解密該分支與切換密鑰指令之后的接續(xù)指令。該方法還包括,在該分支與切換密鑰指令的方向被采取的狀況下,以不同于上述第一解密密鑰數(shù)據(jù)的第二解密密鑰數(shù)據(jù)提取并且解密該分支與切換密鑰指令的一目標(biāo)指令。本發(fā)明另外一種實(shí)施方式亦揭示一方法,用于加密一程序,以供用于解密與執(zhí)行加密程序的一微處理器日后執(zhí)行。該方法包括接收一非加密程序的一目的文件,其中包括傳統(tǒng)分支指令,所指示的目標(biāo)地址可于該微處理器執(zhí)行該程序前判定。該方法還包括分析該程序以獲得塊信息。上述塊信息將該程序劃分成一序列多個(gè)塊。各塊包括一序列多個(gè)指令。上述塊信息還包括各塊相關(guān)的加密密鑰數(shù)據(jù)。各塊對(duì)應(yīng)的加密密鑰數(shù)據(jù)不相同。該方法還包括將上述傳統(tǒng)分支指令中目標(biāo)地址與自身坐落不同塊者各自以一分支與切換密鑰指令取代。該方法還包括基于上述塊信息加密該程序。本本發(fā)明另外一種實(shí)施方式亦揭示一方法,用于加密一程序,以供用于解密與執(zhí)行加密程序的一微處理器日后執(zhí)行。該方法包括接收一非加密程序的一目的文件,其中包括傳統(tǒng)分支指令,所指示的目標(biāo)地址僅能在該微處理器執(zhí)行該程序時(shí)判定。該方法還包括分析該程序以獲得塊信息。上述塊信息將該程序劃分成一序列多個(gè)塊。各塊包括一序列多個(gè)指令。上述塊信息還包括各塊相關(guān)的加密密鑰數(shù)據(jù)。各塊對(duì)應(yīng)的加密密鑰數(shù)據(jù)不相同。該方法還包括將上述傳統(tǒng)分支指令各自以一分支與切換密鑰指令取代。該方法還包括基于上述塊信息,加密該程序。本發(fā)明一種實(shí)施方式揭示一微處理器。該微處理器包括一架構(gòu)寄存器,該架構(gòu)寄存器包括一位。該微處理器負(fù)責(zé)設(shè)定該位。該微處理器還包括一提取單元。該提取單元自一指令高速緩沖存儲(chǔ)器提取加密指令、并在執(zhí)行上述加密指令前將上述加密指令解密,以回應(yīng)該微處理器將該位設(shè)定的操作。若接收到一中斷,該微處理器儲(chǔ)存該位的數(shù)值至一堆迭內(nèi)存、并且隨后將該位清除。在微處理器清除該位后,該提取指令是自該指令高速緩沖存儲(chǔ)器提取非加密指令,并不對(duì)上述非加密指令作解密操作即執(zhí)行之。該微處理器還自該堆迭內(nèi)存將先前儲(chǔ)存的數(shù)值用來修復(fù)該架構(gòu)寄存器的該位,以回應(yīng)自中斷指令返回的操作。若判定該位修復(fù)后的數(shù)值為設(shè)定狀態(tài),該提取單元重新提取并且解密加密指令。本發(fā)明另外一種實(shí)施方式揭示一種方法,用于操作具有一指令高速緩沖存儲(chǔ)器以及一架構(gòu)寄存器的一微處理器。該方法包括設(shè)定該架構(gòu)寄存器內(nèi)的一位,并且隨后自該指令高速緩沖存儲(chǔ)器提取加密指令,并且在執(zhí)行上述加密指令前將上述加密指令解密。在面對(duì)一中斷時(shí),該方法還包括儲(chǔ)存該架構(gòu)寄存器該位的數(shù)值,并且隨后清除該位。在清除該位后,該方法還包括自該指令高速緩沖存儲(chǔ)器提取非加密指令,并且不作解密即執(zhí)行上述非加密指令。該方法還包括以先前儲(chǔ)存的數(shù)值修復(fù)該架構(gòu)寄存器該位,以回應(yīng)自中斷指令返回的操作。若判定該位修復(fù)后的數(shù)值為設(shè)定狀態(tài),該方法還包括重新提取并且解密并且執(zhí)行加密指令。本發(fā)明另外一種實(shí)施方式揭示一微處理器。該微處理器包括一架構(gòu)寄存器以及一提取單元,該架構(gòu)寄存器包括一位。該微處理器儲(chǔ)存該位的數(shù)值,以回應(yīng)中斷執(zhí)行中程序的一要求。該位標(biāo)示執(zhí)行中程序?yàn)榧用芑蚍羌用堋T撐⑻幚砥饕韵惹皟?chǔ)存的數(shù)值修復(fù)該位,并且重新提取被中斷的程序作為執(zhí)行中程序,以回應(yīng)自中斷指令返回的操作。若該位修復(fù)后的數(shù)值為設(shè)定狀態(tài),該微處理器在重新提取中斷的程序之前,先將解密密鑰數(shù)值修復(fù),以使用修復(fù)的解密密鑰數(shù)值解密所提取的指令。若該位修復(fù)后的數(shù)值為清除狀態(tài),該微處理器不作解密密鑰數(shù)值修復(fù)、并且不對(duì)所提取的指令作解密。本發(fā)明另外一種實(shí)施方式揭示一種方法,用以操作一微處理器。該方法包括儲(chǔ)存該微處理器一位的數(shù)值,以回應(yīng)中斷執(zhí)行中程序的一要求。該位標(biāo)示執(zhí)行中程序?yàn)榧用芑蚍羌用?。回?yīng)自中斷指令返回的操作,該方法還包括以先前儲(chǔ)存的數(shù)值修復(fù)該位,并且重新提取中斷的程序作為執(zhí)行中程序。若該位修復(fù)后的數(shù)值為設(shè)定狀態(tài),該方法還包括在重新提取中斷程序之前,將解密密鑰數(shù)值修復(fù),并且以修復(fù)后的解密密鑰數(shù)值解密所提取的指令。若該位修復(fù)后的數(shù)值為清除狀態(tài),該方法不會(huì)作解密密鑰修復(fù)操作,也不對(duì)提取的指令作解密。本發(fā)明一種實(shí)施方式揭示一種微處理器。該微處理器包括一儲(chǔ)存元件,具有多個(gè)位置各自儲(chǔ)存一個(gè)加密程序的解密密鑰數(shù)據(jù)。該微處理器還包括一控制寄存器,以一字段標(biāo)示該儲(chǔ)存元件上述多個(gè)位置中與執(zhí)行中的加密程序相關(guān)者。回應(yīng)自中斷指令返回的操作,該微處理器自存儲(chǔ)器將先前儲(chǔ)存的該字段的數(shù)值用來修復(fù)該控制寄存器。該微處理器還包括一提取單元,用以提取執(zhí)行中的加密程序的加密指令、并且將之以該字段修復(fù)后的數(shù)值在該儲(chǔ)存元件所標(biāo)示的位置所儲(chǔ)存的解密密鑰數(shù)據(jù)解密。本發(fā)明另外一種實(shí)施方式揭示一方法,用以操作具有一控制寄存器以及一儲(chǔ)存元件的一微處理器,該儲(chǔ)存元件內(nèi)多個(gè)位置各自儲(chǔ)存一個(gè)加密程序的解密密鑰數(shù)據(jù)。該方法包括自存儲(chǔ)器將先前儲(chǔ)存的該字段的數(shù)值用來修復(fù)該控制寄存器內(nèi)一字段,以回應(yīng)自中斷指令返回的操作,其中,該字段的數(shù)值標(biāo)示該儲(chǔ)存元件上述多個(gè)位置中與執(zhí)行中加密程序有關(guān)。該方法還包括提取執(zhí)行中的加密程序的加密指令。該方法還包括以該字段修復(fù)后的數(shù)值在該儲(chǔ)存元件所標(biāo)示的位置所儲(chǔ)存的解密密鑰數(shù)據(jù)解密所提取的加密指令。本發(fā)明一種實(shí)施方式揭示一種微處理器。該微處理器包括一分支目標(biāo)地址高速緩沖存儲(chǔ)器(BTAC)記錄先前執(zhí)行過的分支與切換密鑰指令的歷史信息。上述歷史信息包括所記錄的分支與切換密鑰指令的目標(biāo)地址以及標(biāo)識(shí)符。上述標(biāo)識(shí)符標(biāo)示與所屬的分支與切換密鑰指令相關(guān)的多個(gè)密鑰數(shù)值。該微處理器還包括一提取單元,耦接該分支目標(biāo)地址高速緩沖存儲(chǔ)器。該提取單元提取先前執(zhí)行過的分支與切換密鑰指令時(shí),會(huì)接收該分支目標(biāo)地址高速緩沖存儲(chǔ)器所作的預(yù)測(cè)、并且自該分支目標(biāo)地址高速緩沖存儲(chǔ)器接收關(guān)于所提取的分支與切換密鑰指令的上述目標(biāo)地址以及標(biāo)識(shí)符。該提取單元還根據(jù)所接收的目標(biāo)地址提取加密指令數(shù)據(jù)、并且根據(jù)所接收的標(biāo)識(shí)符所標(biāo)示的多個(gè)密鑰數(shù)值解密所提取的加密指令數(shù)據(jù),以回應(yīng)接收到的上述預(yù)測(cè)。本發(fā)明另外一種實(shí)施方式揭示一種方法,用于操作一微處理器。該方法包括以一分支目標(biāo)地址高速緩沖存儲(chǔ)器(BTAC)記錄先前執(zhí)行過的分支與切換密鑰指令的歷史信息。上述歷史信息包括所記錄的分支與切換密鑰指令的目標(biāo)地址以及標(biāo)識(shí)符。上述標(biāo)識(shí)符標(biāo)示與所屬的分支與切換密鑰指令相關(guān)的多個(gè)密鑰數(shù)值。該方法更于先前執(zhí)行過的分支與切換密鑰指令被提取時(shí)接收該分支目標(biāo)地址高速緩沖存儲(chǔ)器所作的預(yù)測(cè)、并且自該分支目標(biāo)地址高速緩沖存儲(chǔ)器接收關(guān)于所提取的分支與切換密鑰指令的上述目標(biāo)地址以及標(biāo)識(shí)符。該方法更根據(jù)所接收的目標(biāo)地址提取加密指令數(shù)據(jù)、并且根據(jù)所接收的標(biāo)識(shí)符所標(biāo)示的多個(gè)密鑰數(shù)值解密所提取的加密指令數(shù)據(jù),以回應(yīng)接收到的上述預(yù)測(cè)。附圖說明圖1為一方塊圖,圖解根據(jù)本發(fā)明技術(shù)實(shí)現(xiàn)的一微處理器;圖2為一方塊圖,用以詳細(xì)說明圖解圖1的提取單元;圖3為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖2提取單元的操作;圖4為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解圖1標(biāo)志寄存器的字段;圖5為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解一密鑰載入指令的格式;圖6為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解一密鑰切換指令的格式;圖7為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器的操作,其中執(zhí)行圖6的密鑰切換指令;圖8為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解一加密程序的存儲(chǔ)器用量,該加密程序包括多個(gè)圖6所接露的密鑰切換指令;圖9為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解一分支與切換密鑰指令的格式;圖10為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器的操作,其中執(zhí)行圖9的分支與切換密鑰指令;圖11為一流程圖,根據(jù)本發(fā)明技術(shù),圖解一后處理器的操作,由軟件工具實(shí)現(xiàn),可用于后部處理一程序、且加密之,以由圖1微處理器執(zhí)行;圖12為一方塊圖,圖解本發(fā)明另外一種實(shí)施方式的分支與切換密鑰指令的格式;圖13為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解塊地址范圍表;圖14為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器的操作,其中執(zhí)行圖12的分支與切換密鑰指令;圖15為一方塊圖,圖解本發(fā)明另外一種實(shí)施方式的分支與切換密鑰指令的格式;圖16為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解塊地址范圍表;圖17為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器的操作,其中執(zhí)行圖15的分支與切換密鑰指令;圖18為一流程圖,圖解本發(fā)明技術(shù)另外一種實(shí)施方式,其中敘述一后處理器的操作,用于后部處理一程序、且加密之,由圖1微處理器執(zhí)行;圖19為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器的操作,用于應(yīng)付一任務(wù)切換,切換于一加密程序以及一純文字程序之間;圖20圖解一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器所執(zhí)行的系統(tǒng)軟件的操作;圖21圖解一方塊圖,根據(jù)本發(fā)明另外一種實(shí)施方式,圖解圖1標(biāo)志寄存器的字段;圖22為一流程圖,根據(jù)本發(fā)明技術(shù),圖解采用圖21的標(biāo)志寄存器的圖1微處理器的操作,用于應(yīng)付一任務(wù)切換,切換于多個(gè)加密程序之間;圖23為一流程圖,根據(jù)本發(fā)明技術(shù),圖解采用圖21的標(biāo)志寄存器的圖1微處理器的操作,用于應(yīng)付一任務(wù)切換,切換于多個(gè)加密程序之間;圖24為一方塊圖,根據(jù)本發(fā)明另外一種實(shí)施方式,圖解圖1密鑰寄存器文檔中的單一個(gè)寄存器;圖25為一流程圖,根據(jù)本發(fā)明另外一種實(shí)施方式,圖解采用圖21標(biāo)志寄存器以及圖24密鑰寄存器文檔的圖1微處理器的操作,以應(yīng)付一任務(wù)切換,切換于多個(gè)加密程序之間;圖26為一流程圖,根據(jù)本發(fā)明另外一種實(shí)施方式,圖解采用圖21標(biāo)志寄存器以及圖24密鑰寄存器文檔的圖1微處理器的操作,以應(yīng)付一任務(wù)切換,切換于多個(gè)加密程序之間;圖27為一方塊圖,圖解圖1微處理器100部分內(nèi)容的其他實(shí)施方式;圖28為一方塊圖,根據(jù)本發(fā)明技術(shù),詳細(xì)圖解圖27的分支目標(biāo)地址高速緩沖存儲(chǔ)器(BTAC);圖29為一方塊圖,根據(jù)本發(fā)明技術(shù),詳細(xì)圖解圖28的BTAC各單元的內(nèi)容;圖30為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖27微處理器采用圖28BTAC的操作;圖31為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖27微處理器采用圖28BTAC的操作;以及圖32為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖27微處理器對(duì)一分支與切換密鑰指令的操作;以及附圖符號(hào)說明100~微處理器;102~指令高速緩沖存儲(chǔ)器;104~提取單元;106~指令數(shù)據(jù)(可為加密);108~解碼單元;112~執(zhí)行單元;114~引出單元;118~通用寄存器;122~安全存儲(chǔ)區(qū);124~密鑰寄存器文檔;128~標(biāo)志寄存器;132~微代碼單元;134~提取地址;142~主密鑰寄存器;144~控制寄存器;148~E位;152~密鑰擴(kuò)展器;154~多工器;156~異邏輯;162~純文字指令數(shù)據(jù);164~提取指令產(chǎn)生器;172~兩組密鑰;174~解密密鑰;176~多位的二進(jìn)位零值;178~多工器154的輸出;212~多工器A;214~多工器B;216~旋轉(zhuǎn)器;218~加法/減法器;234~第一密鑰;236~第二密鑰;238~旋轉(zhuǎn)器的輸出;302-316~步驟方塊;402~E位字段;408~多個(gè)位的標(biāo)準(zhǔn)x86標(biāo)志;500~密鑰載入指令;502~操作碼;504~密鑰寄存器文檔目標(biāo)地址;506~安全存儲(chǔ)區(qū)來源地址;600~密鑰切換指令;602~操作碼;604~密鑰寄存器文檔索引;702-708~方塊步驟;800~存儲(chǔ)器用量;900~分支與切換密鑰指令;902~操作碼;904~密鑰寄存器文檔索引;906~分支信息;1002-1018~步驟方塊;1102-1106~步驟方塊;1200~分支與切換密鑰指令;1202~操作碼;1300~塊地址范圍表:1302~地址范圍;1304~密鑰寄存器文檔索引;1402-1418~步驟方塊;1500~分支與切換密鑰指令;502~操作碼;1600~塊地址范圍表:1604~安全存儲(chǔ)區(qū)地址;1714~步驟方塊;1802-1806~步驟方塊;1902-1944~步驟方塊;2002-2008~步驟方塊;2104~索引;2202-2216~步驟方塊;2302-2316~步驟方塊;2402~淘汰位;2506~步驟方塊;2607、2609~步驟方塊;2702~分支目標(biāo)地址高速緩沖存儲(chǔ)器(BTAC);2706~目標(biāo)地址;2708~采用/不采用指標(biāo);2712~密鑰切換邏輯;2714~型式指標(biāo);2716~密鑰寄存器文檔索引;2802~BTAC陣列;2808~BTAC單元;2902~有效位;2904~標(biāo)記字段;2906~目標(biāo)地址;2908~采用/不采用字段;2912~密鑰寄存器文檔索引;2914~型式字段;3002-3004~步驟方塊;3102-3116~步驟方塊;3208-3222~步驟方塊;以及ZEROS~多位的二進(jìn)位零值。具體實(shí)施方式參閱圖1,一方塊圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一微處理器100。微處理器100包括一管線(pipeline),其中包括一指令高速緩沖存儲(chǔ)器(instructioncache)102、一提取單元(fetchunit)104、一解碼單元(decodeunit)108、一執(zhí)行單元(executionunit)112、以及一引出單元(retireunit)114。微處理器100還包括一微代碼單元(microcodeunit)132,用以提供微代碼指令(microcodeinstructions)給該執(zhí)行單元112。微處理器100還包括通用寄存器(generalpurposeregisters)118以及標(biāo)志寄存器(EFLAGSregister)128,以提供指令運(yùn)算元(instructionoperands)給執(zhí)行單元112。而且,通過引出單元114,將指令執(zhí)行結(jié)果更新于通用寄存器118以及標(biāo)志寄存器128。在一種實(shí)施方式中,標(biāo)志寄存器128是由傳統(tǒng)x86標(biāo)志寄存器修改實(shí)現(xiàn),詳細(xì)實(shí)施方式將于后續(xù)篇幅說明。提取單元104自指令高速緩沖存儲(chǔ)器102提取指令數(shù)據(jù)(instructiondata)106。提取單元104操作于兩種模式:一為解密模式(decryptionmode),另一為純文字模式(plaintextmode)。提取單元104內(nèi)一控制寄存器(controlregister)144的一E位(Ebit)148決定該提取單元104是操作于解密模式(設(shè)定E位)、或操作于純文字模式(清空E位)。純文字模式下,提取單元104視自該指令高速緩沖存儲(chǔ)器102所提取出的指令數(shù)據(jù)106為未加密、或純文字指令數(shù)據(jù),因此,不對(duì)指令數(shù)據(jù)106作解密。然而,在解密模式下,提取單元104視自該指令高速緩沖存儲(chǔ)器102所提取出的指令數(shù)據(jù)106為加密指令數(shù)據(jù),因此,需使用該提取單元104的一主密鑰寄存器(masterkeyregister)142所儲(chǔ)存的解密密鑰(decryptionkeys)將之解密為純文字指令數(shù)據(jù),詳細(xì)技術(shù)內(nèi)容將參考圖2以及圖3進(jìn)行討論。提取單元104亦包括一提取指令產(chǎn)生器(fetchaddressgenerator)164,用以產(chǎn)生一提取地址(fetchaddress)134,以自該指令高速緩沖存儲(chǔ)器102提取指令數(shù)據(jù)106。提取地址134還供應(yīng)給提取單元104的一密鑰擴(kuò)展器(keyexpander)152。密鑰擴(kuò)展器152自主密鑰暫存142中選取兩組密鑰172,并對(duì)其實(shí)施運(yùn)算以產(chǎn)生一解密密鑰174,作為多工器154的第一輸入。多工器154的第二輸入為多位的二進(jìn)位零值(binaryzeros)176。E位148控制多工器154。若E位148被設(shè)定,多工器154選擇輸出該加密密鑰174。若E位148被清除,多工器154選擇輸出多位的二進(jìn)位零值176。多工器154的輸出178將供應(yīng)給異邏輯156作為其第一輸入。異邏輯156負(fù)責(zé)對(duì)提取的指令數(shù)據(jù)106以及多工器輸出178施行布林異或運(yùn)算(Booleanexclusive-OR,XOR),以產(chǎn)生純文字指令數(shù)據(jù)162。加密的指令數(shù)據(jù)106乃預(yù)先以異邏輯將其原本的純文字指令數(shù)據(jù)以一加密密鑰進(jìn)行加密,其中該加密密鑰的數(shù)值與該解密密鑰174相同。提取單元104的詳細(xì)實(shí)施方式將結(jié)合圖2以及圖3內(nèi)容于稍后敘述。純文字指令數(shù)據(jù)162將供應(yīng)給解碼單元108。解碼單元108負(fù)責(zé)將純文字指令數(shù)據(jù)162的串流解碼、并分割為多個(gè)X86指令,交由執(zhí)行單元112執(zhí)行。在一種實(shí)施方式中,解碼單元108包括緩沖器(buffers)或隊(duì)列(queus),以在解碼之前或期間,緩沖存儲(chǔ)的純文字指令數(shù)據(jù)162的串流。在一種實(shí)施方式中,解碼單元108包括一指令轉(zhuǎn)譯器(instructiontranslator),用以將X86指令轉(zhuǎn)譯為微指令microinstructions或micro-ops,交由執(zhí)行單元112執(zhí)行。解碼單元108輸出指令時(shí),更會(huì)針對(duì)各指令輸出一位值,該位值乃伴隨該指令沿所述管線結(jié)構(gòu)一路行進(jìn)而至,用以指示該指令是否為加密指令。該位值將控制該執(zhí)行單元112以及該引出單元114,使的根據(jù)該指令自該指令高速緩沖存儲(chǔ)器102取出時(shí)是加密指令或純文字指令而進(jìn)行決策并且采取動(dòng)作。在一種實(shí)施方式中,純文字指令不被允許執(zhí)行專供指令解密模式設(shè)計(jì)的特定操作。在一種實(shí)施方式中,微處理器100為一x86架構(gòu)處理器,然而,微處理器100也可以其他架構(gòu)的處理器實(shí)現(xiàn)。若一處理器可正確執(zhí)行設(shè)計(jì)給x86處理器執(zhí)行的大多數(shù)應(yīng)用程序,則視之為x86架構(gòu)的處理器。若應(yīng)用程序執(zhí)行后可獲得預(yù)期結(jié)果,則可判斷該應(yīng)用程序是被正確執(zhí)行。特別是,微處理器100是執(zhí)行x86指令集的指令,且具有x86用戶可用寄存器組(x86user-visibleregisterset)。在一種實(shí)施方式中,微處理器100設(shè)計(jì)成供應(yīng)一復(fù)合安全架構(gòu)(comprehensivesecurityarchitecture)─稱為安全執(zhí)行模式(secureexecutionmode,簡稱SEM)─以于其中執(zhí)行程序。根據(jù)一種實(shí)施方式,SEM程序的執(zhí)行可由數(shù)種處理器事件(processorevents)引發(fā),且不受一般(非SEM)操作封鎖。以下舉例說明限定于SEM下執(zhí)行的程序所實(shí)現(xiàn)的功能,其中包括關(guān)鍵安全任務(wù)(criticalsecuritytasks)如:憑證核對(duì)以及數(shù)據(jù)加密、系統(tǒng)軟件活動(dòng)監(jiān)控、系統(tǒng)軟件完整性驗(yàn)證、資源使用追蹤、新軟件的安裝控制…等。關(guān)于SEM的實(shí)施方式請(qǐng)參考本公司于2008年10月31日申請(qǐng)的美國專利申請(qǐng)案,案號(hào)12/263,131,(美國專利公開號(hào)為2009-0292893,于2009年11月26日公開);該案的優(yōu)先權(quán)主張溯及2008年5月24日的美國專利臨時(shí)申請(qǐng)案(案號(hào)61/055,980);本申請(qǐng)案相關(guān)技術(shù)部份可參照上述案件內(nèi)容。在一種實(shí)施方式中,用于存儲(chǔ)SEM數(shù)據(jù)為安全非易失性存儲(chǔ)器(未顯示在圖示)─如高速緩沖存儲(chǔ)器(flashmemory)─可用于存儲(chǔ)解密密鑰,并藉由一隔離串行總線(privateserialbus)耦接微處理器100,且其中所有數(shù)據(jù)乃AES加密(AES-encrypted)且經(jīng)過簽署驗(yàn)正(signature-verified)的。在一種實(shí)施方式中,微處理器100包括少量的單一次寫入性非易失性存儲(chǔ)器(non-volatilewrite-oncememory,未顯示于圖示),用于存儲(chǔ)解密密鑰;其中一種實(shí)施方式可參考美國專利案7,663,957所揭示的一熔絲型非易失性存儲(chǔ)器;可參照上述案件內(nèi)容應(yīng)用于本發(fā)明。本發(fā)明所揭示的指令解密特征的其中一項(xiàng)優(yōu)點(diǎn)為:擴(kuò)展安全執(zhí)行模式(SEM)的應(yīng)用范圍,使安全性程序(secureprogram)得以存儲(chǔ)在微處理器100外的存儲(chǔ)器,無須限定完整存儲(chǔ)于微處理器100內(nèi)部。因此,安全性程序可利用存儲(chǔ)器階層架構(gòu)所提供的完整空間以及功能。在一種實(shí)施方式中,部分或全部的結(jié)構(gòu)性異常/中斷(architecturalexceptions/interrupts,例如,頁面錯(cuò)誤pagefaults、除錯(cuò)中斷點(diǎn)debugbreakpoints)…等,在SEM模式下是除能(disable)的。在一種實(shí)施方式中,部分或全部的結(jié)構(gòu)性異常/中斷在解密模式(即E位148為設(shè)定)下是除能(disable)的。微處理器100還包括一密鑰寄存器文檔(keyregisterfile)124。密鑰寄存器文檔124包括多個(gè)寄存器,其中儲(chǔ)存的密鑰可藉由密鑰切換指令(switchkeyinstruction,后續(xù)討論之)載入提取單元104的主密鑰寄存器142,以解密所提取的加密指令數(shù)據(jù)106。微處理器100還包括一安全存儲(chǔ)區(qū)(securememoryarea,簡寫為SMA)122,用于存儲(chǔ)解密密鑰,該解密密鑰待經(jīng)圖5所示的密鑰載入指令(loadkeyinstruction)500進(jìn)而載入密鑰寄存器文檔124。在一種實(shí)施方式中,安全存儲(chǔ)區(qū)122限定以SEM程序存取。也就是說,安全存儲(chǔ)區(qū)122不可藉一般執(zhí)行模式(非SEM)下所執(zhí)行的程序存取。此外,安全存儲(chǔ)區(qū)122也不可藉處理器總線存取,且不屬于微處理器100的高速緩沖存儲(chǔ)器階層的一部份。因此,舉例說明之,高速緩沖清空操作(cacheflushoperation)不會(huì)導(dǎo)致安全存儲(chǔ)區(qū)122的內(nèi)容寫入存儲(chǔ)器。關(guān)于安全存儲(chǔ)區(qū)122的讀寫,微處理器100指令集架構(gòu)中設(shè)計(jì)有特定指令。一種實(shí)施方式是在安全存儲(chǔ)區(qū)122中設(shè)計(jì)一隔離式隨機(jī)存取存儲(chǔ)器(privateRAM),相關(guān)技術(shù)內(nèi)容可參考2008年2月20日申請(qǐng)的美國專利申請(qǐng)案12/034,503(該案于2008年10月16日公開,公開號(hào)為2008/0256336);可參照上述案件內(nèi)容應(yīng)用于本發(fā)明。起先,操作系統(tǒng)或其他特權(quán)程序(privilegedprogram)下載密鑰的初始化設(shè)定于該安全存儲(chǔ)區(qū)122、密鑰寄存器文檔124、以及主密鑰寄存器142。微處理器100起先會(huì)以該密鑰的初始化設(shè)定以解密一加密程序。此外,加密程序本身可接續(xù)寫入新的密鑰至安全存儲(chǔ)區(qū)122、并自安全存儲(chǔ)區(qū)122將密鑰載入密鑰寄存器文檔124(藉由密鑰載入指令)、且自密鑰寄存器文檔124將密鑰載入主密鑰寄存器142(藉由密鑰切換指令)。所述操作的優(yōu)勢(shì)在于:所揭示的密鑰切換指令使得加密程序在執(zhí)行當(dāng)下得以切換解密密鑰組(on-the-flyswitching),以下將詳述之。新的密鑰可由加密程序指令自身的即時(shí)數(shù)據(jù)組成。在一種實(shí)施方式中,程序文檔標(biāo)頭的一字段會(huì)指示程序指令是否為加密型式。圖1所描述的技術(shù)有多項(xiàng)優(yōu)點(diǎn)。第一,自加密指令數(shù)據(jù)106所解密出來的純文字指令數(shù)據(jù)無法由微處理器100外部獲得。第二,提取單元104提取加密指令數(shù)據(jù)所需的時(shí)間與提取純文字指令數(shù)據(jù)所需的時(shí)間相同。此特色關(guān)系著安全與否。反之,若有時(shí)間差存在,黑客可藉此破解加密技術(shù)。第三,相較于傳統(tǒng)設(shè)計(jì),本發(fā)明所揭示的指令解密技術(shù)不會(huì)額外增加提取單元104所耗的時(shí)鐘數(shù)量。如以下討論,密鑰擴(kuò)展器152增加解密密鑰的有效長度,該解密密鑰用于解密一加密程序,且此方式不會(huì)使提取加密程序數(shù)據(jù)所需的時(shí)間長于提取純文字程序數(shù)據(jù)所需的時(shí)間。特別是,因?yàn)槊荑€擴(kuò)展器152的運(yùn)作限時(shí)于以提取地址134查表該指令高速緩沖存儲(chǔ)器102獲得指令數(shù)據(jù)106之內(nèi)完成,密鑰擴(kuò)展器152并不會(huì)增加一般的提取程序的時(shí)間。此外,因?yàn)槎喙て?54以及密鑰擴(kuò)展器152一并限時(shí)于以提取地址134查表該指令高速緩沖存儲(chǔ)器102獲得指令數(shù)據(jù)106之內(nèi)完成,故不會(huì)增加一般的提取程序的時(shí)間。異邏輯156是唯一添加于一般提取路徑的邏輯運(yùn)算,所幸異操作156的傳播延遲相當(dāng)小,不會(huì)增加工作周期。因此,本發(fā)明所揭示的指令解密技術(shù)不會(huì)增加提取單元104時(shí)鐘數(shù)量負(fù)擔(dān)。此外,相較于一般技術(shù)所應(yīng)用于解密指令數(shù)據(jù)106的復(fù)雜解密機(jī)制,例如S盒(S-boxes),一般技術(shù)會(huì)增加提取以及解碼指令數(shù)據(jù)106時(shí)所需的工作周期且/或所消耗的時(shí)鐘數(shù)量。接著,參考圖2,一方塊圖詳細(xì)圖解圖1的提取單元104。特別是,圖1的密鑰擴(kuò)展器152也詳細(xì)圖列其中。先前已討論采用異邏輯解密上述加密指令數(shù)據(jù)106的優(yōu)點(diǎn)。然而,快且小的異邏輯有其缺點(diǎn):若加密/解密密鑰被重復(fù)使用,則異邏輯屬于一種脆弱加密方法(weakencryptionmethod)。不過,若密鑰的有效長度等同所欲加密/解密的程序的長度,異邏輯加密會(huì)是一種強(qiáng)度極高的加密技術(shù)。微處理器100的特征在于可增長解密密鑰的有效長度,以降低密鑰重復(fù)使用的需求。第一,主密鑰寄存器142所儲(chǔ)存的數(shù)值(文檔)為中大型尺寸:在一種實(shí)施方式中,其尺寸等同自指令高速緩沖存儲(chǔ)器102所取出的指令數(shù)據(jù)106的提取量、或區(qū)塊尺寸,為128位(16字節(jié))。第二,加密擴(kuò)展器152用于增長解密密鑰的有效長度,例如,增至一實(shí)施方式所揭示的2084字節(jié),將于后續(xù)篇幅詳述。第三,加密程序可藉由密鑰切換指令(或其變形)在操作中改變主密鑰寄存器142內(nèi)的數(shù)值,之后段落將詳述之。在圖2所示實(shí)施方式中,使用了五個(gè)主密鑰寄存器142,編號(hào)0-4。然而,在其他實(shí)施方式中,也可以較少或較多量的主密鑰寄存器142數(shù)量增長解密密鑰長度。例如,一種實(shí)施方式采用12個(gè)主密鑰寄存器142。密鑰擴(kuò)充器152包括一第一多工器A212以及一第二多工器B214,用以接收主密鑰寄存器142所供應(yīng)的密鑰。提取地址134的部分內(nèi)容用于控制多工器212/214。在圖2所示實(shí)施方式中,多工器B214為三轉(zhuǎn)一多工器,而多工器A212為四轉(zhuǎn)一多工器。表格1顯示多工器212/214如何根據(jù)各自的選擇輸入選取這些主密鑰寄存器142(以上述編號(hào)識(shí)別)。表格2顯示上述選擇輸入的產(chǎn)生方式,以及基于提取地址134的位[10:8]所呈的主密鑰寄存器142組合。表格1表格2多工器B214的輸出236是供應(yīng)給加法/減法器218。多工器A212的輸出234是供應(yīng)給一旋轉(zhuǎn)器(rotator)216。旋轉(zhuǎn)器216接收提取地址134的位[7:4],據(jù)以旋轉(zhuǎn)多工器輸出234,決定旋轉(zhuǎn)的字節(jié)數(shù)量。在一種實(shí)施方式中,提取地址134的位[7:4]在供應(yīng)給旋轉(zhuǎn)器216控制旋轉(zhuǎn)的字節(jié)數(shù)量前增量,以上述表格3顯示。旋轉(zhuǎn)器216的輸出238是供應(yīng)給加法/減法器218。加法器/減法器218接收提取地址134的位[7]。若該位[7]為清空,加法/減法器218將旋轉(zhuǎn)器216的輸出238自多工器B214的輸出236減去。若該位[7]為設(shè)定,加法/減法器218將旋轉(zhuǎn)器216的輸出238加上多工器B214的輸出236。加法/減法器218的輸出即圖1所示的解密密鑰174,將供應(yīng)給多工器154。以下以圖3的流程圖詳述相關(guān)技術(shù)。接著,參閱圖3,一流程圖基于本發(fā)明技術(shù)圖解圖2提取單元104的操作。流程始于方塊302。在方塊302,提取單元104以提取地址134讀取指令高速緩沖存儲(chǔ)器102,以開始提取一16字節(jié)的區(qū)塊的指令數(shù)據(jù)106。指令數(shù)據(jù)106可為加密狀態(tài)或?yàn)榧兾淖譅顟B(tài),視指令數(shù)據(jù)106是為一加密程序或一純文字程序的一部分而定,由E位148標(biāo)示。流程接著進(jìn)入方塊304。參考方塊304,根據(jù)提取地址134較高的數(shù)個(gè)位,多工器A212以及多工器B214分別自主密鑰寄存器142所供應(yīng)的密鑰172中選取出一第一密鑰234以及一第二密鑰236。在一種實(shí)施方式中,提取地址134所供應(yīng)的該些位施加于多工器212/214,以產(chǎn)生特定的密鑰對(duì)(234/236keypair)組合。在圖2所示的實(shí)施方式中,所供應(yīng)的主密鑰寄存器142數(shù)量為5,因此,存在10組可能的密鑰對(duì)。為了簡化硬件設(shè)計(jì),僅使用了其中8組;此設(shè)計(jì)將供應(yīng)2048字節(jié)的有效密鑰,將于后續(xù)段落詳細(xì)討論。然而,其他實(shí)施方式也可能使用其他數(shù)量的密鑰寄存器142。以供應(yīng)12個(gè)主密鑰寄存器142的實(shí)施方式為例,主密鑰寄存器142的可能組合有66組,若采用其中64組,所產(chǎn)生的有效密鑰將為16384字節(jié)。整體而言,假設(shè)上述多個(gè)密鑰數(shù)值總量為K(例如:5,且采用全部組合),該解密密鑰、以及上述多個(gè)密鑰數(shù)值各自的長度為W字節(jié)(例如:16字節(jié)),則產(chǎn)生的有效密鑰將為W2*(K!/(2*(K-2)!))字節(jié)。流程接著進(jìn)入方塊306。在方塊306,基于提取地址134的位[7:4],旋轉(zhuǎn)器216使第一密鑰234旋轉(zhuǎn)相應(yīng)數(shù)量的字節(jié)。例如,若提取地址134的位[7:4]為數(shù)值9,旋轉(zhuǎn)器216將第一密鑰234朝右旋轉(zhuǎn)9個(gè)字節(jié)。流程接著進(jìn)入方塊308。在方塊308,加法/減法器218將旋轉(zhuǎn)后的第一密鑰238加至/減自該第二密鑰236,以產(chǎn)生圖1的解密密鑰174。在一種實(shí)施方式中,若提取地址134的位[7]為1,則加法/減法器218將旋轉(zhuǎn)后的第一密鑰234加至該第二密鑰236;若提取地址134的位[7]為0,則加法/減法器218將旋轉(zhuǎn)后的第一密鑰234自該第二密鑰236減去。接著,流程進(jìn)入方塊312。在決策方塊312,多工器154根據(jù)其控制信號(hào)判斷所提取的該區(qū)塊的指令數(shù)據(jù)106是來自一加密程序或一純文字程序,所述控制信號(hào)來自控制寄存器144所供應(yīng)的位E148。若指令數(shù)據(jù)106為加密狀態(tài),流程進(jìn)入方塊314,反之,則流程進(jìn)入方塊316。在方塊314,多工器154選擇輸出解密密鑰174,且異邏輯156令加密指令數(shù)據(jù)106以及解密密鑰174進(jìn)行一布林異運(yùn)算,以產(chǎn)生圖1的純文字指令數(shù)據(jù)162。流程止于方塊314。在方塊316,多工器154選擇輸出16字節(jié)的二進(jìn)位零值176,且異邏輯156令指令數(shù)據(jù)106(為純文字)以及該16字節(jié)的二進(jìn)位零值進(jìn)行一布林異運(yùn)算,以產(chǎn)生同樣的純文字指令數(shù)據(jù)162。流程止于此方塊316。參考圖2以及圖3所揭示內(nèi)容,解密密鑰174供應(yīng)給所提取的該區(qū)塊指令數(shù)據(jù)106進(jìn)行異運(yùn)算,且該解密密鑰174是所選取的主密鑰對(duì)234/236以及提取地址134的函數(shù)。相比于傳統(tǒng)解密程序─使解密密鑰為先前密鑰值的一函數(shù),其中持續(xù)修正密鑰以供應(yīng)新的在下一次工作區(qū)間使用─本發(fā)明所揭示的解密技術(shù)完全不同。以主密鑰對(duì)234/236以及提取地址134為函數(shù)獲得解密密鑰174的方式有至少以下兩種優(yōu)點(diǎn)。第一,如以上所討論,加密指令數(shù)據(jù)以及純文字指令數(shù)據(jù)106的提取耗時(shí)相當(dāng),不會(huì)增加微處理器100所需的工作時(shí)鐘。第二,遇到程序中的分支指令(branchinstruction),提取指令數(shù)據(jù)106所需的時(shí)間不會(huì)增加。在一種實(shí)施方式中,一分支預(yù)測(cè)器(branchpredictor)接收提取地址134,并預(yù)測(cè)該提取地址134所指的該區(qū)塊的指令數(shù)據(jù)106是否存在一分支指令,并預(yù)測(cè)其方向以及目標(biāo)地址。以圖2所示實(shí)施方式為例,產(chǎn)出的解密密鑰174是主密鑰對(duì)234/236以及提取地址134的一函數(shù),將在目標(biāo)地址所指的該區(qū)塊指令數(shù)據(jù)106送抵該異邏輯156的同一時(shí)間產(chǎn)出預(yù)測(cè)的目標(biāo)地址的適當(dāng)解密密鑰174。與傳統(tǒng)解密密鑰運(yùn)算手法針對(duì)目標(biāo)地址計(jì)算解密密鑰所必須的多個(gè)「倒帶(rewind)」步驟相較,本發(fā)明所揭示技術(shù)在處理加密指令數(shù)據(jù)時(shí)不會(huì)產(chǎn)生額外的延遲。另外,如圖2以及圖3所示,密鑰擴(kuò)展器152的旋轉(zhuǎn)器216以及加法/減法器218的聯(lián)合設(shè)計(jì),使得解密密鑰長度有效擴(kuò)展,超越主密鑰的長度。例如,主密鑰共貢獻(xiàn)32字節(jié)(2*16字節(jié));更甚者,以黑客企圖判斷解密密鑰174為何的角度而言,旋轉(zhuǎn)器216以及加法/減法器218有效地將位于主密鑰寄存器142的32字節(jié)的主密鑰擴(kuò)展為256字節(jié)的密鑰序列。更具體地說,有效擴(kuò)展后的密鑰序列的字節(jié)n為:為第一主密鑰234的字節(jié)n,且為第二主密鑰的字節(jié)n+x。如上所述,密鑰擴(kuò)展器152所產(chǎn)生的前八套16字節(jié)解密密鑰174是由減法方式產(chǎn)生,且后八套是由加法方式產(chǎn)生。具體來說,選定的主密鑰對(duì)234/236各自所提供的字節(jié)內(nèi)容用于為16個(gè)連續(xù)的16字節(jié)區(qū)塊的指令數(shù)據(jù)各個(gè)字節(jié)產(chǎn)生解密密鑰174字節(jié),詳情請(qǐng)見表格3。舉例說明,表格3第1列的符號(hào)”15-00”表示第二主密鑰236的字節(jié)0的內(nèi)容會(huì)經(jīng)8位算數(shù)運(yùn)算(aneight-bitarithmeticoperation)自第一主密鑰234的字節(jié)15減去,以獲得一字節(jié)的有效解密密鑰174,用以與一16字節(jié)區(qū)塊的指令數(shù)據(jù)106中的字節(jié)15進(jìn)行異運(yùn)算。15-0014-1513-1412-1311-1210-1109-1008-0907-0806-0705-0604-0503-0402-0301-0200-0115-0114-0013-1512-1411-1310-1209-1108-1007-0906-0805-0704-0603-0502-0401-0300-0215-0214-0113-0012-1511-1410-1309-1208-1107-1006-0905-0804-0703-0602-0501-0400-0315-0314-0213-0112-0011-1510-1409-1308-1207-1106-1005-0904-0803-0702-0601-0500-0415-0414-0313-0212-0111-0010-1509-1408-1307-1206-1105-1004-0903-0802-0701-0600-0515-0514-0413-0312-0211-0110-0009-1508-1407-1306-1205-1104-1003-0902-0801-0700-0615-0614-0513-0412-0311-0210-0109-0008-1507-1406-1305-1204-1103-1002-0901-0800-0715-0714-0613-0512-0411-0310-0209-0108-0007-1506-1405-1304-1203-1102-1001-0900-0815+0814+0713+0612+0511+0410+0309+0208+0107+0006+1505+1404+1303+1202+1101+1000+0915+0914+0813+0712+0611+0510+0409+0308+0207+0106+0005+1504+1403+1302+1201+1100+1015+1014+0913+0812+0711+0610+0509+0408+0307+0206+0105+0004+1503+1402+1301+1200+1115+1114+1013+0912+0811+0710+0609+0508+0407+0306+0205+0104+0003+1502+1401+1300+1215+1214+1113+1012+0911+0810+0709+0608+0507+0406+0305+0204+0103+0002+1501+1400+1315+1314+1213+1112+1011+0910+0809+0708+0607+0506+0405+0304+0203+0102+0001+1500+1415+1414+1313+1212+1111+1010+0909+0808+0707+0606+0505+0404+0303+0202+0101+0000+1515+1514+1413+1312+1211+1110+1009+0908+0807+0706+0605+0504+0403+0302+0201+0100+00表格3給定適當(dāng)?shù)闹髅荑€數(shù)值后,密鑰擴(kuò)展器152所產(chǎn)生的擴(kuò)展密鑰統(tǒng)計(jì)來說可有效預(yù)防異加密常見的攻擊,包括令文件的加密區(qū)塊以密鑰長度位移、并對(duì)加密區(qū)塊一并施行異運(yùn)算,以下更詳細(xì)討論。密鑰擴(kuò)展器152對(duì)選定主密鑰對(duì)234/236的影響是:在所述實(shí)施方式中,程序中以完全相同的密鑰所加密的兩個(gè)指令數(shù)據(jù)106字節(jié)的跨距可高達(dá)256字節(jié)。在其他具有不同區(qū)塊尺寸的指令數(shù)據(jù)106、以及不同主密鑰長度的實(shí)施方式中,以同樣密鑰加密的兩個(gè)指令數(shù)據(jù)106字節(jié)的最大跨距可有不同的量。用來選定主密鑰對(duì)234/236的主密鑰寄存器142以及密鑰擴(kuò)展器152內(nèi)的多工器212/214也會(huì)決定有效密鑰長度的擴(kuò)展程度。如以上討論,圖2所示實(shí)施方式供應(yīng)有5個(gè)主密鑰寄存器142,主密鑰寄存器142所供應(yīng)的內(nèi)容因此可以10種方式組合,而多工器212/214是用于自上述10種可能組合方式中選擇八種作用。表格3所示各密鑰對(duì)234/236所對(duì)應(yīng)的256字節(jié)有效密鑰長度搭配八種主密鑰對(duì)234/236組合后,所產(chǎn)生的有效密鑰長度為2048字節(jié)。也就是說,程序中以完全相同的密鑰加密的兩個(gè)指令數(shù)據(jù)106字節(jié)的跨距可高達(dá)2048字節(jié)。為了更加說明密鑰擴(kuò)展器152所帶來的優(yōu)點(diǎn),以下簡短敘述異加密程序所常見的的攻擊。若異加密運(yùn)算所采用的密鑰長度短于所加密/解密的程序指令數(shù)據(jù)的長度,密鑰中的許多字節(jié)必須被重復(fù)使用,且被重復(fù)使用的字節(jié)數(shù)量視程序的長度而定。此弱點(diǎn)使異指令加密程序可被破解。第一,黑客嘗試判斷出重復(fù)密鑰的長度,以下展示的說明(1)至(3)令之為n+1。第二,黑客假定指令數(shù)據(jù)內(nèi)各個(gè)密鑰長度區(qū)塊(key-lengthblock)是以同樣密鑰加密。以下列舉根據(jù)一傳統(tǒng)異加密運(yùn)算加密得到的二密鑰長度區(qū)塊的數(shù)據(jù):其中,為第一密鑰長度區(qū)塊的數(shù)據(jù)的字節(jié)n,將被加密;為第二密鑰長度區(qū)塊的數(shù)據(jù)的字節(jié)n,將被加密;且kn為密鑰的字節(jié)n。第三,黑客對(duì)所述兩區(qū)塊進(jìn)行異運(yùn)算,使其中密鑰成分彼此相銷,獨(dú)留以下內(nèi)容:最后,由于計(jì)算出的字節(jié)為單純兩個(gè)純文字字節(jié)的函數(shù),黑客可以統(tǒng)計(jì)分析純文字內(nèi)容的出現(xiàn)頻率,以嘗試求得純文字字節(jié)的數(shù)值。然而,根據(jù)圖2以及圖3所揭示方式計(jì)算出的加密指令數(shù)據(jù)106字節(jié)的圖樣如以下說明(4)與(5)所示:其中標(biāo)示所加密的第一16字節(jié)區(qū)塊的指令數(shù)據(jù)的字節(jié)n,標(biāo)示所加密的第二16字節(jié)區(qū)塊的指令數(shù)據(jù)的字節(jié)n,標(biāo)示主密鑰x的字節(jié)n,且標(biāo)示主密鑰y的字節(jié)n。如前述,主密鑰x與y為不同密鑰。假定一種實(shí)施方式以五個(gè)主密鑰寄存器142提供八種主密鑰對(duì)234/236組合,2048字節(jié)序列中各字節(jié)是與兩個(gè)獨(dú)立的主密鑰字節(jié)的一組合進(jìn)行異運(yùn)算。因此,當(dāng)加密數(shù)據(jù)以任何方式于256字節(jié)的區(qū)塊中移位并且彼此作異運(yùn)算,所求得的字節(jié)都會(huì)存在兩個(gè)主密鑰的復(fù)雜成分,因此,不若說明(3)的內(nèi)容,此處所得的運(yùn)算結(jié)果不單純只是純文字字節(jié)。例如,假設(shè)黑客選擇使同一256字節(jié)區(qū)塊中的16字節(jié)區(qū)塊對(duì)齊并彼此進(jìn)行異操作使同樣的密鑰零字節(jié)在各段中被使用,字節(jié)0的運(yùn)算結(jié)果如說明(6)所示,所獲得的字節(jié)存在兩個(gè)主密鑰的復(fù)雜組合:其中n不為1。再者,若黑客換成將選自不同256字節(jié)區(qū)塊內(nèi)的16字節(jié)區(qū)塊對(duì)齊、且彼此作異運(yùn)算,運(yùn)算結(jié)果的字節(jié)0如說明(7)所示:其中主密鑰u與v中至少一個(gè)不同于主密鑰x以及y。模擬隨機(jī)主密鑰數(shù)值所產(chǎn)生的有效密鑰字節(jié)的異運(yùn)算,可發(fā)現(xiàn)運(yùn)算結(jié)果呈現(xiàn)相當(dāng)平滑的分布。當(dāng)然,若黑客選擇將不同的2048字節(jié)長度區(qū)塊內(nèi)的16字節(jié)區(qū)塊對(duì)齊、并且彼此進(jìn)行異操作,黑客可能會(huì)獲得與說明(3)類似的結(jié)果。然而,請(qǐng)參照以下內(nèi)容。第一,某些程序─例如,安全性相關(guān)程序─可能短于2048字節(jié)。第二,相距2048字節(jié)的指令字節(jié)的統(tǒng)計(jì)相關(guān)性(statisticalcorrelation)很可能非常小,導(dǎo)致很難破解。第三,如前述內(nèi)容,所述技術(shù)的實(shí)施方式可以較多數(shù)量實(shí)現(xiàn)主密鑰寄存器142,使解密密鑰的有效長度擴(kuò)展;例如,以12個(gè)主密鑰寄存器142供應(yīng)16384字節(jié)長度的解密密鑰,甚至其他更長的解密密鑰。第四,以下將討論的密鑰下載指令500以及密鑰切換指令600更使程序設(shè)計(jì)師得以載入新的數(shù)值至主密鑰寄存器142,以有效擴(kuò)展密鑰長度超過2048字節(jié),或者,如果必要,也可擴(kuò)展密鑰長度至程序的完整長度?,F(xiàn)在,參考圖4,一方塊圖根據(jù)本發(fā)明技術(shù)圖解圖1的標(biāo)志寄存器128。根據(jù)圖4所示的實(shí)施方式,標(biāo)志寄存器128包括標(biāo)準(zhǔn)x86寄存器的多個(gè)位408;不過,為了此處敘述的新功能,圖4所示實(shí)施方式會(huì)動(dòng)用x86架構(gòu)中一般為預(yù)留(RESERVED)的一位。特別說明,標(biāo)志寄存器128包括一E位字段402。E位字段402用于修復(fù)控制寄存器144的E位148數(shù)值,用以于加密以及純文字程序間切換和/或于不同加密程序間切換,以下將詳細(xì)討論的。E位字段402標(biāo)示目前所執(zhí)行的程序是否有加密。若目前所執(zhí)行的程序有加密,E位字段402為設(shè)定狀態(tài),否則,為清除狀態(tài)。當(dāng)中斷事件發(fā)生,控制權(quán)切換給其他程序(例如,中斷interrupt、異常exception如頁錯(cuò)誤pagefault、或任務(wù)切換taskswitch),儲(chǔ)存標(biāo)志寄存器128。反之,若控制權(quán)重回先前因中斷事件中斷的程序,則修復(fù)標(biāo)志寄存器128。微處理器100的設(shè)計(jì)會(huì)在標(biāo)志寄存器128修復(fù)時(shí)以標(biāo)志寄存器128的E位402字段數(shù)值更新控制寄存器144的E位148數(shù)值,以下將詳細(xì)討論。因此,若中斷事件發(fā)生時(shí)一加密程序正在執(zhí)行(即提取單元104處于解密模式),當(dāng)控制權(quán)交還給該加密程序時(shí),以修復(fù)的E位字段402令E位148為設(shè)定狀態(tài),以修復(fù)提取單元104為解密模式。在一種實(shí)施方式中,E位148以及E位字段402為同一個(gè)具體硬件位,因此,儲(chǔ)存標(biāo)志寄存器128的E位字段402中數(shù)值即是儲(chǔ)存E位148,且修復(fù)標(biāo)志寄存器128的E位字段402的數(shù)值即是修復(fù)E位148。參閱圖5,一方塊圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一密鑰下載指令500的格式。密鑰下載指令500包括一操作碼(opcode)502字段,特地標(biāo)示其為微處理器100指令集內(nèi)的密鑰下載指令500。在一種實(shí)施方式中,操作碼字段502數(shù)值為0FA6/4(x86領(lǐng)域)。密鑰下載指令500包括兩個(gè)運(yùn)算元:一密鑰寄存器文檔目標(biāo)地址504以及一安全存儲(chǔ)區(qū)來源地址506。該安全存儲(chǔ)區(qū)來源地址506為安全存儲(chǔ)區(qū)122中儲(chǔ)存一16字節(jié)主密鑰的一地址。密鑰寄存器文檔地址504標(biāo)示密鑰寄存器文檔124內(nèi)的一個(gè)寄存器的地址,此寄存器將載入自安全存儲(chǔ)區(qū)122載出的16字節(jié)主密鑰。在一種實(shí)施方式中,若一程序企圖在微處理器100不為安全操作模式下執(zhí)行密鑰載入指令500,則視之為無效指令異常;此外,若安全存儲(chǔ)區(qū)來源地址506數(shù)值位于有效安全存儲(chǔ)區(qū)122之外,則視之為一般保護(hù)異常。在一種實(shí)施方式中,若一程序試圖在微處理器100不為最高權(quán)限級(jí)別時(shí)(例如,x86環(huán)0權(quán)限/x86ring0)執(zhí)行密鑰下載指令500,則視之為無效指令異常。在某些狀況下,16字節(jié)主密鑰的構(gòu)成可能包括在加密指令的即時(shí)數(shù)據(jù)字段內(nèi)。所述即時(shí)數(shù)據(jù)可被一塊一塊移至安全存儲(chǔ)區(qū)122組成16字節(jié)的密鑰?,F(xiàn)在,參閱圖6,一方塊圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一密鑰切換指令600的格式。密鑰切換指令600包括一操作碼602字段,特地其為微處理器100指令集內(nèi)的密鑰切換指令600。密鑰切換指令600還包括一密鑰寄存器文檔索引字段604,標(biāo)示密鑰寄存器文檔124一序列寄存器中的開端,以自此將密鑰載入主密鑰寄存器142。在一種實(shí)施方式中,若一程序嘗試在微處理器100不為安全操作模式時(shí)執(zhí)行一密鑰切換指令600,則視之為無效指令異常。在一種實(shí)施方式中,若一程序意圖在微處理器100不為最高權(quán)限級(jí)別(例如,x86環(huán)0權(quán)限)時(shí)執(zhí)行一密鑰切換指令600,則視之為無效指令異常。在一種實(shí)施方式中,密鑰切換指令600為原子操作型式(atomic),即不可中斷;此處所討論,用于載入密鑰至主密鑰寄存器142的其他指令也是如此─例如,以下將討論的分支與切換密鑰指令。現(xiàn)在,參閱圖7,一流程圖圖解圖1的微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)執(zhí)行圖6介紹的密鑰切換指令600。流程始于方塊702。在方塊702,解碼單元108將一密鑰切換指令600解碼,且將解碼結(jié)果代入微代碼單元132內(nèi)實(shí)現(xiàn)密鑰切換指令600的微代碼程序。流程接著進(jìn)入方塊704。在方塊704,微代碼會(huì)根據(jù)密鑰寄存器文檔索引字段604自密鑰寄存器文檔124下載主密鑰寄存器142的內(nèi)容。較佳實(shí)施方式是:微代碼以密鑰寄存器文檔索引字段604所標(biāo)示的密鑰寄存器為起始,自密鑰寄存器文檔124下載連續(xù)的n個(gè)寄存器內(nèi)容作為n個(gè)密鑰存入主密鑰寄存器142,其中n為主密鑰寄存器142的總數(shù)。在一種實(shí)施方式中,數(shù)值n可標(biāo)示于密鑰切換指令600的一額外空間,設(shè)定為少于主密鑰寄存器142的總數(shù)。流程接著進(jìn)入方塊706。在方塊706,微代碼使微處理器100分支至接續(xù)的x86指令(即該密鑰切換指令600之后的指令),將導(dǎo)致微處理器100中較密鑰切換指令600新的所有x86指令被清空,致使微處理器100內(nèi)、較切換至接續(xù)x86指令的微操作新的所有微操作被清空。上述被清空的指令包括自指令高速緩沖存儲(chǔ)器102提取出、緩沖暫存于提取單元104以及解碼單元108內(nèi)等待解密與解碼的所有指令字節(jié)106。流程接著進(jìn)入方塊708。在方塊708,基于方塊706分支至接續(xù)指令的操作,提取單元104開始利用方塊704載入主密鑰寄存器142的新一組密鑰值自指令高速緩沖存儲(chǔ)器102提取并且解密指令數(shù)據(jù)106。流程結(jié)束于方塊708。如圖7所示,密鑰切換指令600令正在執(zhí)行中的加密程序在自指令高速緩沖存儲(chǔ)器102提取出來的同時(shí)得以改變主密鑰寄存器142內(nèi)所儲(chǔ)存、供解密該加密程序使用的內(nèi)容。所述主密鑰寄存器142動(dòng)態(tài)調(diào)整技術(shù)使得加密該程序的有效密鑰長度超越提取單元104先天支援的長度(例如,圖2實(shí)施方式所提供的2048字節(jié));如圖8所示程序,若將之以圖1微處理器100操作,黑客會(huì)更不易攻破計(jì)算機(jī)系統(tǒng)的安全防護(hù)?,F(xiàn)在,參閱圖8,一方塊圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一加密程序的一存儲(chǔ)器用量(memoryfootprint)800,其中采用圖6所示的密鑰切換指令600。圖8所示的加密程序存儲(chǔ)器用量800包括連續(xù)數(shù)「塊chunk」指令數(shù)據(jù)字節(jié)。每一「塊」的內(nèi)容為一序列多個(gè)指令數(shù)據(jù)字節(jié)(其中為預(yù)先加密的數(shù)據(jù)),且屬于同一「塊」的指令數(shù)據(jù)字節(jié)是由同樣的一套主密鑰寄存器142數(shù)值解密。因此,不同兩「塊」的界線是由密鑰切換指令600定義。也就是說,各「塊」的上、下界是由密鑰切換指令600的位置區(qū)分(或者,以一程序的第一「塊」為例,其上界為該程序的起始處;此外,以該程序的最后一「塊」為例,其下界為該程序的結(jié)束處)。因此,各「塊」指令數(shù)據(jù)字節(jié)是由提取單元104基于不同套主密鑰寄存器142數(shù)值解密,意即各「塊」指令數(shù)據(jù)字節(jié)的解密是根據(jù)前一「塊」所供應(yīng)的一密鑰切換指令600所載入主密鑰寄存器142數(shù)值。加密一程序的后處理器(post-processor)會(huì)知曉各密鑰切換指令600所在的存儲(chǔ)器地址,并且會(huì)利用此信息─即提取地址的相關(guān)地址位─結(jié)合密鑰切換指令600密鑰數(shù)值產(chǎn)生加密密鑰字節(jié),以加密該程序。一些目的文件格式(objectfileformat)允許程序設(shè)計(jì)者標(biāo)示程序載入存儲(chǔ)器何處,或至少載明特定大小的對(duì)齊形式(例如,頁面邊界pageboundary),以提供足夠的地址信息加密該程序。此外,一些操作系統(tǒng)預(yù)設(shè)值是將程序載入頁面邊界上。密鑰切換指令600可安置于程序的任何地方。然而,若密鑰切換指令600載入特定值至主密鑰寄存器142供下一「塊」指令數(shù)據(jù)字節(jié)解密使用、且密鑰切換指令600(或甚至密鑰載入指令500)的位置導(dǎo)致每一「塊」的長度短于、或等于提取單元104所能應(yīng)付的有效密鑰長度(例如,圖2實(shí)施方式所揭示的2048字節(jié)),則程序可被以有效長度等同整體程序長度的密鑰加密,此為相當(dāng)強(qiáng)健的加密方式。此外,即使密鑰切換指令600的使用使得有效密鑰長度仍短于加密程序的長度(即,同樣一套主密鑰寄存器142數(shù)值被用于加密一程序的多個(gè)「塊」),改變「塊」尺寸(例如,不限定全為2048字節(jié))可增加黑客破解系統(tǒng)的困難度,因?yàn)?,黑客必須先判斷以同一套主密鑰寄存器142數(shù)值加密的「塊」位于何處,并且必須判斷該些長度不一的「塊」各自的尺寸。值得注意的是,以密鑰切換指令600實(shí)現(xiàn)的動(dòng)態(tài)密鑰切換耗費(fèi)相當(dāng)大量的時(shí)鐘數(shù)目,主要是因?yàn)楣芫€必須清空。此外,在一種實(shí)施方式中,密鑰切換指令600主要是以微代碼(microcede)實(shí)現(xiàn),通常較非微代碼實(shí)現(xiàn)的指令慢。因此,程序碼開發(fā)者須考慮密鑰切換指令對(duì)效能的影響,在執(zhí)行速度以及特定應(yīng)用的安全性考量之間尋求平衡點(diǎn)?,F(xiàn)在,參閱圖9,一方塊圖圖解根據(jù)本發(fā)明技術(shù)實(shí)現(xiàn)的一分支與切換密鑰指令900的格式。首先敘述該分支與切換密鑰指令900的必要性。根據(jù)以上實(shí)施例所揭示內(nèi)容,加密程序交由提取單元104提取的各個(gè)16字節(jié)區(qū)塊的指令數(shù)據(jù)是有先經(jīng)過加密運(yùn)算(采異技術(shù)),所采用的加密密鑰等同提取單元104用來解密(異運(yùn)算)所提取的各區(qū)塊的指令數(shù)據(jù)106的各個(gè)16字節(jié)長的解密密鑰174。如以上所述,解密密鑰174的字節(jié)數(shù)值是由提取單元104基于以下兩種輸入計(jì)算而得:儲(chǔ)存于主密鑰寄存器142的主密鑰字節(jié)數(shù)值、以及所提取的16字節(jié)區(qū)塊的指令數(shù)據(jù)106的提取地址134的部分位(以圖2所揭示實(shí)施方式為例,為位[10:4])。因此,加密一程序使的由微處理器100執(zhí)行的一后處理器會(huì)知曉將儲(chǔ)存于主密鑰寄存器142的主密鑰字節(jié)數(shù)值、以及一地址(或更限定為該地址的數(shù)個(gè)相關(guān)位);該地址指示加密程序?qū)⒈惠d入存儲(chǔ)器何處、且微處理器100將自此處一連串地提取出該加密程序數(shù)個(gè)區(qū)塊的指令數(shù)據(jù)?;谏鲜鲂畔?,后處理器得以適切產(chǎn)生解密密鑰174數(shù)值,用于加密該程序的各個(gè)16字節(jié)區(qū)塊的指令數(shù)據(jù)。如以上所討論,當(dāng)一分支指令被預(yù)測(cè)到且/或被執(zhí)行,提取單元104會(huì)以分支目標(biāo)地址更新提取地址134。只要加密程序從未改變(經(jīng)由密鑰切換指令600)主密鑰寄存器142內(nèi)儲(chǔ)存的主密鑰數(shù)值,分支指令是由提取單元104透明控制。也就是說,提取單元104會(huì)采用同樣的主密鑰寄存器142數(shù)值估算解密密鑰174,以供解密包括該分支指令的一區(qū)塊的指令數(shù)據(jù)106、以及解密該分支指令的目標(biāo)地址所指的一區(qū)塊的指令數(shù)據(jù)106內(nèi)的指令。然而,程序改變(經(jīng)由密鑰切換指令600)主密鑰寄存器142數(shù)值的能力意味著提取單元104有可能以一套主密鑰寄存器142數(shù)值估算解密密鑰174解密包括該分支指令的一區(qū)塊的指令數(shù)據(jù)106,并以不同的另外一套主密鑰寄存器142數(shù)值估算解密密鑰174解密該分支指令的目標(biāo)地址所指的一區(qū)塊的指令數(shù)據(jù)106內(nèi)的指令。解決此問題的一種方法是限定分支目標(biāo)地址于程序同一「塊」中。另外一種解決方式是采用圖9所揭示的分支與切換密鑰指令900。再次參閱圖9,一方塊圖圖解根據(jù)本發(fā)明技術(shù)實(shí)現(xiàn)的一分支與切換密鑰指令900的格式。分支與切換密鑰指令900包括一操作碼902字段,標(biāo)示其為微處理器100指令集內(nèi)的分支與切換密鑰指令900。分支與切換密鑰指令900還包括一密鑰寄存器文檔索引字段904,標(biāo)示密鑰寄存器文檔124中一連串寄存器里的開端,以自此將密鑰載入主密鑰寄存器142。分支與切換密鑰指令900還包括一分支信息字段906,記載分支指令的典型信息─如,計(jì)算目標(biāo)地址的信息、以及分支條件。在一種實(shí)施方式中,若一程序在微處理器100不為安全執(zhí)行模式時(shí)嘗試執(zhí)行一分支與切換密鑰指令900,則視之為無效指令異常。在一種實(shí)施方式中,若一程序在微處理器100不為最高權(quán)限層級(jí)(例如,x86的環(huán)0權(quán)限)時(shí)試圖執(zhí)行分支與切換密鑰指令900,則視之為無效指令異常。在一種實(shí)施方式中,分支與切換密鑰指令900為原子操作型(atomic)。參閱圖10,一流程圖圖解圖1微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)執(zhí)行圖9所揭示的分支與切換密鑰指令900。流程始于方塊1002。在方塊1002,解碼單元108解碼一分支與切換密鑰指令900且將之代入微代碼單元132中實(shí)現(xiàn)該分支與切換密鑰指令900的微代碼程序。流程接著進(jìn)入方塊1006。在方塊1006,微代碼解出分支方向(采用、或不采用)、以及目標(biāo)地址。值得注意的是,對(duì)于無條件型分支指令(unconditionalbranchinstruction),所述方向衡為采用。流程接著進(jìn)入判斷方塊1008。在判斷方塊1008,微代碼判斷方塊1006所解出的方向是否為采用。若為采用,流程進(jìn)入方塊1014。反之,流程進(jìn)入方塊1012。在方塊1012,微代碼不切換密鑰、或跳至目標(biāo)地址,因?yàn)榉种Р僮魑幢徊捎谩A鞒探Y(jié)束于方塊1012。在方塊1014,微代碼根據(jù)密鑰寄存器文檔索引字段904,將密鑰自密鑰寄存器文檔124載入主密鑰寄存器142。較佳實(shí)施例是,微代碼以密鑰寄存器文檔索引字段904所標(biāo)示的位置為起始,將密鑰寄存器文檔124內(nèi)n個(gè)鄰近寄存器所記載的n個(gè)密鑰載入主密鑰寄存器142,其中n為主密鑰寄存器142的總數(shù)。在一種實(shí)施方式中,n值可記錄于分支與切換密鑰指令900的一額外空間,設(shè)定為小于主密鑰寄存器142總數(shù)的值。流程接著進(jìn)入方塊1016。在方塊1016,微代碼使得微處理器100跳至方塊1006所解出的目標(biāo)地址,將導(dǎo)致微處理器100中較分支與切換密鑰指令900新的所有x86指令被清空,致使微處理器100內(nèi)、較分支至目標(biāo)地址的微操作新的所有微操作被清空。上述被清空的指令包括自指令高速緩沖存儲(chǔ)器102提取出、緩沖暫存于提取單元104以及解碼單元108內(nèi)等待解密與解碼的所有指令字節(jié)106。流程接著進(jìn)入方塊1008。在方塊1018,隨著方塊1016分支至目標(biāo)地址的操作,提取單元104采用方塊1014載入主密鑰寄存器142的新一組密鑰數(shù)值開始自指令高速緩沖存儲(chǔ)器102提取且解密指令數(shù)據(jù)106。流程結(jié)束于方塊1018。現(xiàn)在,參閱圖11,一流程圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一后處理器的操作。所述后處理器為軟件工具,可用于后處理一程序并加密,以交由圖1的微處理器100執(zhí)行。流程始于方塊1102。在方塊1102,后處理器接收一程序的一目的文件。根據(jù)一種實(shí)施方式,該目的文件內(nèi)的分支指令的目標(biāo)地址可在程序執(zhí)行前確定;例如,指向固定目標(biāo)地址的分支指令。在程序運(yùn)行前決定好目標(biāo)地址的分支指令尚有另一形式,例如,一相對(duì)分支指令(relativebranchinstruction),其中記載一偏移量,用來加上分支指令所在的存儲(chǔ)器地址,以求得分支目標(biāo)地址。反之,關(guān)于目標(biāo)地址不會(huì)在程序執(zhí)行前確定的分支指令,其中一種例子是基于寄存器或存儲(chǔ)器所儲(chǔ)存的運(yùn)算元計(jì)算出目標(biāo)地址,因此,其值在程序執(zhí)行當(dāng)中可能有變動(dòng)。流程接著進(jìn)入方塊1104。在方塊1104,后微處理器將跨塊分支指令(inter-chunkbranchinstruction)以分支與切換密鑰指令900取代,所述指令900在密鑰寄存器文檔索引空間904儲(chǔ)存有適當(dāng)?shù)臄?shù)值,該數(shù)值乃基于分支指令的目標(biāo)地址所坐落的「塊」而設(shè)定。如圖8所揭示內(nèi)容,一「塊」是由一序列多個(gè)指令數(shù)據(jù)字節(jié)所組成,將由同一套主密鑰寄存器142數(shù)值解密。因此,跨塊分支指令的目標(biāo)地址所坐落的「塊」不同于分支指令本身的「塊」。值得注意的是,塊內(nèi)分支─即目標(biāo)地址與本身位于同一「塊」的分支指令─無須被替代。值得注意的是,產(chǎn)生出原始檔(sourcefile)以產(chǎn)出目的文件的程序設(shè)計(jì)及/或編譯器可視需求明確包括分支與切換密鑰指令900,以降低后處理器取代操作的負(fù)擔(dān)。流程接著進(jìn)入方塊1106。在方塊1106,后處理器加密該程序。后處理器知道每一「塊」的存儲(chǔ)器位置以及主密鑰寄存器142數(shù)值,并將之用于加密該程序。流程結(jié)束于方塊1106?,F(xiàn)在,參閱圖12,一方塊圖圖解本發(fā)明技術(shù)另一種實(shí)施方式所實(shí)現(xiàn)的一分支與切換密鑰指令1200的格式。圖12所示的分支與切換密鑰指令1200適用于目標(biāo)地址在程序執(zhí)行前為未知的分支操作,以下將詳細(xì)討論。分支與切換密鑰指令1200包括一操作碼1202字段,用以標(biāo)示其為微處理器100指令集內(nèi)的分支與切換密鑰指令1200。分支與切換密鑰指令1200同樣包括一分支信息字段906,功用與圖9的分支與切換密鑰指令900的該字段類似。在一種實(shí)施方式中,若一程序在微處理器100不為安全執(zhí)行模式時(shí)試圖執(zhí)行分支與切換密鑰指令1200,則視之為無效指令異常。在一種實(shí)施方式中,若一程序在微處理器100不為最高權(quán)限級(jí)別(例如,x86環(huán)0權(quán)限)時(shí)試圖執(zhí)行一分支與切換密鑰指令1200,則視之為無效指令異常。在一種實(shí)施方式中,分支與切換密鑰指令1200為原子型式。現(xiàn)在,參閱圖13,一方塊圖圖解根據(jù)本發(fā)明技術(shù)實(shí)現(xiàn)的「塊」地址范圍表1300。表格1300包括多個(gè)單元。每一單元與加密程序的一「塊」相關(guān)。每一單元包括一地址范圍字段1302以及一密鑰寄存器文檔索引字段1304。地址范圍字段1302標(biāo)示所對(duì)應(yīng)「塊」的存儲(chǔ)器地址范圍。密鑰寄存器文檔索引字段1304標(biāo)示密鑰寄存器文檔124內(nèi)的寄存器,由分支與切換密鑰指令1200將索引所指的寄存器所儲(chǔ)存的密鑰數(shù)值載入主密鑰寄存器142,供提取單元104解密該「塊」使用。以下參考圖18進(jìn)行討論,表格1300于需要存取表格1300內(nèi)容的分支與切換密鑰指令1200執(zhí)行前載入微處理器100?,F(xiàn)在,參閱圖14,一流程圖圖解圖1微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)執(zhí)行圖12的分支與切換密鑰指令1200。流程始于方塊1402。在方塊1402,解碼單元108解碼一分支與切換密鑰指令1200且將之代入微代碼單元132中實(shí)現(xiàn)分支與切換密鑰指令1200的微代碼程序。流程接著進(jìn)入方塊1406。在方塊1406,微代碼解出分支方向(采用、或不采用)、且找出目標(biāo)地址。流程接著進(jìn)入判斷方塊1408。在判斷方塊1408,微代碼判斷方塊1406所解出的分支方向是否為采用。若為采用,流程進(jìn)入方塊1414。反之,流程進(jìn)入方塊1412。在方塊1412,微代碼不切換密鑰、或跳至目標(biāo)地址,因?yàn)樵摲种幢徊捎谩A鞒探Y(jié)束于方塊1412。在方塊1414,微代碼基于方塊1406所解出的目標(biāo)地址查詢圖13所示的表格1300,得到該目標(biāo)地址所坐落的「塊」所對(duì)應(yīng)的密鑰寄存器文檔索引字段1304的內(nèi)容。微代碼接著基于密鑰寄存器文檔索引字段1304內(nèi)所記載的索引,自密鑰寄存器文檔124將密鑰數(shù)值載入主密鑰寄存器142。較佳實(shí)施方式是,微代碼根據(jù)密鑰寄存器文檔索引字段1304所儲(chǔ)存的索引,自密鑰寄存器文檔124中將n個(gè)相鄰寄存器儲(chǔ)存的n個(gè)密鑰值載入主密鑰寄存器142的,其中,n為主密鑰寄存器142的總數(shù)。在一種實(shí)施方式中,數(shù)值n可記錄于分支與切換密鑰指令1200的一額外字段中,設(shè)定為少于主密鑰寄存器142總數(shù)。流程接著進(jìn)入方塊1416。在方塊1416,微代碼致使微處理器100分支至方塊1406所解出的目標(biāo)地址,將導(dǎo)致微處理器100中較分支與切換密鑰指令1200新的所有x86指令被清空,致使微處理器100內(nèi)、較分支至目標(biāo)地址的微操作新的所有微操作被清空。上述被清空的指令包括自指令高速緩沖存儲(chǔ)器102提取出、緩沖暫存于提取單元104以及解碼單元108內(nèi)等待解密與解碼的所有指令字節(jié)106。流程接著進(jìn)入方塊1418。在方塊1418,隨著方塊1416分支至目標(biāo)地址的操作,提取單元104采用方塊1414載入主密鑰寄存器142的新一套密鑰值,開始自指令高速緩沖存儲(chǔ)器102提取并且解密指令數(shù)據(jù)106。流程結(jié)束于方塊1418?,F(xiàn)在,參考圖15,一方塊圖圖解根據(jù)本發(fā)明技術(shù)另外一種實(shí)施方式所實(shí)現(xiàn)的一分支與切換密鑰指令1500的格式。圖15所示的分支與切換密鑰指令1500以及其操作類似圖12所示的分支與切換密鑰指令1200。然而,取代自密鑰寄存器文檔124載入密鑰至主密鑰寄存器142,分支與切換密鑰指令1500是自安全存儲(chǔ)區(qū)122載入密鑰至主密鑰寄存器142,以下討論之?,F(xiàn)在,參考圖16,一方塊圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一「塊」地址范圍表1600。圖16所示表格1600類似圖13所示的表格1300。然而,取代包括一密鑰寄存器文檔索引字段1304,表格1600包括一安全存儲(chǔ)區(qū)地址字段1604。安全存儲(chǔ)區(qū)地址字段1604記載安全存儲(chǔ)區(qū)122內(nèi)的一地址,該地址儲(chǔ)存的密鑰值須由分支與切換密鑰指令1500載入主密鑰寄存器142,以供該提取單元1046解密該「塊」時(shí)使用。以下討論參考圖18內(nèi)容,表格1600是在需要查詢?cè)摫砀?600的分支與切換密鑰指令1500被執(zhí)行前載入微處理器100。在一種實(shí)施方式中,安全存儲(chǔ)區(qū)122地址的較低數(shù)個(gè)位無須儲(chǔ)存在安全存儲(chǔ)區(qū)地址字段1604,特別是因?yàn)榘踩鎯?chǔ)區(qū)122中儲(chǔ)存一組密鑰的位置的總量相當(dāng)大(例如,16字節(jié)x5)、且該組密鑰可沿著一設(shè)定尺寸范為對(duì)齊?,F(xiàn)在,參閱圖17,一流程圖圖解圖1微處理器100的操作,其中根據(jù)本發(fā)明技術(shù)執(zhí)行圖15的分支與切換密鑰指令1500。流程始于方塊1702。圖17的流程圖的許多方塊與圖14的許多方塊類似,因此采同樣的編號(hào)。然而,方塊1414是由方塊1714取代,微代碼基于方塊1406所求得的目標(biāo)地址查表圖16的表格1600,以獲得目標(biāo)地址所坐落的「塊」的安全存儲(chǔ)區(qū)地址字段1604數(shù)值。微代碼接著根據(jù)安全存儲(chǔ)區(qū)地址字段1604數(shù)值自安全存儲(chǔ)區(qū)122將密鑰數(shù)值載入主密鑰寄存器142。較佳實(shí)施方式是,微代碼由安全存儲(chǔ)區(qū)地址字段1604數(shù)值自安全存儲(chǔ)區(qū)122將n個(gè)鄰近16字節(jié)空間位置內(nèi)所儲(chǔ)存的n個(gè)密鑰數(shù)值載入主密鑰寄存器142,其中n為主密鑰寄存器142的總數(shù)。在一種實(shí)施方式中,數(shù)值n可記載于分支與切換密鑰指令1500中一額外字段,設(shè)定為少于主密鑰寄存器142總數(shù)?,F(xiàn)在,參閱圖18,一流程圖圖解根據(jù)本發(fā)明另外一種實(shí)施方式所實(shí)現(xiàn)的一后處理器的操作。所述后處理器可用于后處理一程序并加密,以交由圖1的微處理器100執(zhí)行。流程始于方塊1802。在方塊1802,后處理器接收一程序的目的文件。根據(jù)一種實(shí)施方式,該目的文件內(nèi)的分支指令,可為目標(biāo)地址在程序執(zhí)行前判定、可為目標(biāo)地址不可在程序執(zhí)行前判定。流程接著進(jìn)入方塊1803。在方塊1803,后處理器建立圖13或圖16的「塊」地址范圍表1300或1600,以列入該目標(biāo)檔。在一種實(shí)施方式中,操作系統(tǒng)在載入且執(zhí)行一加密程序前將表格1300/1600載入微處理器100,使分支與切換密鑰指令1200/1500得以存取的。在一種實(shí)施方式中,后處理器在程序中插入指令,以在任何分支與切換密鑰指令1200/1500執(zhí)行前載入表格1300/1600至微處理器100。流程接著進(jìn)入方塊1804。在方塊1804,類似先前所討論、關(guān)于圖11的方塊1104的操作,后處理器將每個(gè)執(zhí)行前目標(biāo)地址可決定的跨塊分支指令以圖9的分支與切換密鑰指令900取代,指令900基于分支指令目標(biāo)地址所在「塊」記載有合適的密鑰寄存器文檔索引字段904數(shù)值。流程接著進(jìn)入方塊1805。在方塊1805,后處理器根據(jù)方塊1803所產(chǎn)生的表格型態(tài)(1300/1600)將每個(gè)限于執(zhí)行過程中決定目標(biāo)地址的分支指令以圖12或圖15所示的分支與切換密鑰指令1200或1500取代。流程接著進(jìn)入方塊1806。在方塊1806,后處理器加密該程序。該后處理器知道關(guān)于各「塊」的存儲(chǔ)器位置與主密鑰寄存器142數(shù)值,將用于加密該程序。流程結(jié)束于方塊1806。現(xiàn)在,參閱圖19,一流程圖圖解圖1微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)處理加密程序以及純文字程序之間的任務(wù)切換。流程始于方塊1902。在方塊1902,標(biāo)志寄存器128的E位字段402的E位以及圖1控制寄存器144的E位148由微處理器100的一重置操作清空。流程接著進(jìn)入方塊1904。在方塊1904,微處理器100在執(zhí)行其重置微代碼進(jìn)行初始化后,開始提取并且執(zhí)行使用者程序指令(例如,系統(tǒng)固件),其為純文字程序指令。特別是,由于E位128為清空,如前所述,提取單元104視提取出來的指令數(shù)據(jù)106為純文字指令。流程接著進(jìn)入方塊1906。在方塊1906,系統(tǒng)固件(例如,操作系統(tǒng)、固件、基本輸入輸出系統(tǒng)BIOS…等)接收一要求(request),要執(zhí)行一加密程序。在一種實(shí)施方式中,執(zhí)行一加密程序的上述要求伴隨、或由一切換操作指示,以切換至微處理器100的一安全執(zhí)行模式,如以上討論內(nèi)容。在一種實(shí)施方式中,微處理器100僅在安全執(zhí)行模式時(shí),方允許操作于一解密模式(即,E位148為設(shè)定狀態(tài))。在一種實(shí)施方式中,微處理器100僅在系統(tǒng)管理模式(systemmanagementmode,例如,x86架構(gòu)中常見的SSM),方允許以解密模式操作。流程接著進(jìn)入方塊1908。在方塊1908,系統(tǒng)軟件于主密鑰寄存器142中載入其初始值,與程序中將被執(zhí)行的第一「塊」相關(guān)。在一種實(shí)施方式中,系統(tǒng)軟件執(zhí)行一密鑰切換指令600下載密鑰至主密鑰寄存器142。在載入密鑰至主密鑰寄存器142之前,密鑰寄存器文檔124的內(nèi)容可由一個(gè)或多個(gè)密鑰載入指令500載入。在一種實(shí)施方式中,載入密鑰至主密鑰寄存器142以及密鑰寄存器文檔124之前,安全存儲(chǔ)區(qū)122可先被寫入密鑰數(shù)值,其中,所述寫入乃經(jīng)由常見的安全通道技術(shù),例如,AES或RSA加密通道,以防止黑客窺探其值。如以上所討論,以上密鑰數(shù)值可儲(chǔ)存在一安全非易失性性存儲(chǔ)器(例如快閃存儲(chǔ)器)經(jīng)由一隔離串行總線(privateserialbus)耦接微處理器100,或者,可儲(chǔ)存在微處理器100的一非易失性性單次寫入存儲(chǔ)器。如以上討論,所述程序可包含在單一「塊」中。也就是說,所述程序可不包括密鑰切換指令600,整個(gè)程序可由單一套主密鑰寄存器142數(shù)值解密。流程接著進(jìn)入方塊1916。在方塊1916,隨著控制權(quán)轉(zhuǎn)移至加密程序,微處理器100設(shè)定標(biāo)志寄存器128的E位字段402標(biāo)示目前所執(zhí)行的程序?yàn)榧用苄褪剑以O(shè)定控制寄存器144的E位148,使提取單元104處于解密模式。微處理器100更致使管線內(nèi)的指令被刷新,其動(dòng)作類似圖7方塊706所實(shí)行的刷新操作。流程接著進(jìn)入方塊1918。在方塊1918,提取單元104提取加密程序內(nèi)的指令106,并且參考圖1至圖3所揭示的技術(shù)將之以解密模式解密并且執(zhí)行。流程接著進(jìn)入方塊1922。在方塊1922,微處理器100提取并且執(zhí)行加密程序時(shí),微處理器100接收到中斷事件。舉例說明,所述中斷事件可為一中斷interrupt、一異常exception(如頁面錯(cuò)誤pagefault)、或任務(wù)切換taskswitch。當(dāng)一中斷事件發(fā)生,微處理器100管線所有待處理的指令會(huì)被清空。所以,若管線中有任何先前提取的加密指令,將之清空。此外,自指令高速緩沖存儲(chǔ)器102所提取出、可能在緩沖儲(chǔ)存在提取單元104以及解碼單元108中等待被解密、解碼的所有指令字節(jié)會(huì)被清空。在一種實(shí)施方式中,微代碼被喚起回應(yīng)中斷事件。流程接著進(jìn)入方塊1924。在方塊1924,微處理器100儲(chǔ)存標(biāo)志寄存器128(以及微處理器100其他結(jié)構(gòu)狀態(tài),包括受中斷的加密程序的目前指令指標(biāo)數(shù)值)至一堆迭式存儲(chǔ)器(stackmemory)。儲(chǔ)存加密程序的E位字段402數(shù)值將使其得以在后續(xù)操作中修復(fù)(在方塊1934)。流程接著進(jìn)入方塊1926。在方塊1926,當(dāng)控制權(quán)轉(zhuǎn)移到新的程序(例如,中斷處理程序interrupthandler、異常處理程序exceptionhandler、或新任務(wù)),微處理器100清空標(biāo)志寄存器128的E位字段402、以及控制寄存器144的E位148,以應(yīng)付純文字的新程序。也就是說,圖19所示實(shí)施例假設(shè)微處理器100同一時(shí)間只有允許運(yùn)作一個(gè)加密程序,且已有一個(gè)加密程序在執(zhí)行(但被中斷)。圖22至圖26另外揭示有其他種的實(shí)施方式。流程接著進(jìn)入方塊1928。在方塊1928,提取單元104參考圖1至圖3所揭示內(nèi)容以純文字模式提取新程序的指令106。特別是,控制寄存器144內(nèi)E位148的清空狀態(tài)使得多工器154將指令數(shù)據(jù)106與多位的二進(jìn)位零值176進(jìn)行異運(yùn)算,使得指令數(shù)據(jù)106不被解密操作。流程接著進(jìn)入方塊1932。在方塊1932,新程序執(zhí)行一返回操作自中斷指令(例如,x86IRET)或類似指令返回,使得控制權(quán)回歸加密程序。在一種實(shí)施方式中,自中斷指令返回的操作由微代碼實(shí)現(xiàn)。流程接著進(jìn)入方塊1934。在方塊1934,回應(yīng)前述自中斷指令返回的操作,由于控制權(quán)移轉(zhuǎn)回加密程序,微處理器100修復(fù)標(biāo)志寄存器128,令標(biāo)志寄存器128的E位字段402重回先前方塊1924所儲(chǔ)存的設(shè)定狀態(tài)。流程接著進(jìn)入方塊1938。在方塊1938,由于控制權(quán)移轉(zhuǎn)回加密程序,微處理器100以標(biāo)志寄存器128的E位字段402數(shù)值更新控制寄存器144的E位148,使得提取單元104重新提取并且解密該加密程序的指令數(shù)據(jù)106。流程接著進(jìn)入方塊1942。在方塊1942,微代碼令微處理器100分支至先前方塊1924儲(chǔ)存于堆迭式存儲(chǔ)器中的指令指標(biāo)數(shù)值,使得微處理器100中所有x86指令清空、且使得微處理器100中所有微操作清空。所清空內(nèi)容包括提取自指令高速緩沖存儲(chǔ)器102、緩沖暫存在提取單元104以及解碼單元108中等待被解密、解碼的所有指令字節(jié)106。流程接著進(jìn)入方塊1944。在方塊1944,提取單元104重新開始提取該加密程序內(nèi)的指令106,并且參考圖1至圖3所揭示技術(shù)以解密模式解密并且執(zhí)行。流程結(jié)束于方塊1944?,F(xiàn)在,參考圖20,一流程圖圖解根據(jù)本發(fā)明技術(shù)實(shí)現(xiàn)的一系統(tǒng)軟件的操作,由圖1的微處理器100執(zhí)行。圖20流程可結(jié)合圖19內(nèi)容執(zhí)行。流程始于方塊2002。在方塊2002,系統(tǒng)軟件收到一要求,欲執(zhí)行一個(gè)新的加密程序。流程接著進(jìn)入決策方塊2004。在決策方塊2004,系統(tǒng)軟件判斷此一加密程序是否為系統(tǒng)已在執(zhí)行的程序之一。在一種實(shí)施方式中,系統(tǒng)軟件以一標(biāo)志標(biāo)示一加密程序是否為系統(tǒng)中已在執(zhí)行的程序之一。若此加密程序是系統(tǒng)已在執(zhí)行的程序之一,流程進(jìn)入方塊2006,反之,則流程進(jìn)入方塊2008。在方塊2006,系統(tǒng)軟件等待該加密程序執(zhí)行完畢且不再是系統(tǒng)執(zhí)行中的程序之一。流程接著進(jìn)入方塊2008。在方塊2008,微處理器100允許新的加密程序開始執(zhí)行。流程結(jié)束于方塊2008?,F(xiàn)在,參考圖21,一方塊圖根據(jù)本發(fā)明技術(shù)另外一種實(shí)施方式,圖解圖1標(biāo)志寄存器128的字段。圖21的標(biāo)志寄存器128類似圖4所示實(shí)施方式,相比的,還包括索引字段(indexbits)2104。根據(jù)一種實(shí)施方式,包括索引字段2104類似E位402通常是x86架構(gòu)所預(yù)留的位。索引字段2104用于應(yīng)付多個(gè)加密程序的切換,以下詳細(xì)討論。較佳實(shí)施方式是,密鑰切換指令600以及分支與切換密鑰指令900/1200以本身的密鑰寄存器索引字段604/904/1304更新標(biāo)志寄存器128的索引字段2104?,F(xiàn)在,參考圖22,一流程圖圖解圖1微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)采用圖21所示的標(biāo)志寄存器128實(shí)行多個(gè)加密程序之間的任務(wù)切換。流程接著進(jìn)入方塊2202。在方塊2202,一要求發(fā)向該系統(tǒng)軟件,要執(zhí)行一個(gè)新的加密程序。流程接著進(jìn)入決策方塊2204。在決策方塊2204,系統(tǒng)軟件判斷密鑰寄存器文檔124中是否有空間應(yīng)付一個(gè)新的加密程序。在一種實(shí)施方式中,方塊2202所產(chǎn)生的該要求會(huì)指出需要密鑰寄存器文檔124內(nèi)多少空間。若密鑰寄存器文檔124中有空間應(yīng)付新的加密程序,流程進(jìn)入方塊2208,反之,流程進(jìn)入方塊2206。在方塊2206,系統(tǒng)軟件等待一個(gè)或多個(gè)加密程序完成、使密鑰寄存器文檔124騰出空間應(yīng)付新的加密程序。流程接著進(jìn)入方塊2208。在方塊2208,系統(tǒng)軟件將密鑰寄存器文檔124內(nèi)的空間配置給新的加密程序,并且隨之填寫標(biāo)志寄存器128中的索引字段2104,以標(biāo)示密鑰寄存器文檔124中新配置的空間。流程接著進(jìn)入方塊2212。在方塊2212,系統(tǒng)軟件在方塊2208所配置的密鑰寄存器文檔124位置載入供新程序使用的密鑰數(shù)值。如以上討論,所載入的密鑰數(shù)值可采用密鑰下載指令500自安全存儲(chǔ)區(qū)122載入,或者,在必要情況下,可以安全管道由微處理器100外部位置取得。流程接著進(jìn)入方塊2214。在方塊2214,系統(tǒng)軟件基于密鑰寄存器文檔索引字段604/904/1304將密鑰自密鑰寄存器文檔124載入主密鑰寄存器142。在一種實(shí)施方式中,系統(tǒng)軟件執(zhí)行一密鑰切換指令600載入密鑰至主密鑰寄存器142。流程接著進(jìn)入方塊2216。在方塊2216,由于控制權(quán)移轉(zhuǎn)至加密程序,微處理器100設(shè)定標(biāo)志寄存器128的E位字段402以標(biāo)示目前執(zhí)行的程序?yàn)榧用苄褪?,并且設(shè)定控制寄存器144的E位148以設(shè)定提取單元104為解密模式。流程結(jié)束于方塊2216。現(xiàn)在,參考圖23,一流程圖圖解圖1微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)采用圖21所示的標(biāo)志寄存器128應(yīng)付多個(gè)加密程序之間的任務(wù)切換。流程始于方塊2302。在方塊2302,目前執(zhí)行的程序執(zhí)行一返回操作,自一中斷指令返回,引發(fā)一任務(wù)切換至新程序;所述新程序先前曾被執(zhí)行過但被跳開,且其結(jié)構(gòu)狀態(tài)(例如,標(biāo)志寄存器128、指令指標(biāo)寄存器、以及通用寄存器)曾被儲(chǔ)存在堆迭式存儲(chǔ)器中。如先前所提過,在一種實(shí)施方式中,自中斷指令返回的操作是由微代碼實(shí)現(xiàn)。現(xiàn)在執(zhí)行中的程序以及新的程序可為加密程序或純文字程序。流程進(jìn)入方塊2304。在方塊2304,微處理器100根據(jù)堆迭式存儲(chǔ)器修復(fù)標(biāo)志寄存器128,以應(yīng)付接續(xù)返回的程序。也就是說,微處理器100將接續(xù)程序(即目前跳換回的程序)先前跳換出去時(shí)儲(chǔ)存于堆迭式存儲(chǔ)器的標(biāo)志寄存器128數(shù)值重新載入標(biāo)志寄存器128。流程接著進(jìn)入決策方塊2306。在決策方塊2306,微處理器100判斷修復(fù)后的標(biāo)志寄存器128的E位402是否為設(shè)定狀態(tài)。若是,則流程進(jìn)入方塊2308;反之,則流程進(jìn)入方塊2312。在方塊2308,微處理器100根據(jù)方塊2304所修復(fù)的EFLAGS寄存器128索引字段2104數(shù)值將密鑰載入密鑰寄存器文檔124。流程接著進(jìn)入方塊2312。在方塊2312,微處理器100將控制寄存器144的E位148的內(nèi)容以方塊2304所修復(fù)的標(biāo)志寄存器128的E位字段402數(shù)值更新。因此,若接續(xù)的程序是一個(gè)加密程序,提取單元104會(huì)被設(shè)定為解密模式,反之,則設(shè)定為純文字模式。流程接著進(jìn)入方塊2314。在方塊2314,微處理器100以堆迭式存儲(chǔ)器的內(nèi)容修復(fù)指令指標(biāo)寄存器、并且分支跳躍至指令指標(biāo)所指的位置,所述動(dòng)作將清除微處理器100所有x86指令,并且清除微處理器所有微操作。所清除的包括自指令高速緩沖存儲(chǔ)器102所提取出、緩沖暫存于提取單元104、解碼單元108中等待解密、解碼的所有指令字節(jié)106。流程接著進(jìn)入方塊2316。在方塊2316,提取單元104參考圖1至圖3技術(shù)重新開始自接續(xù)程序中提取指令106,并視方塊2312所修復(fù)的控制寄存器144的E位148數(shù)值以解密模式或純文字模式操作。流程結(jié)束于方塊2316?,F(xiàn)在,參考圖24,一方塊圖根據(jù)本發(fā)明、圖解圖1密鑰寄存器文檔124的單一個(gè)寄存器的另外一種實(shí)施方式。根據(jù)圖24所示的實(shí)施方式,每個(gè)密鑰寄存器文檔124還包括一位─為淘汰位2402(killbit,以下簡稱K位)。K位2402用于應(yīng)付微處理器100對(duì)多個(gè)加密程序的多任務(wù)(multitasking)操作,所述多個(gè)加密程序總計(jì)需要多于密鑰寄存器文檔124空間尺寸的密鑰儲(chǔ)存空間,以下將詳述之。現(xiàn)在,參考圖25,一流程圖圖解圖1微處理器100的操作,其中根據(jù)本發(fā)明技術(shù)以圖21的標(biāo)志寄存器128以及圖24的密鑰寄存器文檔124實(shí)現(xiàn)多個(gè)加密程序之間的任務(wù)切換的另外一種實(shí)施方式。圖25所示流程類似圖22所示流程。不同處在于決策方塊2204判定密鑰寄存器文檔124中沒有足夠可用空間時(shí),圖25流程會(huì)進(jìn)入方塊2506而非不存在于圖25的方塊2204。另外,若決策方塊2204判定密鑰寄存器文檔124中尚有足夠可用空間,則圖25流程同樣進(jìn)入圖22的方塊2208至方塊2216。在方塊2506,系統(tǒng)軟件將密鑰寄存器文檔124中已經(jīng)被其他加密程序使用(即已經(jīng)被配置)的空間(即寄存器)配置出來,并且設(shè)定所配置寄存器的K位2402為設(shè)定狀態(tài),并且隨之設(shè)定標(biāo)志寄存器128的索引字段2104以標(biāo)示新配置空間在密鑰寄存器文檔124中的位置。K位2402的設(shè)定狀態(tài),是標(biāo)示該寄存器中關(guān)于其他加密程序的密鑰值將被方塊2212的操作覆寫為新的加密程序的密鑰值。然而,如以下圖26所敘述,其他加密程序的密鑰值將在其返回程序中由方塊2609重新載入。圖25流程進(jìn)入方塊2506,會(huì)接著導(dǎo)向圖22所示的方塊2212,結(jié)束于方塊2216?,F(xiàn)在,參閱圖26,一流程圖圖解圖1微處理器100的操作,其中根據(jù)本發(fā)明技術(shù)以圖21的標(biāo)志寄存器128以及圖24的密鑰寄存器文檔124實(shí)現(xiàn)多個(gè)加密程序之間的任務(wù)切換的另外一種實(shí)施方式。圖26所示流程類似圖23所示流程。不同處在于,若決策方塊2306判定標(biāo)志寄存器128的E位402為設(shè)定,圖26令流程進(jìn)入決策方塊2607而非方塊2308。在決策方塊2607,微處理器100判斷密鑰寄存器文檔124中,由標(biāo)志寄存器128索引字段2104數(shù)值(于方塊2304中修復(fù))所標(biāo)示的任何寄存器的K位2402是否為設(shè)定狀態(tài)。若是,則流程進(jìn)入方塊2609;若否,則流程進(jìn)入方塊2308。在方塊2609,微處理器100產(chǎn)生一異常警示(exception)交由一異常處理程序處理。在一種實(shí)施方式中,異常處理程序設(shè)計(jì)于系統(tǒng)軟件中。在一種實(shí)施方式中,異常處理程序是由安全執(zhí)行模式架構(gòu)提供。根據(jù)方塊2304所修復(fù)的標(biāo)志寄存器128索引字段2104數(shù)值,異常處理程序?qū)⒛壳靶迯?fù)的加密程序(即現(xiàn)在所返回執(zhí)行的加密程序)的密鑰重新載入密鑰寄存器文檔124。異常處理程序可類似先前圖19所提及的方塊1908作動(dòng),將修復(fù)的加密程序的密鑰載入密鑰寄存器文檔124,或者,在必要情況下,自微處理器100外部將密鑰載入安全存儲(chǔ)區(qū)122。同樣地,若密鑰寄存器文檔124中被重新載入的寄存器有被其他加密程序使用,系統(tǒng)軟件會(huì)令其寄存器的K位2402為設(shè)定狀態(tài)。流程接著自方塊2609進(jìn)入2308,且方塊2308至2316是參考圖23內(nèi)容。如圖24至圖26所教示,此處所敘述的實(shí)施方式令微處理器100得以實(shí)行多個(gè)加密程序的多任務(wù)操作,即便上述加密程序需要密鑰暫存空間總合多于密鑰寄存器124空間尺寸?,F(xiàn)在,參考圖27,一方塊圖圖解修改自圖1微處理器100的本發(fā)明另外一種實(shí)施方式。與圖1類似的元件是采用同樣標(biāo)號(hào);例如,指令高速緩沖存儲(chǔ)器102、提取單元104以及密鑰寄存器文檔124。然而,此處提取單元104被修正成還包括密鑰切換邏輯2712,耦接圖1所介紹的主密鑰寄存器文檔142以及密鑰寄存器文檔124。圖27的微處理器100還包括一分支目標(biāo)地址高速緩沖存儲(chǔ)器(branchtargetaddresscache,BTAC)2702。BTAC2702接收?qǐng)D1所揭示的提取地址134,且與指令高速緩沖存儲(chǔ)器102的存取平行,皆是基于該提取地址134。根據(jù)提取地址134,BTAC2702供應(yīng)分支目標(biāo)地址2706給圖1所揭示的提取地址產(chǎn)生器164,供應(yīng)一采用/不采用指標(biāo)(T/NTindicator)2708以及一型式指標(biāo)(typeindicator)2714給密鑰切換邏輯2712,并且供應(yīng)一密鑰寄存器文檔(KRF)索引2716給密鑰寄存器文檔124。現(xiàn)在,參閱圖28,一方塊圖根據(jù)本發(fā)明技術(shù)更詳細(xì)圖解圖27的BTAC2702。BTAC2702包括一BTAC矩陣2802,其中具有多個(gè)BTAC單元2808,圖29圖解BTAC單元2808的內(nèi)容。BTAC2802儲(chǔ)存的信息包括先前執(zhí)行過的分支指令的歷史信息,以預(yù)測(cè)接續(xù)執(zhí)行的分支指令的方向以及目標(biāo)地址。特別是,BTAC2802會(huì)采用儲(chǔ)存的歷史信息,基于提取的地址134預(yù)測(cè)先前執(zhí)行過的分支指令后續(xù)發(fā)生的提取操作。分支目標(biāo)地址高速緩沖的操作可參考常見的分支預(yù)測(cè)技術(shù)。然而,本發(fā)明所揭示的BTAC2802是更修正成記錄先前執(zhí)行過的分支與切換密鑰指令900/1200的歷史信息,以進(jìn)行相關(guān)的預(yù)測(cè)操作。特別是,儲(chǔ)存的歷史記錄使得BTAC2802得以在提取時(shí)間內(nèi)預(yù)測(cè)所提取的分支與切換密鑰指令900/1200將載入主密鑰寄存器142的該組數(shù)值。此操作致能密鑰切換邏輯2712在分支與切換密鑰指令900/1200實(shí)際執(zhí)行前將密鑰數(shù)值載入,避免受限于需根據(jù)分支與切換密鑰指令900/1200的執(zhí)行清空微處理器100的管線內(nèi)容,以下將詳細(xì)討論。此外,根據(jù)一種實(shí)施方式,BTAC2802更被修正成儲(chǔ)存包括先前執(zhí)行過的密鑰切換指令600的歷史信息,以達(dá)到相同的效果。現(xiàn)在,參閱圖29,一方塊圖根據(jù)本發(fā)明技術(shù)更詳細(xì)圖解圖28BTAC單元2808的內(nèi)容。每個(gè)單元2808包括一有效位2902指示所屬單元2808是否為有效。每個(gè)單元2808還包括一標(biāo)記字段2904,用以與提取地址134的部分內(nèi)容比較。若提取地址134的索引部分選擇的單元2808使得提取地址134的標(biāo)記部分吻合其中有效標(biāo)記2904,則提取地址134正中BTAC2802。每個(gè)陣列單元2808還包括一目標(biāo)地址字段2906,用于儲(chǔ)存先前執(zhí)行過的分支指令─包括分支與切換密鑰指令900/1200─的目標(biāo)地址。每個(gè)陣列單元2808還包括一采用/不采用字段2908,用以儲(chǔ)存先前執(zhí)行過的分支指令─包括分支與切換密鑰指令900/1200─的方向(采用/不采用)記錄。每個(gè)陣列單元2808還包括一密鑰寄存器索引字段2912,用于儲(chǔ)存先前執(zhí)行過的分支與切換密鑰指令900/1200的密鑰寄存器文檔索引904/1304記錄,以下將詳細(xì)討論。根據(jù)一種實(shí)施方式,BTAC2802是在其密鑰寄存器文檔索引字段2912儲(chǔ)存先前執(zhí)行過的密鑰切換指令600的密鑰寄存器文檔索引604記錄。每個(gè)陣列單元2808還包括一型式字段2914,指示所記錄的指令的型式。例如,型式字段2914可標(biāo)示所記錄的歷史指令為一呼叫(call)、返回(return)、條件跳躍(conditionaljump)、無條件跳躍(unconditionaljump)、分支與切換密鑰指令900/1200、或密鑰切換指令600?,F(xiàn)在,參閱圖30,一流程圖圖解圖27微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù),所述微處理器100包括圖28揭示的BTAC2802。流程始于方塊3002。在方塊3002,微處理器100執(zhí)行一分支與切換密鑰指令900/1200,以下將以圖32詳述。流程接著進(jìn)入方塊3004。在方塊3004,微處理器100在BTAC2802中配置一陣列單元2808給執(zhí)行過的分支與切換密鑰指令900/1200,將該分支與切換密鑰指令900/1200解出的方向、目標(biāo)地址、密鑰寄存器文檔索引904/1304、以及指令型式分別記錄于所配置的該陣列單元2808的采用/不采用字段2908、目標(biāo)地址字段2906、密鑰寄存器文檔索引字段2912、以及型式字段2914中,以作為該分支與切換密鑰指令900/1200的歷史信息。流程結(jié)束于方塊3004?,F(xiàn)在,參閱圖31,一流程圖圖解圖27微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù),所述微處理器100包括圖28揭示的BTAC2802。流程始于方塊3102。在方塊3102,提取地址134供應(yīng)給指令高速緩沖存儲(chǔ)器102以及BTCA2802。流程接著進(jìn)入方塊3104。在方塊3104,提取地址134正中BTAC2802,且BTAC2802將對(duì)應(yīng)的陣列單元2808的目標(biāo)地址2906、采用/不采用2908、密鑰寄存器文檔索引2912以及型式2914字段的內(nèi)容分別以目標(biāo)地址2706、采用/不采用指標(biāo)2708、密鑰寄存器文檔索引2712、以及型式指標(biāo)2714輸出。特別是,型式字段2914用于指示所儲(chǔ)存指令為一分支與切換密鑰指令900/1200。流程接著進(jìn)入決策方塊3106。在決策方塊3106,密鑰切換邏輯2712藉由檢驗(yàn)采用/不采用輸出2708判斷分支與切換密鑰指令900/1200被BTAC2802預(yù)測(cè)為會(huì)采用。若采用/不采用輸出2708顯示分支與切換密鑰指令900/1200被預(yù)測(cè)為采用,流程接著進(jìn)入方塊3112;反之,流程接著進(jìn)入方塊3108。在方塊3108,微處理器100隨著分支與切換密鑰指令900/1200順著輸送一指示,顯示BTAC2802預(yù)測(cè)其不被采用。(此外,若采用/不采用輸出2708顯示該分支與切換密鑰指令被預(yù)測(cè)為采用,微處理器100在方塊3112隨著該分支與切換密鑰指令900/1200順著輸送一指示,顯示BTAC2802預(yù)測(cè)其會(huì)被采用)。流程結(jié)束于3108在方塊3112,提取地址產(chǎn)生器164以BTAC2802于方塊3104所預(yù)測(cè)的目標(biāo)地址2706更新提取地址134。流程接著進(jìn)入方塊3114。在方塊3114,根據(jù)BTAC2802于方塊3104所預(yù)測(cè)的密鑰寄存器文檔索引2712,密鑰切換邏輯2712以其所指示的密鑰寄存器文檔124位置更新主密鑰寄存器142內(nèi)的密鑰數(shù)值。在一種實(shí)施方式中,必要狀況下,密鑰切換邏輯2712會(huì)拖延提取單元104提取指令數(shù)據(jù)106內(nèi)的區(qū)塊,直至主密鑰寄存器142被更新。流程接著進(jìn)入方塊3116。在方塊3116,提取單元104利用方塊3114所載入的新主密鑰寄存器142內(nèi)容持續(xù)提取并且解密指令數(shù)據(jù)106。流程結(jié)束于方塊3116。現(xiàn)在,參閱圖32,一流程圖圖解圖27微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù),執(zhí)行一分支與切換密鑰指令900/1200。圖32流程在某一方面類似圖10流程,且類似的方塊是采以同樣標(biāo)號(hào)。雖然圖32的討論是參照?qǐng)D10內(nèi)容,其應(yīng)用可更考慮圖14所介紹的分支與切換密鑰指令1200操作。圖32流程始于方塊1002。在方塊1002,解碼單元108解碼一分支與切換密鑰指令900/1200,且將之代入微代碼單元132實(shí)現(xiàn)分支與切換密鑰指令900/1200的微代碼程序。流程接著進(jìn)入方塊1006。在方塊1006,微代碼解出分支方向(即采用/不采用)以及目標(biāo)地址。流程接著進(jìn)入方塊3208。在方塊3208,微代碼判斷BTAC2802是否為該分支與切換密鑰指令900/1200提供一預(yù)測(cè)。若有提供,流程接著進(jìn)入決策方塊3214;若無提供,流程接著進(jìn)入圖10的方塊1008。在決策方塊3214,微代碼藉由將BTAC2802輸送出的采用/不采用指標(biāo)2708以及目標(biāo)地址2706與方塊1006所解出的方向以及目標(biāo)地址判斷BTAC2802所做的預(yù)測(cè)是否正確。若BTAC2802的預(yù)測(cè)正確,則流程結(jié)束;反之,則流程來到?jīng)Q策方塊3216。在決策方塊3216,微代碼判斷此不正確的BTAC2802預(yù)測(cè)有沒有被采用。若已被采用,流程進(jìn)入方塊3222;若無,流程進(jìn)入圖10的方塊1014。在方塊3222,微代碼修復(fù)主密鑰寄存器142的內(nèi)容,因?yàn)锽TAC2802對(duì)分支與切換密鑰指令900/1200所做的錯(cuò)誤預(yù)測(cè)被采用,導(dǎo)致圖31方塊3104將錯(cuò)誤的密鑰數(shù)值載入其中。在一種實(shí)施方式中,密鑰切換邏輯2712包括修復(fù)主密鑰寄存器142所需的儲(chǔ)存元件與邏輯。在一種實(shí)施方式中,微代碼產(chǎn)生一異常警示交由一異常處理器修復(fù)主密鑰寄存器142。此外,微代碼使得微處理器100分支跳躍到該分支與切換密鑰指令900/1200之后接續(xù)的x86指令,使得微處理器100中新于該分支與切換密鑰指令900/1200的所有x86指令清空,并且使微處理器100中較分支至目標(biāo)地址的微代碼新的所有微代碼清空。被清空的內(nèi)容包括讀取自指令高速緩沖存儲(chǔ)器102、且緩沖暫存于提取單元104、解碼單元108中等待被解碼的所有指令字節(jié)106。隨著分支至接續(xù)的指令,提取單元104開始使用主密鑰寄存器142內(nèi)的該組修復(fù)后的密鑰數(shù)值自指令高速緩沖存儲(chǔ)器102提取并且解密指令數(shù)據(jù)106。流程結(jié)束于方塊3222。除了以上所述、由微處理器100實(shí)現(xiàn)的指令解密實(shí)施方式所帶來的安全優(yōu)勢(shì),發(fā)明人更發(fā)展出建議編碼指南,其使用可結(jié)合以上實(shí)施方式,削弱藉由分析x86指令實(shí)際使用量、對(duì)加密x86碼以統(tǒng)計(jì)技巧發(fā)展出的黑客攻擊。第一,由于黑客通常假設(shè)所提取的16字節(jié)的指令數(shù)據(jù)106全數(shù)為x86指令,因此,相對(duì)于程序執(zhí)行流程,編碼時(shí)應(yīng)當(dāng)在16字節(jié)區(qū)塊之間加入「洞(holes)」。也就是說,其編碼應(yīng)當(dāng)以多個(gè)指令跳躍一些指令字節(jié),以未加密的字節(jié)產(chǎn)生多個(gè)「洞」,其中可填入適當(dāng)?shù)臄?shù)值,以增加純文字字節(jié)的熵值(entropy)。此外,倘若能更提升純文字字節(jié)的熵值,其編碼可盡可能采用即時(shí)數(shù)據(jù)值。此外,所述即時(shí)數(shù)據(jù)值可作為假線索,指向錯(cuò)誤的指令操作碼地址。第二,所述編碼可包括特別的NOP指令,其中包括“不理會(huì)”字段,填有適當(dāng)數(shù)值以增加上述熵值。例如,x86指令0x0F0D05xxxxxxxx屬于7字節(jié)的NOP,其中最后四個(gè)字節(jié)可為任意值。此外,NOP指令的操作碼型式以及其「不理會(huì)」字節(jié)的數(shù)量更可有其他變化。第三,許多x86指令具有與其他x86指令相同的基本功能。關(guān)于等效功能的指令,其編碼可舍棄重復(fù)使用同樣的指令,改采用多重型式和/或采用使純文字熵值提升的型式。例如,指令0xC10107以及指令0xC10025作的是同樣的事情。甚至,某些等效指令是以不同長度的版本呈現(xiàn),例如,0xEB22以及0xE90022;因此,編碼時(shí)可采用多種長度但相同效果的指令。第四,x86架構(gòu)允許使用冗余且無意義的操作碼字首(opcodepredix),因此,編碼時(shí)可小心應(yīng)用,以更增加上述熵值。例如,指令0x40以及0x2627646567F2F340作的是完全一樣的事情。因?yàn)槠渲袃H有8個(gè)安全的x86字首,他們需被小心地安插在編碼中,以避免過度頻繁地出現(xiàn)。雖然已經(jīng)列舉多種實(shí)施例以密鑰擴(kuò)展器對(duì)主密鑰寄存器數(shù)值中的一對(duì)數(shù)值進(jìn)行旋轉(zhuǎn)以及加/減運(yùn)算,尚有其他實(shí)施方式可考慮使用,其中,密鑰擴(kuò)展器可對(duì)多于兩個(gè)的主密鑰寄存器數(shù)值進(jìn)行運(yùn)算,此外,所進(jìn)行的運(yùn)算可不同于旋轉(zhuǎn)以及加/減運(yùn)算。此外,圖6揭示的密鑰切換指令600以及圖9揭示的分支與切換密鑰指令900還可有其他實(shí)施方式,例如,將新的密鑰數(shù)值由安全存儲(chǔ)區(qū)122載入主密鑰寄存器142而非由密鑰寄存器文檔124載入,并且,圖15所介紹的分支與切換密鑰指令1500的其他實(shí)施方式是以索引字段2104儲(chǔ)存安全存儲(chǔ)區(qū)122的地址。此外,雖然已列舉多種實(shí)施例調(diào)整BTAC2702儲(chǔ)存KRF索引結(jié)合分支與切換密鑰指令900/1200使用,尚有其他實(shí)施方式是調(diào)整BTAC2702儲(chǔ)存安全存儲(chǔ)區(qū)地址,以結(jié)合分支與切換密鑰指令1500使用。以上列舉的本發(fā)明諸多實(shí)施方式僅是作為說明例使用,并非意圖限制發(fā)明范圍。相關(guān)計(jì)算機(jī)技術(shù)領(lǐng)域的技術(shù)人員可在不偏離本發(fā)明范圍的前提下作出形式以及細(xì)節(jié)的諸多變形。例如,可以軟件方式實(shí)現(xiàn)所述如函數(shù)、制作、模組化、模擬、說明、和/或測(cè)試此篇所討論的設(shè)備與方法的方式。實(shí)現(xiàn)方式包括一般程序語言(例如,C、C++)、硬件描述語言包括VerilogHDL、VHDL…等、或其他可用的程序工具。所述軟件可載于任何已知的計(jì)算機(jī)可讀媒體,例如,磁帶、半導(dǎo)體、磁盤、或光盤(例如,CD-ROM、DVD-ROM等)、網(wǎng)路、有線傳輸、無線或其他通訊媒體。所述設(shè)備與方法的實(shí)施方式可包含于半導(dǎo)體知識(shí)產(chǎn)權(quán)核心,例如一微處理器核心(例如以HDL實(shí)現(xiàn)),并可轉(zhuǎn)成硬件以集成電路實(shí)現(xiàn)。此外,所述的設(shè)備與方法可由軟、硬件結(jié)合方式實(shí)現(xiàn)。因此,本發(fā)明范圍不應(yīng)限定于所述任何實(shí)施方式,應(yīng)當(dāng)是以本發(fā)明的權(quán)利要求以及其等效技術(shù)界定。特別是,本發(fā)明技術(shù)可以一般用途計(jì)算機(jī)所采用的微處理器實(shí)現(xiàn)。值得注意的是,本領(lǐng)域技術(shù)人員可能不偏離權(quán)利要求所定義的發(fā)明范圍、以所揭示的概念以及特殊實(shí)施例為基礎(chǔ)、設(shè)計(jì)或修正提出其他架構(gòu)產(chǎn)生與本發(fā)明相同的效果。