加密(encrypt)之前的訊息叫做明文(plaintext),加密之後的訊息叫做密文(ciphertext)。接收方需要對加密後的訊息進行解密(decrypt)後才能閱讀。這樣,通過密碼(cryptography),技術,保證了訊息的機密性(confidentiality)。
接收者以外的人試圖將密文還原為明文,稱為密碼破譯(cryptanalysis),簡稱破譯,也被稱為密碼分析。進行破譯的人稱為破譯者(cryptanalyst)。
不要試圖通過對密碼演算法本身進行保密來確保安全性的行為(即通過隱蔽式安全性,security by obscurity)。
加密步驟→
\rightarrow
→加密演算法;解密步驟→
\rightarrow
→解密演算法。加密、解密的演算法合在一起稱為密碼演算法。
密碼演算法中需要金鑰(key)。一種密碼能夠使用的「所有金鑰的集合」被稱為金鑰空間(keyspace)。將密碼演算法與金鑰分開考慮,就解決了希望重複使用,但重複使用會增加風險這一難題。
對稱密碼(symmetric cryptography)是指在加密和解密時使用同意金鑰的方式,也被稱為私鑰密碼(secret-key cryptography)、公共金鑰密碼(common-key cryptography)、傳統密碼(conventional cryptography)、共享金鑰密碼(shared-key cryptography)。
非對稱密碼(asymmetric cryptography)是指加密和解密時使用不同金鑰的方式,也被稱為公鑰密碼(public-key cryptography)。
訊息驗證碼(message authentication code):確認訊息是否來自所期望的通訊物件。保證完整性,提供認證(authentication)機制。
數字簽名(digital signature):防止偽裝(spoofing)、篡改、否認(repudiation)的技術。
偽隨機數生成器(pseudo random number generator,prng):一種能夠模擬產生隨機數列的演算法。例如在進行ssl/tls通訊時,會生成乙個僅用於當前通訊的臨時金鑰(會話金鑰),該金鑰就是由偽隨機數生成器生成的。
隱寫術(steganography):目的是隱藏訊息本身。如果搞清楚嵌入訊息的方法,也就可以搞清楚訊息的內容。所以,隱寫術並不能代替密碼。
數字水印:將著作權所有者和購買者的資訊嵌入到檔案中的技術。
凱撒密碼(caesar cipher):通過將明文中所使用的字母表按照一定的字數「平移」來進行加密。其中,平移的字母數量就相當於金鑰。
凱撒密碼可以通過將所有可能的金鑰全部嘗試一遍來進行破譯,被稱為暴力破解(brute-force attack,又被稱為窮舉搜尋)。
簡單替換密碼(****** substitution cipher):將明文中所使用的字母表替換為另一套字母表的密碼。
簡單替換密碼可以通過頻率分析的密碼破譯方式進行破譯。
enigma:納粹時期,德國國防軍使用的加/解密機器。
一次性密碼本的原理是「將明文與一串隨機的位元序列進行xor運算」,是一種非常簡單的密碼,但卻無法破譯。其無法破譯的原因是——即使對一次性密碼本的密文進行暴力破解,雖然總有一天會嘗試到和加密時相同的金鑰,但無法判斷它是否是正確的密文。因為,在解密的過程中,所有的64位元的排列組合都會出現,比如密文midnight,暴力破解可能得到onenight等字元,導致無法破譯。
破解:可以使用差分分析和線性分析的方法進行破解,二者均屬於選擇明文攻擊(chosen plaintext attack, cpa),即假設密碼破譯者可以選擇任意明文並得到其加密的結果。
注意:
如果金鑰1、金鑰2、金鑰3均相同,三重des就等同於普通的des。這麼設計是為了讓三重des能夠相容普通的des;
如果金鑰1和金鑰3相同,金鑰2不同→
\rightarrow
→des-ede2(ede表示enc
rypt
ion→
decr
ypti
on→e
ncry
ptio
nencryption \rightarrow decryption \rightarrow encryption
encryp
tion
→dec
rypt
ion→
encr
ypti
on);如果金鑰1、金鑰2、金鑰3各不相同→
\rightarrow
→des-ede3。
使用的是rijndael演算法,在aes的規格中,分組長度固定為128位元,金鑰長度只有128、192和256位元三種。由於rijndael的公式能夠通過數**算來求解,所以意味著rijndael演算法理論上可以通過數學方法進行破譯,但目前還沒有出現針對rijndael的有效攻擊(使用aes-128可以通過量子計算機破譯,aes-256還未被破譯)。
**分組密碼(block cipher)**每次只能處理特定長度的一塊資料的一類密碼演算法。這裡的「一塊」就稱為分組(block)。此外,乙個分組的位元數就稱為分組長度(block length)。→
\rightarrow
→不需要通過內部狀態來記錄加密的進度。
例如,aes的分組長度為128位元,所以aec一次可加密128位元的明文,並生成128位元的密文。
**流密碼(stream cipher)**是對資料流進行連續處理的一類密碼演算法。流密碼中一般以1位元、8位元或者32位元等單位進行加密或解密。→
\rightarrow
→需要保持內部狀態。
例如,一次性密碼本屬於流密碼。
對分組密碼演算法進行迭代的方法就稱為分組密碼的模式(mode)。
網安學習日記之 PKI技術
通過加密技術和數字簽名保證資訊的安全公鑰加密技術,數字證書,ca,ra機密性,完整性,身份驗證 操作的不可否認性1 ssl https 2 ipsecvpn 3 部分遠端訪問vpn 作用 實現對資訊加密,數字簽名等安全保障 加密演算法 1 對稱加密演算法 加解密的金鑰一致!des 3des aes ...
編制知識網學習法
目錄 1.通過畫圖的方法來養成系統學習的好習慣 22編織知識網 使用思維導圖的好處 33使用思維導圖的注意事項 44.思維導圖的使用方法 45.使用思維導圖的感受 56.為什麼要使用思維導圖做總結。57 使用思維導圖做總結時注意的要素 6 1 概括相同點 6 2 區別不同點 8 3 聯絡實際生活 8...
安卓學習04
今天主要學習了資料庫的遷移。原先的entity可以直接修改,例如原來的為 package com.example.roombasic import androidx.room.columninfo import androidx.room.entity import androidx.room.pr...