青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-162  評(píng)論-223  文章-30  trackbacks-0
 
私鑰分組加密  
  
  
   
上圖的證明中,r(j)兩兩不同的概率計(jì)算是關(guān)鍵,下面給出詳細(xì)過程
       
    另外兩個(gè)分布統(tǒng)計(jì)的不同意味著計(jì)算可分辨(反之則計(jì)算不可分辨),亦即r(j)至少兩個(gè)相同的概率。
  Construction 5.3.9一次只能加密與密鑰等長(zhǎng)的明文,如果要加密更長(zhǎng)的明文,怎么辦?一個(gè)簡(jiǎn)單直接
  的方法是將明文分成多個(gè)大小為n的塊,對(duì)每個(gè)塊調(diào)用上述加密步驟,那么就得到形如下的密文塊序列
       
  
密文塊序列從Proposition 5.3.10的證明中可知是計(jì)算不可分辨的,滿足多組消息安全性。但對(duì)于解密
  需要存儲(chǔ)每一塊的隨機(jī)數(shù),因此比較占空間,所以衍生出下面更高效的方案Construction 5.3.12

私密通用加密
    
     
     語(yǔ)義安全性分析
    
         
          

抗主動(dòng)攻擊安全性
       以上兩種構(gòu)造因滿足多組消息安全性,故滿足CPACCA1,具體的證明可參考Oded Goldreich《密碼學(xué)基礎(chǔ)》的Proposition 5.4.12Proposition 5.4.18
   但不滿足CCA2,因?yàn)楣粽吣玫教魬?zhàn)密文后,可以修改它再發(fā)出解密質(zhì)疑,得到回答的明文從而異或求解fk(ri),最后與挑戰(zhàn)密文異或求解挑戰(zhàn)明文
   對(duì)于通用加密構(gòu)造的CCA2攻擊細(xì)節(jié)如下
           
posted @ 2024-06-29 17:00 春秋十二月 閱讀(664) | 評(píng)論 (0)編輯 收藏
定義
    

Berlekamp分解算法
    

AES有限域
   

  不可約性證明
       

  非本原性驗(yàn)證
      

  
找出本原元
      

  不可約多項(xiàng)式個(gè)數(shù)
       

線性移位寄存器m序列
     
根據(jù)參考文獻(xiàn)1知線生移位寄存器產(chǎn)生m序列的充要條件是特征多項(xiàng)式f(x)為本原多項(xiàng)式。而確立有限域上的本原多項(xiàng)式,主要有兩種方法:
      一種方法是根據(jù)Fq上所有次數(shù)為n的本原多項(xiàng)式的乘積正好等于割圓多項(xiàng)式Qe,其中e=qn-1,從而所有次數(shù)為n的本原多項(xiàng)式可以通過分解Qe得到。
      另一種方法是通過構(gòu)造本原元再求本原元的極小多項(xiàng)式,先素因子分解qn-1=p1p2...pk,如果對(duì)每一pi都有ord(αi)=pi,那么α=α1α2...αk的階就是qn-1,
      因此是Fq上的本原元,則f(x)=(x-α)(x-α2)...(x-αr),r=qn-1(因?yàn)?span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">α是本原元,所以n是使αq^n=α成立的最小正整數(shù))。
   
    求解本原多項(xiàng)式
       假設(shè)線性移位寄存器的級(jí)數(shù)為4,這里使用上述二種方法求F16上的本原多項(xiàng)式,過程如下
       分解割圓多項(xiàng)式法
          

       構(gòu)造極小多項(xiàng)式法
          
        
         
   
  本原多項(xiàng)式個(gè)數(shù)
        

   
m序列示例
       


參考文獻(xiàn)
    
[1] 代數(shù)學(xué)基礎(chǔ)與有限域    林東岱
posted @ 2024-05-16 13:41 春秋十二月 閱讀(959) | 評(píng)論 (0)編輯 收藏
【適用前提】大整數(shù)N=pq的素因子p<q<2p,解密指數(shù)d<(1/3)N1/4

【攻擊方法】 
     1)用歐幾里得算法計(jì)算e/N的各個(gè)漸近分?jǐn)?shù)ki/di,i>=1,直至di>=(1/3)N1/4,記錄此時(shí)的i為m。令i=1  
     2)計(jì)算T=(e*di-1)/ki,若T不為整數(shù)則轉(zhuǎn)到4),否則轉(zhuǎn)到3)  
     3)解方程f(x)=x2-(N-T+1)x+N=0的根,如果有正整數(shù)根且兩個(gè)根皆小于N,則輸出p、q,并返回成功。否則轉(zhuǎn)到4)  
     4)遞增i,若i<m則轉(zhuǎn)回2),否則返回失敗
   該方法即Wiener算法用到了關(guān)于連分?jǐn)?shù)的一個(gè)定理:α為任一實(shí)數(shù),有理數(shù)p/q適合|α-(p/q)|<1/(2q2),則p/q必為α的某一漸近分?jǐn)?shù)。證明詳見參考文獻(xiàn)[2]。
   由定理可知攻擊方法是可行的,必能找到使f(x)=0有合理解的某漸近分?jǐn)?shù)。下面證明:攻擊迭代次數(shù)的上界為

【證明】
     


【例子】N = 9449868410449,e = 6792605526025,d<(1/3)N1/4≈584,試分解N
     

參考文獻(xiàn)
     [1] 公鑰密碼學(xué)的數(shù)學(xué)基礎(chǔ)  王小云、王明強(qiáng)、孟憲萌
     [2] 算法數(shù)論                   裴定一、祝躍飛
posted @ 2024-04-04 18:19 春秋十二月 閱讀(692) | 評(píng)論 (0)編輯 收藏
群結(jié)構(gòu)  
  定理1
