1. 這是有關循環冗餘校驗碼知識,求專家們指導。不懂的地方如下。
樓主你好~
生成多項式是CRC演算法給定的,這個多項式可以隨意給定,不過多項式有強弱之分,所以(1)裡面那個a(x)對應的二進制除數是110011。
這個多項式是給定的哦~不是得出來的。
這個二進制數在通信雙方通信期間不變,相當於是一個上鎖箱子的鑰匙,這個鑰匙是給定的,不能隨便一把鑰匙來開這個鎖。
生成多項式的原則是,例如這個二進制數是100101,那麼只要把每一位1給拿出來就行了,a(x)=1*x^5+0*x^4+0*x^3+1*x^2+0*x^1+1*x^0=x^5+x^2+1,這個多項式有一個必要,就是最高位和最低位一定要為1。還有幾點比如信息源改變不同位得到余數不同等,這些是生成多項式的強弱,具體請參照密碼學和編碼學的相關知識,不過這跟演算法本身沒關系。
對於第二個問題,樓主別想這么多,他說的很學術,我直接跟樓主講:
數據比如是1101101011,CRC生成多項式比如為a(x)=x^4+x^2+1,則他對應的二進制數是A=10101,(原理在上面)。那麼你看A是5位,那麼R就等於4,就是A位數-1,R=4,意味著數據位要向左移動4位,也就是數據變為11011010110000,然後進行下一步演算法。
以上就是樓主第二個問題的通俗說法,學演算法重要的是掌握它的原理,而不是死記硬背式子。
請追問~
2. 對稱密碼體制和非對稱密碼體制的工作原理分別是什麼並說明各自的優缺點
對於加密,基本上不存在一個完全不可以被破解的加密演算法,因為只要你有足夠的時間,完全可以用窮舉法來進行試探,如果說一個加密演算法是牢固的,一般就是指在現有的計算條件下,需要花費相當長的時間才能夠窮舉成功(比如100年)。一、主動攻擊和被動攻擊數據在傳輸過程中或者在日常的工作中,如果沒有密碼的保護,很容易造成文件的泄密,造成比較嚴重的後果。一般來說,攻擊分為主動攻擊和被動攻擊。被動攻擊指的是從傳輸信道上或者從磁碟介質上非法獲取了信息,造成了信息的泄密。主動攻擊則要嚴重的多,不但獲取了信息,而且還有可能對信息進行刪除,篡改,危害後果及其嚴重。 二、對稱加密基於密鑰的演算法通常分為對稱加密演算法和非對稱加密演算法(公鑰演算法)。對成加密演算法就是加密用的密鑰和解密用的密鑰是相等的。比如著名的愷撒密碼,其加密原理就是所有的字母向後移動三位,那麼3就是這個演算法的密鑰,向右循環移位就是加密的演算法。那麼解密的密鑰也是3,解密演算法就是向左循環移動3位。很顯而易見的是,這種演算法理解起來比較簡單,容易實現,加密速度快,但是對稱加密的安全性完全依賴於密鑰,如果密鑰丟失,那麼整個加密就完全不起作用了。比較著名的對稱加密演算法就是DES,其分組長度位64位,實際的密鑰長度為56位,還有8位的校驗碼。DES演算法由於其密鑰較短,隨著計算機速度的不斷提高,使其使用窮舉法進行破解成為可能。三、非對稱加密非對稱加密演算法的核心就是加密密鑰不等於解密密鑰,且無法從任意一個密鑰推導出另一個密鑰,這樣就大大加強了信息保護的力度,而且基於密鑰對的原理很容易的實現數字簽名和電子信封。比較典型的非對稱加密演算法是RSA演算法,它的數學原理是大素數的分解,密鑰是成對出現的,一個為公鑰,一個是私鑰。公鑰是公開的,可以用私鑰去解公鑰加密過的信息,也可以用公鑰去解私鑰加密過的信息。比如A向B發送信息,由於B的公鑰是公開的,那麼A用B的公鑰對信息進行加密,發送出去,因為只有B有對應的私鑰,所以信息只能為B所讀取。牢固的RSA演算法需要其密鑰長度為1024位,加解密的速度比較慢是它的弱點。另外一種比較典型的非對稱加密演算法是ECC演算法,基於的數學原理是橢圓曲線離散對數系統,這種演算法的標准我國尚未確定,但是其只需要192 bit 就可以實現牢固的加密。所以,應該是優於RSA演算法的。優越性:ECC > RSA > DES
3. 密碼學第一次實驗報告:DES演算法與差分攻擊
DES演算法與差分攻擊
了解DES演算法基本工作原理,體會並理解分組密碼演算法的混淆和擴散概念。了解Sbox工作原理及效果。了解DES的工作模式和填充方式。了解差分攻擊
的基本原理。
IP置換目的是將輸入的64位數據塊按位重新組合,並把輸出分為L0、R0兩部分,每部分各長32位。
表中的數字代表新數據中此位置的數據在原數據中的位置,即原數據塊的第58位放到新數據的第1位,第50位放到第2位,……依此類推,第7位放到第64位。置換後的數據分為L0和R0兩部分,L0為新數據的左32位,R0為新數據的右32位。
不考慮每個位元組的第8位,DES的密鑰由64位減至56位,每個位元組的第8位作為奇偶校驗位。產生的56位密鑰由下表生成(注意表中沒有8,16,24,32,40,48,56和64這8位):
在DES的每一輪中,從56位密鑰產生出不同的48位子密鑰,確定這些子密鑰的方式如下:
1).將56位的密鑰分成兩部分,每部分28位。
2).根據輪數,這兩部分分別循環左移1位或2位。每輪移動的位數如下表:
移動後,從56位中選出48位。這個過程中,既置換了每位的順序,又選擇了子密鑰,因此稱為壓縮置換。壓縮置換規則如下表(注意表中沒有9,18,22,25,35,38,43和54這8位):
壓縮後的密鑰與擴展分組異或以後得到48位的數據,將這個數據送人S盒,進行替代運算。替代由8個不同的S盒完成,每個S盒有6位輸入4位輸出。48位輸入分為8個6位的分組,一個分組對應一個S盒,對應的S盒對各組進行代替操作。
一個S盒就是一個4行16列的表,盒中的每一項都是一個4位的數。S盒的6個輸入確定了其對應的輸出在哪一行哪一列,輸入的高低兩位做為行數H,中間四位做為列數L,在S-BOX中查找第H行L列對應的數據(<32)。
S盒代替時DES演算法的關鍵步驟,所有的其他的運算都是線性的,易於分析,而S盒是非線性的,相比於其他步驟,提供了更好安全性
S盒代替運算的32位輸出按照P盒進行置換。該置換把輸入的每位映射到輸出位,任何一位不能被映射兩次,也不能被略去,映射規則如下表:
表中的數字代表原數據中此位置的數據在新數據中的位置,即原數據塊的第16位放到新數據的第1位,第7位放到第2位,……依此類推,第25位放到第32位。
末置換是初始置換的逆過程,DES最後一輪後,左、右兩半部分並未進行交換,而是兩部分合並形成一個分組做為末置換的輸入。末置換規則如下表:
置換方法同上
實際應用中,DES是根據其加密演算法所定義的明文分組的大小(64bits),將數據割成若干64bits的加密區塊,再以加密區塊為單位,分別進行加密處理。根據數據加密時每個加密區塊間的關聯方式,可以分為4種加密模式,包括ECB,CBC,CFB及OFB。
DES演算法其中主要起作用的演算法有:矩陣置換、擴展、左移、異或、左右互換、s盒作用 。其中對攻擊者來說最麻煩的要說s盒一步,破解des體系關鍵在s盒。
乍一看六位輸入與四位輸出貌似沒什麼關系。但事實上,對於同一個s盒具有相同輸入異或的所有輸入六比特組的輸出四比特異或值有一定規律。
具體些說,對於輸入異或相同的明文對B,B*僅有32組,而這32組輸出異或卻並不是均勻分布,而是僅分布在很少的幾個四比特值中;也可以說具有相同輸入異或且輸出四比特異或也相同的六比特輸入數量不多且分布不均勻。正是這種輸入輸出輸出異或間的不均勻性可以被攻擊者利用並破解密鑰。
結果表格:
4. 密碼學知識精粹
① 替換法
替換法很好理解,就是用固定的信息將原文替換成無法直接閱讀的密文信息。例如將 b 替換成 w ,e 替換成p ,這樣bee 單詞就變換成了wpp,不知道替換規則的人就無法閱讀出原文的含義。
替換法有單表替換和多表替換兩種形式。
② 移位法
移位法就是將原文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後得出密文,典型的移位法應用有 「 愷撒密碼 」。
例如約定好向後移動2位(abcde - cdefg),這樣 bee 單詞就變換成了dgg。
古典密碼破解方式--頻率分析法
古典密碼的安全性受到了威脅,外加使用便利性較低,到了工業化時代,近現代密碼被廣泛應用。
恩尼格瑪機
恩尼格瑪機是二戰時期納粹德國使用的加密機器,其使用的加密方式本質上還是移位和替代,後被英國破譯,參與破譯的人員有被稱為計算機科學之父、人工智慧之父的圖靈。
① 散列函數加密(消息摘要,數字摘要)
散列函數,也見雜湊函數、摘要函數或哈希函數,可將任意長度的消息經過運算,變成固定長度數值,常見的有MD5、SHA-1、SHA256,多應用在文件校驗,數字簽名中。
MD5 可以將任意長度的原文生成一個128位(16位元組)的哈希值
SHA-1可以將任意長度的原文生成一個160位(20位元組)的哈希值
特點:消息摘要(Message Digest)又稱為數字摘要(Digital Digest)
它是一個唯一對應一個消息或文本的固定長度的值,它由一個單向Hash加密函數對消息進行作用而產生
使用數字摘要生成的值是不可以篡改的,為了保證文件或者值的安全
MD5演算法 : 摘要結果16個位元組, 轉16進制後32個位元組
SHA1演算法 : 摘要結果20個位元組, 轉16進制後40個位元組
SHA256演算法 : 摘要結果32個位元組, 轉16進制後64個位元組
SHA512演算法 : 摘要結果64個位元組, 轉16進制後128個位元組
② 對稱加密
對稱密碼應用了相同的加密密鑰和解密密鑰。對稱密碼分為:序列密碼(流密碼),分組密碼(塊密碼)兩種。流密碼是對信息流中的每一個元素(一個字母或一個比特)作為基本的處理單元進行加密,塊密碼是先對信息流分塊,再對每一塊分別加密。
例如原文為1234567890,流加密即先對1進行加密,再對2進行加密,再對3進行加密……最後拼接成密文;塊加密先分成不同的塊,如1234成塊,5678成塊,90XX(XX為補位數字)成塊,再分別對不同塊進行加密,最後拼接成密文。前文提到的古典密碼學加密方法,都屬於流加密。
示例
我們現在有一個原文3要發送給B
設置密鑰為108, 3 * 108 = 324, 將324作為密文發送給B
B拿到密文324後, 使用324/108 = 3 得到原文
常見加密演算法
DES : Data Encryption Standard,即數據加密標准,是一種使用密鑰加密的塊演算法,1977年被美國聯邦政府的國家標准局確定為聯邦資料處理標准(FIPS),並授權在非密級政府通信中使用,隨後該演算法在國際上廣泛流傳開來。
AES : Advanced Encryption Standard, 高級加密標准 .在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標准。這個標准用來替代原先的DES,已經被多方分析且廣為全世界所使用。
特點
加密速度快, 可以加密大文件
密文可逆, 一旦密鑰文件泄漏, 就會導致數據暴露
加密後編碼表找不到對應字元, 出現亂碼,故一般結合Base64使用
加密模式
ECB : Electronic codebook, 電子密碼本. 需要加密的消息按照塊密碼的塊大小被分為數個塊,並對每個塊進行獨立加密
優點 : 可以並行處理數據
缺點 : 同樣的原文生成同樣的密文, 不能很好的保護數據
CBC : Cipher-block chaining, 密碼塊鏈接. 每個明文塊先與前一個密文塊進行異或後,再進行加密。在這種方法中,每個密文塊都依賴於它前面的所有明文塊
優點 : 同樣的原文生成的密文不一樣
缺點 : 串列處理數據
填充模式:當需要按塊處理的數據, 數據長度不符合塊處理需求時, 按照一定的方法填充滿塊長的規則
NoPadding不填充.
對應的AES加密類似,但是如果使用的是AES加密,那麼密鑰必須是16個位元組。
加密模式和填充模式:
AES/CBC/NoPadding (128)
AES/CBC/PKCS5Padding (128)
AES/ECB/NoPadding (128)
AES/ECB/PKCS5Padding (128)
DES/CBC/NoPadding (56)
DES/CBC/PKCS5Padding (56)
DES/ECB/NoPadding (56)
DES/ECB/PKCS5Padding (56)
DESede/CBC/NoPadding (168)
DESede/CBC/PKCS5Padding (168)
DESede/ECB/NoPadding (168)
DESede/ECB/PKCS5Padding (168)
RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)
PS: Base64是網路上最常見的用於傳輸8Bit位元組碼的可讀性編碼演算法之一
可讀性編碼演算法不是為了保護數據的安全性,而是為了可讀性
可讀性編碼不改變信息內容,只改變信息內容的表現形式
所謂Base64,即是說在編碼過程中使用了64種字元:大寫A到Z、小寫a到z、數字0到9、「+」和「/」
Base64 演算法原理:base64 是 3個位元組為一組,一個位元組 8位,一共 就是24位 ,然後,把3個位元組轉成4組,每組6位(3 * 8 = 4 * 6 = 24),每組缺少的2位會在高位進行補0 ,這樣做的好處在於 base取的是後面6位而去掉高2位 ,那麼base64的取值就可以控制在0-63位了,所以就叫base64,111 111 = 32 + 16 + 8 + 4 + 2 + 1 =
toString()與new String ()用法區別
③ 非對稱加密
非對稱密碼有兩支密鑰,公鑰(publickey)和私鑰(privatekey),加密和解密運算使用的密鑰不同。用公鑰對原文進行加密後,需要由私鑰進行解密;用私鑰對原文進行加密後(此時一般稱為簽名),需要由公鑰進行解密(此時一般稱為驗簽)。公鑰可以公開的,大家使用公鑰對信息進行加密,再發送給私鑰的持有者,私鑰持有者使用私鑰對信息進行解密,獲得信息原文。因為私鑰只有單一人持有,因此不用擔心被他人解密獲取信息原文。
特點:
加密和解密使用不同的密鑰
如果使用私鑰加密, 只能使用公鑰解密
如果使用公鑰加密, 只能使用私鑰解密
處理數據的速度較慢, 因為安全級別高
常見演算法:RSA,ECC
數字簽名
數字簽名的主要作用就是保證了數據的有效性(驗證是誰發的)和完整性(證明信息沒有被篡改),是非對稱加密和消息摘要的應用
keytool工具使用
keytool工具路徑:C:\Program Files\Java\jre1.8.0_91\bin
--- END
5. 密碼學三個階段產生原因
古典密碼階段。
這一階段主要是從古代到19世紀末。古代的時候,對信息進行隱藏的常用方式就是字謎,謎語就是明文而謎底就是密文,破解的方法也很簡單,全靠猜。古典密碼學中,有許多經典的密碼體制,例如Caesar凱撒密碼、Polybius密碼、多表替代密碼、維吉尼亞密碼等。凱撒密碼為例,就是將將英文字母向前移動k位。從而生成字母替代的密表。例如移動兩位在明文中的字母A其實代表的是C,以此類推。到了20世紀20年代,隨著機械技術的發展,轉輪密碼機誕生了,給密碼學的應用帶來了巨大進步。
近代密碼階段。
1945年至1975年這段時期被稱作近代密碼學階段。密碼學在這一階段的發展是以計算機通信技術的發展和普及為基礎的,由於信息在計算機通信中的存儲和傳輸要求,出於對信息安全的考慮,密碼學得到了極快的發展。1949年Shannon發表了一篇論文《保密系統的通信理論》,奠定了密碼學的理論基礎,從而使具有數千年歷史的密碼學正式成為一門獨立學科。
現代密碼階段。
1976年至今為現代密碼學階段。在近代密碼學時期,我們會發現注入密碼機等設備一開始研製就是運用於軍事和政治領域,到了20世紀70年代中期以前,密碼學的研究也是秘密進行。W.Diffie和M.EHellman在1976年公布了一種密鑰一致性演算法,簡稱DH演算法,標志著密碼學進入公鑰密碼學階段。
6. 【密碼學筆記】第3部分 對稱密碼
跟諸位大牛相比,筆者閱歷尚淺、經驗不足,筆記中若有錯誤,還需繼續修正與增刪。歡迎大家的批評與指正。
查看上一篇請點擊以下鏈接: 【密碼學筆記】第2部分 歷史上的密碼
1. XOR運算
2. 一次性密碼本
3. 對稱密碼演算法
3.1 DES
3.2 三重DES
3.3 AES
3.4 Rijndael
4. 對稱密碼的選擇
5. 對稱密碼的評價
參考書目
XOR運算,又稱為 異或 運算,運算結果是 同0異1 。
對同一個比特序列進行兩次XOR之後就會回到最初的狀態,因此XOR運算可用於對稱密碼的加密和解密。
一次性密碼本(又稱為 維納密碼 )是一種非常簡單的密碼,它的原理是「 將明文與一串隨機的比特序列進行XOR運算 」。
一次性密碼本是無法破譯的。 這是因為在對它嘗試解密的過程中,所有的排列組合都會出現,既會包含規則字元串,也會包含英文單詞,還會包含亂碼。由於明文中所有可能的排列組合都會出現,因此 我們無法判斷其中哪一個才是正確的明文 。
一次性密碼本是一種非常不實用的密碼。 原因如下:
a. 密鑰的配送 。( 最大的問題 )如果能夠有一種方法將密鑰安全地發送出去,那麼就可以用同樣的方法安全地發送明文。
b. 密鑰的保存 。 密鑰的長度必須和明文的長度相等。 如果能夠有辦法安全保存與明文一樣長的密鑰,那就有辦法安全保存明文本身。
c. 密鑰的重用 。在一次性密碼本中絕對不能重用過去用過的隨機比特序列,因為作為密鑰的比特序列一旦泄露,過去所有的機密通信內容將全部被解密。
d. 密鑰的同步 。在通信過程中,發送者和接收者的密鑰的比特序列不允許有任何錯位,否則錯位的比特後的所有信息都將無法解密。
e. 密鑰的生成 。一次性密碼本需要生成大量的隨機數,這里的隨機數並不是通過計算機程序生成的偽隨機數,而必須是無重現性的真正隨機數。
DES是一種將64比特的明文加密成64比特的密文的對稱密碼演算法,它的密鑰長度是56比特。
DES是以64比特的明文(比特序列)為一個單位來進行加密的,這個64比特的單位稱為 分組 。以分組為單位進行處理的密碼演算法稱為 分組密碼 。
DES每次只能加密64比特的數據,如果要加密的明文比較長,就需要對DES加密進行迭代,而迭代的具體方式就稱為 模式(mode) 。
DES的基本結構又稱為 Feistel網路 ,這一結構不僅被用於DES,在其他很多密碼演算法中也有應用。在Feistel網路中,加密的各個步驟稱為 輪(round) ,整個加密過程就是進行若干次輪的循環。下圖展現的是Feistel網路中一輪的計算流程。DES是一種16輪循環的Feistel網路。
一輪的具體計算步驟 如下:
a. 將輸入的數據等分為左右兩部分;
b. 將輸入的右側直接發送到輸出的右側;
c. 將輸入的右側發送到輪函數;
d. 輪函數根據右側數據和子密鑰,計算出一串看上去是隨機的比特序列;
e. 將上一步得到的比特序列與左側數據進行XOR運算,並將結果作為加密後的左側。
我們需要用不同的子密鑰對一輪的處理重復若干次,並在每兩輪處理之間將左側和右側的數據對調。
Feistel網路的解密操作只要按照相反的順序來使用子密鑰就可以完成了。
Feistel網路的性質 :
a. 輪數可以任意增加;
b. 加密時無論使用任何函數作為輪函數都可以正確解密(即使該函數不存在反函數);
c. 加密和解密可以用完全相同的結構來實現。
綜上所述,無論是任何輪數、任何輪函數,Feistel網路都可以 用相同的結構實現加密和解密 ,且加密的結果必定能夠正確解密。
三重DES是為了增加DES的強度,將DES重復3次所得到的一種密碼演算法,也稱為 TDEA ,通常縮寫為 3DES 。
明文經過三次DES處理才能變成最後的密文,由於DES密鑰的長度實質上是56比特,因此三重DES的密鑰長度就是168比特。
三重DES並不是進行三次DES加密,而是 加密→解密→加密 的過程,目的是 讓三重DES能夠兼容普通的DES ,當所有密鑰都相同時,三重DES也就等同於普通的DES。
盡管三重DES目前還被銀行等機構使用,但其處理速度不高,除了特別重視向下兼容性的情況以外,很少被用於新的用途。
AES是取代其前任標准(DES)而成為新標準的一種對稱密碼演算法。全世界的企業和密碼學家提交了多個對稱密碼演算法作為AES的候選,最終選出了一種名為 Rijndael 的對稱密碼演算法,並將其確定為AES。
AES的選拔並不僅僅考慮一種演算法是否存在弱點,演算法的速度、實現的容易性等也都在考慮范圍內。此外,這種演算法還必須能夠在各種平台上有效工作。
Rijndael是由比利時密碼學家設計的 分組密碼演算法 ,被選為新一代的標准密碼演算法——AES。
和DES一樣,Rijndael演算法也是由多個 輪 構成的,其中每一輪分為 SubBytes 、 ShiftRows 、 MixColumns 和 AddRoundKey 共4個步驟。DES使用Feistel網路作為其基本結構,而Rijndael使用的是 SPN結構 。
加密過程 :
a. 首先,需要 逐個位元組 地對16位元組的輸入數據進行SubBytes處理,即以每個位元組的值(0~255)為索引,從一張擁有256個值的 替換表 (S-Box)中查找出對應值( 類似於簡單替換密碼 )。
b. 進行ShiftRows處理,即以4位元組為單位的 行(row) 按照一定的規則向左平移,且每一行平移的位元組數是不同的。
c. 進行MixColumns處理,即對一個4位元組的值進行比特運算,將其變為另外一個4位元組值。
d. 最後,將MixColumns的輸出與輪密鑰進行 XOR ,即進行AddRoundKey處理。至此,Rijndael的一輪就結束了。實際上,在Rijndael中需要重復進行10~14輪計算。
在SPN結構中, 輸入的所有比特在一輪中都會被加密 。和每一輪都只加密一半輸入的比特的Feistel網路相比,這種方式的優勢在於 加密所需要的輪數更少 。此外,這種方式還有一個優勢,即 SubBytes、ShiftRows和MixColumns可以分別以位元組、行和列為單位進行並行計算 。
在Rijndael的 加密 過程中,每一輪所進行的處理為:
SubBytes→ShiftRows→MixColumns→AddRoundKey
而在 解密 時,則是按照相反的順序來進行的,即:
AddRoundKey→InvMixColumns→InvShiftRows→InvSubBytes
解密過程 :
Rijndael演算法背後有著 嚴謹的數學結構 ,即從明文到密文的計算過程可以全部用公式來表達,這是以前任何密碼演算法都不具備的性質。如果Rijndael的公式能夠通過數學運算來求解,那也就意味著Rijndael能夠通過數學方法進行破譯,這也為新的攻擊方式的產生提供了可能。
(1) 因為現在用暴力破解法已經能夠在現實的時間內完成對DES的破譯, DES不應再用於任何新的用途 。但是也需要保持與舊版本軟體的兼容性。
(2) 盡管在一些重視兼容性的環境中會使用三重DES,但 我們也沒有理由將三重DES用於新的用途 ,它會逐漸被AES所取代。
(3) 現在應該使用的演算法是AES(Rijndael) ,因為它安全、快速,而且能夠在各種平台上工作。
(4) AES最終候選演算法應該可以作為AES的備份 ,因為這些密碼演算法也都經過了嚴格的測試,且沒有發現任何弱點。
(5) 一般來說, 我們不應該使用任何自製的密碼演算法 ,而是應該使用AES。
優點 :
使用一種密鑰空間巨大,且在演算法上沒有弱點的對稱密碼,就可以通過密文來確保明文的機密性。 巨大的密鑰空間能夠抵禦暴力破解,演算法上沒有弱點可以抵禦其他類型的攻擊。
不足 :
a. 用對稱密碼進行通信時,還會出現 密鑰的配送問題 ,即如何將密鑰安全地發送給接受者。為了解決密鑰配送問題,需要 公鑰密碼技術 。
b. 盡管使用對稱密碼可以確保機密性,但僅憑這一點還並不能完全放心。 例如發送者可能發送偽造的密文,並利用解密時返回的錯誤來盜取信息。
衷心感謝您的閱讀。
查看下一篇請點擊以下鏈接: 【密碼學筆記】第4部分 分組密碼的模式
7. (密碼學)(信息安全)AES演算法中的倍乘函數為什麼能實現循環左移
AES(The Advanced Encryption Standard)是美國國家標准與技術研究所用於加密電子數據的規范。它被預期能成為人們公認的加密包括金融、電信和政府數字信息的方法。本文展示了AES的概貌並解析了它使用的演算法。包括一個完整的C#實現和加密.NET數據的舉例。在讀完本文後你將能用AES加密、測試 基於AES的軟體並能在你的系統中使用AES加密。
美國國家標准與技術研究所(NIST)在2002年5月26日建立了新的高級數據加密標准(AES)規范。本文中我將提供一個用C#編寫的的能運行的 AES 實現,並詳細解釋到底什麼是 AES 以及編碼是如何工作的。我將向您展示如何用 AES 加密數據並擴展本文給出的代碼來開發一個商業級質量的 AES 類。我 還將解釋怎樣把 AES 結合到你的軟體系統中去和為什麼要這么做,以及如何測試基於 AES 的軟體。
注意本文提供的代碼和基於本文的任何其它的實現都在聯邦加密模塊出口控制的適用范圍之內(詳情請參看 Commercial Encryption Export Controls )。
AES 是一個新的可以用於保護電子數據的加密演算法。明確地說,AES 是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192 和 256 位密鑰,並且用 128 位(16位元組)分組加密和解密數據。與公共密鑰密碼使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和解密數據。通過分組密碼返回的加密數據 的位數與輸入數據相同。迭代加密使用一個循環結構,在該循環中重復置換(permutations )和替換(substitutions)輸入數據。Figure 1 顯示了 AES 用192位密鑰對一個16位位元組數據塊進行加密和解密的情形。
Figure 1 部分數據
AES演算法概述
AES 演算法是基於置換和代替的。置換是數據的重新排列,而代替是用一個單元數據替換另一個。AES 使用了幾種不同的技術來實現置換和替換。為了闡明這些技術,讓我們用 Figure 1 所示的數據討論一個具體的 AES 加密例子。下面是你要加密的128位值以及它們對應的索引數組:
00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
192位密鑰的值是:
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 0 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 18 19 20 21 22 23
Figure 2 S-盒( Sbox )
當 AES 的構造函數(constructor)被調用時,用於加密方法的兩個表被初始化。第一個表是代替盒稱為S-盒。它是一個16×16的矩陣。S-盒的前五行和前五列如 Figure 2 所示。在幕後,加密常式獲取該密鑰數組並用它來生成一個名為w[]的密鑰調度表,Figure 3 所示。
網頁鏈接你也可以去這里看看
8. 密碼學筆記
別人用A的公鑰加密傳輸的信息,只有A的私鑰可以解密。保證了傳輸的信息的安全性。
A用A的私鑰加密的信息,別人用A的公鑰才可以解密。可以證明這個信息一定是A傳輸而來的。
共享秘鑰(對稱加密):速度快,但無法保證客戶端與伺服器之間傳輸時秘鑰的安全性。
和公開密鑰(非對稱加密):安全,速度慢。
一、客戶端請求SSL(安全套接層)通信,報文中包含自己支持的SSL版本、加密演算法等。
二、伺服器應答,附帶自己的公鑰證書,協商定好的SSL版本、加密組件。
三、客戶端根據自己本地的收信任的CA公鑰,解封伺服器公鑰證書,得到伺服器公鑰。客戶端生成一個隨機碼序列,用伺服器公鑰加密後,發回伺服器。
四、伺服器用私鑰解密後,再加密將字元串傳回客戶端。
五、客戶端確認伺服器身份後,生成對稱加密演算法和共享秘鑰,使用伺服器公鑰加密後,傳給伺服器。
六、此後,雙方使用對稱加密演算法加密數據,進行傳輸。
上面過程中,一二用於獲得合法的伺服器公鑰,三四用於確認伺服器是否為真正私鑰持有者(因為,伺服器公鑰誰都可以得到)。
使用與明文比特序列一樣長的,真正的隨機數序列,進行加密,絕對安全,因為窮舉破譯後能得到整個秘鑰空間,毫無意義。
以分組為單位進行處理的密碼演算法稱為 分組密碼。
採用 Feistel網路。
以 64 bit 為一個加密單位,首先分成兩部分,各32 bit 。
加密過程持續數輪,每輪中,使用子秘鑰與右側數據經過輪函數生成一個序列,然後與左側做 XOR 。
每輪結束後,左右兩側交換。
加解密結構相同,輪數任意,函數任意。
使用秘鑰1、2、3對明文進行加密、解密、加密三個過程,稱為三重DES。
解密過程是為了兼容老版DES,如果1、2、3秘鑰相同,則成為了普通DES。
1、3秘鑰相同,2不同時,稱為DES-EDE2 。
1、2、3秘鑰不同,稱為DES-EDE3 。
採用的是 Rijndael 演算法,SPN結構。
輸入分組為 128bit(16位元組),秘鑰長度可以以 32bit 為單位,在128~256bit之間選擇。
該演算法由多輪構成,10~14輪。
一輪中:
SubBytes,按位元組,將輸入分開,以每個位元組為索引,查表找值,替換。
ShiftRows(平移行),按位元組,打亂上面的輸出。
MixColumns (混合列),按4個位元組,比特運算。
與輪秘鑰進行 XOR 。
分組密碼:每次處理,特定長度的一塊數據。
流密碼:對數據流,連續處理,需要保持內部狀態,記錄進度。
明文分組加密後,直接成為,密文分組。
特點:攻擊者無需破譯,即可操縱明文。
明文分組,與前一個密文分組XOR,加密得到自己的密文分組。
第一個分組的前一個密文分組,由 初始化向量(隨機比特序列) 代替。
加密時,需要從頭開始。因為需要與密文分組做 XOR 。
解密時,對密文分組解密,直接與密文分組 XOR 即可。
同樣的明文分組,密文值可以不相等。
密文分組可以損壞,影響部分。
密文分組比特缺失,影響全部。
前一個密文分組,通過加密演算法得到一個比特序列,稱為 密鑰流 。
明文分組,與密鑰流 XOR,得到自己的密文分組。
解密時,加密演算法對密文分組進行加密,得到密鑰流,與密文 XOR 可得到明文。
重復攻擊:假設秘鑰相同。發送 4 個分組,攻擊者保存了後面3個。轉天,你又發送了 4 個分組,攻擊者將你後面三個替換,接收方解密後,只有 2 號分組有錯。
對於每個分組,初始化向量加密後,得到密鑰流。明文與密鑰流 XOR 後,得到密文。
速度快,密鑰流可以提前生成,或者,生成秘鑰過程可以和 XOR 運算並行。
對每個計數器加密得到密鑰流。密鑰流與明文分組 XOR ,得到密文分組。
計數器生成的數,由 一個隨機序列 nonce + 從1開始的遞增數字 組成。
對每個分組,計數器遞增後,加密,得到密鑰流。
能夠以任意順序處理分組,因為加密時需要的初始數字序列能夠計算出來。
為了確保安全,有地理局限,與不同的人通信需要不同密鑰,共享繁瑣。
每個員工有自己的密鑰,密鑰分配中心使用個人密鑰,包裹臨時會話密鑰,分配給各個員工使用。
密文=明文的E次方 MOD N
E 和 N 是RSA加密用的密鑰,也就是說,E 和 N 的組合就是公鑰。
明文=密文的D次方 MOD N
D 和 N 的組合就是私鑰。
尋兩個很大的質數 p 和 q,相乘得到 N
L為 p-1 和 q-1 的最小公倍數
隨機數生成器,不停地生成數字,直到滿足如下條件:
1 < E < L
E 和 L 的最大公約數為 1
根據 E ,計算 D
1 < E < L
E × D MOD L = 1
保證 E 與 L 互質,則 D 一定存在。
求對數很容易,求 離散對數 很困難
對一個大數字進行質因數分解,人類未找到高效演算法
利用了 MOD N下,求離散對數的困難度
加密後,密文長度翻倍
利用了 MOD N下,求平方根的困難度
密碼實現通過 對橢圓曲線上的特定點進行特殊乘法。
利用了該種乘法的逆運算非常困難這一特性
單向散列函數 又稱為,消息摘要函數、哈希函數、雜湊函數
輸入的消息 又稱為,原像
散列值 又稱為,消息摘要、指紋
完整性 又稱為,一致性
根據任意消息,計算出的散列值長度,固定
用時短
消息不同,散列值不同
具備單向性
MD是消息摘要的意思
可以產生 128bit 的散列值,但它們的抗碰撞性已被攻破
SHA-1散列值長度為 160bit,強碰撞性已被攻破
其餘的統稱為 SHA-2,散列值長度為各自後面的數字
歐盟版本
第三代 SHA
消息上限 2^64 bit。
消息長度需要是 512bit 的整數倍。這樣的 512比特 稱為一個輸入分組。
過程:
消息末尾添加 1
然後添加 0,直到最後一個分組的 448比特 的位置
最後 64比特 需要保存原是消息的長度
對每個分組計算 80 個 32bit 的值。
過程:
將 512bit 分成 32bit × 16組,稱為 W0~W15
從15組中按規律取4組,進行 XOR 運算,結果循環左移 1 位,得到另外一組。如此反復,得到總共 80 組。
ABCDE 五個 32bit 的緩沖區,保存了 160bit 的消息內部狀態。
內部狀態與每個 512bit 的輸入分組混合,一共 80 個步驟。
最終得到 160bit 的最終內部狀態。
暴力破解:暴力尋找與 1億元合同 散列值相同的文件
生日攻擊:准備兩份 散列值相同的 1億元合同
可以辨別 篡改,無法辨別 偽裝,因此還需要 認證技術
認證技術包括 消息驗證碼 和 數字簽名
消息驗證碼:可以向通信對象保證消息不被篡改
數字簽名:可以向任何人保證通信對象不被篡改
message authentication code,簡稱 MAC。
相當於 使用共享密鑰的單向散列函數
SWIFT:負責銀行間的交易,公鑰密碼使用前,都是人工配送密鑰的。
IPsec:對IP協議增加安全性,採用的是消息認證碼
SSL/TLS:網上購物等場景中所用協議。
過程:
密鑰填充 至單向散列函數要求的輸入分組大小
填充後的密鑰 與 ipad(16進制的36不斷循環)XOR,得到ipadkey
與 消息 組合,計算散列值
填充後的密鑰 與 opad(16進制的5C不斷循環)XOR,得到opadkey
與 上面得到的散列值 組合,計算新的散列值,為最終的MAC值
對第三方證明
防止否認
因為知曉密鑰的只有兩個當事人,第三者無法確定能拿到合法的密鑰,無法自己計算合法MAC值
RSA:利用質因數分解難度的那個
ElGamal:利用求離散對數的困難度的那個,數字簽名有漏洞,現僅用於公鑰密碼
DSA:Schnorr演算法與ElGamal方式的變體,只能用於數字簽名
Rabin:利用了求MOD N中平方根的困難度,可用於數字簽名和公鑰密碼
例如,verisign公司的認證業務分為三個等級,等級越高,越嚴格
ITU 國際電信聯盟和 ISO 國際標准化組織制定的 X.509 規范如下
大體包含以下內容:
簽名前的證書——簽名對象的各種消息
數字簽名演算法——簽名時所用的演算法
數字簽名——得到的數字簽名
PKI :為了能有效使用公鑰而制定的一系列規范和規格
PKI 的組成要素如下
兩種方法:一種是由認證機構生成,一種是由 PKI 用戶自行生成
認證機構有一個 CRL(認證作廢清單),具有數字簽名,記載了已經作廢的證書的編號。
認證時,從上(根證書)往下
對於密鑰,關鍵的是 密鑰空間的大小
DES 的密鑰 實質長度(即,除去校驗錯誤的比特後的長度)7位元組
DES-EDE2 的實質長度 14位元組,DES-EDE3 的實質長度 21位元組
AES 的密鑰長度可以從 128、192 和 256bit 當中選
會話密鑰:每次通信中,僅使用一次的密鑰
主密鑰:一直被重復使用的密鑰
CEK:Contents Encrypting Key
KEK: Key Encrypting Key
各個步驟中的密鑰管理方法
兩種方法:
用隨機數生成密鑰:使用具備不可預測性的偽隨機數生成器生成隨機數
用口令生成密鑰:一般使用,口令 + 一串稱為 salt 的隨機數,得到他們的散列值作為密鑰(這種方法稱為:基於口令的密碼)
事先共享
秘鑰分配中心
使用公鑰密鑰
Diffie-Hellman 密鑰交換
密鑰更新:一種提高通信機密性的技術
原理:
使用 共享密鑰 進行通信時,定期改變密鑰。
雙方使用同樣的方法,對當前密鑰求 散列值,並作為下一個密鑰
優點:
後向安全:防止破譯過去的內容
對密鑰進行加密,然後保存
意義:
同時對多個密鑰進行加密,可以減少保存密鑰的數量
步驟:
P 為非常大的質數,G 為 P 的 生成元
目的為,將 隨機數 A 的信息 含蓄地發給了 B
目的為,將 隨機數 B 的信息 含蓄地發給了 A
計算方法:密鑰 = (G ^ B MOD P) ^ A MOD P = G^(A × B) MOD P
計算方法:密鑰 = (G ^ A MOD P) ^ B MOD P = G^(A × B) MOD P
對於一個質數 P ,只有它的生成元在進行 G ^ x MOD P 時,結果能夠覆蓋 0 ~ P-1 的所有數字
用途:用於安全的保存密鑰
由來:
一 生成會話密鑰 CEK ,加密消息
二 需要保密 會話密鑰CEK,使用 密鑰加密密鑰KEK 對會話密鑰進行保密
三 現在需要保密 KEK 這個密鑰,選擇使用口令生成這個 KEK
保密的問題最終都歸結為了 安全保存密鑰,然而我們記不住密鑰。
於是,選擇單向散列函數對口令生成散列值,作為密鑰。
這個密鑰無需保存,我們可以通過口令隨時求得,口令也無法被反向推出,且口令方便記憶。
順帶,為了防止字典攻擊,生成口令散列值時,需要使用 口令 + salt(隨機數序列)
事先 已准備好 候選列表 的攻擊方法
隨機性
不可預測性
不可重見性
這三個性質,越往下越嚴格。分別稱為:
弱偽隨機數(不可用於密碼學)
強偽隨機數
真隨機數
偽隨機數生成器是公開的,種子是保密的。
確保種子的不可預測性,更加容易些。
種子是用來對偽隨機數生成器的 內部狀態進行初始化 的
R1 = (A × R0 + C) MOD M
數據有限,不能用於密碼學
單向散列函數的單向性是支撐偽隨機數序列不可預測性的基礎
利用 AES 等對稱密鑰對內部狀態進行加密
從當前時間開始,利用加密演算法 求得加密後的時間的掩碼 (因為密鑰未知,別人無法推測出掩碼信息)
與內部狀態 XOR,加密後輸出, 得到偽隨機數序列
對偽隨機數序列加密後,作為 下一個內部狀態
針對極端情況的密碼軟體,具有全部功能。
TLS 由 TLS 記錄協議 和 TLS 握手協議 疊加而成。
負責消息的 加密、壓縮 和 認證
商定 客戶端和伺服器 所用的加密演算法和密鑰
負責 傳遞 變更密碼的信號
發生錯誤時 通知對方
傳輸數據