加密與數字簽名
Ⅰ 數字簽名機制和簡單加密的區別是什麼
數字簽名機制和簡單加密的區別分別是:
數字簽名機制是:所謂數字簽名就是附加在數據單元上的一些數據,或是對數據單元所作的密碼變換。
這種數據或變換允許數據單元的接收者用以確認數據單元的來源和數據單元的完整性並保護數據,防止被人(例如接收者)進行偽造。
簡單加密是:簡單加密的基本過程,就是對原來為明文的文件或數據按某種演算法進行處理,使其成為不可讀的一段代碼,通常稱為「密文」。通過這樣的途徑,來達到保護數據不被非法人竊取、閱讀的目的。
簡單加密方式的種類有:
1、凱撒加密:凱撒密碼(Caesar)加密時會將明文中的每個字母都按照其在字母表中的順序向後(或向前)移動固定數目(循環移動)作為密文。
2、單表代換:隨機選取字母代替原來的字母順序表,故一共有26!-1種可能。
3、一次一密:一次一密亂碼本是一個大的不重復的真隨機密鑰字母集,這個密鑰字母集被寫在幾張紙上,並被粘成一個亂碼本。
4、柵欄加密法:柵欄加密法將明文分為若干欄(行),每個欄的字母數量相同與key相同,如meet me after party,首先罵我們去掉空格。
明文就變為meetmeafterparty。一共16個字母,key為4,則我們可以將其分為16/key=4欄,從上到下排列,每欄個字母個數為4。
Ⅱ 加密技術07-消息認證碼與數字簽名
消息認證碼(Message Authentication Code,簡稱 MAC)是一種能夠識別通信對象發送的消息是否被篡改的認證技術,用於驗證消息的完整性,以及對消息進行身份認證。消息認證孝手逗碼的演算法中,最常用的是利用散列函數的 HMAC。HMAC 的構成不依賴於某一種具體的散列函數演算法。消息認證碼能夠對通信對象進行認證,但無法對第三方進行認證。此外它也無法防止否認。
主要作用
HMAC 實現原理
HMAC 是一種使用散列函數來構造消息認證碼的方法(RFC2014),其中 HMAC 的 H 就是 Hash 的意思。HMAC 中所使用的散列函數並不僅限於一種,任何高強度的散列函數都可以被用於 HMAC,如果將來設計出新的散列函數,也同樣可以使用。
對 message 生成消息認證碼可以表示為: hmac(message, secret, hash) ,secret 為共享密鑰,hash 為所使用散列函數。
(1)密鑰填充:如果密鑰比散列函數的分組長度要短,就需要在末尾填充 0,直到其長度達到散列函數的分組長度為止。如果密鑰比分組長度要長,則要用散列函數求出密鑰的散列值,然後將這個散列值用作 HMAC 的密鑰。
(2)填充後的密鑰與 ipad 的 XOR:將填充後的密鑰與被稱為 ipad 的比特序列進行 XOR 運算。 ipad 是將 00110110 這一比特序列(即 16 進制的 36)不斷循環反復直到分組長度所形成的比特序列,其中 ipad 的 i 是 inner(內部)的意思。XOR 運算所得巧賣到的值,就是一個和散列函數的分組長度相同,且和密鑰相關的比特序列。這里我們將這個比特序列稱為 ipadkey。
(3)與消息組合:將 ipadkey 與消息進行組合,也就是將和密鑰相關的比特序列(ipadkey)附加在消息的開頭。
(4)計算散列值:將(3)的結果輸入散列函數,並計算出散列值。
(5)填充後的密鑰與 opad 的 XOR:將填充後的密鑰與被稱為 opad 的比特序列進行 XOR 運算。opad 是將 01011100 這一比特序列(即 16 進制的 5C)不斷循環反復直到達到分組長度所形成的比特序列,其中 opad 的 o 是 outer(外部)的意思。XOR 運算所得到的結果也是一個和散列函數的分組長度相同,且和密鑰相關的比特序列,這里我們將這個比特序列稱為 opadkey。
(6)與散列值組合:將(4)的散列值拼在 opadkey 後面。
(7)將(6)的結果輸入散列函數,並計算出散列值。這個散列值就是最終的 MAC 值。
對消息認證碼的攻擊
關於防止重放攻擊的方式
消息認證碼無法解決的問題
由於 MAC 值發送者和接受者薯雹都能生成,所以接受者如果要向第三方驗證者證明消息的來源為發送者,第三方驗證者是無法證明的,因為接受者也是可以生成 MAC 值的;第三方驗證者無法判斷發送者和接受者誰的主張才是正確的,也就是說,用消息認證碼無法防止否認。
數字簽名是一種能夠對第三方進行消息認證,並能夠防止通信對象做出否認的認證技術。數字簽名的演算法包括 RSA,ELGamal,DSA,橢圓曲線 DSA 等。公鑰基礎設施(PKI)中使用的證書,就是對公鑰加上認證機構的數字簽名收構成的。要驗證公鑰的數字簽名,需要通過某種途徑獲取認證機構自身的合法公鑰。
數字簽名的方法
直接對消息簽名的方法比較容易理解,但實際上並不會使用;對消息的散列值簽名的方法稍微復雜一點,但實際中我們一般都使用這種方法。
對數字簽名的攻擊
數字簽名無法解決的問題
用數字簽名既可以識別出篡改和偽裝,還可以防止否認。也就是說,我們同時實現了確認消息的完整性、進行認證以及否認防止。
然而,要正確使用數字簽名,有一個前提,那就是用於驗證簽名的公鑰必須屬於真正的發送者。即使數字簽名演算法再強大,如果你得到的公鑰是偽造的,那麼數字簽名也會完全失效。
為了能夠確認自己得到的公鑰是否合法,我們需要使用證書。所謂證書,就是將公鑰當作一條消息,由一個可信的第三方對其簽名後所得到的公鑰。