對(duì)稱加密:
DES
DES是1977年美國(guó)聯(lián)邦信息處理標(biāo)準(zhǔn)中使用的一種對(duì)稱密碼技術(shù)佩谷,曾今被美國(guó)和其他國(guó)家政府銀行使用。
不過(guò)現(xiàn)在已被暴力破解偶宫,我們除了用它解密以前的密文外,已不再使用DES了环鲤。不過(guò)這里我們可以用它來(lái)了解下什么是對(duì)稱加密纯趋。
加密和解密
DES是一種把64比特明文加密成64比特的密文的對(duì)稱密碼算法,密鑰長(zhǎng)度56位冷离,其中每隔7比特有個(gè)錯(cuò)誤檢查比特吵冒。結(jié)果DES密鑰總長(zhǎng)度為64比特蔫耽。
分組密碼
DES以64比特明文為一個(gè)單位進(jìn)行加密鳖眼,這64比特單位稱為分組愿卒。so琼开,以分組為單位處理密碼的算法稱為分組密碼。DES屬于分組密碼搞动。
DES每次只能加密64比特?cái)?shù)據(jù)渣刷,如果明文較長(zhǎng),就需要對(duì)DES加密進(jìn)行迭代牡拇,迭代的具體方式稱為模式。后文會(huì)描述穆律。
圖DES加密與解密流程
三重DES
三重DES只是將DES重復(fù)3次惠呼,為了增加DES強(qiáng)度
AES
目前很安全
。峦耘。剔蹋。。辅髓。
分組密碼模式
.....好多.....
非對(duì)稱加密
公鑰密碼
在對(duì)稱密碼中泣崩,由于加密解密的密鑰是相同的,因此密鑰配送就成了問(wèn)題洛口。如過(guò)使用公鑰密碼矫付,就解決了配送問(wèn)題。
密鑰配送問(wèn)題:
解決密鑰配送有多個(gè)方法第焰,但都很難處理
- 雙方通信時(shí)如果要加密买优,密鑰不能在通信內(nèi)容中。否則會(huì)被中間人竊聽(tīng)挺举。
- 雙方可以事先共享密鑰杀赢,如果雙方離得很近自然好說(shuō)。但如果離得很遠(yuǎn)就不能在消息里傳播密鑰湘纵,因?yàn)榭赡軙?huì)被竊聽(tīng)脂崔。郵寄存儲(chǔ)卡也可能會(huì)被竊取。假如一個(gè)公司有1000人需要彼此加密通信瞻佛,那密鑰數(shù)可能會(huì)達(dá)到50萬(wàn)個(gè)脱篙,這個(gè)不現(xiàn)實(shí)娇钱。
- 如果有個(gè)密鑰分配中心存儲(chǔ)密鑰伤柄,那1000人的數(shù)據(jù)庫(kù)會(huì)有1000個(gè)密鑰。但如果員工增加文搂,密鑰也要增加适刀,數(shù)據(jù)庫(kù)負(fù)荷會(huì)加大,如果數(shù)據(jù)庫(kù)癱瘓煤蹭,全公司的通信就會(huì)癱瘓笔喉。密鑰分配中心也可能會(huì)遭到攻擊.
- Diffie-Hellman密鑰交換取视。是個(gè)方案。我們?cè)诤罄m(xù)會(huì)討論
公鑰密碼解決配送問(wèn)題
兩種密鑰常挚。一種是加密密鑰作谭,一種是解密密鑰
這里有公鑰和私鑰,公鑰和私鑰既可以當(dāng)做加密密鑰奄毡,也可以做解密密鑰折欠。只是使用場(chǎng)景不同
你既可以用公鑰加密,私鑰解密吼过。也可以用公鑰解密锐秦,私鑰加密。區(qū)別只是在于使用場(chǎng)景盗忱。
公鑰和私鑰是一一對(duì)應(yīng)的酱床,一對(duì)公鑰和私鑰統(tǒng)稱為密鑰對(duì)
我們來(lái)看一種公鑰加密,私鑰解密的情景趟佃。
Alice要發(fā)消息給Bob
- Bob要接受消息扇谣,生成密鑰對(duì)。私鑰自己保管揖闸,公鑰發(fā)給Alice
- 公鑰被截獲也沒(méi)關(guān)系揍堕。因?yàn)楣€只負(fù)責(zé)加密
- Alice用公鑰對(duì)消息加密,發(fā)送給Bob汤纸。
- 即使密文中間被截獲也沒(méi)關(guān)系衩茸,公鑰無(wú)法解密
- Bob用自己私鑰揭秘
如圖所示
公鑰密碼的問(wèn)題
- 公鑰是否是正確合法的.假如中間人給你換了個(gè)公鑰呢?
- 處理速度要比對(duì)稱加密慢很多贮泞,大約只有百分之一
我們后面討論這兩個(gè)問(wèn)題
RSA
RSA加密
密文 = 明文 E mod N (mod是取模的意思)
E和N的組合就是公鑰 簡(jiǎn)稱 “公鑰是(E,N)”
RSA解密
明文 = 密文 D mod N
D和N的組合就是私鑰
中間人攻擊
這個(gè)邏輯很簡(jiǎn)單楞慈,中間人替換掉了接受者得公鑰,向?qū)Ψ教峁┝俗约旱墓€啃擦。結(jié)果發(fā)送者用的中間人的公鑰加密消息發(fā)送出去囊蓝,中間人接受到消息并用自己私鑰解密得到明文。再偽造一個(gè)假消息用接受者的公鑰加密還給接受者令蛉。具體流程如圖:
混合密碼技術(shù)
組成機(jī)制:
- 用對(duì)稱密碼加密消息
- 通過(guò)偽隨機(jī)數(shù)生成器生成對(duì)稱密碼加密中使用的會(huì)話密鑰
- 用公鑰加密會(huì)話密鑰
- 從混合密碼系統(tǒng)外部賦予公鑰密碼時(shí)使用的密鑰
####### 混合密碼系統(tǒng)加密解密過(guò)程
加密:
- 使用偽隨機(jī)生成器生成會(huì)話密鑰 聚霜,會(huì)話密鑰加密明文生成密文
- 用接受者的公鑰加密會(huì)話密鑰
- 兩個(gè)密文組合后發(fā)送出去
解密:
- 收到消息先解密會(huì)話密鑰,用接受者的私鑰解密珠叔,得到會(huì)話密鑰
- 用會(huì)話密鑰解密加密過(guò)得密文蝎宇,即可得到消息
認(rèn)證
單向散列函數(shù)
輸入稱為消息,輸出稱為散列值祷安。
單向散列函數(shù)可以根據(jù)消息的內(nèi)容計(jì)算出散列值姥芥,而散列值就可以被用來(lái)檢查消息的完整性。
單向散列函數(shù)的性質(zhì):
- 根據(jù)任意長(zhǎng)度的消息計(jì)算出固定長(zhǎng)度的散列值
- 能夠快速計(jì)算出散列值
- 消息不同散列值也不同
- 兩個(gè)不同消息產(chǎn)生同一個(gè)散列值的情況稱為碰撞
- 要找到和該消息具有相同散列值的另外一條消息是非常困難的汇鞭。這一性質(zhì)稱為弱抗碰撞性
- 要找到散列值相同的兩條不同消息是非常困難的凉唐。稱為強(qiáng)抗碰撞性
- 具備單向性
關(guān)于術(shù)語(yǔ)
單項(xiàng)散列函數(shù)又稱為消息摘要函數(shù)庸追,哈希函數(shù)或者雜湊函數(shù)
實(shí)際應(yīng)用
- 檢測(cè)軟件是否篡改
- 基于口令的加密(PBE):原理是將口令和炎(偽隨機(jī)數(shù))混合后計(jì)算其散列值,然后將這個(gè)散列值用作加密密鑰
- 消息認(rèn)證碼:檢測(cè)并防止通信過(guò)程中得錯(cuò)誤台囱,篡改和偽裝
- 數(shù)字簽名
- 偽隨機(jī)數(shù)生成器
- 一次性口令
消息認(rèn)證碼
消息的認(rèn)證是指:“消息來(lái)自正確的發(fā)送者”淡溯。通過(guò)使用消息認(rèn)證碼,我們就可以同時(shí)識(shí)別出篡改和偽裝簿训,既可以確認(rèn)消息完整性血筑,也可以進(jìn)行認(rèn)證。
消息認(rèn)證碼的輸入包括任意消息的長(zhǎng)度和一個(gè)接受者和發(fā)送者之間的共享密鑰煎楣,輸出是固定長(zhǎng)度豺总,這個(gè)數(shù)據(jù)稱為MAC值。
消息認(rèn)證碼是一種與密鑰相關(guān)聯(lián)的單項(xiàng)散列函數(shù)择懂。
如圖:
使用步驟:如圖
數(shù)字簽名
數(shù)字簽名就是將公鑰反過(guò)來(lái)用實(shí)現(xiàn)的喻喳。
公鑰加密就是用公鑰加密消息,用私鑰解密密文困曙。
而數(shù)字簽名是用私鑰對(duì)消息生成簽名表伦,傳輸數(shù)字簽名的密文,最后用公鑰解密驗(yàn)證簽名慷丽。
如圖所示:
解釋一下:用私鑰加密所得的密文蹦哼,只能用公鑰才能解密。這就是說(shuō)要糊,如果某個(gè)公鑰成功解密了密文纲熏,那就證明這段密文是由與他配對(duì)的私鑰進(jìn)行加密所得的。
數(shù)字簽名方法
- 直接對(duì)消息簽名
- 對(duì)消息的散列值簽名
如圖:
通過(guò)RSA實(shí)現(xiàn)數(shù)字簽名
簽名 = 消息的D次方 mod N
D和N就是簽名者的私鑰
有簽名求得的消息 = 簽名的E次方 mod N
E和N就是簽名者的公鑰
數(shù)字簽名無(wú)法解決的問(wèn)題
公鑰必須屬于真正的發(fā)送者。即使數(shù)字簽名算法再?gòu)?qiáng)大奶赠,如果你得到的公鑰是偽造的鱼填,那么數(shù)字簽名也會(huì)完全失敗。我們需要使用一種社會(huì)性的基礎(chǔ)設(shè)施毅戈,即公鑰基礎(chǔ)設(shè)施苹丸。簡(jiǎn)稱PKI。
見(jiàn)下文苇经。
證書(shū)
公鑰證書(shū)和身份證赘理,駕照很相似,里面有姓名塑陵,證件號(hào)感憾,地址等個(gè)人信息蜡励,以及屬于此人的公鑰令花,由認(rèn)證機(jī)構(gòu)施加數(shù)字簽名阻桅。只要看到公鑰證書(shū),我們就可以知道認(rèn)證機(jī)構(gòu)認(rèn)定該公鑰的確屬于此人兼都。公鑰證書(shū)簡(jiǎn)稱證書(shū)嫂沉。
證書(shū)應(yīng)用場(chǎng)景
如圖:
公鑰基礎(chǔ)設(shè)施(PKI)
公鑰基礎(chǔ)設(shè)施是為了能夠更有效地運(yùn)用公鑰而制定的一系列規(guī)范和規(guī)格的總稱。
PKI的組成要素
- 用戶———使用PKI的人
- 認(rèn)證機(jī)構(gòu)————頒發(fā)證書(shū)的人
- 倉(cāng)庫(kù)————保存證書(shū)的數(shù)據(jù)庫(kù)
用戶
分兩種:1.一種是使用PKI注冊(cè)自己的公鑰的人扮碧。
2.另一種是使用已注冊(cè)的公鑰的人趟章。
認(rèn)證機(jī)構(gòu)(CA)
認(rèn)證機(jī)構(gòu)接受對(duì)證書(shū)進(jìn)行管理的人。認(rèn)證機(jī)構(gòu)具體行為如下:
- 生成密鑰對(duì)
- 在注冊(cè)公鑰時(shí)對(duì)本人進(jìn)行身份認(rèn)證
- 生成并頒發(fā)證書(shū)
- 作廢證書(shū)
倉(cāng)庫(kù)
保管證書(shū)的數(shù)據(jù)庫(kù)慎王,也叫證書(shū)目錄
PKI組成要素
密鑰蚓土,隨機(jī)數(shù)與應(yīng)用技術(shù)
什么是密鑰
- 密鑰本身就是一個(gè)巨大的數(shù)字,數(shù)字大小不重要赖淤,重要的是密鑰空間的大小蜀漆,也就是說(shuō)可能出現(xiàn)密鑰的總數(shù)量。因?yàn)槊荑€空間越大咱旱,暴力破解就越困難确丢。密鑰空間大小有密鑰長(zhǎng)度決定。
- 密鑰與明文是等價(jià)的吐限,假如明文具有100萬(wàn)的價(jià)值鲜侥,那么這段密鑰也具有100萬(wàn)的價(jià)值;假如明文值1億诸典,密鑰也值1億描函。
- 不要使用自己開(kāi)發(fā)的密碼算法進(jìn)行加密,而是使用一個(gè)經(jīng)過(guò)全世界密碼雪茄共同驗(yàn)證的密碼算法狐粱。如果你使用了自己的密鑰赘阀,可能會(huì)出現(xiàn)你的密鑰被長(zhǎng)時(shí)間破解了,你依然無(wú)法知曉脑奠。 信息的機(jī)密性不應(yīng)該依賴密碼算法本身基公,而是依賴于妥善保管的密鑰。
Diffie-Hellman 密鑰交換
Diffie-Hellman 密鑰交換算法宋欺,通信雙方僅通過(guò)交換一些可以公開(kāi)的信息就能夠生產(chǎn)出共享密鑰的
基于口令的密碼(PBE)
基于口令的密碼就是一種根據(jù)口令生成的密鑰并用該密鑰進(jìn)行加密的方法轰豆。其中加密和解密使用同一種密鑰
PBE加密過(guò)程如圖:
3個(gè)步驟:
- 生成KEK
- 生成會(huì)話密鑰并加密
- 加密消息
PBE解密過(guò)程:
個(gè)人覺(jué)得是不是箭頭反了?
隨機(jī)數(shù)
隨機(jī)數(shù)的用途
生成密鑰
用于對(duì)稱密碼和消息認(rèn)證碼生成密鑰對(duì)
用于公鑰密碼和數(shù)字簽名生成初始化向量(IV)
用于分組密碼的CBC,CFB和OFB模式生成nonce
用于防御重放攻擊以及分組密碼的CTR模式等生成鹽
用于基于口令的密碼(PBE)等
其中生成密鑰和生成密鑰對(duì)是最重要的齿诞,即使密碼強(qiáng)度再高酸休,只要攻擊者知道了密鑰,就會(huì)立刻變得形同虛設(shè)祷杈。因此我們需要用隨機(jī)數(shù)來(lái)生成密鑰斑司,使之無(wú)法被攻擊者看穿。
隨機(jī)數(shù)的性質(zhì)
- 隨機(jī)性
- 不可預(yù)測(cè)性
- 不可重現(xiàn)性
如圖
偽隨機(jī)數(shù)生成器
通過(guò)硬件生成的隨機(jī)數(shù)列是根據(jù)傳感器收集的熱量但汞,聲音的變化等事實(shí)上是無(wú)法預(yù)測(cè)的宿刮。像這樣的設(shè)備就稱為隨機(jī)數(shù)生成器互站。
而可以生成隨機(jī)數(shù)的軟件則稱為偽隨機(jī)數(shù)生成器。因?yàn)檐浖o(wú)法生成真隨機(jī)數(shù)僵缺。
偽隨機(jī)數(shù)生成器具有“內(nèi)部狀態(tài)”胡桃,并根據(jù)外部輸入的“種子”來(lái)生成偽隨機(jī)數(shù)列
偽隨機(jī)數(shù)生成器的內(nèi)部狀態(tài)
偽隨機(jī)數(shù)生成器的內(nèi)部狀態(tài),是指?jìng)坞S機(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)的方法組合起來(lái)膏潮,就是偽隨機(jī)數(shù)生成的算法闺兢。
偽隨機(jī)數(shù)生成器的種子
偽隨機(jī)數(shù)的種子是用來(lái)對(duì)偽隨機(jī)數(shù)生成器的內(nèi)部狀態(tài)進(jìn)行初始化。偽隨機(jī)數(shù)生成器是公開(kāi)的戏罢,但種子是需要自己保密的屋谭。由于種子不可以被攻擊者知道,因此不可以使用容易被預(yù)測(cè)的值龟糕。
PGP---密碼技術(shù)的完美組合
用PGP加密
用PGP解密
用PGP生成數(shù)字簽名
PGP驗(yàn)證數(shù)字簽名
PGP生成數(shù)字簽名并加密
PGP解密并驗(yàn)證數(shù)字簽名