:若G為一個(gè)循環(huán)群,則G內(nèi)每個(gè)滿足ord(α)=s的元素α都是擁有s個(gè)元素的循環(huán)子群的生成元
  證明
      

  定理2:若G為一個(gè)階為n的有限循環(huán)群,g為對(duì)應(yīng)的生成元,則對(duì)整除n的每個(gè)整數(shù)k,G都存在一個(gè)唯一的階為k的循環(huán)子群H。
    這個(gè)子群是由gn/k生成的。H是由G內(nèi)滿足條件αk=1的元素組成的,且G不存在其它子群
  證明
     

  推論:從上述兩定理可知有限循環(huán)群、子群及生成元的關(guān)系如下
      
  例子:依據(jù)上述推論得如下
      

生成元判定算法
  輸入:循環(huán)群G、某子群的階k  
    1)若k=1,則直接輸出e。否則轉(zhuǎn)到2)
    2)隨機(jī)從G-{e}中選擇一元素x
    3)若xk≠e,則轉(zhuǎn)回2)。否則若k為素?cái)?shù),則跳到5);若k為合數(shù),則轉(zhuǎn)到4)  
    4)遍歷整除k的真因子d,若xd=e,則轉(zhuǎn)回2)    
    5)輸出x
posted @ 2024-03-20 22:49 春秋十二月 閱讀(678) | 評(píng)論 (0)編輯 收藏
混合線性同余發(fā)生器(MLCG)      
      Xn ≡ αXn-1 + c mod m    0<X0, α, c<m,X0為種子,n=1、2、3...

定理 如果下列3個(gè)條件都滿足,則 MLCG達(dá)到滿周期(即周期d=m)
     (1) (c, m)=1,即 c、m互素
     (2) 對(duì) m的任一素因子p,有α≡1 mod p
     (3) 如果4|m,則 α≡1 mod 4
  該定理的證明在參考文獻(xiàn)[2]中證明并用到如下兩個(gè)引理:
  引理5 設(shè)p為素?cái)?shù),α∈Z+且pα>2,如果 x=1(mod pα),x≠1(mod pα+1);則xp=1(mod pα+1), xp≠1(mod pα+2)
    該引理給出了求一個(gè)整數(shù)的階的判別方法,是理解MLCG周期等于m的充要條件之關(guān)鍵。
    本文闡述為什么p是使xp=1(mod pα+1)成立的最小正整數(shù),以及一般情形m=pw(w≥1)是使xm=1(mod pα+w)成立的最小正整數(shù);為什么前提條件是pα>2。

    ◆ 先論證不存在一個(gè)整數(shù)1≤b<p使得xb=1(mod pα+1)成立
       
    ◆ 再證不存在一個(gè)整數(shù)1≤b<m使得xb=1 (mod pα+w)成立
       
    
     ◆ 為什么前提條件是pα>2
       如果pα=2,x=1(mod 2)且x≠1(mod 22)。令x=1+2q,2 ∤ q。有x2=(1+2q)2=1+4q+4q2,注意到q是奇數(shù),則x2=1(mod22),x2=1(mod23)。故得不到引理的結(jié)論

  引理6(改寫的等價(jià)形式) 如果 α=1(mod 4),則(αm - 1)/(α - 1)=0(mod m) ,m=2w,w>1
     其實(shí)這里當(dāng)α=1(mod 2)且α≠1(mod 4),結(jié)論也是成立的。比如取α=3,m=16,則 (316 -1)=814 -1=(-15)4 -1=-15×-7×-7 -1=-15×-15 -1=9×-7 -1=0(mod 32),
     即(316 -1)/(3-1)=0(mod 16)。但只有當(dāng)α=1(mod 4)時(shí),m才是使結(jié)論成立的最小正整數(shù)。論證如下
         

參考文獻(xiàn)    
     [1] 現(xiàn)代密碼學(xué)第4版 楊波    
     [2] 混合線性同余發(fā)生器的周期分析 張廣強(qiáng)、張小彩
posted @ 2024-03-12 17:30 春秋十二月 閱讀(1833) | 評(píng)論 (0)編輯 收藏
【定義】設(shè)整數(shù)N=P×Q,P與Q皆為素?cái)?shù),如果P≡Q≡3 (mod4),則N為一個(gè)Blum(布盧姆)數(shù)

【定理】設(shè)N為Blum數(shù),N ∤ d,若同余方程x2≡d (mod N)有解,則d的平方根中有一半的Jacobi符號(hào)為1,另一半Jacobi符號(hào)為-1;且僅有一個(gè)平方根為模N的二次剩余
    證明:
    

【推論】設(shè)N為Blum數(shù),N=P×Q,令
    
   證明:
    

例子由定義知N=21=3×7為Blum數(shù),則相關(guān)乘法群、二次剩余子群、Jacobi集合如下
   


