1 公鑰私鑰
2 公鑰加密
別人用A的公鑰加密傳輸?shù)男畔⒉恚挥蠥的私鑰可以解密。保證了傳輸?shù)男畔⒌陌踩浴?/p>
2 私鑰簽名
A用A的私鑰加密的信息曾沈,別人用A的公鑰才可以解密飒箭。可以證明這個信息一定是A傳輸而來的敛腌。
2 HTTPS的加密過程
共享秘鑰(對稱加密):速度快,但無法保證客戶端與服務器之間傳輸時秘鑰的安全性尤莺。
和公開密鑰(非對稱加密):安全生棍,速度慢。
3 數(shù)據(jù)傳輸過程:
一晴音、客戶端請求SSL(安全套接層)通信缔杉,報文中包含自己支持的SSL版本、加密算法等系羞。
二椒振、服務器應答梧乘,附帶自己的公鑰證書澎迎,協(xié)商定好的SSL版本夹供、加密組件学歧。
服務器端需要將自己的公鑰發(fā)送給客戶端枝笨,以供客戶端加密信息。
但客戶端無法確定得到的公鑰一定是目標服務器的剔桨,可能是中間人偽裝的徙融。
服務器端公司請求數(shù)字證書認證機構(gòu)(CA)對它的證書進行證明欺冀。CA 使用自己的秘鑰對服務器公司的公鑰進行加密。CA 將服務器公鑰相關(guān)的信息以明文形式寫入證書饺饭,并通過指紋算法(一個hash算法)對證書內(nèi)容進行計算瘫俊,得到指紋。然后骂蓖,對指紋算法和指紋用私鑰進行加密川尖,得到數(shù)字簽名叮喳。最后,將證書內(nèi)容附帶數(shù)字簽名一起發(fā)布。
這樣赋朦,只要你的CA公鑰是合法的李破,能夠解開數(shù)字簽名的私鑰加密,且計算后指紋吻合毛嫉,則可以保證服務器公鑰的合法性————是由CA認證的承粤,且內(nèi)容未被篡改過闯团。
若是黑客的合法證書房交,那內(nèi)容與我們的目的域名不一致,肯定不行刃唤。
三白群、客戶端根據(jù)自己本地的收信任的CA公鑰川抡,解封服務器公鑰證書须尚,得到服務器公鑰耐床⌒ǜ客戶端生成一個隨機碼序列昧廷,用服務器公鑰加密后,發(fā)回服務器皆串。
四眉枕、服務器用私鑰解密后速挑,再加密將字符串傳回客戶端。
五翅萤、客戶端確認服務器身份后套么,生成對稱加密算法和共享秘鑰碳蛋,使用服務器公鑰加密后疮蹦,傳給服務器。
六阵苇、此后绅项,雙方使用對稱加密算法加密數(shù)據(jù)比肄,進行傳輸。
上面過程中掀亥,一二用于獲得合法的服務器公鑰搪花,三四用于確認服務器是否為真正私鑰持有者(因為,服務器公鑰誰都可以得到)吮便。
1 對稱密碼
2 一次性密碼本
使用與明文比特序列一樣長的髓需,真正的隨機數(shù)序列房蝉,進行加密惨驶,絕對安全敛助,因為窮舉破譯后能得到整個秘鑰空間纳击,毫無意義。
2 DES Date Encryption Standard
以分組為單位進行處理的密碼算法稱為 分組密碼纱昧。
3 加密結(jié)構(gòu)
采用 Feistel網(wǎng)絡识脆。
以 64 bit 為一個加密單位灼捂,首先分成兩部分换团,各32 bit 。
加密過程持續(xù)數(shù)輪的猛,每輪中卦尊,使用子秘鑰與右側(cè)數(shù)據(jù)經(jīng)過輪函數(shù)生成一個序列,然后與左側(cè)做 XOR 猫牡。
每輪結(jié)束后淌友,左右兩側(cè)交換。
3 特點
加解密結(jié)構(gòu)相同瑰抵,輪數(shù)任意二汛,函數(shù)任意拨拓。
2 三重DES triple-DES
使用秘鑰1渣磷、2醋界、3對明文進行加密、解密丘侠、加密三個過程蜗字,稱為三重DES脂新。
解密過程是為了兼容老版DES戏羽,如果1始花、2孩锡、3秘鑰相同躬窜,則成為了普通DES炕置。
1朴摊、3秘鑰相同甚纲,2不同時,稱為DES-EDE2 鹃操。
1荆隘、2赴背、3秘鑰不同癞尚,稱為DES-EDE3 浇揩。
2 AES advanced encryption standard
采用的是 Rijndael 算法憨颠,SPN結(jié)構(gòu)爽彤。
3 加密結(jié)構(gòu)
輸入分組為 128bit(16字節(jié)),秘鑰長度可以以 32bit 為單位往核,在128~256bit之間選擇聂儒。
該算法由多輪構(gòu)成衩婚,10~14輪。
一輪中:
SubBytes柱徙,按字節(jié)护侮,將輸入分開概行,以每個字節(jié)為索引弧岳,查表找值禽炬,替換腹尖。
ShiftRows(平移行),按字節(jié)乐设,打亂上面的輸出近尚。
MixColumns (混合列)戈锻,按4個字節(jié)和媳,比特運算留瞳。
與輪秘鑰進行 XOR 。
1 模式
分組密碼:每次處理骤竹,特定長度的一塊數(shù)據(jù)往毡。
流密碼:對數(shù)據(jù)流开瞭,連續(xù)處理嗤详,需要保持內(nèi)部狀態(tài),記錄進度递宅。
模式:密文有多個分組時办龄,分組密碼的迭代方法俐填。
模式種類
ECB模式 :electronic codebook mode
CBC模式 :cipher block chaining mode
CFB模式 :cipher feedback mode
OFB模式 :output feedback mode
CTR模式 :counter mode
2 ECB 電子密碼本模式
明文分組加密后英融,直接成為驶悟,密文分組材失。
特點:攻擊者無需破譯豺憔,即可操縱明文恭应。
2 CBC 密文分組鏈接模式
3 加密結(jié)構(gòu)
明文分組昼榛,與前一個密文分組XOR胆屿,加密得到自己的密文分組。
第一個分組的前一個密文分組环鲤,由 初始化向量(隨機比特序列) 代替冷离。
加密時西剥,需要從頭開始瞭空。因為需要與密文分組做 XOR 咆畏。
解密時碍粥,對密文分組解密嚼摩,直接與密文分組 XOR 即可枕面。
3 特點
同樣的明文分組潮秘,密文值可以不相等枕荞。
密文分組可以損壞躏精,影響部分。
密文分組比特缺失辅柴,影響全部碌嘀。
2 CFB 密文反饋模式
3 加密結(jié)構(gòu)
前一個密文分組股冗,通過加密算法得到一個比特序列止状,稱為 密鑰流 导俘。
明文分組,與密鑰流 XOR辅髓,得到自己的密文分組少梁。
解密時洛口,加密算法對密文分組進行加密,得到密鑰流凯沪,與密文 XOR 可得到明文第焰。
3 攻擊方式
重復攻擊:假設(shè)秘鑰相同。發(fā)送 4 個分組妨马,攻擊者保存了后面3個挺举。轉(zhuǎn)天,你又發(fā)送了 4 個分組烘跺,攻擊者將你后面三個替換,接收方解密后滤淳,只有 2 號分組有錯梧喷。
2 OFB 輸出反饋模式
3 加密結(jié)構(gòu)
對于每個分組,初始化向量加密后脖咐,得到密鑰流铺敌。明文與密鑰流 XOR 后,得到密文屁擅。
3 特點
速度快偿凭,密鑰流可以提前生成,或者煤蹭,生成秘鑰過程可以和 XOR 運算并行笔喉。
2 CTR 計數(shù)器模式
3 加密結(jié)構(gòu)
對每個計數(shù)器加密得到密鑰流。密鑰流與明文分組 XOR 硝皂,得到密文分組常挚。
計數(shù)器生成的數(shù),由一個隨機序列 nonce+從1開始的遞增數(shù)字組成稽物。
對每個分組奄毡,計數(shù)器遞增后,加密贝或,得到密鑰流吼过。
3 特點
能夠以任意順序處理分組,因為加密時需要的初始數(shù)字序列能夠計算出來咪奖。
1 公鑰密碼
2 密鑰配送問題解決方法
3 事先共享密鑰
為了確保安全盗忱,有地理局限,與不同的人通信需要不同密鑰羊赵,共享繁瑣趟佃。
3 密鑰分配中心
每個員工有自己的密鑰,密鑰分配中心使用個人密鑰昧捷,包裹臨時會話密鑰闲昭,分配給各個員工使用。
2 RSA
3 加密原理
密文=明文的E次方 MOD N
E 和 N 是RSA加密用的密鑰靡挥,也就是說序矩,E 和 N 的組合就是公鑰。
3 解密原理
明文=密文的D次方 MOD N
D 和 N 的組合就是私鑰跋破。
3 生成密鑰對
4 求 N
尋兩個很大的質(zhì)數(shù) p 和 q簸淀,相乘得到 N
4 求 L(僅在生成密鑰對過程中使用)
L為 p-1 和 q-1 的最小公倍數(shù)
4 求 E
隨機數(shù)生成器,不停地生成數(shù)字毒返,直到滿足如下條件:
1 < E < L
E 和 L 的最大公約數(shù)為 1
4 求 D
根據(jù) E 啃擦,計算 D
1 < E < L
E × D MOD L = 1
保證 E 與 L 互質(zhì),則 D 一定存在饿悬。
3 數(shù)學原則
求對數(shù)很容易令蛉,求 離散對數(shù) 很困難
對一個大數(shù)字進行質(zhì)因數(shù)分解,人類未找到高效算法
2 其它公鑰密碼
3 ElGamal方式
利用了 MOD N下狡恬,求離散對數(shù)的困難度
加密后珠叔,密文長度翻倍
3 Rabin方式
利用了 MOD N下,求平方根的困難度
3 橢圓曲線密碼 ECC
密碼實現(xiàn)通過 對橢圓曲線上的特定點進行特殊乘法弟劲。
利用了該種乘法的逆運算非常困難這一特性
1 單向散列函數(shù)
單向散列函數(shù) 又稱為祷安,消息摘要函數(shù)、哈希函數(shù)兔乞、雜湊函數(shù)
輸入的消息 又稱為汇鞭,原像
散列值 又稱為凉唐,消息摘要、指紋
完整性 又稱為霍骄,一致性
2 單向散列函數(shù)的性質(zhì)
根據(jù)任意消息台囱,計算出的散列值長度,固定
用時短
消息不同读整,散列值不同
消息不同簿训,散列值相同的情況,稱為碰撞米间。
弱抗碰撞性:要找到强品,與該條消息散列值相同的,另外一條消息屈糊,非常困難的榛。
強抗碰撞性:要找到,散列值相同的逻锐,兩條不同消息困曙,非常困難。
密碼技術(shù)中的 單向散列函數(shù)谦去,需要強弱抗碰撞性兼?zhèn)洹?/p>
具備單向性
2 具體的單向散列函數(shù)
3 MD4慷丽、MD5
MD是消息摘要的意思
可以產(chǎn)生 128bit 的散列值,但它們的抗碰撞性已被攻破
3 SHA-1鳄哭、SHA-256要糊、SHA-384、SHA-512
SHA-1散列值長度為 160bit妆丘,強碰撞性已被攻破
其余的統(tǒng)稱為 SHA-2锄俄,散列值長度為各自后面的數(shù)字
3 RIPEMD-160
歐盟版本
3 AHS advanced hash standard 和 SHA-3
第三代 SHA
2 SHA-1
消息上限 2^64 bit。
3 填充
消息長度需要是 512bit 的整數(shù)倍勺拣。這樣的 512比特 稱為一個輸入分組奶赠。
過程:
消息末尾添加 1
然后添加 0,直到最后一個分組的 448比特 的位置
最后 64比特 需要保存原是消息的長度
3 計算W0~W79
對每個分組計算 80 個 32bit 的值药有。
過程:
將 512bit 分成 32bit × 16組毅戈,稱為 W0~W15
從15組中按規(guī)律取4組,進行 XOR 運算愤惰,結(jié)果循環(huán)左移 1 位苇经,得到另外一組。如此反復宦言,得到總共 80 組扇单。
3 分組處理
ABCDE 五個 32bit 的緩沖區(qū),保存了 160bit 的消息內(nèi)部狀態(tài)奠旺。
內(nèi)部狀態(tài)與每個 512bit 的輸入分組混合蜘澜,一共 80 個步驟施流。
單個步驟的處理過程異常復雜,每個步驟完成后鄙信,五個緩沖區(qū)都要循環(huán)移位瞪醋,B緩沖區(qū)需要左移30bit,過程中扮碧,每個緩沖區(qū)都與輸入分組進行了運算。
最終得到 160bit 的最終內(nèi)部狀態(tài)杏糙。
對單向散列函數(shù)的攻擊
暴力破解:暴力尋找與 1億元合同 散列值相同的文件
生日攻擊:準備兩份 散列值相同的 1億元合同
單向散列函數(shù)無法解決的問題
可以辨別 篡改慎王,無法辨別 偽裝,因此還需要 認證技術(shù)
認證技術(shù)包括 消息驗證碼 和 數(shù)字簽名
消息驗證碼:可以向通信對象保證消息不被篡改
數(shù)字簽名:可以向任何人保證通信對象不被篡改
1 消息認證碼
message authentication code宏侍,簡稱 MAC赖淤。
相當于使用共享密鑰的單向散列函數(shù)
2 消息認證碼的應用實例
SWIFT:負責銀行間的交易,公鑰密碼使用前谅河,都是人工配送密鑰的咱旱。
IPsec:對IP協(xié)議增加安全性,采用的是消息認證碼
SSL/TLS:網(wǎng)上購物等場景中所用協(xié)議绷耍。
2 HMAC Hash MAC
過程:
密鑰填充 至單向散列函數(shù)要求的輸入分組大小
填充后的密鑰 與 ipad(16進制的36不斷循環(huán))XOR吐限,得到ipadkey
與 消息 組合,計算散列值
填充后的密鑰 與 opad(16進制的5C不斷循環(huán))XOR褂始,得到opadkey
與 上面得到的散列值 組合诸典,計算新的散列值,為最終的MAC值
2 消息認證無法解決的問題
對第三方證明
防止否認
因為知曉密鑰的只有兩個當事人崎苗,第三者無法確定能拿到合法的密鑰狐粱,無法自己計算合法MAC值
1 數(shù)字簽名
2 數(shù)字簽名的方法
RSA:利用質(zhì)因數(shù)分解難度的那個
ElGamal:利用求離散對數(shù)的困難度的那個,數(shù)字簽名有漏洞胆数,現(xiàn)僅用于公鑰密碼
DSA:Schnorr算法與ElGamal方式的變體肌蜻,只能用于數(shù)字簽名
Rabin:利用了求MOD N中平方根的困難度,可用于數(shù)字簽名和公鑰密碼
1 證書
2 認證機構(gòu)的 認證業(yè)務準則
例如必尼,verisign公司的認證業(yè)務分為三個等級蒋搜,等級越高,越嚴格
Class 1 郵箱認證
Class 2 通過第三方數(shù)據(jù)庫來確認本人身份
Class 3 通過當面認證和身份證明
2 證書標準規(guī)范
ITU 國際電信聯(lián)盟和 ISO 國際標準化組織制定的 X.509 規(guī)范如下
大體包含以下內(nèi)容:
簽名前的證書——簽名對象的各種消息
數(shù)字簽名算法——簽名時所用的算法
數(shù)字簽名——得到的數(shù)字簽名
2 公鑰基礎(chǔ)設(shè)施 Public-Key Infrastructure
PKI :為了能有效使用公鑰而制定的一系列規(guī)范和規(guī)格
PKI 的組成要素如下
用戶 —— 使用 PKI 的人
認證機構(gòu) —— 頒發(fā)證書的人
倉庫 —— 證書目錄
2 認證機構(gòu)的工作
3 生成秘鑰對
兩種方法:一種是由認證機構(gòu)生成判莉,一種是由 PKI 用戶自行生成
3 注冊證書
3 作廢證書與CRL
認證機構(gòu)有一個 CRL(認證作廢清單)齿诞,具有數(shù)字簽名,記載了已經(jīng)作廢的證書的編號骂租。
2 證書的層級結(jié)構(gòu)
認證時祷杈,從上(根證書)往下
1 密鑰
對于密鑰,關(guān)鍵的是 密鑰空間的大小
2 各類密鑰
DES 的密鑰 實質(zhì)長度(即渗饮,除去校驗錯誤的比特后的長度)7字節(jié)
DES-EDE2 的實質(zhì)長度 14字節(jié)但汞,DES-EDE3 的實質(zhì)長度 21字節(jié)
AES 的密鑰長度可以從 128宿刮、192 和 256bit 當中選
2 不同的密鑰
3 會話密鑰和主密鑰
會話密鑰:每次通信中,僅使用一次的密鑰
主密鑰:一直被重復使用的密鑰
3 加密內(nèi)容的密鑰和加密密鑰的密鑰
CEK:Contents Encrypting Key
KEK: Key Encrypting Key
2 密鑰的管理
各個步驟中的密鑰管理方法
3 生成密鑰
兩種方法:
用隨機數(shù)生成密鑰:使用具備不可預測性的偽隨機數(shù)生成器生成隨機數(shù)
用口令生成密鑰:一般使用私蕾,口令 + 一串稱為 salt 的隨機數(shù)僵缺,得到他們的散列值作為密鑰(這種方法稱為:基于口令的密碼)
3 配送密鑰
事先共享
秘鑰分配中心
使用公鑰密鑰
Diffie-Hellman 密鑰交換
3 更新密鑰
密鑰更新:一種提高通信機密性的技術(shù)
原理:
使用 共享密鑰 進行通信時,定期改變密鑰踩叭。
雙方使用同樣的方法磕潮,對當前密鑰求 散列值,并作為下一個密鑰
優(yōu)點:
后向安全:防止破譯過去的內(nèi)容
如果密鑰被竊聽者得到容贝,他只能得到之后的消息自脯,無法得到上一個密鑰,無法得到此前的消息
3 保存密鑰
對密鑰進行加密斤富,然后保存
意義:
同時對多個密鑰進行加密膏潮,可以減少保存密鑰的數(shù)量
2 Diffie-Hellman密鑰交換
步驟:
3 雙方首先確定兩個質(zhì)數(shù) P 和 G
P 為非常大的質(zhì)數(shù),G 為 P 的生成元
3 甲方生成一個隨機數(shù) A满力,乙方生成一個隨機數(shù) B 焕参,各自保密
3 甲方將 G^A MOD P 發(fā)給 B
目的為,將 隨機數(shù) A 的信息 含蓄地發(fā)給了 B
3 乙方將 G^B MOD P 發(fā)給 A
目的為油额,將 隨機數(shù) B 的信息 含蓄地發(fā)給了 A
3 甲方進行計算叠纷,得到密鑰
計算方法:密鑰 = (G ^ B MOD P) ^ A MOD P = G^(A × B) MOD P
3 乙方進行計算,得到密鑰
計算方法:密鑰 = (G ^ A MOD P) ^ B MOD P = G^(A × B) MOD P
2 生成元 G 的意義
對于一個質(zhì)數(shù) P 潦嘶,只有它的生成元在進行 G ^ x MOD P 時讲岁,結(jié)果能夠覆蓋 0 ~ P-1 的所有數(shù)字
2 基于口令的密碼 (PBE 基于口令的加密)
用途:用于安全的保存密鑰
由來:
一 生成會話密鑰 CEK ,加密消息
二 需要保密 會話密鑰CEK衬以,使用 密鑰加密密鑰KEK 對會話密鑰進行保密
三 現(xiàn)在需要保密 KEK 這個密鑰缓艳,選擇使用口令生成這個 KEK
對 口令 + salt 求散列值,作為 KEK 看峻,之后只用保存 salt 和 使用 KEK 加密后的會話密鑰 就好了阶淘,KEK也可以丟掉了
3 過程重點
保密的問題最終都歸結(jié)為了 安全保存密鑰,然而我們記不住密鑰互妓。
于是溪窒,選擇單向散列函數(shù)對口令生成散列值,作為密鑰冯勉。
這個密鑰無需保存澈蚌,我們可以通過口令隨時求得,口令也無法被反向推出灼狰,且口令方便記憶宛瞄。
順帶,為了防止字典攻擊交胚,生成口令散列值時份汗,需要使用 口令 + salt(隨機數(shù)序列)
3 字典攻擊
事先 已準備好 候選列表 的攻擊方法
1 隨機數(shù)
2 隨機數(shù)的性質(zhì)
隨機性
不可預測性
不可重見性
這三個性質(zhì)盈电,越往下越嚴格。分別稱為:
弱偽隨機數(shù)(不可用于密碼學)
強偽隨機數(shù)
真隨機數(shù)
3 偽隨機數(shù)生成器的種子
偽隨機數(shù)生成器是公開的杯活,種子是保密的匆帚。
確保種子的不可預測性,更加容易些旁钧。
種子是用來對偽隨機數(shù)生成器的內(nèi)部狀態(tài)進行初始化的
2 具體的偽隨機數(shù)生成器
3 線性同余法
R1 = (A × R0 + C) MOD M
數(shù)據(jù)有限吸重,不能用于密碼學
3 單向散列函數(shù)法
單向散列函數(shù)的單向性是支撐偽隨機數(shù)序列不可預測性的基礎(chǔ)
3 密碼法
利用 AES 等對稱密鑰對內(nèi)部狀態(tài)進行加密
3 ANSI X9.17
從當前時間開始,利用加密算法求得加密后的時間的掩碼(因為密鑰未知歪今,別人無法推測出掩碼信息)
與內(nèi)部狀態(tài) XOR嚎幸,加密后輸出,得到偽隨機數(shù)序列
對偽隨機數(shù)序列加密后彤委,作為下一個內(nèi)部狀態(tài)
1 PGP Pretty Good Privacy
針對極端情況的密碼軟件鞭铆,具有全部功能或衡。
PGP 通過信任網(wǎng)來判斷密鑰的合法性和可信度
1 SSL/TLS
2 TLS 傳輸層安全協(xié)議
TLS 由 TLS 記錄協(xié)議 和 TLS 握手協(xié)議 疊加而成焦影。
3 TLS 記錄協(xié)議 負責底層加密
負責消息的 加密、壓縮 和 認證
3 TLS 握手協(xié)議 負責加密外的其他操作
握手協(xié)議
商定 客戶端和服務器 所用的加密算法和密鑰
密碼規(guī)格變更協(xié)議
負責 傳遞 變更密碼的信號
警告協(xié)議
發(fā)生錯誤時 通知對方
應用數(shù)據(jù)協(xié)議
傳輸數(shù)據(jù)