硬件安全系列 逻辑电路基础知识介绍(一)
前言
我帶著新的系列又來了,之前的自動化代碼審計工具還會在之后分享實際編寫的過程思路以及代碼。
新的系列是硬件安全,非常龐大的知識體系,我只是分享部分我所學習到的。會包括VLSI Testing ,Hareware Implementation of hash functions ,RSA Implementation and Security,Security Based on Physical Unclonability and Discoder,Hardware Metering,Digital Watermark,Physical attacks and tamper resistance,side channel attacks ,trusted design in FPGAs,security in embedded systems ,security for RFID Tags,Memory integrity protection,hardware trojans.這個框架是由Introduction to Hardware Security and Trust提供的。其中的知識內容會包括coursera中的大量課程以及大量書籍中內容。這一篇的內容包括Hardware Security by GangQu and VLSI CAD Part I: Logic 以及書中內容
首先是邏輯電路部分的基礎知識。
Digital System
數字系統
一個系統可以看作一個黑盒,這個黑盒處理輸入生成輸出,輸入和輸出之間的關系定義為功能。
作為處理現實生活應用的一個數字系統,首先要處理的就是現實和數字之間的關系。現實生活中的信號是連續的,但是數字信號不能完美的復現,所以我們只能將連續的信號分割,用機械化的數字信號近似表示,如同微分。
basic logic gates
基本邏輯門
and xy
or x+y
not ^x
常用的由上述三個基本邏輯門構成的復雜邏輯門
NAND ^(xy)
NOR ^(x+y)
XOR (xy+xy)
XNOR (xy+x^y)
design
將一個實際問題轉換成電路圖我們要明確實際問題的輸入輸出關系列表表示,得到最簡邏輯表達式,選擇觸發器,明確特定輸入,簡化電路圖。
第一步明確實際問題輸入輸出:將所有數據轉換成二進制
第二步列表
第三步得到最簡邏輯關系和對應的電路圖
combinational and sequential
組合與時序邏輯
組合邏輯就是無論在什么時候什么環境相同輸入對應相同輸出
時序邏輯就是相同輸入會對應不同輸出,而相同輸入不同輸出的原因就是時序邏輯中包含了存儲功能,可以存儲狀態。而這不同的狀態就導致相同輸入會出現不同輸出。
combinational例子
設計一個數字電路,判斷輸入月份是否有31天。
首先月份有12個月,1,2,3 … 12。分別用二進制表示就是4位二進制數。從0001到1100。有31天我們用1表示,沒有用0表示。
接著用表格表示這些數據之間的關系
我們尋找ABCD與F的邏輯關系
從現實角度:1 3 5 7 8 10 12我們可以看到7為分界線,7之前都是奇數,8之后都是偶數。8在二進制中是1000,奇數D為1,偶數D為0,7之前A為0,7之后A為1,我們可以猜測ABCDF邏輯關系F=A XOR D
從真值表角度:前7行我們發現D和F一致,7之后D和F為反。7之前和之后的區別在于A從0到1。所以得到F = A XOR D
最后構造電路圖
the different between sequential and combinational in harfware basic memory unit
時序邏輯能夠對相同輸入產生不同輸出的原因就是其中有基本的存儲單元實現狀態存儲
Flip-flop
觸發器
這個觸發器可以看到是兩個輸出兩個輸出,邏輯門是兩個或非門。接下來我們做出真值表
我們可以看到RS輸入是00時,Q和Q‘不能得到答案,
在Q Q’原本是00狀態下輸入00輸出無法穩定
原狀態10輸入00為01
原狀態01輸入00為10
也就是當我們輸入00時,輸出會變成原來輸出的非運算結果。
這個邏輯關系中右半部分可以看到和我們之前分析的二輸入二輸出的邏輯電路圖很像。我們先對右邊進行分析,列出真值表。
同樣的只有輸入11是不確定的,在原狀態為11時,輸出為無法穩定,原狀態10 輸出為10 原狀態01 輸出為01
接下來我們來看看左邊部分電路圖對邏輯的影響:
當CP為0時,無論RS輸入是什么,右邊邏輯輸入都會是00,其余狀態下不影響。也就是我們存在一個接口可以讓我們一鍵控制。
Boolean Decompositions
Shannon Expansion
對于一個函數F(x_1 ,x_2,….x_n),為了得到對于特定x_i的展開式,F可以改寫成 x_i F(x_i=1) + ^x_i F(x_i=0)。當對更多x_i展開時,可以改寫成x_i y_i F(x_i=1,y_i=1) + x_i ^y_i F(x_i=1,y_i=0) + ^x_i y_i F(x_i=0,y_i=1)+ ^x_i ^y_i F(x_i=0,y_i=0) = F(x,y,w,z)從而簡化表達式
Boolean Difference
?f / ?x = f(x_i) ⊕ f(^x_i) (異或 xor 不同就是1 相同就是0)
?f / ?x?y = ?f / ?y?x
?(f ⊕ g) / ?x = ?f / ?x ⊕ ?g / ?x
設定x為1 判斷 f(x) 和 f(^x)
for gate-level: not ?f / ?x = 1 and ?f / ?x = y (y為1,x變則變)
or ?f / ?x = ^y (y為0,x變則變) xor ?f / ?x = 1
首先,異或的邏輯,相同為0,不同為1。有沒有想到什么數學知識。導數,當x改變時,y不變,則導數為0,否則不等于0。在硬件當中,執行異或操作的兩個輸入相同則為0,不同則為1。
所以我們引入?f / ?x = f(x_i) ⊕ f(^x_i) 實現判斷x_i是否影響F
從邏輯門的角度理解,我們得到not這個F一定受x影響(由于not單輸入,輸入改變輸出一定改變),and這個F當y為1時受影響,0不受影響(and邏輯門有0出0全1出1),or這個F當y為0時受影響,1時不受影響(or邏輯門有1出1,全0出0),xor也受x_i影響(由于xor邏輯門同為0,異為1,當改變一個輸入,兩個輸入之間的關系一定改變)
Quantification Operators
首先,介紹定義quantification(量化)。量化就是對一個邏輯輸入賦值,可以是全部,也可以是任意一個。
universal quantification
全部量化
全部量化就是賦值邏輯輸入為全部,也就是對任何x所屬范圍的真實值都滿足量化后條件。
我們舉個現實例子
2 0 = 0 + 0 2 1 = 1 + 1 ……
我們可以歸納成2 * n = n + n對于任意實數滿足條件
在數字電路中,我們可以用下面的形式表示全部量化
(∨x_i F)[x_1,x_2 … x_n]
(∨xy F)[x_1,x_2 … x_n] = (∨x(∨y F)) =Fxy Fx’y Fxy’ Fx’y’
對于所有 x y 都滿足F 為1,也就是x y不影響F
existential quantification
存在量化
相對應的,存在量化就是我們歸納的結果在特定條件下能夠滿足原邏輯。
數字電路中的表示如下
(ヨx_i F)[x_1,x_2 … x_n]
(ヨxy F)[x_1,x_2 … x_n] = (ヨx(ヨy F)) =Fxy + Fx’y + Fxy’ + Fx’y’
存在x y 滿足 F 不受 xy 影響
Network Repair
當一個邏輯門出現問題時,添加一個4輸入的邏輯電路和原輸入進行操作,使得最終結果符合原邏輯。選擇4輸入的原因是我們可以憑借這四個輸入構造所有的邏輯關系。
F是正常操作下的結果,G是當前操作的結果
我們需要做到的是無論F的輸入是什么,我們的G要和F一致
即滿足z = ! (F xor G)
在這個新的關系中,有原輸入a b ,新的輸入d_0,d_1,d_2,d_3,以及輸出z。我們要實現無論a b是什么,要找到d_0,d_1,d_2,d_3滿足最終結果恒為1
即(∨ab,z)[d_0,d_1,d_2,d_3] == 1
Recursive Tautology
遞歸重復
對于上面的修復方法,我們需要知道的是是否所有a b都滿足結果為1。而驗證方法就是遞歸重復。
如果說僅僅是盲目的遞歸重復,毫無疑問,這會是一個極其巨大的工程量。所以我們要用科學的遞歸重復實現目標。
首先,我們要表示邏輯,我們引入PCN
PCN Positional Cube Notation
PCN 是什么,一種符號表示。對于任何輸入,用10/01/11表示,其中01表示x,10表示x’,11表示無影響。
比如:f(a,b,c) = a + bc + ab => {01 11 11},{11,01,01},{01,01,11}
接下來就是如何科學遞歸。
對于一個F總是結果為1,首先要滿足對于其中任意一個輸入都有F(x=0) = 1以及 F(x=1) = 1。也就是我們可以減少輸入的存在從而減少遞歸的工程量。
那么,我們選取哪些輸入以及減少到什么程度時判斷呢。
首先是輸入的選擇
對于F(x=1),我們將包含x’的部分忽略,忽略x的存在,保留其他。因為x=1時,x’=0,在一個單獨的因子中,顯然這個因子會返回0,而在所有因子的集合中,由于是0,所以不用考慮。而x=1在因子中也不占決定地位(and 全一出一有零出零)
對于F(x=0),我們將包含x的部分忽略,忽略x’的存在,保留其他。因為x=0時,x=0,在一個單獨的因子中,顯然這個因子會返回0,而在所有因子的集合中,由于是0,所以不用考慮。而x‘=1在因子中也不占決定地位(and 全一出一有零出零)
然后是判斷開始條件
當存在一個因子恒為1時,成立。當x和x’都單獨作為因子恒為1。
除此之外存在一種狀況我們可以明確得出f不恒為1:f中所有因子包含的元素不存在x 和 x’的關系,即改變x一定會對f造成一定影響。當所有元素取反時,f一定變化。我們將f中所有因子包含的元素不存在x 和 x’的關系定義為unate
由于unate形式的特殊性,當我們無法立馬辨別當前f是否滿足條件時,我們盡量將提取一個元素使得f變成unate形式。同時我們利用F = xF(X=1) + ^x\F(x=0)使得結果具有一致性。
偽代碼
tautology(f represented as cubelist){ //01 10 11if (f is unate){apply unate rulesif(==1) return 1else return 0}else if(x and x'){return 1}else {x = most not unate variable in freturn(tautology(f_x)&&tautology(f_x'))} }
【網絡安全學習攻略】
總結
以上是生活随笔為你收集整理的硬件安全系列 逻辑电路基础知识介绍(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超级任天堂游戏模拟器被曝安全漏洞
- 下一篇: 硬件安全系列 逻辑电路基础知识介绍(二)