【應(yīng)用一】
Blum-Goldwasser公鑰加密
      
    解密正確性是因?yàn)椴襟E1用到了歐拉定理及求平方根的如下算法,步驟2用到了中國(guó)剩余定理

       
       從上可得x=s(P+1)/4 mod P或x=P-s(P+1)/4 mod P,因(-1)(P-1)/2等于-1 mod P,故前者為模P的二次剩余。從加密流程可知{s1,s2,...,sn+1}正是模N二次剩余類的子集。
    所以從密文中r=sn+1求它的(p+1)/4次冪、(q+1)/4次冪,迭代n次就得到了s1模p的解、s1模q的解,又因p、q、n在迭代中不變,故用歐拉定理預(yù)計(jì)算dp mod (p-1)、dq mod (q-1)。
    另一種(不太高效而直接的)解密如下
       
    另加密與明文異或的那部分實(shí)際是偽隨機(jī)比特發(fā)生器,因?yàn)槠椒侥構(gòu)成二次剩余類上的單向陷門置換,其最低有效位是核心斷言,故從si+1求出lsb(si)是不可行的。簡(jiǎn)單證明如下
       
      由于均勻選擇一個(gè)種子s0,所以為概率加密,進(jìn)而由可證明安全定理(每個(gè)概率公鑰加密都是多項(xiàng)式安全的,及每個(gè)多項(xiàng)式安全的公鑰加密都是語(yǔ)義安全的)知滿足IND-CPA安全性
    易知IND-CCA2安全性是不滿足的,因?yàn)閿呈挚捎萌缦鹿舴椒ǐ@取明文:已知目標(biāo)密文C=(r, m⊕σ1σ2σn),構(gòu)造新密文C’=(r, m’⊕m⊕σ1σ2σn),將C’發(fā)給解密預(yù)言機(jī)得到m’’,則m=m’’⊕m’。
    由于加密產(chǎn)生的r與σ1σ2σn都是偽隨機(jī)的,所以密文(r, x⊕σ1σ2σn)的分布是偽隨機(jī)的,在目標(biāo)密文前的解密詢問會(huì)得到若干密文與明文對(duì),無(wú)論怎么構(gòu)造一對(duì)明文,任選其一加密得到的密文都不可區(qū)分。因此IND-CCA1安全性是滿足的

【應(yīng)用二】無(wú)爪函數(shù)/置換構(gòu)造
      
      
    如上構(gòu)造用到Blum數(shù)的上述推論,及基于大整數(shù)因子分解的困難假設(shè)。這里主要解釋下為什么由兩個(gè)Jacobi符號(hào)不同的平方根可計(jì)算大整數(shù)的素因子
      

【應(yīng)用三】偽隨機(jī)數(shù)發(fā)生器
                Xn+1=Xn2 mod N      n=0、1、2...,X0為種子
     顯然種子不為1。若為一個(gè)非二次剩余,則從X1開始就為二次剩余子群的元素,但最后必回到X1而非X0;若為二次剩余,則為了安全需要考究隨機(jī)數(shù)數(shù)列的周期是否整周期(二次剩余子群的大小減1)。
  下面具體分析周期。先舉例幾個(gè)很小的Blum數(shù)
      
     從上面例子可以發(fā)現(xiàn),由二次剩余子群構(gòu)成的隨機(jī)數(shù)數(shù)列不一定是整周期的,對(duì)于N=33無(wú)論種子怎么選,都是整周期4;對(duì)于N=57若種子選-8或7則周期為2,選其它則為6。
  現(xiàn)在一般化考慮,什么情況下才產(chǎn)生整周期?論證如下
       
posted @ 2024-02-25 23:29 春秋十二月 閱讀(1845) | 評(píng)論 (0)編輯 收藏
經(jīng)典的復(fù)雜性關(guān)系 
 P是多項(xiàng)式時(shí)間確定型圖靈機(jī)可識(shí)別的語(yǔ)言類,NP是多項(xiàng)式時(shí)間非確定型圖靈機(jī)可識(shí)別的語(yǔ)言類,NPC表示NP完全問題類,coNP表示NP的補(bǔ),coNPC表示NPC的補(bǔ)。確定型圖靈機(jī)是一種從不選擇移動(dòng)的特殊的非確定型圖靈機(jī),故自然有P屬于NP

     
 
 coNP、coNPC的定義之集合表述
      
 上面頂部的圖有個(gè)假設(shè)前提是:coNPC不屬于NP,即我們相信NP完全問題的補(bǔ)都不屬于NP。但當(dāng)P=NP或NP=coNP時(shí),可以發(fā)現(xiàn)coNPC屬于NP

 ◆ 
為什么coNPC屬于coNP?
   

 ◆ 
為什么NPC 不屬于coNP?
   

 ◆ 
為什么P屬于coNP?
   

 ◆ 當(dāng)P=NP時(shí),為什么NP=coNP?
   
 ◆ 當(dāng)NP=coNP時(shí),為什么NPC=coNPC?
    

 前文的關(guān)系演變圖沒考慮多項(xiàng)式空間問題類PS與遞歸問題類(因?yàn)槟莾蓚€(gè)條件不會(huì)影響到它們),PS(NPS)是帶多項(xiàng)式空間限制的確定型(非確定型)圖靈機(jī)可接受的語(yǔ)言類,但不限制運(yùn)行時(shí)間可能需超多項(xiàng)式或指數(shù)時(shí)間,在外圍加上PS與遞歸語(yǔ)言類后如下

     

 ◆ 
為什么coNP 屬于PS?
   

  用于分析加密
    無(wú)論對(duì)稱還是公鑰加密,統(tǒng)一設(shè)加密運(yùn)算為E,解密為D。對(duì)于正常用戶,E和D皆為DTM(確定性圖靈機(jī));對(duì)于敵手,若攻擊對(duì)稱加密,則E和D為NTM(非確定性圖靈機(jī)),攻擊公鑰則解密為NTM。由于E和D輸入為密鑰和明文或密文,因此DTM和NTM可采用多道/多帶結(jié)構(gòu)。DTM代表P類計(jì)算,NTM代表NP類計(jì)算,故對(duì)于公鑰加密安全保障要求P!=NP,這是一個(gè)必要條件。另根據(jù)計(jì)算理論定理,必有L(NTM)=L(DTM),但是它對(duì)應(yīng)的DTM可能要多花費(fèi)指數(shù)時(shí)間,這亦說明破解公鑰的解密是困難的


