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

隨筆-162  評(píng)論-223  文章-30  trackbacks-0
談兩個(gè)問(wèn)題:高性能與安全性

先談高性能:這里指代碼實(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++開(kāi)發(fā),問(wèn)題在于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)。這樣一來(lái)就要在加解密中禁止搶占與中斷,考慮到系統(tǒng)響應(yīng),禁止的粒度不能過(guò)大最小為一個(gè)分組,分組加解密前禁止搶占與中斷(比如調(diào)用linux內(nèi)核接口preempt_disablelocal_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ù)程序讀寫(xiě)寄存器尤其特權(quán)寄存器(為避免用戶態(tài)或內(nèi)核態(tài)rootkit),所以要修改內(nèi)核,過(guò)濾相關(guān)系統(tǒng)調(diào)用比如linux的ptrace,過(guò)濾相關(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 on 2023-11-09 16:39 春秋十二月 閱讀(4566) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Algorithm
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            91久久夜色精品国产九色| 亚洲欧洲一二三| 亚洲毛片一区二区| 国产精品日韩高清| 欧美日韩精品免费| 欧美一区观看| 性欧美8khd高清极品| 亚洲二区三区四区| 欧美福利一区二区| 久久久综合视频| 久久伊人精品天天| 久久成人精品无人区| 欧美一区永久视频免费观看| 午夜精品久久一牛影视| 亚洲人成艺术| 欧美激情精品久久久久久变态 | 欧美xx视频| 亚洲电影专区| 国产精品99久久久久久白浆小说| 欧美激情精品久久久久久| 亚洲欧洲一区二区在线播放| 亚洲激情一区| 美女亚洲精品| 亚洲一区欧美一区| 久久精品视频在线播放| 欧美在线精品免播放器视频| 蜜乳av另类精品一区二区| 久久国产色av| 欧美日韩的一区二区| 国内精品久久久久影院薰衣草| 亚洲日本va午夜在线影院| 亚洲日本成人| 亚洲你懂的在线视频| 免费不卡在线观看| 亚洲成人在线视频网站| 最新国产乱人伦偷精品免费网站| 一区二区欧美精品| 女仆av观看一区| 午夜伦理片一区| 久久久久国产精品人| 亚洲毛片av| 欧美视频一区二区三区…| 亚洲精品一区在线观看| 免费看黄裸体一级大秀欧美| 欧美伊久线香蕉线新在线| 国产精品理论片在线观看| 亚洲欧美另类久久久精品2019| 亚洲精品乱码久久久久| 国产精品成人一区二区| 欧美一区二视频| 免费成人在线视频网站| 99精品欧美一区| 夜夜狂射影院欧美极品| 国产专区一区| 亚洲精品社区| 国产综合网站| 日韩视频在线播放| 激情成人亚洲| 日韩一区二区精品葵司在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美激情91| 欧美亚洲一区二区三区| 久久精品一区蜜桃臀影院| 日韩一区二区久久| 小嫩嫩精品导航| 亚洲女与黑人做爰| 欧美11—12娇小xxxx| 欧美在线视频不卡| 欧美日韩调教| 欧美国内亚洲| 国产一区亚洲一区| 亚洲一区二区三区在线看| 亚洲欧洲精品成人久久奇米网 | 国产精品一区二区三区乱码 | 久久爱91午夜羞羞| 久久久久久噜噜噜久久久精品| av成人国产| 欧美精品一区二区三区蜜桃| 老司机午夜免费精品视频| 国产午夜精品美女视频明星a级| 99成人免费视频| 亚洲精品综合精品自拍| 欧美成人综合在线| 亚洲精品在线三区| 亚洲欧美精品在线观看| 国产精品欧美久久久久无广告| 正在播放日韩| 久久亚洲综合| 在线观看日产精品| 免费av成人在线| 一区二区三区欧美日韩| 性欧美1819性猛交| 欧美日韩国产色站一区二区三区| 亚洲精品少妇30p| 亚洲欧美文学| 在线观看亚洲专区| 欧美无乱码久久久免费午夜一区| 国产精品99久久久久久www| 久久人人97超碰精品888| 日韩亚洲视频| 国产专区欧美专区| 欧美日韩一区二区三区在线看| 午夜精品一区二区三区四区 | 久久国产欧美精品| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲第一福利视频| 欧美片第1页综合| 久久国产色av| 亚洲视频一区二区在线观看 | 亚洲二区精品| 久久狠狠久久综合桃花| 亚洲欧美在线观看| 亚洲小说春色综合另类电影| 久久国产精品99精品国产| 久久这里只精品最新地址| 亚洲在线视频网站| 99在线精品免费视频九九视| 亚洲高清视频的网址| 在线不卡中文字幕| 亚洲激情在线视频| 亚洲国产欧美不卡在线观看| 在线免费高清一区二区三区| 国产三级精品三级| 一本色道久久综合狠狠躁的推荐| 免费观看成人鲁鲁鲁鲁鲁视频| 麻豆av一区二区三区| 欧美成人午夜激情在线| 亚洲精品男同| 欧美一区二区啪啪| 免费视频久久| 欧美四级电影网站| 国产亚洲一区二区三区在线观看| 国模叶桐国产精品一区| 在线播放中文字幕一区| 一区二区电影免费观看| 欧美一区二区三区婷婷月色| 久久嫩草精品久久久精品一| 亚洲级视频在线观看免费1级| 这里只有精品视频| 久久蜜臀精品av| 久久一区中文字幕| 欧美视频三区在线播放| 在线不卡亚洲| 久久九九热免费视频| 日韩亚洲在线| 欧美va亚洲va香蕉在线| 国产情侣久久| 亚洲欧美久久| 一本色道久久综合亚洲精品按摩| 久久美女性网| 影音先锋日韩精品| 午夜在线精品偷拍| 国产精品ⅴa在线观看h| 亚洲人成77777在线观看网| 久久综合久久久| 久久成人一区二区| 狠狠色丁香婷婷综合| 久久不射网站| 久久精品国产第一区二区三区最新章节| 欧美日韩精品免费观看视一区二区 | 久久一区二区三区国产精品 | 久久美女艺术照精彩视频福利播放| 久久中文在线| 欧美一区二区在线免费播放| 国产精品第一页第二页第三页| 9色精品在线| 亚洲一区二区三区三| 国产精品夫妻自拍| 久久国产精品黑丝| 久久夜色精品亚洲噜噜国产mv | 中国成人亚色综合网站| 国产精品国产三级国产aⅴ9色| 欧美在线网址| 欧美日本精品| 久久久精品午夜少妇| 夜夜嗨av色综合久久久综合网 | 亚洲电影在线| 国产精品国产馆在线真实露脸 | 麻豆91精品91久久久的内涵| 欧美不卡视频一区发布| 午夜伦理片一区| 欧美大片一区二区| 久久久亚洲影院你懂的| 欧美性理论片在线观看片免费| 久久综合久久综合久久| 久久久蜜桃精品| 一区二区三区三区在线| 久久久天天操| 久久久亚洲国产美女国产盗摄| 麻豆精品在线播放| 欧美一级黄色网| 国产精品成人一区二区| 亚洲三级视频在线观看| 1024国产精品| 久久久久久亚洲精品杨幂换脸| 亚洲欧美综合v| 国产精品一区在线播放| 亚洲一区日韩| 欧美一区二区三区婷婷月色| 国产精品人成在线观看免费|