開發(fā)者(KaiFaX)
面向開發(fā)者、程序員的專業(yè)平臺(tái)!
DES是1977年美國聯(lián)邦信息處理標(biāo)準(zhǔn)中使用的一種對(duì)稱密碼技術(shù),曾今被美國和其他國家政府銀行使用。
不過現(xiàn)在已被暴力破解,我們除了用它解密以前的密文外,已不再使用DES了。不過這里我們可以用它來了解下什么是對(duì)稱加密。
DES是一種把64比特明文加密成64比特的密文的對(duì)稱密碼算法,密鑰長度56位,其中每隔7比特有個(gè)錯(cuò)誤檢查比特。結(jié)果DES密鑰總長度為64比特。
DES以64比特明文為一個(gè)單位進(jìn)行加密,這64比特單位稱為分組。so,以分組為單位處理密碼的算法稱為分組密碼。DES屬于分組密碼。
DES每次只能加密64比特?cái)?shù)據(jù),如果明文較長,就需要對(duì)DES加密進(jìn)行迭代,迭代的具體方式稱為模式。后文會(huì)描述。
圖DES加密與解密流程
三重DES只是將DES重復(fù)3次,為了增加DES強(qiáng)度
目前很安全
。。。。。
…..好多…..
在對(duì)稱密碼中,由于加密解密的密鑰是相同的,因此密鑰配送就成了問題。如過使用公鑰密碼,就解決了配送問題。
解決密鑰配送有多個(gè)方法,但都很難處理
雙方通信時(shí)如果要加密,密鑰不能在通信內(nèi)容中。否則會(huì)被中間人竊聽。
雙方可以事先共享密鑰,如果雙方離得很近自然好說。但如果離得很遠(yuǎn)就不能在消息里傳播密鑰,因?yàn)榭赡軙?huì)被竊聽。郵寄存儲(chǔ)卡也可能會(huì)被竊取。假如一個(gè)公司有1000人需要彼此加密通信,那密鑰數(shù)可能會(huì)達(dá)到50萬個(gè),這個(gè)不現(xiàn)實(shí)。
如果有個(gè)密鑰分配中心存儲(chǔ)密鑰,那1000人的數(shù)據(jù)庫會(huì)有1000個(gè)密鑰。但如果員工增加,密鑰也要增加,數(shù)據(jù)庫負(fù)荷會(huì)加大,如果數(shù)據(jù)庫癱瘓,全公司的通信就會(huì)癱瘓。密鑰分配中心也可能會(huì)遭到攻擊.
Diffie-Hellman密鑰交換。是個(gè)方案。我們?cè)诤罄m(xù)會(huì)討論
兩種密鑰。一種是加密密鑰,一種是解密密鑰
這里有公鑰和私鑰,公鑰和私鑰既可以當(dāng)做加密密鑰,也可以做解密密鑰。只是使用場景不同
你既可以用公鑰加密,私鑰解密。也可以用公鑰解密,私鑰加密。區(qū)別只是在于使用場景。
公鑰和私鑰是一一對(duì)應(yīng)的,一對(duì)公鑰和私鑰統(tǒng)稱為密鑰對(duì)
我們來看一種公鑰加密,私鑰解密的情景。
Alice要發(fā)消息給Bob
Bob要接受消息,生成密鑰對(duì)。私鑰自己保管,公鑰發(fā)給Alice
公鑰被截獲也沒關(guān)系。因?yàn)楣€只負(fù)責(zé)加密
Alice用公鑰對(duì)消息加密,發(fā)送給Bob。
即使密文中間被截獲也沒關(guān)系,公鑰無法解密
Bob用自己私鑰揭秘
如圖所示
公鑰是否是正確合法的.假如中間人給你換了個(gè)公鑰呢?
處理速度要比對(duì)稱加密慢很多,大約只有百分之一
我們后面討論這兩個(gè)問題
RSA加密
密文 = 明文 E mod N (mod是取模的意思)
E和N的組合就是公鑰 簡稱 “公鑰是(E,N)”
RSA解密
明文 = 密文 D mod N
D和N的組合就是私鑰
這個(gè)邏輯很簡單,中間人替換掉了接受者得公鑰,向?qū)Ψ教峁┝俗约旱墓€。結(jié)果發(fā)送者用的中間人的公鑰加密消息發(fā)送出去,中間人接受到消息并用自己私鑰解密得到明文。再偽造一個(gè)假消息用接受者的公鑰加密還給接受者。具體流程如圖:
組成機(jī)制:
●用對(duì)稱密碼加密消息
●通過偽隨機(jī)數(shù)生成器生成對(duì)稱密碼加密中使用的會(huì)話密鑰
●用公鑰加密會(huì)話密鑰
●從混合密碼系統(tǒng)外部賦予公鑰密碼時(shí)使用的密鑰
####### 混合密碼系統(tǒng)加密解密過程
加密:
●使用偽隨機(jī)生成器生成會(huì)話密鑰 ,會(huì)話密鑰加密明文生成密文
●用接受者的公鑰加密會(huì)話密鑰
●兩個(gè)密文組合后發(fā)送出去
解密:
●收到消息先解密會(huì)話密鑰,用接受者的私鑰解密,得到會(huì)話密鑰
●用會(huì)話密鑰解密加密過得密文,即可得到消息
輸入稱為消息,輸出稱為散列值。
單向散列函數(shù)可以根據(jù)消息的內(nèi)容計(jì)算出散列值,而散列值就可以被用來檢查消息的完整性。
根據(jù)任意長度的消息計(jì)算出固定長度的散列值
能夠快速計(jì)算出散列值
消息不同散列值也不同
兩個(gè)不同消息產(chǎn)生同一個(gè)散列值的情況稱為碰撞
要找到和該消息具有相同散列值的另外一條消息是非常困難的。這一性質(zhì)稱為弱抗碰撞性
要找到散列值相同的兩條不同消息是非常困難的。稱為強(qiáng)抗碰撞性
具備單向性
單項(xiàng)散列函數(shù)又稱為消息摘要函數(shù),哈希函數(shù)或者雜湊函數(shù)
檢測(cè)軟件是否篡改
基于口令的加密(PBE):原理是將口令和炎(偽隨機(jī)數(shù))混合后計(jì)算其散列值,然后將這個(gè)散列值用作加密密鑰
消息認(rèn)證碼:檢測(cè)并防止通信過程中得錯(cuò)誤,篡改和偽裝
數(shù)字簽名
偽隨機(jī)數(shù)生成器
一次性口令
消息的認(rèn)證是指:“消息來自正確的發(fā)送者”。通過使用消息認(rèn)證碼,我們就可以同時(shí)識(shí)別出篡改和偽裝,既可以確認(rèn)消息完整性,也可以進(jìn)行認(rèn)證。
消息認(rèn)證碼的輸入包括任意消息的長度和一個(gè)接受者和發(fā)送者之間的共享密鑰,輸出是固定長度,這個(gè)數(shù)據(jù)稱為MAC值。
消息認(rèn)證碼是一種與密鑰相關(guān)聯(lián)的單項(xiàng)散列函數(shù)。
如圖:
使用步驟:如圖
數(shù)字簽名就是將公鑰反過來用實(shí)現(xiàn)的。
公鑰加密就是用公鑰加密消息,用私鑰解密密文。
而數(shù)字簽名是用私鑰對(duì)消息生成簽名,傳輸數(shù)字簽名的密文,最后用公鑰解密驗(yàn)證簽名。
如圖所示:
解釋一下:用私鑰加密所得的密文,只能用公鑰才能解密。這就是說,如果某個(gè)公鑰成功解密了密文,那就證明這段密文是由與他配對(duì)的私鑰進(jìn)行加密所得的。
簽名 = 消息的D次方 mod N D和N就是簽名者的私鑰 有簽名求得的消息 = 簽名的E次方 mod N E和N就是簽名者的公鑰
公鑰必須屬于真正的發(fā)送者。即使數(shù)字簽名算法再強(qiáng)大,如果你得到的公鑰是偽造的,那么數(shù)字簽名也會(huì)完全失敗。我們需要使用一種社會(huì)性的基礎(chǔ)設(shè)施,即公鑰基礎(chǔ)設(shè)施。簡稱PKI。
見下文。
公鑰證書和身份證,駕照很相似,里面有姓名,證件號(hào),地址等個(gè)人信息,以及屬于此人的公鑰,由認(rèn)證機(jī)構(gòu)施加數(shù)字簽名。只要看到公鑰證書,我們就可以知道認(rèn)證機(jī)構(gòu)認(rèn)定該公鑰的確屬于此人。公鑰證書簡稱證書。
如圖:
公鑰基礎(chǔ)設(shè)施是為了能夠更有效地運(yùn)用公鑰而制定的一系列規(guī)范和規(guī)格的總稱。
用戶———使用PKI的人
認(rèn)證機(jī)構(gòu)————頒發(fā)證書的人
倉庫————保存證書的數(shù)據(jù)庫
分兩種:1.一種是使用PKI注冊(cè)自己的公鑰的人。
2.另一種是使用已注冊(cè)的公鑰的人。
認(rèn)證機(jī)構(gòu)接受對(duì)證書進(jìn)行管理的人。認(rèn)證機(jī)構(gòu)具體行為如下:
生成密鑰對(duì)
在注冊(cè)公鑰時(shí)對(duì)本人進(jìn)行身份認(rèn)證
生成并頒發(fā)證書
作廢證書
保管證書的數(shù)據(jù)庫,也叫證書目錄
PKI組成要素
密鑰本身就是一個(gè)巨大的數(shù)字,數(shù)字大小不重要,重要的是密鑰空間的大小,也就是說可能出現(xiàn)密鑰的總數(shù)量。因?yàn)槊荑€空間越大,暴力破解就越困難。密鑰空間大小有密鑰長度決定。
密鑰與明文是等價(jià)的,假如明文具有100萬的價(jià)值,那么這段密鑰也具有100萬的價(jià)值;假如明文值1億,密鑰也值1億。
不要使用自己開發(fā)的密碼算法進(jìn)行加密,而是使用一個(gè)經(jīng)過全世界密碼雪茄共同驗(yàn)證的密碼算法。如果你使用了自己的密鑰,可能會(huì)出現(xiàn)你的密鑰被長時(shí)間破解了,你依然無法知曉。 信息的機(jī)密性不應(yīng)該依賴密碼算法本身,而是依賴于妥善保管的密鑰。
Diffie-Hellman 密鑰交換算法,通信雙方僅通過交換一些可以公開的信息就能夠生產(chǎn)出共享密鑰的
基于口令的密碼就是一種根據(jù)口令生成的密鑰并用該密鑰進(jìn)行加密的方法。其中加密和解密使用同一種密鑰
PBE加密過程如圖:
3個(gè)步驟:
生成KEK
生成會(huì)話密鑰并加密
加密消息
PBE解密過程:
個(gè)人覺得是不是箭頭反了?
#####隨機(jī)數(shù)的用途
生成密鑰
用于對(duì)稱密碼和消息認(rèn)證碼
生成密鑰對(duì)
用于公鑰密碼和數(shù)字簽名
生成初始化向量(IV)
用于分組密碼的CBC,CFB和OFB模式
生成nonce
用于防御重放攻擊以及分組密碼的CTR模式等
生成鹽
用于基于口令的密碼(PBE)等
其中生成密鑰和生成密鑰對(duì)是最重要的,即使密碼強(qiáng)度再高,只要攻擊者知道了密鑰,就會(huì)立刻變得形同虛設(shè)。因此我們需要用隨機(jī)數(shù)來生成密鑰,使之無法被攻擊者看穿。
隨機(jī)性
不可預(yù)測(cè)性
不可重現(xiàn)性
如圖
通過硬件生成的隨機(jī)數(shù)列是根據(jù)傳感器收集的熱量,聲音的變化等事實(shí)上是無法預(yù)測(cè)的。像這樣的設(shè)備就稱為隨機(jī)數(shù)生成器。
而可以生成隨機(jī)數(shù)的軟件則稱為偽隨機(jī)數(shù)生成器。因?yàn)檐浖o法生成真隨機(jī)數(shù)。
偽隨機(jī)數(shù)生成器具有“內(nèi)部狀態(tài)”,并根據(jù)外部輸入的“種子”來生成偽隨機(jī)數(shù)列
偽隨機(jī)數(shù)生成器的內(nèi)部狀態(tài),是指偽隨機(jī)數(shù)生成器歲管理的內(nèi)存中的數(shù)值。
當(dāng)有一條偽隨機(jī)數(shù)的請(qǐng)求時(shí),偽隨機(jī)數(shù)生成器會(huì)根據(jù)內(nèi)存中的數(shù)值進(jìn)行技術(shù),并將結(jié)果輸出。隨后改變自己的內(nèi)部狀態(tài)。因此,根據(jù)內(nèi)部狀態(tài)計(jì)算偽隨機(jī)數(shù)的方法和改變內(nèi)部狀態(tài)的方法組合起來,就是偽隨機(jī)數(shù)生成的算法。
偽隨機(jī)數(shù)的種子是用來對(duì)偽隨機(jī)數(shù)生成器的內(nèi)部狀態(tài)進(jìn)行初始化。偽隨機(jī)數(shù)生成器是公開的,但種子是需要自己保密的。由于種子不可以被攻擊者知道,因此不可以使用容易被預(yù)測(cè)的值。
用PGP加密
用PGP解密
用PGP生成數(shù)字簽名
PGP驗(yàn)證數(shù)字簽名
PGP生成數(shù)字簽名并加密
PGP解密并驗(yàn)證數(shù)字簽名
來源:runningyoung.github.io
聯(lián)系客服