零知識(shí)復(fù)雜性關(guān)系
  依據(jù)Oded Goldreich的《密碼學(xué)基礎(chǔ)》,關(guān)系如下

    
 
  相關(guān)原文片段引用如下
 
  BPP是可被概率多項(xiàng)式時(shí)間圖靈機(jī)(即隨機(jī)化算法)識(shí)別的語(yǔ)言類,IP是所有具有交互證明系統(tǒng)的語(yǔ)言構(gòu)成的類,等于多項(xiàng)式空間語(yǔ)言類即前文經(jīng)典復(fù)雜性關(guān)系中的PS,如下圖所述
 
   SZK!=CZK是因?yàn)橛?jì)算不可分辨不一定能推出統(tǒng)計(jì)不可分辨,BPP!=PZK之原因可理解為BPP是退化的特殊的完備交互證明系統(tǒng)(證明者什么都不做,僅由驗(yàn)證者概率性地決定是否接受或拒絕)。
 當(dāng)(非均勻)單向函數(shù)存在時(shí)CZK=IP,涉及的命題與定理如下
 

  



 也就是說PS類中的每種語(yǔ)言都具有零知識(shí)證明系統(tǒng),比如NP有如下構(gòu)造
 
posted @ 2024-02-09 22:19 春秋十二月 閱讀(1430) | 評(píng)論 (0)編輯 收藏

【定理】設(shè)多項(xiàng)式,其中q是某個(gè)素?cái)?shù)的方冪,F(xiàn)q為有限域,則    

           

是置換多項(xiàng)式,則


【證明】

         

posted @ 2023-12-16 21:49 春秋十二月 閱讀(228) | 評(píng)論 (0)編輯 收藏
周知內(nèi)聯(lián)是為了消除函數(shù)調(diào)用的代價(jià),即四大指令序列:調(diào)用前序列、被調(diào)者起始序列、被調(diào)者收尾序列、返回后序列。它們通常對(duì)應(yīng)到體系結(jié)構(gòu)調(diào)用者保存/恢復(fù)寄存器集合與被調(diào)者保存/恢復(fù)寄存器集合之約束。這個(gè)本質(zhì)也是內(nèi)聯(lián)的前提。試問如果有某體系結(jié)構(gòu)比如S,它任意深度的函數(shù)調(diào)用代價(jià)幾乎為零,那么顯然內(nèi)聯(lián)是沒意義沒必要的。但是S可能存在嗎?我認(rèn)為不太可能。因?yàn)闄C(jī)器的資源比如寄存器集數(shù)量與堆??臻g是有限的,且調(diào)用需要知曉上下文,所以不能夠支持任意深度的調(diào)用,但是可以支持有限深度比如4層調(diào)用,這4層調(diào)用代價(jià)幾乎為零,假設(shè)再來一層,那么第5層調(diào)用代價(jià)就不為零了,這時(shí)如果內(nèi)聯(lián)第5層就變成4層調(diào)用,代價(jià)又幾乎為零。綜上所述,內(nèi)聯(lián)無(wú)論在何種體系結(jié)構(gòu),即使在一定深度內(nèi)沒意義也不會(huì)破壞性能。

體系結(jié)構(gòu)直接影響程序性能。主要體現(xiàn)在指令集、寄存器、cache三塊。它們對(duì)于編譯器實(shí)現(xiàn)代碼優(yōu)化必須都考慮,尤其cache比如內(nèi)聯(lián)優(yōu)化、循環(huán)展開、基本塊布局、函數(shù)重排,如果不是因?yàn)橛衏ache這玩意,內(nèi)聯(lián)優(yōu)化的復(fù)雜性會(huì)大為降低,因?yàn)椴挥每紤]代碼膨脹引起的副作用即cache缺失,只要評(píng)估函數(shù)的指令數(shù)與動(dòng)態(tài)執(zhí)行消耗的關(guān)系,指令數(shù)很少但執(zhí)行耗費(fèi)很多時(shí)鐘周期的,則不宜內(nèi)聯(lián),尤其函數(shù)為非葉子結(jié)點(diǎn);指令數(shù)很多但執(zhí)行耗費(fèi)較少的,則可僅內(nèi)聯(lián)其中的快速路徑代碼。因現(xiàn)實(shí)存在cache這玩意,就必須權(quán)衡代碼膨脹帶來的副作用,是否能接受一定的膨脹,需要精確評(píng)估,構(gòu)建函數(shù)調(diào)用頻率與其靜態(tài)調(diào)用位置的矩陣,計(jì)算收益比如平均執(zhí)行一次的耗時(shí)是否減少,若收益為正且明顯則可內(nèi)聯(lián),否則不宜內(nèi)聯(lián)。

有些編譯器為了簡(jiǎn)單處理,不會(huì)內(nèi)聯(lián)帶靜態(tài)變量的函數(shù)哪怕指令數(shù)很少,或者內(nèi)聯(lián)不太正確比如LLVM(詳見下文)。其實(shí)單從技術(shù)上可以做到,不過要復(fù)雜些,復(fù)雜在于鏈接器的協(xié)作。為了保證函數(shù)級(jí)靜態(tài)變量的語(yǔ)義,編譯時(shí)要預(yù)留全局唯一標(biāo)志與構(gòu)造函數(shù)的占位符,在調(diào)用者體內(nèi)插入對(duì)全局唯一標(biāo)志的(位)判斷(標(biāo)志字的一位對(duì)應(yīng)一個(gè)靜態(tài)變量,表明是否已構(gòu)造或初始化賦值)、構(gòu)造函數(shù)調(diào)用/初始化賦值、置位標(biāo)志,而鏈接時(shí)要確定全局唯一標(biāo)志及構(gòu)造函數(shù)的地址。靜態(tài)變量、全局唯一標(biāo)志放于可執(zhí)行文件的數(shù)據(jù)區(qū),全局唯一構(gòu)造/初始化及析構(gòu)函數(shù)放于代碼區(qū),具體布局位置可以靈活,比如. data. static_obj,. text. obj. ctor/dtor。如果這種函數(shù)性能影響較大需要內(nèi)聯(lián)優(yōu)化,而編譯器不支持,有個(gè)替代的辦法是用全局變量或文件/類級(jí)別的靜態(tài)變量,輔以對(duì)應(yīng)標(biāo)志處理一次性構(gòu)造或初始化賦值(必要時(shí)將這處理封裝為一個(gè)函數(shù)以確保目標(biāo)函數(shù)被內(nèi)聯(lián)),可達(dá)到同樣效果不足之處是作用域擴(kuò)大了。

