微處理器以及相關(guān)的操作方法、以及加密方法
【專利摘要】本發(fā)明涉及微處理器以及相關(guān)的加密方法。該加密方法用于加密一程序,以供用于解密與執(zhí)行加密程序的一微處理器日后執(zhí)行。該加密方法包括:接收關(guān)于一非加密程序的一目的文件,該非加密程序包括傳統(tǒng)分支指令,上述傳統(tǒng)分支指令的目標(biāo)地址在該微處理器執(zhí)行該程序之前被判定;分析該程序以獲得塊信息,上述塊信息將該程序劃分成一序列多個(gè)塊。其中各個(gè)上述塊包括一序列多個(gè)指令,其中上述塊信息還包括上述各個(gè)塊的加密密鑰數(shù)據(jù),其中各塊的加密密鑰數(shù)據(jù)并不相同。將上述傳統(tǒng)分支指令中目標(biāo)地址不與本身位于同一塊者各自以一分支與切換密鑰指令取代;以及基于上述塊信息加密該程序。
【專利說明】
微處理器以及相關(guān)的操作方法、以及加密方法
[0001 ] 本申請為申請日為2011年5月25日、申請?zhí)枮?01310681951.5的發(fā)明名稱為"微處 理器以及相關(guān)的操作方法、以及加密方法"的申請案(其中該申請案的原申請的申請日和申 請?zhí)柗謩e為2011年5月25日和201110136447.8)的分案申請。
技術(shù)領(lǐng)域
[0002] 本發(fā)明涉及微處理器(microprocessor)領(lǐng)域,特別是涉及用于增加微處理器所執(zhí) 行的程序的安全性。
【背景技術(shù)】
[0003] 很多軟件程序在面臨破壞計(jì)算機(jī)系統(tǒng)安全的攻擊時(shí),通常是脆弱不堪的。例如,黑 客可藉由攻擊一運(yùn)行中程序的緩沖溢位區(qū)漏洞(buffer overflow vulnerability)植入不 當(dāng)程序碼、并轉(zhuǎn)移主控權(quán)給該不當(dāng)程序碼。如此一來,所植入的程序碼將主導(dǎo)被攻擊的程 序。一種防范軟件程序遭攻擊的方案為指令集隨機(jī)化(instruction set randomization)。 概略解釋之,指令集隨機(jī)化技術(shù)會(huì)先將程序加密(encrypt)為某些形式,再于處理器將該程 序自存儲器提取后,于該處理器內(nèi)解密(decrypt)該程序。如此一來,黑客便不易植入惡意 指令,因?yàn)樗踩氲闹噶畋仨毐贿m當(dāng)?shù)丶用?例如,使用與所攻擊程序相同的加密密鑰或演 算法)方會(huì)被正確地執(zhí)行。例如,參閱文件「Counter Code-Injection Attacks with Instruction-Set Randomization,by Gaurav S.Kc,Angelos D.Keromytis,and Vassilis Prevelakis,CCS'03,0ctober 27-30,2003'Washington,DC,USA,ACM 1-58113-738-9/03/ 0010」,其中敘述Bochs-x86Pentium模擬器(emulator)的改良版本。相關(guān)技術(shù)的缺點(diǎn)已被廣 泛討論。例如,參閱數(shù)據(jù)「Where's the FEEB?The Effectiveness of Instruction Set Randomization,by Ana Nora Sovarel,David Evans,and Nathanael Paul,http:// www.cs.virginia.edu/feebj〇
【發(fā)明內(nèi)容】
[0004] 本發(fā)明一種實(shí)施方式揭示一微處理器。該微處理器包括一指令高速緩沖存儲器、 一指令解碼單元、以及一提取單元。該提取單元用于:(a)自該指令高速緩沖存儲器提取一 區(qū)塊的指令數(shù)據(jù);(b)以一數(shù)據(jù)實(shí)體對該區(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í)間在該第一狀況下以及該第二狀況下是相同的。
[0005] 本發(fā)明另外一種實(shí)施方式揭示一方法,用以操作具有一指令高速緩沖存儲器的一 微處理器。該方法包括:(a)自該指令高速緩沖存儲器提取一區(qū)塊的指令數(shù)據(jù);(b)以一數(shù)據(jù) 實(shí)體對該區(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í)間在該 第一狀況下以及該第二狀況下是相同的。
[0006] 本發(fā)明一種實(shí)施方式提供一微處理器。該微處理器包括一指令高速緩沖存儲器以 及一提取單元。該提取單元會(huì)自該指令高速緩沖存儲器一序列多個(gè)提取地址提取一加密程 序一序列多個(gè)區(qū)塊的加密指令。在提取該序列各個(gè)區(qū)塊時(shí),提取單元更以多個(gè)密鑰數(shù)值以 及所提取該區(qū)塊的提取地址的部份內(nèi)容為一函數(shù),生成解密密鑰。針對提取出的該序列各 個(gè)區(qū)塊,提取單元還采用對應(yīng)的解密密鑰解密其中加密指令。該微處理器還包括一密鑰切 換指令,在該提取單元自該指令高速緩沖存儲器提取該序列上述多個(gè)區(qū)塊時(shí),指示該微處 理器更新該提取單元內(nèi)的這些密鑰數(shù)值。
[0007] 本發(fā)明另外一種實(shí)施方式揭示一種方法,操作具有一指令高速緩沖存儲器的一微 處理器。該方法包括自該指令高速緩沖存儲器提取一程序多個(gè)第一加密指令,且將之以一 第一解密密鑰解密為多個(gè)第一非加密指令。該方法還包括將該第一解密密鑰以一第二解密 密鑰取代,回應(yīng)這些第一非加密指令中的一密鑰切換指令。該方法還包括自該指令高速緩 沖存儲器提取該程序的多個(gè)第二加密指令,且將之以該第二解密密鑰解密為多個(gè)第二非加 密指令。
[0008] 本發(fā)明另外一種實(shí)施方式揭示一種方法,用于操作一微處理器。該方法包括自一 指令高速緩沖存儲器一序列多個(gè)提取地址提取一加密程序一序列多個(gè)區(qū)塊的加密指令。該 方法還包括在提取該序列各個(gè)區(qū)塊時(shí),以多個(gè)密鑰數(shù)值以及所提取該區(qū)塊的提取地址的部 份內(nèi)容為一函數(shù)生成解密密鑰。該方法還包括針對該序列內(nèi)各區(qū)塊,使用對應(yīng)的上述解密 密鑰解密其中的加密指令。該方法還包括在提取該序列上述多個(gè)區(qū)塊時(shí),執(zhí)行一密鑰切換 指令。執(zhí)行上述密鑰切換指令包括更新用于生成上述解密密鑰的這些密鑰數(shù)值。
[0009] 本發(fā)明一種實(shí)施方式揭示一種微處理器。該微處理器包括一提取單元,使用第一 解密密鑰數(shù)據(jù)提取并且解密一分支與切換密鑰指令。該微處理器還包括微代碼。上述微代 碼在該分支與切換密鑰指令的方向不被采用的狀況下,令該提取單元采用上述第一解密密 鑰數(shù)據(jù)提取并且解密該分支與切換密鑰指令之后的接續(xù)指令。該微代碼還在該分支與切換 密鑰指令被采用的狀況下,令該提取單元采用不同于上述第一解密密鑰數(shù)據(jù)的第二解密密 鑰數(shù)據(jù)提取并且解密該分支與切換密鑰指令的一目標(biāo)指令。
[0010] 本發(fā)明另外一種實(shí)施方式揭示一方法,以一微處理器處理一加密程序。該方法包 括使用第一解密密鑰數(shù)據(jù)提取并且解密一分支與切換密鑰指令。此方法還包括,在該分支 與切換密鑰指令的方向不被采取的狀況下,以上述第一解密密鑰數(shù)據(jù)提取并且解密該分支 與切換密鑰指令之后的接續(xù)指令。該方法還包括,在該分支與切換密鑰指令的方向被采取 的狀況下,以不同于上述第一解密密鑰數(shù)據(jù)的第二解密密鑰數(shù)據(jù)提取并且解密該分支與切 換密鑰指令的一目標(biāo)指令。
[0011] 本發(fā)明另外一種實(shí)施方式亦揭示一方法,用于加密一程序,以供用于解密與執(zhí)行 加密程序的一微處理器日后執(zhí)行。該方法包括接收一非加密程序的一目的文件,其中包括 傳統(tǒng)分支指令,所指示的目標(biāo)地址可于該微處理器執(zhí)行該程序前判定。該方法還包括分析 該程序以獲得塊信息。上述塊信息將該程序劃分成一序列多個(gè)塊。各塊包括一序列多個(gè)指 令。上述塊信息還包括各塊相關(guān)的加密密鑰數(shù)據(jù)。各塊對應(yīng)的加密密鑰數(shù)據(jù)不相同。該方法 還包括將上述傳統(tǒng)分支指令中目標(biāo)地址與自身坐落不同塊者各自以一分支與切換密鑰指 令取代。該方法還包括基于上述塊信息加密該程序。
[0012] 本發(fā)明另外一種實(shí)施方式亦揭示一方法,用于加密一程序,以供用于解密與執(zhí)行 加密程序的一微處理器日后執(zhí)行。該方法包括接收一非加密程序的一目的文件,其中包括 傳統(tǒng)分支指令,所指示的目標(biāo)地址僅能在該微處理器執(zhí)行該程序時(shí)判定。該方法還包括分 析該程序以獲得塊信息。上述塊信息將該程序劃分成一序列多個(gè)塊。各塊包括一序列多個(gè) 指令。上述塊信息還包括各塊相關(guān)的加密密鑰數(shù)據(jù)。各塊對應(yīng)的加密密鑰數(shù)據(jù)不相同。該方 法還包括將上述傳統(tǒng)分支指令各自以一分支與切換密鑰指令取代。該方法還包括基于上述 塊信息,加密該程序。
[0013] 本發(fā)明另外一種實(shí)施方式亦揭示一種微處理器。該微處理器包括:一存儲元件,用 于存儲解密密鑰數(shù)據(jù);指令集,其包括一分支與切換密鑰指令;和一提取單元,采用存儲在 該存儲元件中的解密密鑰數(shù)據(jù)的一組值提取并且解密程序指令。其中該提取單元采用存儲 在該存儲元件中的解密密鑰數(shù)據(jù)的第一組值提取該分支與切換密鑰指令的實(shí)例并且將其 解密。其中如果該分支與切換密鑰指令的實(shí)例被決定為采用,則該微處理器用于對該存儲 元件載入解密密鑰數(shù)據(jù)的第二組值供該提取單元后續(xù)使用,以解密在由該分支與切換密鑰 指令標(biāo)示的一目標(biāo)地址處提取的指令,其中該解密密鑰數(shù)據(jù)的第二組值不同于該解密密鑰 數(shù)據(jù)的第一組值。其中,如果該分支與切換密鑰指令的實(shí)例被決定為不采用,則該微處理器 用于在該存儲元件中維持該解密密鑰數(shù)據(jù)的第一組值供該提取單元后續(xù)使用,以解密順序 上在該分支與切換密鑰指令之后的指令。該提取單元還可以用于:于解密該分支與切換密 鑰指令前,基于存儲在該存儲元件的上述解密密鑰數(shù)據(jù)的第一組值以及用于提取該分支與 切換密鑰指令的一提取地址的部分內(nèi)容,生成一解密密鑰。其中,為了采用上述解密密鑰數(shù) 據(jù)的第一組值解密該分支與切換密鑰指令,該提取單元以所生成的該解密密鑰解密該分支 與切換密鑰指令。其中存儲在該存儲元件中的解密密鑰數(shù)據(jù)包括多個(gè)主密鑰;以及其中,為 了基于存儲在該存儲元件的解密密鑰數(shù)據(jù)以及提取地址的部分內(nèi)容生成該解密密鑰,該提 取單元基于提取地址的第一部分選擇多個(gè)主密鑰的至少兩個(gè),并且對選擇的多個(gè)主密鑰的 至少兩個(gè)執(zhí)行算術(shù)和/或邏輯運(yùn)算以產(chǎn)生該解密密鑰。其中為了利用產(chǎn)生的解密密鑰來解 密該分支與切換密鑰指令,該提取單元配置來利用產(chǎn)生的解密密鑰執(zhí)行該分支與切換密鑰 指令的一布林異運(yùn)算。
[0014] 本發(fā)明另外一種實(shí)施方式亦揭示一種微處理器,包括:一存儲元件,用于存儲解密 密鑰數(shù)據(jù);指令集,其包括一分支與切換密鑰指令;和一提取單元,采用存儲在該存儲元件 中的解密密鑰數(shù)據(jù)的一組值提取并且解密程序指令。其中該提取單元采用存儲在該存儲元 件中的解密密鑰數(shù)據(jù)的第一組值提取該分支與切換密鑰指令的實(shí)例并且將其解密;其中如 果該分支與切換密鑰指令的實(shí)例被決定為采用,則該微處理器用于對該存儲元件載入解密 密鑰數(shù)據(jù)的第二組值供該提取單元后續(xù)使用,以解密在由該分支與切換密鑰指令標(biāo)示的一 目標(biāo)地址處提取的指令,其中該解密密鑰數(shù)據(jù)的第二組值不同于該解密密鑰數(shù)據(jù)的第一組 值。其中,如果該分支與切換密鑰指令的實(shí)例被決定為不采用,則該微處理器用于在該存儲 元件中維持該解密密鑰數(shù)據(jù)的第一組值供該提取單元后續(xù)使用,以解密順序上在該分支與 切換密鑰指令之后的指令。該提取單元還可以用于:于解密該分支與切換密鑰指令前,基于 存儲在該存儲元件的上述解密密鑰數(shù)據(jù)的第一組值以及用于提取該分支與切換密鑰指令 的一提取地址的部分內(nèi)容,生成一解密密鑰。其中,為了采用上述解密密鑰數(shù)據(jù)的第一組值 解密該分支與切換密鑰指令,該提取單元以所生成的該解密密鑰解密該分支與切換密鑰指 令。其中存儲在該存儲元件中的解密密鑰數(shù)據(jù)包括多個(gè)主密鑰;以及其中,為了基于存儲在 該存儲元件的解密密鑰數(shù)據(jù)以及提取地址的部分內(nèi)容生成該解密密鑰,該提取單元基于提 取地址的第一部分選擇多個(gè)主密鑰的至少兩個(gè),并且對選擇的多個(gè)主密鑰的至少兩個(gè)執(zhí)行 算術(shù)和/或邏輯運(yùn)算以產(chǎn)生該解密密鑰。其中由該提取單元對選擇的多個(gè)主密鑰的至少兩 個(gè)執(zhí)行的算術(shù)和/或邏輯運(yùn)算是基于提取地址的第二部分。
[0015] 本發(fā)明另外一種實(shí)施方式亦揭示一種操作方法,以一微處理器處理一加密程序, 該微處理器具有一存儲元件,用于存儲解密密鑰數(shù)據(jù),以及具有指令集,其包括一分支與切 換密鑰指令。該操作方法包括:采用存儲在該存儲元件中的解密密鑰數(shù)據(jù)的第一組值提取 并且解密分支與切換密鑰指令的實(shí)例;若該分支與切換密鑰指令的實(shí)例決定為不被采用, 則在該存儲元件中維持該解密密鑰數(shù)據(jù)的第一組值供后續(xù)使用,以解密在該分支與切換密 鑰指令之后的接續(xù)指令;若該分支與切換密鑰指令的實(shí)例決定為被采用,則對該存儲元件 載入解密密鑰數(shù)據(jù)的第二組值供后續(xù)使用,以解密在該分支與切換密鑰指令的一目標(biāo)地址 處提取的指令,其中該解密密鑰數(shù)據(jù)的第二組值不同于該解密密鑰數(shù)據(jù)的第一組值;在上 述解密該分支與切換密鑰指令之前,根據(jù)上述解密密鑰數(shù)據(jù)的第一組值以及用于提取該分 支與切換密鑰指令的一提取地址的部分內(nèi)容生成一解密密鑰。其中,上述采用解密密鑰數(shù) 據(jù)的第一組值解密該分支與切換密鑰指令包括以所生成的該解密密鑰對該分支與切換密 鑰指令解密。其中存儲在該存儲元件中的解密密鑰數(shù)據(jù)包括多個(gè)主密鑰;以及其中,基于存 儲在該存儲元件的解密密鑰數(shù)據(jù)以及提取地址的部分內(nèi)容生成該解密密鑰包括:基于提取 地址的第一部分選擇多個(gè)主密鑰的至少兩個(gè),并且對選擇的多個(gè)主密鑰的至少兩個(gè)執(zhí)行算 術(shù)和/或邏輯運(yùn)算以產(chǎn)生該解密密鑰。其中利用產(chǎn)生的解密密鑰來解密該分支與切換密鑰 指令包括:利用產(chǎn)生的解密密鑰執(zhí)行該分支與切換密鑰指令的一布林異運(yùn)算。
[0016] 本發(fā)明另外一種實(shí)施方式亦揭示一種操作方法,以一微處理器處理一加密程序, 該微處理器具有一存儲元件,用于存儲解密密鑰數(shù)據(jù),以及具有指令集,其包括一分支與切 換密鑰指令。該操作方法包括:采用存儲在該存儲元件中的解密密鑰數(shù)據(jù)的第一組值提取 并且解密分支與切換密鑰指令的實(shí)例;若該分支與切換密鑰指令的實(shí)例決定為不被采用, 則在該存儲元件中維持該解密密鑰數(shù)據(jù)的第一組值供后續(xù)使用,以解密在該分支與切換密 鑰指令之后的接續(xù)指令;若該分支與切換密鑰指令的實(shí)例決定為被采用,則對該存儲元件 載入解密密鑰數(shù)據(jù)的第二組值供后續(xù)使用,以解密在該分支與切換密鑰指令的一目標(biāo)地址 處提取的指令,其中該解密密鑰數(shù)據(jù)的第二組值不同于該解密密鑰數(shù)據(jù)的第一組值;在上 述解密該分支與切換密鑰指令之前,根據(jù)上述解密密鑰數(shù)據(jù)的第一組值以及用于提取該分 支與切換密鑰指令的一提取地址的部分內(nèi)容生成一解密密鑰。其中,上述采用解密密鑰數(shù) 據(jù)的第一組值解密該分支與切換密鑰指令包括以所生成的該解密密鑰對該分支與切換密 鑰指令解密。其中存儲在該存儲元件中的解密密鑰數(shù)據(jù)包括多個(gè)主密鑰;以及其中,基于存 儲在該存儲元件的解密密鑰數(shù)據(jù)以及提取地址的部分內(nèi)容生成該解密密鑰包括:基于提取 地址的第一部分選擇多個(gè)主密鑰的至少兩個(gè),并且對選擇的多個(gè)主密鑰的至少兩個(gè)執(zhí)行算 術(shù)和/或邏輯運(yùn)算以產(chǎn)生該解密密鑰。其中對選擇的多個(gè)主密鑰的至少兩個(gè)執(zhí)行的算術(shù)和/ 或邏輯運(yùn)算是基于提取地址的第二部分。
[0017] 本發(fā)明一種實(shí)施方式揭不一微處理器。該微處理器包括一架構(gòu)寄存器,該架構(gòu)寄 存器包括一位。該微處理器負(fù)責(zé)設(shè)定該位。該微處理器還包括一提取單元。該提取單元自一 指令高速緩沖存儲器提取加密指令、并在執(zhí)行上述加密指令前將上述加密指令解密,以回 應(yīng)該微處理器將該位設(shè)定的操作。若接收到一中斷,該微處理器儲存該位的數(shù)值至一堆迭 內(nèi)存、并且隨后將該位清除。在微處理器清除該位后,該提取指令是自該指令高速緩沖存儲 器提取非加密指令,并不對上述非加密指令作解密操作即執(zhí)行之。該微處理器還自該堆迭 內(nèi)存將先前儲存的數(shù)值用來修復(fù)該架構(gòu)寄存器的該位,以回應(yīng)自中斷指令返回的操作。若 判定該位修復(fù)后的數(shù)值為設(shè)定狀態(tài),該提取單元重新提取并且解密加密指令。
[0018] 本發(fā)明另外一種實(shí)施方式揭示一種方法,用于操作具有一指令高速緩沖存儲器以 及一架構(gòu)寄存器的一微處理器。該方法包括設(shè)定該架構(gòu)寄存器內(nèi)的一位,并且隨后自該指 令高速緩沖存儲器提取加密指令,并且在執(zhí)行上述加密指令前將上述加密指令解密。在面 對一中斷時(shí),該方法還包括儲存該架構(gòu)寄存器該位的數(shù)值,并且隨后清除該位。在清除該位 后,該方法還包括自該指令高速緩沖存儲器提取非加密指令,并且不作解密即執(zhí)行上述非 加密指令。該方法還包括以先前儲存的數(shù)值修復(fù)該架構(gòu)寄存器該位,以回應(yīng)自中斷指令返 回的操作。若判定該位修復(fù)后的數(shù)值為設(shè)定狀態(tài),該方法還包括重新提取并且解密并且執(zhí) 行加密指令。
[0019] 本發(fā)明另外一種實(shí)施方式揭示一微處理器。該微處理器包括一架構(gòu)寄存器以及一 提取單元,該架構(gòu)寄存器包括一位。該微處理器儲存該位的數(shù)值,以回應(yīng)中斷執(zhí)行中程序的 一要求。該位標(biāo)示執(zhí)行中程序?yàn)榧用芑蚍羌用?。該微處理器以先前儲存的?shù)值修復(fù)該位,并 且重新提取被中斷的程序作為執(zhí)行中程序,以回應(yīng)自中斷指令返回的操作。若該位修復(fù)后 的數(shù)值為設(shè)定狀態(tài),該微處理器在重新提取中斷的程序之前,先將解密密鑰數(shù)值修復(fù),以使 用修復(fù)的解密密鑰數(shù)值解密所提取的指令。若該位修復(fù)后的數(shù)值為清除狀態(tài),該微處理器 不作解密密鑰數(shù)值修復(fù)、并且不對所提取的指令作解密。
[0020] 本發(fā)明另外一種實(shí)施方式揭示一種方法,用以操作一微處理器。該方法包括儲存 該微處理器一位的數(shù)值,以回應(yīng)中斷執(zhí)行中程序的一要求。該位標(biāo)示執(zhí)行中程序?yàn)榧用芑?非加密。回應(yīng)自中斷指令返回的操作,該方法還包括以先前儲存的數(shù)值修復(fù)該位,并且重新 提取中斷的程序作為執(zhí)行中程序。若該位修復(fù)后的數(shù)值為設(shè)定狀態(tài),該方法還包括在重新 提取中斷程序之前,將解密密鑰數(shù)值修復(fù),并且以修復(fù)后的解密密鑰數(shù)值解密所提取的指 令。若該位修復(fù)后的數(shù)值為清除狀態(tài),該方法不會(huì)作解密密鑰修復(fù)操作,也不對提取的指令 作解密。
[0021] 本發(fā)明一種實(shí)施方式揭示一種微處理器。該微處理器包括一儲存元件,具有多個(gè) 位置各自儲存一個(gè)加密程序的解密密鑰數(shù)據(jù)。該微處理器還包括一控制寄存器,以一字段 標(biāo)示該儲存元件上述多個(gè)位置中與執(zhí)行中的加密程序相關(guān)者?;貞?yīng)自中斷指令返回的操 作,該微處理器自存儲器將先前儲存的該字段的數(shù)值用來修復(fù)該控制寄存器。該微處理器 還包括一提取單元,用以提取執(zhí)行中的加密程序的加密指令、并且將之以該字段修復(fù)后的 數(shù)值在該儲存元件所標(biāo)示的位置所儲存的解密密鑰數(shù)據(jù)解密。
[0022] 本發(fā)明另外一種實(shí)施方式揭示一方法,用以操作具有一控制寄存器以及一儲存元 件的一微處理器,該儲存元件內(nèi)多個(gè)位置各自儲存一個(gè)加密程序的解密密鑰數(shù)據(jù)。該方法 包括自存儲器將先前儲存的該字段的數(shù)值用來修復(fù)該控制寄存器內(nèi)一字段,以回應(yīng)自中斷 指令返回的操作,其中,該字段的數(shù)值標(biāo)示該儲存元件上述多個(gè)位置中與執(zhí)行中加密程序 有關(guān)。該方法還包括提取執(zhí)行中的加密程序的加密指令。該方法還包括以該字段修復(fù)后的 數(shù)值在該儲存元件所標(biāo)示的位置所儲存的解密密鑰數(shù)據(jù)解密所提取的加密指令。
[0023] 本發(fā)明一種實(shí)施方式揭示一種微處理器。該微處理器包括一分支目標(biāo)地址高速緩 沖存儲器(BTAC)記錄先前執(zhí)行過的分支與切換密鑰指令的歷史信息。上述歷史信息包括所 記錄的分支與切換密鑰指令的目標(biāo)地址以及標(biāo)識符。上述標(biāo)識符標(biāo)示與所屬的分支與切換 密鑰指令相關(guān)的多個(gè)密鑰數(shù)值。該微處理器還包括一提取單元,耦接該分支目標(biāo)地址高速 緩沖存儲器。該提取單元提取先前執(zhí)行過的分支與切換密鑰指令時(shí),會(huì)接收該分支目標(biāo)地 址高速緩沖存儲器所作的預(yù)測、并且自該分支目標(biāo)地址高速緩沖存儲器接收關(guān)于所提取的 分支與切換密鑰指令的上述目標(biāo)地址以及標(biāo)識符。該提取單元還根據(jù)所接收的目標(biāo)地址提 取加密指令數(shù)據(jù)、并且根據(jù)所接收的標(biāo)識符所標(biāo)示的多個(gè)密鑰數(shù)值解密所提取的加密指令 數(shù)據(jù),以回應(yīng)接收到的上述預(yù)測。
[0024] 本發(fā)明另外一種實(shí)施方式揭示一種方法,用于操作一微處理器。該方法包括以一 分支目標(biāo)地址高速緩沖存儲器(BTAC)記錄先前執(zhí)行過的分支與切換密鑰指令的歷史信息。 上述歷史信息包括所記錄的分支與切換密鑰指令的目標(biāo)地址以及標(biāo)識符。上述標(biāo)識符標(biāo)示 與所屬的分支與切換密鑰指令相關(guān)的多個(gè)密鑰數(shù)值。該方法更于先前執(zhí)行過的分支與切換 密鑰指令被提取時(shí)接收該分支目標(biāo)地址高速緩沖存儲器所作的預(yù)測、并且自該分支目標(biāo)地 址高速緩沖存儲器接收關(guān)于所提取的分支與切換密鑰指令的上述目標(biāo)地址以及標(biāo)識符。該 方法更根據(jù)所接收的目標(biāo)地址提取加密指令數(shù)據(jù)、并且根據(jù)所接收的標(biāo)識符所標(biāo)示的多個(gè) 密鑰數(shù)值解密所提取的加密指令數(shù)據(jù),以回應(yīng)接收到的上述預(yù)測。
【附圖說明】
[0025]圖1為一方塊圖,圖解根據(jù)本發(fā)明技術(shù)實(shí)現(xiàn)的一微處理器;
[0026] 圖2為一方塊圖,用以詳細(xì)說明圖解圖1的提取單元;
[0027] 圖3為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖2提取單元的操作;
[0028] 圖4為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解圖1標(biāo)志寄存器的字段;
[0029]圖5為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解一密鑰載入指令的格式;
[0030]圖6為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解一密鑰切換指令的格式;
[0031] 圖7為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器的操作,其中執(zhí)行圖6的密鑰 切換指令;
[0032] 圖8為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解一加密程序的存儲器用量,該加密程序包 括多個(gè)圖6所接露的密鑰切換指令;
[0033]圖9為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解一分支與切換密鑰指令的格式;
[0034]圖10為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器的操作,其中執(zhí)行圖9的分支 與切換密鑰指令;
[0035]圖11為一流程圖,根據(jù)本發(fā)明技術(shù),圖解一后處理器的操作,由軟件工具實(shí)現(xiàn),可 用于后部處理一程序、且加密之,以由圖1微處理器執(zhí)行;
[0036]圖12為一方塊圖,圖解本發(fā)明另外一種實(shí)施方式的分支與切換密鑰指令的格式;
[0037]圖13為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解塊地址范圍表;
[0038]圖14為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器的操作,其中執(zhí)行圖12的分 支與切換密鑰指令;
[0039]圖15為一方塊圖,圖解本發(fā)明另外一種實(shí)施方式的分支與切換密鑰指令的格式;
[0040] 圖16為一方塊圖,根據(jù)本發(fā)明技術(shù),圖解塊地址范圍表;
[0041] 圖17為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器的操作,其中執(zhí)行圖15的分 支與切換密鑰指令;
[0042]圖18為一流程圖,圖解本發(fā)明技術(shù)另外一種實(shí)施方式,其中敘述一后處理器的操 作,用于后部處理一程序、且加密之,由圖1微處理器執(zhí)行;
[0043]圖19為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器的操作,用于應(yīng)付一任務(wù)切 換,切換于一加密程序以及一純文字程序之間;
[0044]圖20圖解一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖1微處理器所執(zhí)行的系統(tǒng)軟件的操 作;
[0045] 圖21圖解一方塊圖,根據(jù)本發(fā)明另外一種實(shí)施方式,圖解圖1標(biāo)志寄存器的字段;
[0046] 圖22為一流程圖,根據(jù)本發(fā)明技術(shù),圖解采用圖21的標(biāo)志寄存器的圖1微處理器的 操作,用于應(yīng)付一任務(wù)切換,切換于多個(gè)加密程序之間;
[0047]圖23為一流程圖,根據(jù)本發(fā)明技術(shù),圖解采用圖21的標(biāo)志寄存器的圖1微處理器的 操作,用于應(yīng)付一任務(wù)切換,切換于多個(gè)加密程序之間;
[0048]圖24為一方塊圖,根據(jù)本發(fā)明另外一種實(shí)施方式,圖解圖1密鑰寄存器文檔中的單 一個(gè)寄存器;
[0049] 圖25為一流程圖,根據(jù)本發(fā)明另外一種實(shí)施方式,圖解采用圖21標(biāo)志寄存器以及 圖24密鑰寄存器文檔的圖1微處理器的操作,以應(yīng)付一任務(wù)切換,切換于多個(gè)加密程序之 間;
[0050] 圖26為一流程圖,根據(jù)本發(fā)明另外一種實(shí)施方式,圖解采用圖21標(biāo)志寄存器以及 圖24密鑰寄存器文檔的圖1微處理器的操作,以應(yīng)付一任務(wù)切換,切換于多個(gè)加密程序之 間;
[0051]圖27為一方塊圖,圖解圖1微處理器100部分內(nèi)容的其他實(shí)施方式;
[0052]圖28為一方塊圖,根據(jù)本發(fā)明技術(shù),詳細(xì)圖解圖27的分支目標(biāo)地址高速緩沖存儲 器(BTAC);
[0053]圖29為一方塊圖,根據(jù)本發(fā)明技術(shù),詳細(xì)圖解圖28的BTAC各單元的內(nèi)容;
[0054]圖30為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖27微處理器采用圖28BTAC的操作;
[0055]圖31為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖27微處理器采用圖28BTAC的操作;以及 [0056]圖32為一流程圖,根據(jù)本發(fā)明技術(shù),圖解圖27微處理器對一分支與切換密鑰指令 的操作;以及 [0057]附圖符號說明
[0058] 100~微處理器; 102~指令高速緩沖存儲器;
[0059] 104~提取單元; 106~指令數(shù)據(jù)(可為加密);
[0060] 108~解碼單元; 112~執(zhí)行單元;
[0061 ] 114~引出單元; 118~通用寄存器;
[0062] 122~安全存儲區(qū); 124~密鑰寄存器文檔;
[0063] 128~標(biāo)志寄存器; 132~微代碼單元;
[0064] 134~提取地址; 142~主密鑰寄存器;
[0065] 144~控制寄存器; 148~E位;
[0066] 152~密鑰擴(kuò)展器; 154~多工器;
[0067] 156~異邏輯; 162~純文字指令數(shù)據(jù);
[0068] 164~提取指令產(chǎn)生器; 172~兩組密鑰;
[0069] 174~解密密鑰; 176~多位的二進(jìn)位零值;
[0070] 178~多工器154的輸出;
[0071] 212~多工器A; 214~多工器B;
[0072] 216~旋轉(zhuǎn)器; 218~加法/減法器;
[0073] 234~第一密鑰; 236~第二密鑰;
[0074] 238~旋轉(zhuǎn)器的輸出; 302-316~步驟方塊;
[0075] 402~E位字段;
[0076] 408~多個(gè)位的標(biāo)準(zhǔn)x86標(biāo)志;
[0077] 500~密鑰載入指令; 502~操作碼;
[0078] 504~密鑰寄存器文檔目標(biāo)地址;
[0079] 506~安全存儲區(qū)來源地址;
[0080] 600~密鑰切換指令; 602~操作碼;
[00811 604~密鑰寄存器文檔索引;
[0082] 702-708~方塊步驟; 800~存儲器用量;
[0083] 900~分支與切換密鑰指令;
[0084] 902~操作碼; 904~密鑰寄存器文檔索引;
[0085] 906~分支信息; 1002-1018~步驟方塊;
[0086] 1102-1106~步驟方塊; 1200~分支與切換密鑰指令;
[0087] 1202~操作碼; 1300~塊地址范圍表:
[0088] 1302~地址范圍; 1304~密鑰寄存器文檔索引;
[0089] 1402-1418~步驟方塊; 1500~分支與切換密鑰指令;
[0090] 1502~操作碼; 1600~塊地址范圍表:
[0091] 1604~安全存儲區(qū)地址;
[0092] 1714~步驟方塊; 1802-1806~步驟方塊;
[0093] 1902-1944~步驟方塊; 2002-2008~步驟方塊;
[0094] 2104~索引; 2202-2216~步驟方塊;
[0095] 2302-2316~步驟方塊; 2402~淘汰位;
[0096] 2506~步驟方塊; 2607、2609~步驟方塊;
[0097] 2702~分支目標(biāo)地址高速緩沖存儲器(BTAC);
[0098] 2706~目標(biāo)地址; 2708~采用/不采用指標(biāo);
[0099] 2712~密鑰切換邏輯; 2714~型式指標(biāo);
[0100] 2716~密鑰寄存器文檔索引;
[0101] 2802 ~BTAC 陣列; 2808 ~BTAC 單元;
[0102] 2902~有效位; 2904~標(biāo)記字段;
[0103] 2906~目標(biāo)地址; 2908~采用/不采用字段;
[0104] 2912~密鑰寄存器文檔索引;
[0105] 2914~型式字段; 3002-3004~步驟方塊;
[0106] 3102-3116~步驟方塊; 3208-3222~步驟方塊;以及
[0107] ZEROS~多位的二進(jìn)位零值。
【具體實(shí)施方式】
[0108] 參閱圖1,一方塊圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一微處理器100。微處理器100包 括一管線(pipeline),其中包括一指令高速緩沖存儲器(instruction cache) 102、一提取 單元(fetch unit) 104、一解碼單元(decodeunit) 108、一執(zhí)行單元(execution unit) 112、 以及一引出單元(retire unit) 114。微處理器100還包括一微代碼單元(microcode unit) 132,用以提供微代碼指令(microcode instructions)給該執(zhí)行單元112。微處理器100還包 括通用寄存器(general purpose registers)118以及標(biāo)志寄存器(EFLAGS register)128, 以提供指令運(yùn)算元(instruction operands)給執(zhí)行單元112。而且,通過引出單元114,將指 令執(zhí)行結(jié)果更新于通用寄存器118以及標(biāo)志寄存器128。在一種實(shí)施方式中,標(biāo)志寄存器128 是由傳統(tǒng)x86標(biāo)志寄存器修改實(shí)現(xiàn),詳細(xì)實(shí)施方式將于后續(xù)篇幅說明。
[0109] 提取單元104自指令高速緩沖存儲器102提取指令數(shù)據(jù)(instruction data)106。 提取單元104操作于兩種模式:一為解密模式(decryption mode),另一為純文字模式 (plain text mode)。提取單元 104內(nèi)一控制寄存器(control register)144的一E位(E bit)148決定該提取單元104是操作于解密模式(設(shè)定E位)、或操作于純文字模式(清空E 位)。純文字模式下,提取單元104視自該指令高速緩沖存儲器102所提取出的指令數(shù)據(jù)106 為未加密、或純文字指令數(shù)據(jù),因此,不對指令數(shù)據(jù)106作解密。然而,在解密模式下,提取單 元104視自該指令高速緩沖存儲器102所提取出的指令數(shù)據(jù)106為加密指令數(shù)據(jù),因此,需使 用該提取單元104的一主密鑰寄存器(master key register) 142所儲存的解密密鑰 (decryption keys)將之解密為純文字指令數(shù)據(jù),詳細(xì)技術(shù)內(nèi)容將參考圖2以及圖3進(jìn)行討 論。
[0110] 提取單元104亦包括一提取指令產(chǎn)生器(fetch address generator)164,用以產(chǎn) 生一提取地址(fetch address) 134,以自該指令高速緩沖存儲器102提取指令數(shù)據(jù)106。提 取地址134還供應(yīng)給提取單元104的一密鑰擴(kuò)展器(key expander) 152。密鑰擴(kuò)展器152自主 密鑰暫存142中選取兩組密鑰172,并對其實(shí)施運(yùn)算以產(chǎn)生一解密密鑰174,作為多工器154 的第一輸入。多工器154的第二輸入為多位的二進(jìn)位零值(binary zeros) 176A位148控制 多工器154。若E位148被設(shè)定,多工器154選擇輸出該加密密鑰174。若E位148被清除,多工器 154選擇輸出多位的二進(jìn)位零值176。多工器154的輸出178將供應(yīng)給異邏輯156作為其第一 輸入。異邏輯156負(fù)責(zé)對提取的指令數(shù)據(jù)106以及多工器輸出178施行布林異或運(yùn)算 (Boolean exclusive_0R,X0R),以產(chǎn)生純文字指令數(shù)據(jù)162。加密的指令數(shù)據(jù)106乃預(yù)先以 異邏輯將其原本的純文字指令數(shù)據(jù)以一加密密鑰進(jìn)行加密,其中該加密密鑰的數(shù)值與該解 密密鑰174相同。提取單元104的詳細(xì)實(shí)施方式將結(jié)合圖2以及圖3內(nèi)容于稍后敘述。
[0111] 純文字指令數(shù)據(jù)162將供應(yīng)給解碼單元108。解碼單元108負(fù)責(zé)將純文字指令數(shù)據(jù) 162的串流解碼、并分割為多個(gè)X86指令,交由執(zhí)行單元112執(zhí)行。在一種實(shí)施方式中,解碼單 元108包括緩沖器(buffers)或隊(duì)列(queus),以在解碼之前或期間,緩沖存儲的純文字指令 數(shù)據(jù)162的串流。在一種實(shí)施方式中,解碼單元108包括一指令轉(zhuǎn)譯器(instruction translator),用以將X86指令轉(zhuǎn)譯為微指令micro ins true t ions或micr〇-〇ps,交由執(zhí)行單 元112執(zhí)行。解碼單元108輸出指令時(shí),更會(huì)針對各指令輸出一位值,該位值乃伴隨該指令沿 所述管線結(jié)構(gòu)一路行進(jìn)而至,用以指示該指令是否為加密指令。該位值將控制該執(zhí)行單元 112以及該引出單元114,使的根據(jù)該指令自該指令高速緩沖存儲器102取出時(shí)是加密指令 或純文字指令而進(jìn)行決策并且采取動(dòng)作。在一種實(shí)施方式中,純文字指令不被允許執(zhí)行專 供指令解密模式設(shè)計(jì)的特定操作。
[0112] 在一種實(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_visible register set)。
[0113] 在一種實(shí)施方式中,微處理器100設(shè)計(jì)成供應(yīng)一復(fù)合安全架構(gòu)(comprehensive security architecture)一稱為安全執(zhí)行模式(secure execution mode,簡稱SEM)-以于 其中執(zhí)行程序。根據(jù)一種實(shí)施方式,SEM程序的執(zhí)行可由數(shù)種處理器事件(processor events)引發(fā),且不受一般(非SEM)操作封鎖。以下舉例說明限定于SEM下執(zhí)行的程序所實(shí)現(xiàn) 的功能,其中包括關(guān)鍵安全任務(wù)(critical security tasks)如:憑證核對以及數(shù)據(jù)加密、 系統(tǒng)軟件活動(dòng)監(jiān)控、系統(tǒng)軟件完整性驗(yàn)證、資源使用追蹤、新軟件的安裝控制…等。關(guān)于SEM 的實(shí)施方式請參考本公司于2008年10月31日申請的美國專利申請案,案號12/263,131,(美 國專利公開號為2009-0292893,于2009年11月26日公開);該案的優(yōu)先權(quán)主張溯及2008年5 月24日的美國專利臨時(shí)申請案(案號61 /055,980);本申請案相關(guān)技術(shù)部份可參照上述案件 內(nèi)容。在一種實(shí)施方式中,用于存儲SEM數(shù)據(jù)為安全非易失性存儲器(未顯示在圖示)一如高 速緩沖存儲器(flash memory) -可用于存儲解密密鑰,并藉由一隔離串行總線(private serial bus)親接微處理器100,且其中所有數(shù)據(jù)乃AES加密(AES-encrypted)且經(jīng)過簽署驗(yàn) 正(signature-verified)的。在一種實(shí)施方式中,微處理器100包括少量的單一次寫入性非 易失性存儲器(non-volatile write-once memory,未顯示于圖示),用于存儲解密密鑰;其 中一種實(shí)施方式可參考美國專利案7,663,957所揭示的一熔絲型非易失性存儲器;可參照 上述案件內(nèi)容應(yīng)用于本發(fā)明。本發(fā)明所揭示的指令解密特征的其中一項(xiàng)優(yōu)點(diǎn)為:擴(kuò)展安全 執(zhí)行模式(SEM)的應(yīng)用范圍,使安全性程序(secure program)得以存儲在微處理器100外的 存儲器,無須限定完整存儲于微處理器100內(nèi)部。因此,安全性程序可利用存儲器階層架構(gòu) 所提供的完整空間以及功能。在一種實(shí)施方式中,部分或全部的結(jié)構(gòu)性異常/中斷 (architectural exceptions/interrupts,例如,頁面錯(cuò)誤page faults、除錯(cuò)中斷點(diǎn)debug breakpoints)…等,在SEM模式下是除能(disable)的。在一種實(shí)施方式中,部分或全部的結(jié) 構(gòu)性異常/中斷在解密模式(即E位148為設(shè)定)下是除能(disable)的。
[0114] 微處理器100還包括一密鑰寄存器文檔(key register file) 124。密鑰寄存器文 檔124包括多個(gè)寄存器,其中儲存的密鑰可藉由密鑰切換指令(switch key instruction, 后續(xù)討論之)載入提取單元104的主密鑰寄存器142,以解密所提取的加密指令數(shù)據(jù)106。
[0115] 微處理器100還包括一安全存儲區(qū)(secure memory area,簡寫為SMA) 122,用于存 儲解密密鑰,該解密密鑰待經(jīng)圖5所示的密鑰載入指令(load key instruction)500進(jìn)而載 入密鑰寄存器文檔124。在一種實(shí)施方式中,安全存儲區(qū)122限定以SEM程序存取。也就是說, 安全存儲區(qū)122不可藉一般執(zhí)行模式(非SEM)下所執(zhí)行的程序存取。此外,安全存儲區(qū)122也 不可藉處理器總線存取,且不屬于微處理器100的高速緩沖存儲器階層的一部份。因此,舉 例說明之,高速緩沖清空操作(cache flush operation)不會(huì)導(dǎo)致安全存儲區(qū)122的內(nèi)容寫 入存儲器。關(guān)于安全存儲區(qū)122的讀寫,微處理器100指令集架構(gòu)中設(shè)計(jì)有特定指令。一種實(shí) 施方式是在安全存儲區(qū)122中設(shè)計(jì)一隔離式隨機(jī)存取存儲器(private RAM),相關(guān)技術(shù)內(nèi)容 可參考2008年2月20日申請的美國專利申請案12/034,503 (該案于2008年10月16日公開,公 開號為2008/0256336);可參照上述案件內(nèi)容應(yīng)用于本發(fā)明。
[0116]起先,操作系統(tǒng)或其他特權(quán)程序(privileged program)下載密鑰的初始化設(shè)定于 該安全存儲區(qū)122、密鑰寄存器文檔124、以及主密鑰寄存器142。微處理器100起先會(huì)以該密 鑰的初始化設(shè)定以解密一加密程序。此外,加密程序本身可接續(xù)寫入新的密鑰至安全存儲 區(qū)122、并自安全存儲區(qū)122將密鑰載入密鑰寄存器文檔124(藉由密鑰載入指令)、且自密鑰 寄存器文檔124將密鑰載入主密鑰寄存器142(藉由密鑰切換指令)。所述操作的優(yōu)勢在于: 所揭示的密鑰切換指令使得加密程序在執(zhí)行當(dāng)下得以切換解密密鑰組(on-the-fly switching),以下將詳述之。新的密鑰可由加密程序指令自身的即時(shí)數(shù)據(jù)組成。在一種實(shí)施 方式中,程序文檔標(biāo)頭的一字段會(huì)指示程序指令是否為加密型式。
[0117] 圖1所描述的技術(shù)有多項(xiàng)優(yōu)點(diǎn)。第一,自加密指令數(shù)據(jù)106所解密出來的純文字指 令數(shù)據(jù)無法由微處理器100外部獲得。
[0118] 第二,提取單元104提取加密指令數(shù)據(jù)所需的時(shí)間與提取純文字指令數(shù)據(jù)所需的 時(shí)間相同。此特色關(guān)系著安全與否。反之,若有時(shí)間差存在,黑客可藉此破解加密技術(shù)。
[0119] 第三,相較于傳統(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查表該指令高速緩 沖存儲器102獲得指令數(shù)據(jù)106之內(nèi)完成,密鑰擴(kuò)展器152并不會(huì)增加一般的提取程序的時(shí) 間。此外,因?yàn)槎喙て?54以及密鑰擴(kuò)展器152-并限時(shí)于以提取地址134查表該指令高速緩 沖存儲器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ù)量。
[0120] 接著,參考圖2,一方塊圖詳細(xì)圖解圖1的提取單元104。特別是,圖1的密鑰擴(kuò)展器 152也詳細(xì)圖列其中。先前已討論采用異邏輯解密上述加密指令數(shù)據(jù)106的優(yōu)點(diǎn)。然而,快且 小的異邏輯有其缺點(diǎn):若加密/解密密鑰被重復(fù)使用,則異邏輯屬于一種脆弱加密方法 (weak encryption method)。不過,若密鑰的有效長度等同所欲加密/解密的程序的長度, 異邏輯加密會(huì)是一種強(qiáng)度極高的加密技術(shù)。微處理器100的特征在于可增長解密密鑰的有 效長度,以降低密鑰重復(fù)使用的需求。第一,主密鑰寄存器142所儲存的數(shù)值(文檔)為中大 型尺寸:在一種實(shí)施方式中,其尺寸等同自指令高速緩沖存儲器102所取出的指令數(shù)據(jù)106 的提取量、或區(qū)塊尺寸,為128位(16字節(jié))。第二,加密擴(kuò)展器152用于增長解密密鑰的有效 長度,例如,增至一實(shí)施方式所揭示的2084字節(jié),將于后續(xù)篇幅詳述。第三,加密程序可藉由 密鑰切換指令(或其變形)在操作中改變主密鑰寄存器142內(nèi)的數(shù)值,之后段落將詳述之。
[0121]在圖2所示實(shí)施方式中,使用了五個(gè)主密鑰寄存器142,編號0-4。然而,在其他實(shí)施 方式中,也可以較少或較多量的主密鑰寄存器142數(shù)量增長解密密鑰長度。例如,一種實(shí)施 方式采用12個(gè)主密鑰寄存器142。密鑰擴(kuò)充器152包括一第一多工器A 212以及一第二多工 器B 214,用以接收主密鑰寄存器142所供應(yīng)的密鑰。提取地址134的部分內(nèi)容用于控制多工 器212/214。在圖2所示實(shí)施方式中,多工器B 214為三轉(zhuǎn)一多工器,而多工器A 212為四轉(zhuǎn)一 多工器。表格1顯示多工器212/214如何根據(jù)各自的選擇輸入選取這些主密鑰寄存器142(以 上述編號識別)。表格2顯示上述選擇輸入的產(chǎn)生方式,以及基于提取地址134的位[10:8]所 呈的主密鑰寄存器142組合。
[0126] 表格 2 1 多工器B 214的輸出236是供應(yīng)給加法/減法器218。多工器A 212的輸出234是供應(yīng) 給一旋轉(zhuǎn)器(rota tor) 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自多工器B 214的輸出236減去。若該位[7 ]為設(shè)定,加法/減法器218將 旋轉(zhuǎn)器216的輸出238加上多工器B 214的輸出236。加法/減法器218的輸出即圖1所示的解 密密鑰174,將供應(yīng)給多工器154。以下以圖3的流程圖詳述相關(guān)技術(shù)。
[0128] 接著,參閱圖3,一流程圖基于本發(fā)明技術(shù)圖解圖2提取單元104的操作。流程始于 方塊302。
[0129] 在方塊302,提取單元104以提取地址134讀取指令高速緩沖存儲器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〇
[0130] 參考方塊304,根據(jù)提取地址134較高的數(shù)個(gè)位,多工器A 212以及多工器B 214分 別自主密鑰寄存器142所供應(yīng)的密鑰172中選取出一第一密鑰234以及一第二密鑰236。在一 種實(shí)施方式中,提取地址134所供應(yīng)的該些位施加于多工器212/214,以產(chǎn)生特定的密鑰對 (234/236key pair)組合。在圖2所示的實(shí)施方式中,所供應(yīng)的主密鑰寄存器142數(shù)量為5,因 此,存在10組可能的密鑰對。為了簡化硬件設(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)生的有效密鑰將為W 2* (K! / (2* (K-2)!))字節(jié)。流程接著進(jìn)入方塊 306 〇
[0131] 在方塊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。
[0132] 在方塊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。
[0133] 在決策方塊312,多工器154根據(jù)其控制信號判斷所提取的該區(qū)塊的指令數(shù)據(jù)106 是來自一加密程序或一純文字程序,所述控制信號來自控制寄存器144所供應(yīng)的位E 148。 若指令數(shù)據(jù)106為加密狀態(tài),流程進(jìn)入方塊314,反之,則流程進(jìn)入方塊316。
[0134] 在方塊314,多工器154選擇輸出解密密鑰174,且異邏輯156令加密指令數(shù)據(jù)106以 及解密密鑰174進(jìn)行一布林異運(yùn)算,以產(chǎn)生圖1的純文字指令數(shù)據(jù)162。流程止于方塊314。
[0135] 在方塊316,多工器154選擇輸出16字節(jié)的二進(jìn)位零值176,且異邏輯156令指令數(shù) 據(jù)1〇6(為純文字)以及該16字節(jié)的二進(jìn)位零值進(jìn)行一布林異運(yùn)算,以產(chǎn)生同樣的純文字指 令數(shù)據(jù)162。流程止于此方塊316。
[0136] 參考圖2以及圖3所揭示內(nèi)容,解密密鑰174供應(yīng)給所提取的該區(qū)塊指令數(shù)據(jù)106進(jìn) 行異運(yùn)算,且該解密密鑰174是所選取的主密鑰對234/236以及提取地址134的函數(shù)。相比于 傳統(tǒng)解密程序一使解密密鑰為先前密鑰值的一函數(shù),其中持續(xù)修正密鑰以供應(yīng)新的在下一 次工作區(qū)間使用一本發(fā)明所揭示的解密技術(shù)完全不同。以主密鑰對234/236以及提取地址 134為函數(shù)獲得解密密鑰174的方式有至少以下兩種優(yōu)點(diǎn)。第一,如以上所討論,加密指令數(shù) 據(jù)以及純文字指令數(shù)據(jù)106的提取耗時(shí)相當(dāng),不會(huì)增加微處理器100所需的工作時(shí)鐘。第二, 遇到程序中的分支指令(branch instruction),提取指令數(shù)據(jù)106所需的時(shí)間不會(huì)增加。在 一種實(shí)施方式中,一分支預(yù)測器(branch predictor)接收提取地址134,并預(yù)測該提取地址 134所指的該區(qū)塊的指令數(shù)據(jù)106是否存在一分支指令,并預(yù)測其方向以及目標(biāo)地址。以圖2 所示實(shí)施方式為例,產(chǎn)出的解密密鑰174是主密鑰對234/236以及提取地址134的一函數(shù),將 在目標(biāo)地址所指的該區(qū)塊指令數(shù)據(jù)106送抵該異邏輯156的同一時(shí)間產(chǎn)出預(yù)測的目標(biāo)地址 的適當(dāng)解密密鑰174。與傳統(tǒng)解密密鑰運(yùn)算手法針對目標(biāo)地址計(jì)算解密密鑰所必須的多個(gè)「 倒帶(rewind)」步驟相較,本發(fā)明所揭示技術(shù)在處理加密指令數(shù)據(jù)時(shí)不會(huì)產(chǎn)生額外的延遲。
[0137] 另外,如圖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為:
[0138] % ~A1 , n 'n+x
[0139] 為第一主密鑰234的字節(jié)n,且為第二主密鑰的字節(jié)n+x。如上所述,密鑰 擴(kuò)展器152所產(chǎn)生的前八套16字節(jié)解密密鑰174是由減法方式產(chǎn)生,且后八套是由加法方式 產(chǎn)生。具體來說,選定的主密鑰對234/236各自所提供的字節(jié)內(nèi)容用于為16個(gè)連續(xù)的16字節(jié) 區(qū)塊的指令數(shù)據(jù)各個(gè)字節(jié)產(chǎn)生解密密鑰174字節(jié),詳情請見表格3。舉例說明,表格3第1列的 符號" 15-00"表示第二主密鑰236的字節(jié)0的內(nèi)容會(huì)經(jīng)8位算數(shù)運(yùn)算(an eight-bit arithmetic operation)自第一主密鑰234的字節(jié)15減去,以獲得一字節(jié)的有效解密密鑰 174,用以與一 16字節(jié)區(qū)塊的指令數(shù)據(jù)106中的字節(jié)15進(jìn)行異運(yùn)算。
[0140] 15-00 14-15 13-14 12-13 11-12 10-11 09-10 08-09 07-08 06-07 05-06 04- 05 03-04 02-03 01-02 00-01
[0141] 15-01 14-00 13-15 12-14 11-13 10-12 09-11 08-10 07-09 06-08 05-07 04- 06 03-05 02-04 01-03 00-02
[0142] 15-02 14-01 13-00 12-15 11-14 10-13 09-12 08-11 07-10 06-09 05-08 04- 07 03-06 02-05 01-04 00-03
[0143] 15-03 14-02 13-01 12-00 11-15 10-14 09-13 08-12 07-11 06-10 05-09 04-OS 03-07 02-06 01-05 00-04
[0144] 15-04 14-03 13-02 12-01 11-00 10-15 09-14 08-13 07-12 06-11 05-10 04- 09 03-08 02-07 01-06 00-05
[0145] 15-05 14-04 13-03 12-02 11-01 10-00 09-15 08-14 07-13 06-12 05-11 04- 10 03-09 02-08 01-07 00-06
[0146] 15-06 14-05 13-04 12-03 11-02 10-01 09-00 08-15 07-14 06-13 05-12 04- 11 03-10 02-09 01-08 00-07
[0147] 15-07 14-06 13-05 12-04 11-03 10-02 09-01 08-00 07-15 06-14 05-13 04- 12 03-11 02-10 01-09 00-08
[0148] 15+08 14+07 13+06 12+05 11+04 10+03 09+02 08+01 07+00 06+15 05+14 04+ 13 03+12 02+11 01+10 00+09
[0149] 15+09 14+08 13+07 12+06 11+05 10+04 09+03 08+02 07+01 06+00 05+15 04+ 14 03+13 02+12 01+11 00+10
[0150] 15+10 14+09 13+08 12+07 11+06 10+05 09+04 08+03 07+02 06+01 05+00 04+ 15 03+14 02+13 01+12 00+11
[0151] 15+11 14+10 13+09 12+08 11+07 10+06 09+05 08+04 07+03 06+02 05+01 04+ 00 03+15 02+14 01+13 00+12
[0152] 15+12 14+11 13+10 12+09 11+08 10+07 09+06 08+05 07+04 06+03 05+02 04+ 01 03+00 02+15 01+14 00+13
[0153] 15+13 14+12 13+11 12+10 11+09 10+08 09+07 08+06 07+05 06+04 05+03 04+ 02 03+01 02+00 01+15 00+14
[0154] 15+14 14+13 13+12 12+11 11+10 10+09 09+08 08+07 07+06 06+05 05+04 04+ 03 03+02 02+01 01+00 00+15
[0155] 15+15 14+14 13+13 12+12 11+11 10+10 09+09 08+08 07+07 06+06 05+05 04+ 04 03+03 02+02 01+01 00+00
[0156] 表格 3
[0157] 給定適當(dāng)?shù)闹髅荑€數(shù)值后,密鑰擴(kuò)展器152所產(chǎn)生的擴(kuò)展密鑰統(tǒng)計(jì)來說可有效預(yù) 防異加密常見的攻擊,包括令文件的加密區(qū)塊以密鑰長度位移、并對加密區(qū)塊一并施行異 運(yùn)算,以下更詳細(xì)討論。密鑰擴(kuò)展器152對選定主密鑰對234/236的影響是:在所述實(shí)施方式 中,程序中以完全相同的密鑰所加密的兩個(gè)指令數(shù)據(jù)106字節(jié)的跨距可高達(dá)256字節(jié)。在其 他具有不同區(qū)塊尺寸的指令數(shù)據(jù)106、以及不同主密鑰長度的實(shí)施方式中,以同樣密鑰加密 的兩個(gè)指令數(shù)據(jù)106字節(jié)的最大跨距可有不同的量。
[0158] 用來選定主密鑰對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所示各密鑰對234/236所對應(yīng)的256 字節(jié)有效密鑰長度搭配八種主密鑰對234/236組合后,所產(chǎn)生的有效密鑰長度為2048字節(jié)。 也就是說,程序中以完全相同的密鑰加密的兩個(gè)指令數(shù)據(jù)106字節(jié)的跨距可高達(dá)2048字節(jié)。
[0159] 為了更加說明密鑰擴(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-length block)是以同樣密鑰 加密。以下列舉根據(jù)一傳統(tǒng)異加密運(yùn)算加密得到的二密鑰長度區(qū)塊的數(shù)據(jù):
[0160] (l)% a/c? ' …、h〇Akv baQAko
[0161] (1)、…5 \ Akv \ Ako 1 1 1
[0162] 其中,為第一密鑰長度區(qū)塊的數(shù)據(jù)的字節(jié)n,將被加密;為第二密鑰長度區(qū)塊 的數(shù)據(jù)的字節(jié)n,將被加密;且kn為密鑰的字節(jié)n。第三,黑客對所述兩區(qū)塊進(jìn)行異運(yùn)算,使其 中密鑰成分彼此相銷,獨(dú)留以下內(nèi)容:
[0163] ⑶% 丨 ' ...,、
[0164] 最后,由于計(jì)算出的字節(jié)為單純兩個(gè)純文字字節(jié)的函數(shù),黑客可以統(tǒng)計(jì)分析純文 字內(nèi)容的出現(xiàn)頻率,以嘗試求得純文字字節(jié)的數(shù)值。
[0165] 然而,根據(jù)圖2以及圖3所揭示方式計(jì)算出的加密指令數(shù)據(jù)106字節(jié)的圖樣如以下 說明(4)與(5)所示: f 1 ^ 、
[0166] ⑷~a|々" ±^:A b、 /x .k.、 ±k^y ? 八心 0 l ^ 〇 v -^ yj 〇 l ^ .^J / \ / ) f ")
[0167] (5)\ A kn 土氣,…,b' A k' ±免3: , A ±/c2 1 l x y) i l 尤 j.J i、文:vj
[0168] 其中by標(biāo)示所加密的第一 16字節(jié)區(qū)塊的指令數(shù)據(jù)的字節(jié)標(biāo)示所加密的第 二16字節(jié)區(qū)塊的指令數(shù)據(jù)的字節(jié)標(biāo)示主密鑰x的字節(jié)n,且1標(biāo)示主密鑰y的字節(jié)n。 如前述,主密鑰x與y為不同密鑰。假定一種實(shí)施方式以五個(gè)主密鑰寄存器142提供八種主密 鑰對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ū)塊對齊并彼此進(jìn) 行異操作使同樣的密鑰零字節(jié)在各段中被使用,字節(jié)〇的運(yùn)算結(jié)果如說明(6)所示,所獲得 的字節(jié)存在兩個(gè)主密鑰的復(fù)雜組合: f 〕 r \
[0169] (6)1^ a kn 八!^ 八 ±k.n , U0 L % 7」k X y)
[0170] 其中n不為1。
[0171] 再者,若黑客換成將選自不同256字節(jié)區(qū)塊內(nèi)的16字節(jié)區(qū)塊對齊、且彼此作異運(yùn) 算,運(yùn)算結(jié)果的字節(jié)0如說明(7)所示: ( \ r \
[0172] (7)辦〇. A 士/q /\、、A k(、±lin , u〇 , -v y,, ui、u" v,,
[0173] 其中主密鑰1!與¥中至少一個(gè)不同于主密鑰x以及y。模擬隨機(jī)主密鑰數(shù)值所產(chǎn)生的 f \ / \ 有效密鑰字節(jié)的異運(yùn)算,可發(fā)現(xiàn)運(yùn)算結(jié)果\ ±灸丨A /C ±及呈現(xiàn)相當(dāng)平滑的分布。 L UX v Uu VJ
[0174] 當(dāng)然,若黑客選擇將不同的2048字節(jié)長度區(qū)塊內(nèi)的16字節(jié)區(qū)塊對齊、并且彼此進(jìn) 行異操作,黑客可能會(huì)獲得與說明(3)類似的結(jié)果。然而,請參照以下內(nèi)容。第一,某些程序 一例如,安全性相關(guān)程序一可能短于2048字節(jié)。第二,相距2048字節(jié)的指令字節(jié)的統(tǒng)計(jì)相關(guān) 性(statistical correlation)很可能非常小,導(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ò)展密鑰長度至 程序的完整長度。
[0175] 現(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位字段402A位字段402用于修復(fù)控制寄存器144的E位148數(shù)值,用以于加密 以及純文字程序間切換和/或于不同加密程序間切換,以下將詳細(xì)討論的。E位字段402標(biāo)示 目前所執(zhí)行的程序是否有加密。若目前所執(zhí)行的程序有加密,E位字段402為設(shè)定狀態(tài),否 貝 1J,為清除狀態(tài)。當(dāng)中斷事件發(fā)生,控制權(quán)切換給其他程序(例如,中斷interrupt、異常 except ion如頁錯(cuò)誤page fault、或任務(wù)切換task switch),儲存標(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è)具體硬件 位,因此,儲存標(biāo)志寄存器128的E位字段402中數(shù)值即是儲存E位148,且修復(fù)標(biāo)志寄存器128 的E位字段402的數(shù)值即是修復(fù)E位148。
[0176] 參閱圖5,一方塊圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一密鑰下載指令500的格式。密 鑰下載指令500包括一操作碼(〇pc 〇de)502字段,特地標(biāo)示其為微處理器100指令集內(nèi)的密 鑰下載指令500。在一種實(shí)施方式中,操作碼字段502數(shù)值為0FA6/4U86領(lǐng)域)。密鑰下載指 令500包括兩個(gè)運(yùn)算元:一密鑰寄存器文檔目標(biāo)地址504以及一安全存儲區(qū)來源地址506。該 安全存儲區(qū)來源地址506為安全存儲區(qū)122中儲存一 16字節(jié)主密鑰的一地址。密鑰寄存器文 檔地址504標(biāo)示密鑰寄存器文檔124內(nèi)的一個(gè)寄存器的地址,此寄存器將載入自安全存儲區(qū) 122載出的16字節(jié)主密鑰。在一種實(shí)施方式中,若一程序企圖在微處理器100不為安全操作 模式下執(zhí)行密鑰載入指令500,則視之為無效指令異常;此外,若安全存儲區(qū)來源地址506數(shù) 值位于有效安全存儲區(qū)122之外,則視之為一般保護(hù)異常。在一種實(shí)施方式中,若一程序試 圖在微處理器100不為最高權(quán)限級別時(shí)(例如,x86環(huán)0權(quán)限/x86ring 0)執(zhí)行密鑰下載指令 500,則視之為無效指令異常。在某些狀況下,16字節(jié)主密鑰的構(gòu)成可能包括在加密指令的 即時(shí)數(shù)據(jù)字段內(nèi)。所述即時(shí)數(shù)據(jù)可被一塊一塊移至安全存儲區(qū)122組成16字節(jié)的密鑰。
[0177] 現(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)限級別(例如,x86環(huán)0權(quán) 限)時(shí)執(zhí)行一密鑰切換指令600,則視之為無效指令異常。在一種實(shí)施方式中,密鑰切換指令 600為原子操作型式(atomic),即不可中斷;此處所討論,用于載入密鑰至主密鑰寄存器142 的其他指令也是如此一例如,以下將討論的分支與切換密鑰指令。
[0178]現(xiàn)在,參閱圖7,一流程圖圖解圖1的微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)執(zhí) 行圖6介紹的密鑰切換指令600。流程始于方塊702。
[0179]在方塊702,解碼單元108將一密鑰切換指令600解碼,且將解碼結(jié)果代入微代碼單 元132內(nèi)實(shí)現(xiàn)密鑰切換指令600的微代碼程序。流程接著進(jìn)入方塊704。
[0180]在方塊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 〇
[0181] 在方塊706,微代碼使微處理器100分支至接續(xù)的x86指令(即該密鑰切換指令600 之后的指令),將導(dǎo)致微處理器100中較密鑰切換指令600新的所有X86指令被清空,致使微 處理器100內(nèi)、較切換至接續(xù)x86指令的微操作新的所有微操作被清空。上述被清空的指令 包括自指令高速緩沖存儲器102提取出、緩沖暫存于提取單元104以及解碼單元108內(nèi)等待 解密與解碼的所有指令字節(jié)106。流程接著進(jìn)入方塊708。
[0182] 在方塊708,基于方塊706分支至接續(xù)指令的操作,提取單元104開始利用方塊704 載入主密鑰寄存器142的新一組密鑰值自指令高速緩沖存儲器102提取并且解密指令數(shù)據(jù) 106。流程結(jié)束于方塊708。
[0183] 如圖7所示,密鑰切換指令600令正在執(zhí)行中的加密程序在自指令高速緩沖存儲器 102提取出來的同時(shí)得以改變主密鑰寄存器142內(nèi)所儲存、供解密該加密程序使用的內(nèi)容。 所述主密鑰寄存器142動(dòng)態(tài)調(diào)整技術(shù)使得加密該程序的有效密鑰長度超越提取單元104先 天支援的長度(例如,圖2實(shí)施方式所提供的2048字節(jié));如圖8所示程序,若將之以圖1微處 理器100操作,黑客會(huì)更不易攻破計(jì)算機(jī)系統(tǒng)的安全防護(hù)。
[0184] 現(xiàn)在,參閱圖8,一方塊圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一加密程序的一存儲器用 量(memory footprint)800,其中采用圖6所示的密鑰切換指令600。圖8所示的加密程序存 儲器用量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所在的存儲器 地址,并且會(huì)利用此信息一即提取地址的相關(guān)地址位一結(jié)合密鑰切換指令600密鑰數(shù)值產(chǎn) 生加密密鑰字節(jié),以加密該程序。一些目的文件格式(object file format)允許程序設(shè)計(jì) 者標(biāo)示程序載入存儲器何處,或至少載明特定大小的對齊形式(例如,頁面邊界page boundary),以提供足夠的地址信息加密該程序。此外,一些操作系統(tǒng)預(yù)設(shè)值是將程序載入 頁面邊界上。
[0185] 密鑰切換指令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ù)值加密的「塊」位于何處,并且必須判斷該些 長度不一的「塊」各自的尺寸。
[0186] 值得注意的是,以密鑰切換指令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ā)者須考慮密鑰切換指 令對效能的影響,在執(zhí)行速度以及特定應(yīng)用的安全性考量之間尋求平衡點(diǎn)。
[0187] 現(xiàn)在,參閱圖9,一方塊圖圖解根據(jù)本發(fā)明技術(shù)實(shí)現(xiàn)的一分支與切換密鑰指令900 的格式。首先敘述該分支與切換密鑰指令900的必要性。
[0188] 根據(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ì)算而得:儲存于主密鑰寄存 器142的主密鑰字節(jié)數(shù)值、以及所提取的16字節(jié)區(qū)塊的指令數(shù)據(jù)106的提取地址134的部分 位(以圖2所揭示實(shí)施方式為例,為位[10:4])。因此,加密一程序使的由微處理器100執(zhí)行的 一后處理器會(huì)知曉將儲存于主密鑰寄存器142的主密鑰字節(jié)數(shù)值、以及一地址(或更限定為 該地址的數(shù)個(gè)相關(guān)位);該地址指示加密程序?qū)⒈惠d入存儲器何處、且微處理器100將自此 處一連串地提取出該加密程序數(shù)個(gè)區(qū)塊的指令數(shù)據(jù)。基于上述信息,后處理器得以適切產(chǎn) 生解密密鑰174數(shù)值,用于加密該程序的各個(gè)16字節(jié)區(qū)塊的指令數(shù)據(jù)。
[0189] 如以上所討論,當(dāng)一分支指令被預(yù)測到且/或被執(zhí)行,提取單元104會(huì)以分支目標(biāo) 地址更新提取地址134。只要加密程序從未改變(經(jīng)由密鑰切換指令600)主密鑰寄存器142 內(nèi)儲存的主密鑰數(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。
[0190] 再次參閱圖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)限層級(例如,x86的環(huán)0權(quán)限)時(shí)試圖執(zhí)行分支與切換 密鑰指令900,則視之為無效指令異常。在一種實(shí)施方式中,分支與切換密鑰指令900為原子 操作型(atomic)。
[0191] 參閱圖10,一流程圖圖解圖1微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)執(zhí)行圖9 所揭示的分支與切換密鑰指令900。流程始于方塊1002。
[0192] 在方塊1002,解碼單元108解碼一分支與切換密鑰指令900且將之代入微代碼單元 132中實(shí)現(xiàn)該分支與切換密鑰指令900的微代碼程序。流程接著進(jìn)入方塊1006。
[0193] 在方塊1006,微代碼解出分支方向(采用、或不采用)、以及目標(biāo)地址。值得注意的 是,對于無條件型分支指令(unconditional branch instruction),所述方向衡為采用。流 程接著進(jìn)入判斷方塊1008。
[0194] 在判斷方塊1008,微代碼判斷方塊1006所解出的方向是否為采用。若為采用,流程 進(jìn)入方塊1014。反之,流程進(jìn)入方塊1012。
[0195] 在方塊1012,微代碼不切換密鑰、或跳至目標(biāo)地址,因?yàn)榉种Р僮魑幢徊捎?。流?結(jié)束于方塊1012。
[0196] 在方塊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。
[0197] 在方塊1016,微代碼使得微處理器100跳至方塊1006所解出的目標(biāo)地址,將導(dǎo)致微 處理器100中較分支與切換密鑰指令900新的所有x86指令被清空,致使微處理器100內(nèi)、較 分支至目標(biāo)地址的微操作新的所有微操作被清空。上述被清空的指令包括自指令高速緩沖 存儲器102提取出、緩沖暫存于提取單元104以及解碼單元108內(nèi)等待解密與解碼的所有指 令字節(jié)106。流程接著進(jìn)入方塊1008。
[0198] 在方塊1018,隨著方塊1016分支至目標(biāo)地址的操作,提取單元104采用方塊1014載 入主密鑰寄存器142的新一組密鑰數(shù)值開始自指令高速緩沖存儲器102提取且解密指令數(shù) 據(jù)106。流程結(jié)束于方塊1018。
[0199] 現(xiàn)在,參閱圖11,一流程圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一后處理器的操作。所述 后處理器為軟件工具,可用于后處理一程序并加密,以交由圖1的微處理器100執(zhí)行。流程始 于方塊1102。
[0200]在方塊1102,后處理器接收一程序的一目的文件。根據(jù)一種實(shí)施方式,該目的文件 內(nèi)的分支指令的目標(biāo)地址可在程序執(zhí)行前確定;例如,指向固定目標(biāo)地址的分支指令。在程 序運(yùn)行前決定好目標(biāo)地址的分支指令尚有另一形式,例如,一相對分支指令(relative branch instruction),其中記載一偏移量,用來加上分支指令所在的存儲器地址,以求得 分支目標(biāo)地址。反之,關(guān)于目標(biāo)地址不會(huì)在程序執(zhí)行前確定的分支指令,其中一種例子是基 于寄存器或存儲器所儲存的運(yùn)算元計(jì)算出目標(biāo)地址,因此,其值在程序執(zhí)行當(dāng)中可能有變 動(dòng)。流程接著進(jìn)入方塊1104。
[0201 ] 在方塊1104,后微處理器將跨塊分支指令(inter-chunk branch instruction)以 分支與切換密鑰指令900取代,所述指令900在密鑰寄存器文檔索引空間904儲存有適當(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)生出原始 檔(source file)以產(chǎn)出目的文件的程序設(shè)計(jì)及/或編譯器可視需求明確包括分支與切換 密鑰指令900,以降低后處理器取代操作的負(fù)擔(dān)。流程接著進(jìn)入方塊1106。
[0202] 在方塊1106,后處理器加密該程序。后處理器知道每一「塊」的存儲器位置以及主 密鑰寄存器142數(shù)值,并將之用于加密該程序。流程結(jié)束于方塊1106。
[0203]現(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)限級別(例如,x86環(huán)0權(quán)限)時(shí)試圖執(zhí)行一分支與切換密鑰指令1200,則視之為無效指令 異常。在一種實(shí)施方式中,分支與切換密鑰指令1200為原子型式。
[0204]現(xiàn)在,參閱圖13,一方塊圖圖解根據(jù)本發(fā)明技術(shù)實(shí)現(xiàn)的「塊」地址范圍表1300。表格 1300包括多個(gè)單元。每一單元與加密程序的一「塊」相關(guān)。每一單元包括一地址范圍字段 1302以及一密鑰寄存器文檔索引字段1304。地址范圍字段1302標(biāo)示所對應(yīng)「塊」的存儲器地 址范圍。密鑰寄存器文檔索引字段1304標(biāo)示密鑰寄存器文檔124內(nèi)的寄存器,由分支與切換 密鑰指令1200將索引所指的寄存器所儲存的密鑰數(shù)值載入主密鑰寄存器142,供提取單元 104解密該「塊」使用。以下參考圖18進(jìn)行討論,表格1300于需要存取表格1300內(nèi)容的分支與 切換密鑰指令1200執(zhí)行前載入微處理器100。
[0205]現(xiàn)在,參閱圖14,一流程圖圖解圖1微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)執(zhí) 行圖12的分支與切換密鑰指令1200。流程始于方塊1402。
[0206]在方塊1402,解碼單元108解碼一分支與切換密鑰指令1200且將之代入微代碼單 元132中實(shí)現(xiàn)分支與切換密鑰指令1200的微代碼程序。流程接著進(jìn)入方塊1406。
[0207]在方塊1406,微代碼解出分支方向(采用、或不采用)、且找出目標(biāo)地址。流程接著 進(jìn)入判斷方塊1408。
[0208]在判斷方塊1408,微代碼判斷方塊1406所解出的分支方向是否為采用。若為采用, 流程進(jìn)入方塊1414。反之,流程進(jìn)入方塊1412。
[0209] 在方塊1412,微代碼不切換密鑰、或跳至目標(biāo)地址,因?yàn)樵摲种幢徊捎谩A鞒探Y(jié) 束于方塊1412。
[0210] 在方塊1414,微代碼基于方塊1406所解出的目標(biāo)地址查詢圖13所示的表格1300, 得到該目標(biāo)地址所坐落的「塊」所對應(yīng)的密鑰寄存器文檔索引字段1304的內(nèi)容。微代碼接著 基于密鑰寄存器文檔索引字段1304內(nèi)所記載的索引,自密鑰寄存器文檔124將密鑰數(shù)值載 入主密鑰寄存器142。較佳實(shí)施方式是,微代碼根據(jù)密鑰寄存器文檔索引字段1304所儲存的 索引,自密鑰寄存器文檔124中將n個(gè)相鄰寄存器儲存的n個(gè)密鑰值載入主密鑰寄存器142 的,其中,n為主密鑰寄存器142的總數(shù)。在一種實(shí)施方式中,數(shù)值n可記錄于分支與切換密鑰 指令1200的一額外字段中,設(shè)定為少于主密鑰寄存器142總數(shù)。流程接著進(jìn)入方塊1416。
[0211] 在方塊1416,微代碼致使微處理器100分支至方塊1406所解出的目標(biāo)地址,將導(dǎo)致 微處理器100中較分支與切換密鑰指令1200新的所有X86指令被清空,致使微處理器100內(nèi)、 較分支至目標(biāo)地址的微操作新的所有微操作被清空。上述被清空的指令包括自指令高速緩 沖存儲器102提取出、緩沖暫存于提取單元104以及解碼單元108內(nèi)等待解密與解碼的所有 指令字節(jié)106。流程接著進(jìn)入方塊1418。
[0212] 在方塊1418,隨著方塊1416分支至目標(biāo)地址的操作,提取單元104采用方塊1414載 入主密鑰寄存器142的新一套密鑰值,開始自指令高速緩沖存儲器102提取并且解密指令數(shù) 據(jù)106。流程結(jié)束于方塊1418。
[0213] 現(xiàn)在,參考圖15,一方塊圖圖解根據(jù)本發(fā)明技術(shù)另外一種實(shí)施方式所實(shí)現(xiàn)的一分 支與切換密鑰指令1500的格式。圖15所示的分支與切換密鑰指令1500以及其操作類似圖12 所示的分支與切換密鑰指令1200。然而,取代自密鑰寄存器文檔124載入密鑰至主密鑰寄存 器142,分支與切換密鑰指令1500是自安全存儲區(qū)122載入密鑰至主密鑰寄存器142,以下討 論之。
[0214] 現(xiàn)在,參考圖16,一方塊圖圖解根據(jù)本發(fā)明技術(shù)所實(shí)現(xiàn)的一「塊」地址范圍表1600。 圖16所示表格1600類似圖13所示的表格1300。然而,取代包括一密鑰寄存器文檔索引字段 1304,表格1600包括一安全存儲區(qū)地址字段1604。安全存儲區(qū)地址字段1604記載安全存儲 區(qū)122內(nèi)的一地址,該地址儲存的密鑰值須由分支與切換密鑰指令1500載入主密鑰寄存器 142,以供該提取單元1046解密該「塊」時(shí)使用。以下討論參考圖18內(nèi)容,表格1600是在需要 查詢該表格1600的分支與切換密鑰指令1500被執(zhí)行前載入微處理器100。在一種實(shí)施方式 中,安全存儲區(qū)122地址的較低數(shù)個(gè)位無須儲存在安全存儲區(qū)地址字段1604,特別是因?yàn)榘?全存儲區(qū)122中儲存一組密鑰的位置的總量相當(dāng)大(例如,16字節(jié)x 5)、且該組密鑰可沿著 一設(shè)定尺寸范為對齊。
[0215] 現(xiàn)在,參閱圖17,一流程圖圖解圖1微處理器100的操作,其中根據(jù)本發(fā)明技術(shù)執(zhí)行 圖15的分支與切換密鑰指令1500。流程始于方塊1702。圖17的流程圖的許多方塊與圖14的 許多方塊類似,因此采同樣的編號。然而,方塊1414是由方塊1714取代,微代碼基于方塊 1406所求得的目標(biāo)地址查表圖16的表格1600,以獲得目標(biāo)地址所坐落的「塊」的安全存儲區(qū) 地址字段1604數(shù)值。微代碼接著根據(jù)安全存儲區(qū)地址字段1604數(shù)值自安全存儲區(qū)122將密 鑰數(shù)值載入主密鑰寄存器142。較佳實(shí)施方式是,微代碼由安全存儲區(qū)地址字段1604數(shù)值自 安全存儲區(qū)122將n個(gè)鄰近16字節(jié)空間位置內(nèi)所儲存的n個(gè)密鑰數(shù)值載入主密鑰寄存器142, 其中n為主密鑰寄存器142的總數(shù)。在一種實(shí)施方式中,數(shù)值n可記載于分支與切換密鑰指令 1500中一額外字段,設(shè)定為少于主密鑰寄存器142總數(shù)。
[0216]現(xiàn)在,參閱圖18,一流程圖圖解根據(jù)本發(fā)明另外一種實(shí)施方式所實(shí)現(xiàn)的一后處理 器的操作。所述后處理器可用于后處理一程序并加密,以交由圖1的微處理器100執(zhí)行。流程 始于方塊1802。
[0217]在方塊1802,后處理器接收一程序的目的文件。根據(jù)一種實(shí)施方式,該目的文件內(nèi) 的分支指令,可為目標(biāo)地址在程序執(zhí)行前判定、可為目標(biāo)地址不可在程序執(zhí)行前判定。流程 接著進(jìn)入方塊1803。
[0218] 在方塊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。
[0219]在方塊1804,類似先前所討論、關(guān)于圖11的方塊1104的操作,后處理器將每個(gè)執(zhí)行 前目標(biāo)地址可決定的跨塊分支指令以圖9的分支與切換密鑰指令900取代,指令900基于分 支指令目標(biāo)地址所在「塊」記載有合適的密鑰寄存器文檔索引字段904數(shù)值。流程接著進(jìn)入 方塊1805。
[0220] 在方塊1805,后處理器根據(jù)方塊1803所產(chǎn)生的表格型態(tài)(1300/1600)將每個(gè)限于 執(zhí)行過程中決定目標(biāo)地址的分支指令以圖12或圖15所示的分支與切換密鑰指令1200或 1500取代。流程接著進(jìn)入方塊1806。
[0221] 在方塊1806,后處理器加密該程序。該后處理器知道關(guān)于各「塊」的存儲器位置與 主密鑰寄存器142數(shù)值,將用于加密該程序。流程結(jié)束于方塊1806。
[0222] 現(xiàn)在,參閱圖19,一流程圖圖解圖1微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)處 理加密程序以及純文字程序之間的任務(wù)切換。流程始于方塊1902。
[0223] 在方塊1902,標(biāo)志寄存器128的E位字段402的E位以及圖1控制寄存器144的E位148 由微處理器100的一重置操作清空。流程接著進(jìn)入方塊1904。
[0224]在方塊1904,微處理器100在執(zhí)行其重置微代碼進(jìn)行初始化后,開始提取并且執(zhí)行 使用者程序指令(例如,系統(tǒng)固件),其為純文字程序指令。特別是,由于E位128為清空,如前 所述,提取單元104視提取出來的指令數(shù)據(jù)106為純文字指令。流程接著進(jìn)入方塊1906。
[0225] 在方塊1906,系統(tǒng)固件(例如,操作系統(tǒng)、固件、基本輸入輸出系統(tǒng)BI0S…等)接收 一要求(request),要執(zhí)行一加密程序。在一種實(shí)施方式中,執(zhí)行一加密程序的上述要求伴 隨、或由一切換操作指示,以切換至微處理器100的一安全執(zhí)行模式,如以上討論內(nèi)容。在一 種實(shí)施方式中,微處理器100僅在安全執(zhí)行模式時(shí),方允許操作于一解密模式(即,E位148為 設(shè)定狀態(tài))。在一種實(shí)施方式中,微處理器1〇〇僅在系統(tǒng)管理模式(system management mode,例如,x86架構(gòu)中常見的SSM),方允許以解密模式操作。流程接著進(jìn)入方塊1908。
[0226] 在方塊1908,系統(tǒng)軟件于主密鑰寄存器142中載入其初始值,與程序中將被執(zhí)行的 第一「塊」相關(guān)。在一種實(shí)施方式中,系統(tǒng)軟件執(zhí)行一密鑰切換指令600下載密鑰至主密鑰寄 存器142。在載入密鑰至主密鑰寄存器142之前,密鑰寄存器文檔124的內(nèi)容可由一個(gè)或多個(gè) 密鑰載入指令500載入。在一種實(shí)施方式中,載入密鑰至主密鑰寄存器142以及密鑰寄存器 文檔124之前,安全存儲區(qū)122可先被寫入密鑰數(shù)值,其中,所述寫入乃經(jīng)由常見的安全通道 技術(shù),例如,AES或RSA加密通道,以防止黑客窺探其值。如以上所討論,以上密鑰數(shù)值可儲存 在一安全非易失性性存儲器(例如快閃存儲器)經(jīng)由一隔離串行總線(private serial bus)耦接微處理器100,或者,可儲存在微處理器100的一非易失性性單次寫入存儲器。如以 上討論,所述程序可包含在單一「塊」中。也就是說,所述程序可不包括密鑰切換指令600,整 個(gè)程序可由單一套主密鑰寄存器142數(shù)值解密。流程接著進(jìn)入方塊1916。
[0227] 在方塊1916,隨著控制權(quán)轉(zhuǎn)移至加密程序,微處理器100設(shè)定標(biāo)志寄存器128的E位 字段402標(biāo)示目前所執(zhí)行的程序?yàn)榧用苄褪?,且設(shè)定控制寄存器144的E位148,使提取單元 104處于解密模式。微處理器100更致使管線內(nèi)的指令被刷新,其動(dòng)作類似圖7方塊706所實(shí) 行的刷新操作。流程接著進(jìn)入方塊1918。
[0228] 在方塊1918,提取單元104提取加密程序內(nèi)的指令106,并且參考圖1至圖3所揭示 的技術(shù)將之以解密模式解密并且執(zhí)行。流程接著進(jìn)入方塊1922。
[0229] 在方塊1922,微處理器100提取并且執(zhí)行加密程序時(shí),微處理器100接收到中斷事 件。舉例說明,所述中斷事件可為一中斷interrupt、一異常except ion (如頁面錯(cuò)誤page fault)、或任務(wù)切換task switch。當(dāng)一中斷事件發(fā)生,微處理器100管線所有待處理的指令 會(huì)被清空。所以,若管線中有任何先前提取的加密指令,將之清空。此外,自指令高速緩沖存 儲器102所提取出、可能在緩沖儲存在提取單元104以及解碼單元108中等待被解密、解碼的 所有指令字節(jié)會(huì)被清空。在一種實(shí)施方式中,微代碼被喚起回應(yīng)中斷事件。流程接著進(jìn)入方 塊 1924。
[0230] 在方塊1924,微處理器100儲存標(biāo)志寄存器128 (以及微處理器100其他結(jié)構(gòu)狀態(tài), 包括受中斷的加密程序的目前指令指標(biāo)數(shù)值)至一堆迭式存儲器(stack memory)。儲存加 密程序的E位字段402數(shù)值將使其得以在后續(xù)操作中修復(fù)(在方塊1934)。流程接著進(jìn)入方塊 1926。
[0231 ] 在方塊1926,當(dāng)控制權(quán)轉(zhuǎn)移到新的程序(例如,中斷處理程序interrupt handler、 異常處理程序exception handler、或新任務(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。
[0232]在方塊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。 [0233]在方塊1932,新程序執(zhí)行一返回操作自中斷指令(例如,X86IRET)或類似指令返 回,使得控制權(quán)回歸加密程序。在一種實(shí)施方式中,自中斷指令返回的操作由微代碼實(shí)現(xiàn)。 流程接著進(jìn)入方塊1934。
[0234]在方塊1934,回應(yīng)前述自中斷指令返回的操作,由于控制權(quán)移轉(zhuǎn)回加密程序,微處 理器100修復(fù)標(biāo)志寄存器128,令標(biāo)志寄存器128的E位字段402重回先前方塊1924所儲存的 設(shè)定狀態(tài)。流程接著進(jìn)入方塊1938。
[0235] 在方塊1938,由于控制權(quán)移轉(zhuǎn)回加密程序,微處理器100以標(biāo)志寄存器128的E位字 段402數(shù)值更新控制寄存器144的E位148,使得提取單元104重新提取并且解密該加密程序 的指令數(shù)據(jù)106。流程接著進(jìn)入方塊1942。
[0236] 在方塊1942,微代碼令微處理器100分支至先前方塊1924儲存于堆迭式存儲器中 的指令指標(biāo)數(shù)值,使得微處理器100中所有X86指令清空、且使得微處理器100中所有微操作 清空。所清空內(nèi)容包括提取自指令高速緩沖存儲器102、緩沖暫存在提取單元104以及解碼 單元108中等待被解密、解碼的所有指令字節(jié)106。流程接著進(jìn)入方塊1944。
[0237] 在方塊1944,提取單元104重新開始提取該加密程序內(nèi)的指令106,并且參考圖1至 圖3所揭示技術(shù)以解密模式解密并且執(zhí)行。流程結(jié)束于方塊1944。
[0238] 現(xiàn)在,參考圖20,一流程圖圖解根據(jù)本發(fā)明技術(shù)實(shí)現(xiàn)的一系統(tǒng)軟件的操作,由圖1 的微處理器100執(zhí)行。圖20流程可結(jié)合圖19內(nèi)容執(zhí)行。流程始于方塊2002。
[0239]在方塊2002,系統(tǒng)軟件收到一要求,欲執(zhí)行一個(gè)新的加密程序。流程接著進(jìn)入決策 方塊2004。
[0240]在決策方塊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 〇
[0241] 在方塊2006,系統(tǒng)軟件等待該加密程序執(zhí)行完畢且不再是系統(tǒng)執(zhí)行中的程序之 一。流程接著進(jìn)入方塊2008。
[0242] 在方塊2008,微處理器100允許新的加密程序開始執(zhí)行。流程結(jié)束于方塊2008。
[0243] 現(xiàn)在,參考圖21,一方塊圖根據(jù)本發(fā)明技術(shù)另外一種實(shí)施方式,圖解圖1標(biāo)志寄存 器128的字段。圖21的標(biāo)志寄存器128類似圖4所示實(shí)施方式,相比的,還包括索引字段 (index bits)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。
[0244] 現(xiàn)在,參考圖22,一流程圖圖解圖1微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)采 用圖21所示的標(biāo)志寄存器128實(shí)行多個(gè)加密程序之間的任務(wù)切換。流程接著進(jìn)入方塊2202。
[0245] 在方塊2202,一要求發(fā)向該系統(tǒng)軟件,要執(zhí)行一個(gè)新的加密程序。流程接著進(jìn)入決 策方塊2204。
[0246] 在決策方塊2204,系統(tǒng)軟件判斷密鑰寄存器文檔124中是否有空間應(yīng)付一個(gè)新的 加密程序。在一種實(shí)施方式中,方塊2202所產(chǎn)生的該要求會(huì)指出需要密鑰寄存器文檔124內(nèi) 多少空間。若密鑰寄存器文檔124中有空間應(yīng)付新的加密程序,流程進(jìn)入方塊2208,反之,流 程進(jìn)入方塊2206。
[0247] 在方塊2206,系統(tǒng)軟件等待一個(gè)或多個(gè)加密程序完成、使密鑰寄存器文檔124騰出 空間應(yīng)付新的加密程序。流程接著進(jìn)入方塊2208。
[0248]在方塊2208,系統(tǒng)軟件將密鑰寄存器文檔124內(nèi)的空間配置給新的加密程序,并且 隨之填寫標(biāo)志寄存器128中的索引字段2104,以標(biāo)示密鑰寄存器文檔124中新配置的空間。 流程接著進(jìn)入方塊2212。
[0249]在方塊2212,系統(tǒng)軟件在方塊2208所配置的密鑰寄存器文檔124位置載入供新程 序使用的密鑰數(shù)值。如以上討論,所載入的密鑰數(shù)值可采用密鑰下載指令500自安全存儲區(qū) 122載入,或者,在必要情況下,可以安全管道由微處理器100外部位置取得。流程接著進(jìn)入 方塊2214。
[0250] 在方塊2214,系統(tǒng)軟件基于密鑰寄存器文檔索引字段604/904/1304將密鑰自密鑰 寄存器文檔124載入主密鑰寄存器142。在一種實(shí)施方式中,系統(tǒng)軟件執(zhí)行一密鑰切換指令 600載入密鑰至主密鑰寄存器142。流程接著進(jìn)入方塊2216。
[0251]在方塊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。
[0252]現(xiàn)在,參考圖23,一流程圖圖解圖1微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù)采 用圖21所示的標(biāo)志寄存器128應(yīng)付多個(gè)加密程序之間的任務(wù)切換。流程始于方塊2302。
[0253] 在方塊2302,目前執(zhí)行的程序執(zhí)行一返回操作,自一中斷指令返回,引發(fā)一任務(wù)切 換至新程序;所述新程序先前曾被執(zhí)行過但被跳開,且其結(jié)構(gòu)狀態(tài)(例如,標(biāo)志寄存器128、 指令指標(biāo)寄存器、以及通用寄存器)曾被儲存在堆迭式存儲器中。如先前所提過,在一種實(shí) 施方式中,自中斷指令返回的操作是由微代碼實(shí)現(xiàn)?,F(xiàn)在執(zhí)行中的程序以及新的程序可為 加密程序或純文字程序。流程進(jìn)入方塊2304。
[0254] 在方塊2304,微處理器100根據(jù)堆迭式存儲器修復(fù)標(biāo)志寄存器128,以應(yīng)付接續(xù)返 回的程序。也就是說,微處理器100將接續(xù)程序(即目前跳換回的程序)先前跳換出去時(shí)儲存 于堆迭式存儲器的標(biāo)志寄存器128數(shù)值重新載入標(biāo)志寄存器128。流程接著進(jìn)入決策方塊 2306〇
[0255] 在決策方塊2306,微處理器100判斷修復(fù)后的標(biāo)志寄存器128的E位402是否為設(shè)定 狀態(tài)。若是,則流程進(jìn)入方塊2308;反之,則流程進(jìn)入方塊2312。
[0256] 在方塊2308,微處理器100根據(jù)方塊2304所修復(fù)的EFLAGS寄存器128索引字段2104 數(shù)值將密鑰載入密鑰寄存器文檔124。流程接著進(jìn)入方塊2312。
[0257] 在方塊2312,微處理器100將控制寄存器144的E位148的內(nèi)容以方塊2304所修復(fù)的 標(biāo)志寄存器128的E位字段402數(shù)值更新。因此,若接續(xù)的程序是一個(gè)加密程序,提取單元104 會(huì)被設(shè)定為解密模式,反之,則設(shè)定為純文字模式。流程接著進(jìn)入方塊2314。
[0258] 在方塊2314,微處理器100以堆迭式存儲器的內(nèi)容修復(fù)指令指標(biāo)寄存器、并且分支 跳躍至指令指標(biāo)所指的位置,所述動(dòng)作將清除微處理器100所有x86指令,并且清除微處理 器所有微操作。所清除的包括自指令高速緩沖存儲器102所提取出、緩沖暫存于提取單元 104、解碼單元108中等待解密、解碼的所有指令字節(jié)106。流程接著進(jìn)入方塊2316。
[0259] 在方塊2316,提取單元104參考圖1至圖3技術(shù)重新開始自接續(xù)程序中提取指令 106,并視方塊2312所修復(fù)的控制寄存器144的E位148數(shù)值以解密模式或純文字模式操作。 流程結(jié)束于方塊2316。
[0260]現(xiàn)在,參考圖24,一方塊圖根據(jù)本發(fā)明、圖解圖1密鑰寄存器文檔124的單一個(gè)寄存 器的另外一種實(shí)施方式。根據(jù)圖24所示的實(shí)施方式,每個(gè)密鑰寄存器文檔124還包括一位一 為淘汰位2402(kill bit,以下簡稱K位)。1(位2402用于應(yīng)付微處理器100對多個(gè)加密程序的 多任務(wù)(mul titasking)操作,所述多個(gè)加密程序總計(jì)需要多于密鑰寄存器文檔124空間尺 寸的密鑰儲存空間,以下將詳述之。
[0261] 現(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。
[0262] 在方塊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。
[0263] 現(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。
[0264] 在決策方塊2607,微處理器100判斷密鑰寄存器文檔124中,由標(biāo)志寄存器128索引 字段2104數(shù)值(于方塊2304中修復(fù))所標(biāo)示的任何寄存器的K位2402是否為設(shè)定狀態(tài)。若是, 則流程進(jìn)入方塊2609;若否,則流程進(jìn)入方塊2308。
[0265] 在方塊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外部將密鑰載入安 全存儲區(qū)122。同樣地,若密鑰寄存器文檔124中被重新載入的寄存器有被其他加密程序使 用,系統(tǒng)軟件會(huì)令其寄存器的K位2402為設(shè)定狀態(tài)。流程接著自方塊2609進(jìn)入2308,且方塊 2308至2316是參考圖23內(nèi)容。
[0266] 如圖24至圖26所教示,此處所敘述的實(shí)施方式令微處理器100得以實(shí)行多個(gè)加密 程序的多任務(wù)操作,即便上述加密程序需要密鑰暫存空間總合多于密鑰寄存器124空間尺 寸。
[0267] 現(xiàn)在,參考圖27,一方塊圖圖解修改自圖1微處理器100的本發(fā)明另外一種實(shí)施方 式。與圖1類似的元件是采用同樣標(biāo)號;例如,指令高速緩沖存儲器102、提取單元104以及密 鑰寄存器文檔124。然而,此處提取單元104被修正成還包括密鑰切換邏輯2712,耦接圖1所 介紹的主密鑰寄存器文檔142以及密鑰寄存器文檔124。圖27的微處理器100還包括一分支 目標(biāo)地址高速緩沖存儲器(branch target address cacheATACUTC^ATAC 2702接收圖1 所揭示的提取地址134,且與指令高速緩沖存儲器102的存取平行,皆是基于該提取地址 134。根據(jù)提取地址134,BTAC 2702供應(yīng)分支目標(biāo)地址2706給圖1所揭示的提取地址產(chǎn)生器 164,供應(yīng)一采用/不采用指標(biāo)(T/NT indicator)2708以及一型式指標(biāo)(type indicator) 2714給密鑰切換邏輯2712,并且供應(yīng)一密鑰寄存器文檔(KRF)索引2716給密鑰寄存器文檔 124〇
[0268] 現(xiàn)在,參閱圖28, 一方塊圖根據(jù)本發(fā)明技術(shù)更詳細(xì)圖解圖27的BTAC2702ATAC 2702包括一BTAC矩陣2802,其中具有多個(gè)BTAC單元2808,圖29圖解BTAC單元2808的內(nèi)容。 BTAC 2802儲存的信息包括先前執(zhí)行過的分支指令的歷史信息,以預(yù)測接續(xù)執(zhí)行的分支指 令的方向以及目標(biāo)地址。特別是,BTAC 2802會(huì)采用儲存的歷史信息,基于提取的地址134預(yù) 測先前執(zhí)行過的分支指令后續(xù)發(fā)生的提取操作。分支目標(biāo)地址高速緩沖的操作可參考常見 的分支預(yù)測技術(shù)。然而,本發(fā)明所揭示的BTAC 2802是更修正成記錄先前執(zhí)行過的分支與切 換密鑰指令900/1200的歷史信息,以進(jìn)行相關(guān)的預(yù)測操作。特別是,儲存的歷史記錄使得 BTAC 2802得以在提取時(shí)間內(nèi)預(yù)測所提取的分支與切換密鑰指令900/1200將載入主密鑰寄 存器142的該組數(shù)值。此操作致能密鑰切換邏輯2712在分支與切換密鑰指令900/1200實(shí)際 執(zhí)行前將密鑰數(shù)值載入,避免受限于需根據(jù)分支與切換密鑰指令900/1200的執(zhí)行清空微處 理器100的管線內(nèi)容,以下將詳細(xì)討論。此外,根據(jù)一種實(shí)施方式,BTAC 2802更被修正成儲 存包括先前執(zhí)行過的密鑰切換指令600的歷史信息,以達(dá)到相同的效果。
[0269] 現(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正中BTAC 2802。 每個(gè)陣列單元2808還包括一目標(biāo)地址字段2906,用于儲存先前執(zhí)行過的分支指令一包括分 支與切換密鑰指令900/1200-的目標(biāo)地址。每個(gè)陣列單元2808還包括一采用/不采用字段 2908,用以儲存先前執(zhí)行過的分支指令一包括分支與切換密鑰指令900/1200-的方向(采 用/不采用)記錄。每個(gè)陣列單元2808還包括一密鑰寄存器索引字段2912,用于儲存先前執(zhí) 行過的分支與切換密鑰指令900/1200的密鑰寄存器文檔索引904/1304記錄,以下將詳細(xì)討 論。根據(jù)一種實(shí)施方式,BTAC 2802是在其密鑰寄存器文檔索引字段2912儲存先前執(zhí)行過的 密鑰切換指令600的密鑰寄存器文檔索引604記錄。每個(gè)陣列單元2808還包括一型式字段 2914,指示所記錄的指令的型式。例如,型式字段2914可標(biāo)示所記錄的歷史指令為一呼叫 (call)、返回(return)、條件跳躍(condi tional jump)、無條件跳躍(unconditional jump)、分支與切換密鑰指令900/1200、或密鑰切換指令600。
[0270]現(xiàn)在,參閱圖30,一流程圖圖解圖27微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù), 所述微處理器100包括圖28揭示的BTAC 2802。流程始于方塊3002。
[0271] 在方塊3002,微處理器100執(zhí)行一分支與切換密鑰指令900/1200,以下將以圖32詳 述。流程接著進(jìn)入方塊3004。
[0272] 在方塊3004,微處理器100在BTAC 2802中配置一陣列單元2808給執(zhí)行過的分支與 切換密鑰指令900/1200,將該分支與切換密鑰指令900/1200解出的方向、目標(biāo)地址、密鑰寄 存器文檔索引904/1304、以及指令型式分別記錄于所配置的該陣列單元2808的采用/不采 用字段2908、目標(biāo)地址字段2906、密鑰寄存器文檔索引字段2912、以及型式字段2914中,以 作為該分支與切換密鑰指令900/1200的歷史信息。流程結(jié)束于方塊3004。
[0273] 現(xiàn)在,參閱圖31,一流程圖圖解圖27微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù), 所述微處理器100包括圖28揭示的BTAC 2802。流程始于方塊3102。
[0274] 在方塊3102,提取地址134供應(yīng)給指令高速緩沖存儲器102以及BTCA2802。流程接 著進(jìn)入方塊3104。
[0275] 在方塊3104,提取地址134正中BTAC 2802,且BTAC 2802將對應(yīng)的陣列單元2808的 目標(biāo)地址2906、采用/不采用2908、密鑰寄存器文檔索引2912以及型式2914字段的內(nèi)容分別 以目標(biāo)地址2706、采用/不采用指標(biāo)2708、密鑰寄存器文檔索引2712、以及型式指標(biāo)2714輸 出。特別是,型式字段2914用于指示所儲存指令為一分支與切換密鑰指令900/1200。流程接 著進(jìn)入決策方塊3106。
[0276] 在決策方塊3106,密鑰切換邏輯2712藉由檢驗(yàn)采用/不采用輸出2708判斷分支與 切換密鑰指令900/1200被BTAC 2802預(yù)測為會(huì)采用。若采用/不采用輸出2708顯示分支與切 換密鑰指令900/1200被預(yù)測為采用,流程接著進(jìn)入方塊3112;反之,流程接著進(jìn)入方塊 3108〇
[0277] 在方塊3108,微處理器100隨著分支與切換密鑰指令900/1200順著輸送一指示,顯 示BTAC 2802預(yù)測其不被采用。(此外,若采用/不采用輸出2708顯示該分支與切換密鑰指令 被預(yù)測為采用,微處理器100在方塊3112隨著該分支與切換密鑰指令900/1200順著輸送一 指示,顯示BTAC 2802預(yù)測其會(huì)被采用)。流程結(jié)束于3108
[0278] 在方塊3112,提取地址產(chǎn)生器164以BTAC 2802于方塊3104所預(yù)測的目標(biāo)地址2706 更新提取地址134。流程接著進(jìn)入方塊3114。
[0279] 在方塊3114,根據(jù)BTAC 2802于方塊3104所預(yù)測的密鑰寄存器文檔索引2712,密鑰 切換邏輯2712以其所指示的密鑰寄存器文檔124位置更新主密鑰寄存器142內(nèi)的密鑰數(shù)值。 在一種實(shí)施方式中,必要狀況下,密鑰切換邏輯2712會(huì)拖延提取單元104提取指令數(shù)據(jù)106 內(nèi)的區(qū)塊,直至主密鑰寄存器142被更新。流程接著進(jìn)入方塊3116。
[0280] 在方塊3116,提取單元104利用方塊3114所載入的新主密鑰寄存器142內(nèi)容持續(xù)提 取并且解密指令數(shù)據(jù)106。流程結(jié)束于方塊3116。
[0281] 現(xiàn)在,參閱圖32,一流程圖圖解圖27微處理器100的操作,其中,根據(jù)本發(fā)明技術(shù), 執(zhí)行一分支與切換密鑰指令900/1200。圖32流程在某一方面類似圖10流程,且類似的方塊 是采以同樣標(biāo)號。雖然圖32的討論是參照圖10內(nèi)容,其應(yīng)用可更考慮圖14所介紹的分支與 切換密鑰指令1200操作。圖32流程始于方塊1002。
[0282] 在方塊1002,解碼單元108解碼一分支與切換密鑰指令900/1200,且將之代入微代 碼單元132實(shí)現(xiàn)分支與切換密鑰指令900/1200的微代碼程序。流程接著進(jìn)入方塊1006。 [0283]在方塊1006,微代碼解出分支方向(即采用/不采用)以及目標(biāo)地址。流程接著進(jìn)入 方塊3208。
[0284] 在方塊3208,微代碼判斷BTAC 2802是否為該分支與切換密鑰指令900/1200提供 一預(yù)測。若有提供,流程接著進(jìn)入決策方塊3214;若無提供,流程接著進(jìn)入圖10的方塊1008。
[0285] 在決策方塊3214,微代碼藉由將BTAC 2802輸送出的采用/不采用指標(biāo)2708以及目 標(biāo)地址2706與方塊1006所解出的方向以及目標(biāo)地址判斷BTAC2802所做的預(yù)測是否正確。若 BTAC 2802的預(yù)測正確,則流程結(jié)束;反之,則流程來到?jīng)Q策方塊3216。
[0286] 在決策方塊3216,微代碼判斷此不正確的BTAC 2802預(yù)測有沒有被采用。若已被采 用,流程進(jìn)入方塊3222;若無,流程進(jìn)入圖10的方塊1014。
[0287] 在方塊3222,微代碼修復(fù)主密鑰寄存器142的內(nèi)容,因?yàn)锽TAC 2802對分支與切換 密鑰指令900/1200所做的錯(cuò)誤預(yù)測被采用,導(dǎo)致圖31方塊3104將錯(cuò)誤的密鑰數(shù)值載入其 中。在一種實(shí)施方式中,密鑰切換邏輯2712包括修復(fù)主密鑰寄存器142所需的儲存元件與邏 輯。在一種實(shí)施方式中,微代碼產(chǎn)生一異常警示交由一異常處理器修復(fù)主密鑰寄存器142。 此外,微代碼使得微處理器100分支跳躍到該分支與切換密鑰指令900/1200之后接續(xù)的x86 指令,使得微處理器100中新于該分支與切換密鑰指令900/1200的所有x86指令清空,并且 使微處理器100中較分支至目標(biāo)地址的微代碼新的所有微代碼清空。被清空的內(nèi)容包括讀 取自指令高速緩沖存儲器102、且緩沖暫存于提取單元104、解碼單元108中等待被解碼的所 有指令字節(jié)106。隨著分支至接續(xù)的指令,提取單元104開始使用主密鑰寄存器142內(nèi)的該組 修復(fù)后的密鑰數(shù)值自指令高速緩沖存儲器102提取并且解密指令數(shù)據(jù)106。流程結(jié)束于方塊 3222〇
[0288] 除了以上所述、由微處理器100實(shí)現(xiàn)的指令解密實(shí)施方式所帶來的安全優(yōu)勢,發(fā)明 人更發(fā)展出建議編碼指南,其使用可結(jié)合以上實(shí)施方式,削弱藉由分析x86指令實(shí)際使用 量、對加密x86碼以統(tǒng)計(jì)技巧發(fā)展出的黑客攻擊。
[0289] 第一,由于黑客通常假設(shè)所提取的16字節(jié)的指令數(shù)據(jù)106全數(shù)為x86指令,因此,相 對于程序執(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ò)誤的指令操作碼地址。 [0290]第二,所述編碼可包括特別的N0P指令,其中包括"不理會(huì)"字段,填有適當(dāng)數(shù)值以 增加上述熵值。例如,x86指令0x0F0D05xxxxxxxx屬于7字節(jié)的N0P,其中最后四個(gè)字節(jié)可為 任意值。此外,N0P指令的操作碼型式以及其「不理會(huì)」字節(jié)的數(shù)量更可有其他變化。
[0291] 第三,許多x86指令具有與其他x86指令相同的基本功能。關(guān)于等效功能的指令,其 編碼可舍棄重復(fù)使用同樣的指令,改采用多重型式和/或采用使純文字熵值提升的型式。例 如,指令0xC10107以及指令0xC10025作的是同樣的事情。甚至,某些等效指令是以不同長度 的版本呈現(xiàn),例如,0xEB22以及0xE90022;因此,編碼時(shí)可采用多種長度但相同效果的指令。
[0292] 第四,x86架構(gòu)允許使用冗余且無意義的操作碼字首(opcode predix),因此,編碼 時(shí)可小心應(yīng)用,以更增加上述熵值。例如,指令0x40以及0x2627646567F2F340作的是完全一 樣的事情。因?yàn)槠渲袃H有8個(gè)安全的x86字首,他們需被小心地安插在編碼中,以避免過度頻 繁地出現(xiàn)。
[0293] 雖然已經(jīng)列舉多種實(shí)施例以密鑰擴(kuò)展器對主密鑰寄存器數(shù)值中的一對數(shù)值進(jìn)行 旋轉(zhuǎn)以及加/減運(yùn)算,尚有其他實(shí)施方式可考慮使用,其中,密鑰擴(kuò)展器可對多于兩個(gè)的主 密鑰寄存器數(shù)值進(jìn)行運(yùn)算,此外,所進(jìn)行的運(yùn)算可不同于旋轉(zhuǎn)以及加/減運(yùn)算。此外,圖6揭 示的密鑰切換指令600以及圖9揭示的分支與切換密鑰指令900還可有其他實(shí)施方式,例如, 將新的密鑰數(shù)值由安全存儲區(qū)122載入主密鑰寄存器142而非由密鑰寄存器文檔124載入, 并且,圖15所介紹的分支與切換密鑰指令1500的其他實(shí)施方式是以索引字段2104儲存安全 存儲區(qū)122的地址。此外,雖然已列舉多種實(shí)施例調(diào)整BTAC 2702儲存KRF索引結(jié)合分支與切 換密鑰指令900/1200使用,尚有其他實(shí)施方式是調(diào)整BTAC 2702儲存安全存儲區(qū)地址,以結(jié) 合分支與切換密鑰指令1500使用。
[0294]以上列舉的本發(fā)明諸多實(shí)施方式僅是作為說明例使用,并非意圖限制發(fā)明范圍。 相關(guān)計(jì)算機(jī)技術(shù)領(lǐng)域的技術(shù)人員可在不偏離本發(fā)明范圍的前提下作出形式以及細(xì)節(jié)的諸 多變形。例如,可以軟件方式實(shí)現(xiàn)所述如函數(shù)、制作、模組化、模擬、說明、和/或測試此篇所 討論的設(shè)備與方法的方式。實(shí)現(xiàn)方式包括一般程序語言(例如,C、C++)、硬件描述語言包括 Verilog HDL、VHDL…等、或其他可用的程序工具。所述軟件可載于任何已知的計(jì)算機(jī)可讀 媒體,例如,磁帶、半導(dǎo)體、磁盤、或光盤(例如,CD-ROM、DVD-ROM等)、網(wǎng)路、有線傳輸、無線或 其他通訊媒體。所述設(shè)備與方法的實(shí)施方式可包含于半導(dǎo)體知識產(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ā)明相同的效果。
【主權(quán)項(xiàng)】
1. 一種加密方法,用于加密一程序,以供用于解密與執(zhí)行加密程序的一微處理器日后 執(zhí)行,該加密方法包括: 接收關(guān)于一非加密程序的一目的文件,該非加密程序包括傳統(tǒng)分支指令,上述傳統(tǒng)分 支指令的目標(biāo)地址在該微處理器執(zhí)行該程序之前被判定; 分析該程序以獲得塊信息,上述塊信息將該程序劃分成一序列多個(gè)塊,其中,各個(gè)上述 塊包括一序列多個(gè)指令,其中,上述塊信息還包括上述各個(gè)塊的加密密鑰數(shù)據(jù),其中,各塊 的加密密鑰數(shù)據(jù)并不相同; 將上述傳統(tǒng)分支指令中目標(biāo)地址不與本身位于同一塊者各自以一分支與切換密鑰指 令取代;以及 基于上述塊信息加密該程序。2. 如權(quán)利要求1所述的加密方法,其中,上述分支與切換密鑰指令各自標(biāo)示該微處理器 內(nèi)一儲存空間,以儲存上述分支與切換密鑰指令的目標(biāo)地址所在該塊的加密密鑰數(shù)據(jù)。3. 如權(quán)利要求1所述的加密方法,其中,上述根據(jù)塊信息加密該程序的步驟包括: 針對各塊內(nèi)各個(gè)區(qū)塊的指令數(shù)據(jù),基于所屬塊的加密密鑰數(shù)據(jù)以及所屬區(qū)塊一存儲器 地址的部份內(nèi)容生成一加秘密鑰;以及 以所生成的該加秘密鑰對所對應(yīng)該區(qū)塊進(jìn)行布林異運(yùn)算。4. 如權(quán)利要求3所述的加密方法,其中,基于所屬塊的加密密鑰數(shù)據(jù)以及所屬區(qū)塊一存 儲器地址的部份內(nèi)容生成該加秘密鑰的步驟包括: 基于該存儲器地址的第一部份從該加密密鑰數(shù)據(jù)中選擇第一密鑰數(shù)值和第二密鑰數(shù) 值; 基于該存儲器地址的第二部份旋轉(zhuǎn)該第一密鑰數(shù)值; 基于該存儲器地址的第三部份對第二密鑰數(shù)值加入旋轉(zhuǎn)的第一密鑰數(shù)值或從第二密 鑰數(shù)值減去旋轉(zhuǎn)的第一密鑰數(shù)值以生成該加秘密鑰。5. 如權(quán)利要求4所述的加密方法,其中該加密密鑰數(shù)據(jù)包括K個(gè)密鑰數(shù)值,其中該加密 密鑰以及K個(gè)密鑰數(shù)值各自的長度為W字節(jié),其中所述選擇、旋轉(zhuǎn)和加入或減去在一序列存 儲器地址上產(chǎn)生該K個(gè)密鑰數(shù)值的字節(jié)的W 2*(K!/(2*(K-2)!))個(gè)不同組合。6. 如權(quán)利要求3所述的加密方法,其中該加密密鑰數(shù)據(jù)包括K個(gè)密鑰數(shù)值,其中該加密 密鑰以及K個(gè)密鑰數(shù)值各自的長度為W字節(jié),其中所述基于所屬塊的加密密鑰數(shù)據(jù)以及所屬 區(qū)塊一存儲器地址的部份內(nèi)容生成該加秘密鑰的步驟產(chǎn)生W2*(K!/(2*(K-2)!))字節(jié)的有 效加密密鑰長度。7. -種加密方法,用于加密一程序,以供用于解密與執(zhí)行加密程序的一微處理器日后 執(zhí)行,該加密方法包括: 接收一非加密程序的一目的文件,該非加密程序包括傳統(tǒng)分支指令,上述傳統(tǒng)分支指 令的目標(biāo)地址僅能在該微處理器執(zhí)行該程序時(shí)判定; 分析該程序以獲得塊信息,上述塊信息將該程序劃分成一序列多個(gè)塊,其中,各個(gè)上述 塊包括一序列多個(gè)指令,其中,上述塊信息還包括上述各個(gè)塊的加密密鑰數(shù)據(jù),其中,各塊 的加密密鑰數(shù)據(jù)并不相同; 將上述傳統(tǒng)分支指令各自以一分支與切換密鑰指令取代;以及 基于上述塊信息,加密該程序。8. 如權(quán)利要求7所述的加密方法,還包括: 將上述塊信息納入該目的文件中,以于該微處理器執(zhí)行該程序前載入該微處理器。9. 如權(quán)利要求8所述的加密方法,其中,載于該目的文件中、于執(zhí)行該程序前載入該微 處理器的上述塊信息為各個(gè)上述塊在該微處理器中標(biāo)示一儲存空間,以儲存關(guān)于各個(gè)上述 塊的上述加密密鑰數(shù)據(jù)。10. 如權(quán)利要求7所述的加密方法,其中,上述基于塊信息加密該程序的步驟包括: 針對各個(gè)上述塊的各個(gè)區(qū)塊的指令數(shù)據(jù),基于所屬塊的加密密鑰數(shù)據(jù)以及所屬區(qū)塊的 一存儲器地址的部分內(nèi)容生成一加密密鑰;以及 以所生成的上述加密密鑰,對所對應(yīng)的區(qū)塊進(jìn)行布林異運(yùn)算。11. 如權(quán)利要求10所述的加密方法,其中,基于所屬塊的加密密鑰數(shù)據(jù)以及所屬區(qū)塊一 存儲器地址的部份內(nèi)容生成該加秘密鑰的步驟包括: 基于該存儲器地址的第一部份從該加密密鑰數(shù)據(jù)中選擇第一密鑰數(shù)值和第二密鑰數(shù) 值; 基于該存儲器地址的第二部份旋轉(zhuǎn)該第一密鑰數(shù)值; 基于該存儲器地址的第三部份對第二密鑰數(shù)值加入旋轉(zhuǎn)的第一密鑰數(shù)值或從第二密 鑰數(shù)值減去旋轉(zhuǎn)的第一密鑰數(shù)值以生成該加秘密鑰。12. 如權(quán)利要求11所述的加密方法,其中該加密密鑰數(shù)據(jù)包括K個(gè)密鑰數(shù)值,其中該加 密密鑰以及K個(gè)密鑰數(shù)值各自的長度為W字節(jié),其中所述選擇、旋轉(zhuǎn)和加入或減去在一序列 存儲器地址上產(chǎn)生該K個(gè)密鑰數(shù)值的字節(jié)的W 2*(K!/(2*(K-2)!))個(gè)不同組合。13. 如權(quán)利要求10所述的加密方法,其中該加密密鑰數(shù)據(jù)包括K個(gè)密鑰數(shù)值,其中該加 密密鑰以及K個(gè)密鑰數(shù)值各自的長度為W字節(jié),其中所述基于所屬塊的加密密鑰數(shù)據(jù)以及所 屬區(qū)塊一存儲器地址的部份內(nèi)容生成該加秘密鑰的步驟產(chǎn)生W2*(K!/(2*(K-2)!))字節(jié)的 有效加密密鑰長度。14. 一種微處理器,包括: 一存儲元件,用于存儲解密密鑰數(shù)據(jù); 指令集,其包括一分支與切換密鑰指令;和 一提取單元,采用存儲在該存儲元件中的解密密鑰數(shù)據(jù)的一組值提取并且解密程序指 令; 其中該提取單元采用存儲在該存儲元件中的解密密鑰數(shù)據(jù)的第一組值提取該分支與 切換密鑰指令的實(shí)例并且將其解密; 其中如果該分支與切換密鑰指令的實(shí)例被決定為采用,則該微處理器用于對該存儲元 件載入解密密鑰數(shù)據(jù)的第二組值供該提取單元后續(xù)使用,以解密在由該分支與切換密鑰指 令標(biāo)示的一目標(biāo)地址處提取的指令,其中該解密密鑰數(shù)據(jù)的第二組值不同于該解密密鑰數(shù) 據(jù)的第一組值; 其中,如果該分支與切換密鑰指令的實(shí)例被決定為不采用,則該微處理器用于在該存 儲元件中維持該解密密鑰數(shù)據(jù)的第一組值供該提取單元后續(xù)使用,以解密順序上在該分支 與切換密鑰指令之后的指令; 該提取單元還用于:于解密該分支與切換密鑰指令前,基于存儲在該存儲元件的上述 解密密鑰數(shù)據(jù)的第一組值以及用于提取該分支與切換密鑰指令的一提取地址的部分內(nèi)容, 生成一解密密鑰; 其中,為了采用上述解密密鑰數(shù)據(jù)的第一組值解密該分支與切換密鑰指令,該提取單 元以所生成的該解密密鑰解密該分支與切換密鑰指令; 其中存儲在該存儲元件中的解密密鑰數(shù)據(jù)包括多個(gè)主密鑰;以及 其中,為了基于存儲在該存儲元件的解密密鑰數(shù)據(jù)以及提取地址的部分內(nèi)容生成該解 密密鑰,該提取單元基于提取地址的第一部分選擇多個(gè)主密鑰的至少兩個(gè),并且對選擇的 多個(gè)主密鑰的至少兩個(gè)執(zhí)行算術(shù)和/或邏輯運(yùn)算以產(chǎn)生該解密密鑰, 其中為了利用產(chǎn)生的解密密鑰來解密該分支與切換密鑰指令,該提取單元配置來利用 產(chǎn)生的解密密鑰執(zhí)行該分支與切換密鑰指令的一布林異運(yùn)算。15. -種微處理器,包括: 一存儲元件,用于存儲解密密鑰數(shù)據(jù); 指令集,其包括一分支與切換密鑰指令;和 一提取單元,采用存儲在該存儲元件中的解密密鑰數(shù)據(jù)的一組值提取并且解密程序指 令; 其中該提取單元采用存儲在該存儲元件中的解密密鑰數(shù)據(jù)的第一組值提取該分支與 切換密鑰指令的實(shí)例并且將其解密; 其中如果該分支與切換密鑰指令的實(shí)例被決定為采用,則該微處理器用于對該存儲元 件載入解密密鑰數(shù)據(jù)的第二組值供該提取單元后續(xù)使用,以解密在由該分支與切換密鑰指 令標(biāo)示的一目標(biāo)地址處提取的指令,其中該解密密鑰數(shù)據(jù)的第二組值不同于該解密密鑰數(shù) 據(jù)的第一組值; 其中,如果該分支與切換密鑰指令的實(shí)例被決定為不采用,則該微處理器用于在該存 儲元件中維持該解密密鑰數(shù)據(jù)的第一組值供該提取單元后續(xù)使用,以解密順序上在該分支 與切換密鑰指令之后的指令; 該提取單元還用于:于解密該分支與切換密鑰指令前,基于存儲在該存儲元件的上述 解密密鑰數(shù)據(jù)的第一組值以及用于提取該分支與切換密鑰指令的一提取地址的部分內(nèi)容, 生成一解密密鑰; 其中,為了采用上述解密密鑰數(shù)據(jù)的第一組值解密該分支與切換密鑰指令,該提取單 元以所生成的該解密密鑰解密該分支與切換密鑰指令; 其中存儲在該存儲元件中的解密密鑰數(shù)據(jù)包括多個(gè)主密鑰;以及 其中,為了基于存儲在該存儲元件的解密密鑰數(shù)據(jù)以及提取地址的部分內(nèi)容生成該解 密密鑰,該提取單元基于提取地址的第一部分選擇多個(gè)主密鑰的至少兩個(gè),并且對選擇的 多個(gè)主密鑰的至少兩個(gè)執(zhí)行算術(shù)和/或邏輯運(yùn)算以產(chǎn)生該解密密鑰, 其中由該提取單元對選擇的多個(gè)主密鑰的至少兩個(gè)執(zhí)行的算術(shù)和/或邏輯運(yùn)算是基于 提取地址的第二部分。16. -種操作方法,以一微處理器處理一加密程序,該微處理器具有一存儲元件,用于 存儲解密密鑰數(shù)據(jù),以及具有指令集,其包括一分支與切換密鑰指令,該操作方法包括: 采用存儲在該存儲元件中的解密密鑰數(shù)據(jù)的第一組值提取并且解密分支與切換密鑰 指令的實(shí)例; 若該分支與切換密鑰指令的實(shí)例決定為不被采用,則在該存儲元件中維持該解密密鑰 數(shù)據(jù)的第一組值供后續(xù)使用,以解密在該分支與切換密鑰指令之后的接續(xù)指令; 若該分支與切換密鑰指令的實(shí)例決定為被采用,則對該存儲元件載入解密密鑰數(shù)據(jù)的 第二組值供后續(xù)使用,以解密在該分支與切換密鑰指令的一目標(biāo)地址處提取的指令,其中 該解密密鑰數(shù)據(jù)的第二組值不同于該解密密鑰數(shù)據(jù)的第一組值; 在上述解密該分支與切換密鑰指令之前,根據(jù)上述解密密鑰數(shù)據(jù)的第一組值以及用于 提取該分支與切換密鑰指令的一提取地址的部分內(nèi)容生成一解密密鑰; 其中,上述采用解密密鑰數(shù)據(jù)的第一組值解密該分支與切換密鑰指令包括以所生成的 該解密密鑰對該分支與切換密鑰指令解密; 其中存儲在該存儲元件中的解密密鑰數(shù)據(jù)包括多個(gè)主密鑰;以及 其中,基于存儲在該存儲元件的解密密鑰數(shù)據(jù)以及提取地址的部分內(nèi)容生成該解密密 鑰包括:基于提取地址的第一部分選擇多個(gè)主密鑰的至少兩個(gè),并且對選擇的多個(gè)主密鑰 的至少兩個(gè)執(zhí)行算術(shù)和/或邏輯運(yùn)算以產(chǎn)生該解密密鑰, 其中利用產(chǎn)生的解密密鑰來解密該分支與切換密鑰指令包括:利用產(chǎn)生的解密密鑰執(zhí) 行該分支與切換密鑰指令的一布林異運(yùn)算。17. -種操作方法,以一微處理器處理一加密程序,該微處理器具有一存儲元件,用于 存儲解密密鑰數(shù)據(jù),以及具有指令集,其包括一分支與切換密鑰指令,該操作方法包括: 采用存儲在該存儲元件中的解密密鑰數(shù)據(jù)的第一組值提取并且解密分支與切換密鑰 指令的實(shí)例; 若該分支與切換密鑰指令的實(shí)例決定為不被采用,則在該存儲元件中維持該解密密鑰 數(shù)據(jù)的第一組值供后續(xù)使用,以解密在該分支與切換密鑰指令之后的接續(xù)指令; 若該分支與切換密鑰指令的實(shí)例決定為被采用,則對該存儲元件載入解密密鑰數(shù)據(jù)的 第二組值供后續(xù)使用,以解密在該分支與切換密鑰指令的一目標(biāo)地址處提取的指令,其中 該解密密鑰數(shù)據(jù)的第二組值不同于該解密密鑰數(shù)據(jù)的第一組值; 在上述解密該分支與切換密鑰指令之前,根據(jù)上述解密密鑰數(shù)據(jù)的第一組值以及用于 提取該分支與切換密鑰指令的一提取地址的部分內(nèi)容生成一解密密鑰; 其中,上述采用解密密鑰數(shù)據(jù)的第一組值解密該分支與切換密鑰指令包括以所生成的 該解密密鑰對該分支與切換密鑰指令解密; 其中存儲在該存儲元件中的解密密鑰數(shù)據(jù)包括多個(gè)主密鑰;以及 其中,基于存儲在該存儲元件的解密密鑰數(shù)據(jù)以及提取地址的部分內(nèi)容生成該解密密 鑰包括:基于提取地址的第一部分選擇多個(gè)主密鑰的至少兩個(gè),并且對選擇的多個(gè)主密鑰 的至少兩個(gè)執(zhí)行算術(shù)和/或邏輯運(yùn)算以產(chǎn)生該解密密鑰, 其中對選擇的多個(gè)主密鑰的至少兩個(gè)執(zhí)行的算術(shù)和/或邏輯運(yùn)算是基于提取地址的第 二部分。
【文檔編號】G06F21/72GK105912305SQ201610227267
【公開日】2016年8月31日
【申請日】2011年5月25日
【發(fā)明人】G.葛蘭.亨利, 泰瑞.派克斯, 布蘭特.比恩, 湯姆士.A.克里斯賓
【申請人】威盛電子股份有限公司