關(guān)于LLVM對(duì)于帶靜態(tài)變量的函數(shù)之內(nèi)聯(lián)的測(cè)驗(yàn)結(jié)果












posted @ 2023-11-16 23:32 春秋十二月 閱讀(277) | 評(píng)論 (0)編輯 收藏
談兩個(gè)問題:高性能與安全性

先談高性能:這里指代碼實(shí)現(xiàn)層面(非數(shù)學(xué)優(yōu)化層面),使用寄存器優(yōu)化,即主密鑰/輪密鑰、敏感數(shù)據(jù)比如中間/臨時(shí)變量必須存于寄存器,明文/密文放在內(nèi)存(若有夠用的寄存器則放寄存器),主密鑰用特權(quán)寄存器(為支持長(zhǎng)期存儲(chǔ),比如調(diào)試寄存器、MSR寄存器),輪密鑰和敏感數(shù)據(jù)用通用寄存器。那么怎么做?穩(wěn)妥快捷的方法是用匯編或內(nèi)聯(lián)匯編,手工編排寄存器即構(gòu)建密鑰與敏感數(shù)據(jù)到寄存器集合的映射,若用普通的匯編指令,則寄存器的映射比較自由;若用專用的加密指令,則映射相對(duì)受限。如果用高級(jí)語(yǔ)言比如c/c++開發(fā),問題在于register關(guān)鍵字非強(qiáng)制生效,即使強(qiáng)制的,編譯器優(yōu)化(比如公共子表達(dá)式消除)產(chǎn)生的中間變量及寄存器分配策略不完全可控,需要修改編譯器比如LLVM強(qiáng)制某些變量必須分配(特定的)寄存器,為通用性要從編程語(yǔ)言語(yǔ)法屬性到目標(biāo)機(jī)器代碼生成都改動(dòng)支持,這個(gè)方法實(shí)現(xiàn)成本有點(diǎn)大。下面是摘自LLVM X86RegisterInfo.td的部分寄存器
  1 // 32-bit registers
  2 let SubRegIndices = [sub_16bit, sub_16bit_hi], CoveredBySubRegs = 1 in {
  3 def EAX : X86Reg<"eax", 0, [AX, HAX]>, DwarfRegNum<[-2, 0, 0]>;
  4 def EDX : X86Reg<"edx", 2, [DX, HDX]>, DwarfRegNum<[-2, 2, 2]>;
  5 def ECX : X86Reg<"ecx", 1, [CX, HCX]>, DwarfRegNum<[-2, 1, 1]>;
  6 def EBX : X86Reg<"ebx", 3, [BX, HBX]>, DwarfRegNum<[-2, 3, 3]>;
  7 def ESI : X86Reg<"esi", 6, [SI, HSI]>, DwarfRegNum<[-2, 6, 6]>;
  8 def EDI : X86Reg<"edi", 7, [DI, HDI]>, DwarfRegNum<[-2, 7, 7]>;
  9 def EBP : X86Reg<"ebp", 5, [BP, HBP]>, DwarfRegNum<[-2, 4, 5]>;
 10 def ESP : X86Reg<"esp", 4, [SP, HSP]>, DwarfRegNum<[-2, 5, 4]>;
 11 def EIP : X86Reg<"eip", 0, [IP, HIP]>, DwarfRegNum<[-2, 8, 8]>;
 12 }
 13 
 14 // X86-64 only, requires REX
 15 let SubRegIndices = [sub_16bit, sub_16bit_hi], CoveredBySubRegs = 1 in {
 16 def R8D  : X86Reg<"r8d",   8, [R8W,R8WH]>;
 17 def R9D  : X86Reg<"r9d",   9, [R9W,R9WH]>;
 18 def R10D : X86Reg<"r10d", 10, [R10W,R10WH]>;
 19 def R11D : X86Reg<"r11d", 11, [R11W,R11WH]>;
 20 def R12D : X86Reg<"r12d", 12, [R12W,R12WH]>;
 21 def R13D : X86Reg<"r13d", 13, [R13W,R13WH]>;
 22 def R14D : X86Reg<"r14d", 14, [R14W,R14WH]>;
 23 def R15D : X86Reg<"r15d", 15, [R15W,R15WH]>;
 24 }
 25 
 26 // 64-bit registers, X86-64 only
 27 let SubRegIndices = [sub_32bit] in {
 28 def RAX : X86Reg<"rax", 0, [EAX]>, DwarfRegNum<[0, -2, -2]>;
 29 def RDX : X86Reg<"rdx", 2, [EDX]>, DwarfRegNum<[1, -2, -2]>;
 30 def RCX : X86Reg<"rcx", 1, [ECX]>, DwarfRegNum<[2, -2, -2]>;
 31 def RBX : X86Reg<"rbx", 3, [EBX]>, DwarfRegNum<[3, -2, -2]>;
 32 def RSI : X86Reg<"rsi", 6, [ESI]>, DwarfRegNum<[4, -2, -2]>;
 33 def RDI : X86Reg<"rdi", 7, [EDI]>, DwarfRegNum<[5, -2, -2]>;
 34 def RBP : X86Reg<"rbp", 5, [EBP]>, DwarfRegNum<[6, -2, -2]>;
 35 def RSP : X86Reg<"rsp", 4, [ESP]>, DwarfRegNum<[7, -2, -2]>;
 36 
 37 // These also require REX.
 38 def R8  : X86Reg<"r8",   8, [R8D]>,  DwarfRegNum<[ 8, -2, -2]>;
 39 def R9  : X86Reg<"r9",   9, [R9D]>,  DwarfRegNum<[ 9, -2, -2]>;
 40 def R10 : X86Reg<"r10", 10, [R10D]>, DwarfRegNum<[10, -2, -2]>;
 41 def R11 : X86Reg<"r11", 11, [R11D]>, DwarfRegNum<[11, -2, -2]>;
 42 def R12 : X86Reg<"r12", 12, [R12D]>, DwarfRegNum<[12, -2, -2]>;
 43 def R13 : X86Reg<"r13", 13, [R13D]>, DwarfRegNum<[13, -2, -2]>;
 44 def R14 : X86Reg<"r14", 14, [R14D]>, DwarfRegNum<[14, -2, -2]>;
 45 def R15 : X86Reg<"r15", 15, [R15D]>, DwarfRegNum<[15, -2, -2]>;
 46 def RIP : X86Reg<"rip",  0, [EIP]>,  DwarfRegNum<[16, -2, -2]>;
 47 }
 48 
 49 // XMM Registers, used by the various SSE instruction set extensions.
 50 def XMM0: X86Reg<"xmm0", 0>, DwarfRegNum<[17, 21, 21]>;
 51 def XMM1: X86Reg<"xmm1", 1>, DwarfRegNum<[18, 22, 22]>;
 52 def XMM2: X86Reg<"xmm2", 2>, DwarfRegNum<[19, 23, 23]>;
 53 def XMM3: X86Reg<"xmm3", 3>, DwarfRegNum<[20, 24, 24]>;
 54 def XMM4: X86Reg<"xmm4", 4>, DwarfRegNum<[21, 25, 25]>;
 55 def XMM5: X86Reg<"xmm5", 5>, DwarfRegNum<[22, 26, 26]>;
 56 def XMM6: X86Reg<"xmm6", 6>, DwarfRegNum<[23, 27, 27]>;
 57 def XMM7: X86Reg<"xmm7", 7>, DwarfRegNum<[24, 28, 28]>;
 58 
 59 // X86-64 only
 60 def XMM8:  X86Reg<"xmm8",   8>, DwarfRegNum<[25, -2, -2]>;
 61 def XMM9:  X86Reg<"xmm9",   9>, DwarfRegNum<[26, -2, -2]>;
 62 def XMM10: X86Reg<"xmm10", 10>, DwarfRegNum<[27, -2, -2]>;
 63 def XMM11: X86Reg<"xmm11", 11>, DwarfRegNum<[28, -2, -2]>;
 64 def XMM12: X86Reg<"xmm12", 12>, DwarfRegNum<[29, -2, -2]>;
 65 def XMM13: X86Reg<"xmm13", 13>, DwarfRegNum<[30, -2, -2]>;
 66 def XMM14: X86Reg<"xmm14", 14>, DwarfRegNum<[31, -2, -2]>;
 67 def XMM15: X86Reg<"xmm15", 15>, DwarfRegNum<[32, -2, -2]>;
 68 
 69 def XMM16:  X86Reg<"xmm16", 16>, DwarfRegNum<[67, -2, -2]>;
 70 def XMM17:  X86Reg<"xmm17", 17>, DwarfRegNum<[68, -2, -2]>;
 71 def XMM18:  X86Reg<"xmm18", 18>, DwarfRegNum<[69, -2, -2]>;
 72 def XMM19:  X86Reg<"xmm19", 19>, DwarfRegNum<[70, -2, -2]>;
 73 def XMM20:  X86Reg<"xmm20", 20>, DwarfRegNum<[71, -2, -2]>;
 74 def XMM21:  X86Reg<"xmm21", 21>, DwarfRegNum<[72, -2, -2]>;
 75 def XMM22:  X86Reg<"xmm22", 22>, DwarfRegNum<[73, -2, -2]>;
 76 def XMM23:  X86Reg<"xmm23", 23>, DwarfRegNum<[74, -2, -2]>;
 77 def XMM24:  X86Reg<"xmm24", 24>, DwarfRegNum<[75, -2, -2]>;
 78 def XMM25:  X86Reg<"xmm25", 25>, DwarfRegNum<[76, -2, -2]>;
 79 def XMM26:  X86Reg<"xmm26", 26>, DwarfRegNum<[77, -2, -2]>;
 80 def XMM27:  X86Reg<"xmm27", 27>, DwarfRegNum<[78, -2, -2]>;
 81 def XMM28:  X86Reg<"xmm28", 28>, DwarfRegNum<[79, -2, -2]>;
 82 def XMM29:  X86Reg<"xmm29", 29>, DwarfRegNum<[80, -2, -2]>;
 83 def XMM30:  X86Reg<"xmm30", 30>, DwarfRegNum<[81, -2, -2]>;
 84 def XMM31:  X86Reg<"xmm31", 31>, DwarfRegNum<[82, -2, -2]>;
 85 
 86 // YMM0-15 registers, used by AVX instructions and
 87 // YMM16-31 registers, used by AVX-512 instructions.
 88 let SubRegIndices = [sub_xmm] in {
 89   foreach  Index = 0-31 in {
 90     def YMM#Index : X86Reg<"ymm"#Index, Index, [!cast("XMM"#Index)]>,
 91                     DwarfRegAlias("XMM"#Index)>;
 92   }
 93 }
 94 
 95 // ZMM Registers, used by AVX-512 instructions.
 96 let SubRegIndices = [sub_ymm] in {
 97   foreach  Index = 0-31 in {
 98     def ZMM#Index : X86Reg<"zmm"#Index, Index, [!cast("YMM"#Index)]>,
 99                     DwarfRegAlias("XMM"#Index)>;
100   }
101 }
102 
103 // Debug registers
104 def DR0  : X86Reg<"dr0",   0>;
105 def DR1  : X86Reg<"dr1",   1>;
106 def DR2  : X86Reg<"dr2",   2>;
107 def DR3  : X86Reg<"dr3",   3>;
108 def DR4  : X86Reg<"dr4",   4>;
109 def DR5  : X86Reg<"dr5",   5>;
110 def DR6  : X86Reg<"dr6",   6>;
111 def DR7  : X86Reg<"dr7",   7>;
112 def DR8  : X86Reg<"dr8",   8>;
113 def DR9  : X86Reg<"dr9",   9>;
114 def DR10 : X86Reg<"dr10", 10>;
115 def DR11 : X86Reg<"dr11", 11>;
116 def DR12 : X86Reg<"dr12", 12>;
117 def DR13 : X86Reg<"dr13", 13>;
118 def DR14 : X86Reg<"dr14", 14>;
119 def DR15 : X86Reg<"dr15", 15>;
120 
121 def GR32 : RegisterClass<"X86", [i32], 32,
122                          (add EAX, ECX, EDX, ESI, EDI, EBX, EBP, ESP,
123                               R8D, R9D, R10D, R11D, R14D, R15D, R12D, R13D)>;
124 
125 // GR64 - 64-bit GPRs. This oddly includes RIP, which isn't accurate, since
126 // RIP isn't really a register and it can't be used anywhere except in an
127 // address, but it doesn't cause trouble.
128 // FIXME: it *does* cause trouble - CheckBaseRegAndIndexReg() has extra
129 // tests because of the inclusion of RIP in this register class.
130 def GR64 : RegisterClass<"X86", [i64], 64,
131                          (add RAX, RCX, RDX, RSI, RDI, R8, R9, R10, R11,
132                               RBX, R14, R15, R12, R13, RBP, RSP, RIP)>;

再談安全性
:為保障安全就復(fù)雜了,由于密鑰及敏感數(shù)據(jù)存于寄存器,首先要防止寄存器交換/拷貝到內(nèi)存(為避免讀取內(nèi)存的冷啟動(dòng)攻擊、基于cache的側(cè)信道攻擊)的一切可能因素,比如進(jìn)程調(diào)度、由信號(hào)或異步中斷引起的處理器模式切換、系統(tǒng)休眠,如果在用戶態(tài)實(shí)現(xiàn)加解密,就避免不了被調(diào)度或切換,因?yàn)閱魏松喜豢赡苤贿\(yùn)行加解密進(jìn)程,所以得實(shí)現(xiàn)在內(nèi)核態(tài)。這樣一來就要在加解密中禁止搶占與中斷,考慮到系統(tǒng)響應(yīng),禁止的粒度不能過大最小為一個(gè)分組,分組加解密前禁止搶占與中斷(比如調(diào)用linux內(nèi)核接口preempt_disable、local_irq_save),解除禁止(比如調(diào)用linux內(nèi)核接口preempt_enablelocal_irq_restore)前必須清零寄存器。在系統(tǒng)休眠時(shí),禁止寄存器復(fù)制到內(nèi)存,休眠恢復(fù)時(shí)在所有用戶態(tài)進(jìn)程恢復(fù)前執(zhí)行密鑰初始化,同理系統(tǒng)啟動(dòng)時(shí)的密鑰初始化也得在用戶態(tài)進(jìn)程運(yùn)行前執(zhí)行。其次要防止其它用戶態(tài)進(jìn)程/內(nèi)核線程/中斷服務(wù)程序讀寫寄存器尤其特權(quán)寄存器(為避免用戶態(tài)或內(nèi)核態(tài)rootkit),所以要修改內(nèi)核,過濾相關(guān)系統(tǒng)調(diào)用比如linux的ptrace,過濾相關(guān)內(nèi)核函數(shù)比如linux的native_set_debugreg/native_get_debugreg。對(duì)于不可屏蔽的中斷靠禁止是無(wú)效的,只能修改中斷處理程序避免寄存器中的密鑰數(shù)據(jù)被擴(kuò)散到內(nèi)存,比如在中斷處理函數(shù)入口處清零相關(guān)寄存器。綜上基于已知代碼修改的防御不能防御惡意加載/修改代碼之類的攻擊,比如動(dòng)態(tài)安裝的內(nèi)核模塊/驅(qū)動(dòng),但可有效防御冷啟動(dòng)攻擊、只讀DMA攻擊、基于cache的側(cè)信道攻擊、用戶態(tài)權(quán)限的軟件攻擊、內(nèi)核態(tài)的僅運(yùn)行已有代碼的軟件攻擊
posted @ 2023-11-09 16:39 春秋十二月 閱讀(4566) | 評(píng)論 (0)編輯 收藏
僅列出標(biāo)題
共17頁(yè): 1 2 3 4 5 6 7 8 9 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲午夜精品久久| 国产色产综合色产在线视频| 99伊人成综合| 9久草视频在线视频精品| 日韩亚洲国产精品| 亚洲作爱视频| 亚洲欧美中日韩| 久久久久久久精| 免费成人黄色av| 欧美激情亚洲另类| 国产精品一区二区在线观看网站| 国产亚洲欧洲一区高清在线观看| 在线日韩成人| 国产精品99久久99久久久二8 | 一区免费在线| 亚洲国产一成人久久精品| 日韩午夜av在线| 午夜精品亚洲| 欧美大片va欧美在线播放| 亚洲精品在线视频观看| 欧美自拍偷拍| 欧美偷拍另类| 在线观看日韩专区| 亚洲综合久久久久| 亚洲第一黄网| 亚洲欧美韩国| 欧美精品自拍偷拍动漫精品| 国产美女在线精品免费观看| 亚洲日本aⅴ片在线观看香蕉| 性欧美精品高清| 亚洲人成亚洲人成在线观看| 欧美一二三区在线观看| 欧美色网在线| 亚洲九九精品| 久久香蕉国产线看观看av| 亚洲精品在线视频| 免费在线亚洲欧美| 国内视频一区| 久久精品一二三区| 亚洲手机成人高清视频| 欧美日韩1080p| 亚洲激情av| 蜜臀av国产精品久久久久| 亚洲欧美视频在线| 国产精品理论片在线观看| 一区二区三区国产| 欧美韩国日本一区| 久久久久国产一区二区三区四区| 国产精品亚洲激情| 午夜天堂精品久久久久| 日韩亚洲精品在线| 欧美日韩免费观看一区二区三区 | 久久成人免费| 亚洲深夜福利网站| 欧美午夜激情小视频| 亚洲色在线视频| 一区二区三区日韩| 国产精品天天看| 亚洲欧美中文在线视频| 一区二区高清在线观看| 国产精品国产三级国产专区53 | 国产精品久久久亚洲一区| 另类图片国产| 亚洲精品小视频| 欧美日韩一区在线视频| 在线一区日本视频| 99精品国产福利在线观看免费 | 日韩系列欧美系列| 亚洲人成网站777色婷婷| 欧美国产三区| 亚洲午夜一区二区| 亚洲欧美日韩成人| 激情综合色综合久久| 农村妇女精品| 欧美韩国一区| 亚洲资源在线观看| 欧美在线亚洲| 亚洲人成高清| 中日韩在线视频| 韩日视频一区| 亚洲国产精品va| 国产精品欧美激情| 美女性感视频久久久| 欧美精品日韩| 久久久久88色偷偷免费| 欧美夫妇交换俱乐部在线观看| 99在线精品视频在线观看| 亚洲一区在线视频| 有坂深雪在线一区| 一级成人国产| 激情综合色综合久久| 亚洲九九精品| 狠狠色狠狠色综合| 亚洲精品一区二区三区在线观看| 国产精品外国| 亚洲国产精品传媒在线观看 | 免费av成人在线| 国产精品99久久99久久久二8| 欧美一区二区三区的| 亚洲美女色禁图| 欧美在线视频播放| 亚洲一区亚洲二区| 麻豆精品在线观看| 久久精品理论片| 欧美日韩专区| 亚洲国产日韩一区二区| 国产人成一区二区三区影院| 亚洲日本免费| 亚洲国产精品v| 欧美一级视频一区二区| 亚洲视频观看| 欧美电影在线观看完整版| 久久久久se| 国产精品v欧美精品v日韩| 亚洲第一页中文字幕| 激情av一区| 午夜精品久久久久久久99热浪潮| 妖精视频成人观看www| 亚洲高清一区二| 欧美激情日韩| 欧美成人性生活| 国内精品国产成人| 欧美一区=区| 欧美在线国产| 国产精品视频一二| 亚洲午夜精品久久久久久浪潮| 一本色道久久综合亚洲精品不| 美女尤物久久精品| 免费在线亚洲欧美| 在线观看亚洲精品视频| 久久成人羞羞网站| 久久久精品国产免费观看同学| 国产欧美日韩综合一区在线播放| 一区二区三区日韩精品| 亚洲欧美一区二区原创| 国产精品免费观看在线| 亚洲系列中文字幕| 欧美专区日韩专区| 国产综合一区二区| 久久亚洲不卡| 亚洲激情视频网站| 一区二区三区高清在线观看| 欧美日韩人人澡狠狠躁视频| 一本久久综合| 久久国产精品第一页| 国产主播精品在线| 麻豆精品在线视频| 亚洲美女尤物影院| 欧美一区二区三区在| 韩国三级在线一区| 免费观看日韩av| 日韩午夜电影av| 欧美一区二视频在线免费观看| 国产午夜精品一区理论片飘花 | 亚洲欧美国产高清va在线播| 国产精品久久久久久久久借妻 | 亚洲人成在线播放网站岛国| av成人黄色| 国产精品一区二区久久久| 欧美中文在线观看国产| 蜜臀va亚洲va欧美va天堂| 亚洲精品裸体| 国产精品第三页| 久久精彩免费视频| 亚洲激情一区二区| 欧美一级一区| 亚洲国产一二三| 国产精品日产欧美久久久久| 久久久欧美一区二区| 亚洲精选久久| 麻豆成人在线| 亚洲欧美中文在线视频| 91久久夜色精品国产九色| 国产精品嫩草影院av蜜臀| 久久综合精品国产一区二区三区| 日韩视频第一页| 久久男人资源视频| 亚洲视频每日更新| 亚洲国产欧美在线人成| 国产精品区一区二区三区| 蜜臀a∨国产成人精品 | 国产精品www.| 久久综合九九| 亚洲一区二区四区| 欧美激情第二页| 久久久久在线| 性欧美xxxx视频在线观看| 日韩亚洲视频| 亚洲国产美女| 在线不卡免费欧美| 国产欧美亚洲一区| 欧美日韩在线播放三区| 免费一级欧美片在线观看| 欧美专区日韩专区| 亚洲欧美日韩精品久久久久| 亚洲看片免费| 91久久精品国产91久久| 欧美成人免费网| 久久婷婷国产综合国色天香| 欧美一区网站|