0x00 完整思路
大家都知道,在客戶端與服務(wù)器數(shù)據(jù)傳輸?shù)倪^程中,采用明文進行傳輸集峦,是不安全的。那么如何建立安全的傳輸通道進行傳輸數(shù)據(jù)呢抠刺?
1.添加時間戳 => 防止重放 √
2.用對稱加密傳輸數(shù)據(jù)內(nèi)容 => 通道加密 √
3.用非對稱加密傳輸對稱加密的密鑰 => 加密傳輸密鑰 √
4.用數(shù)字證書傳輸非對稱加密的公鑰 => 防偽造 √
0x01 時間戳:防止重放攻擊
重放攻擊是計算機世界黑客常用的攻擊方式之一塔淤,所謂重放攻擊就是攻擊者發(fā)送一個目的主機已接收過的包,來達到欺騙系統(tǒng)的目的速妖,主要用于身份認證過程高蜂。為了確保每次請求都是一次性的,可采用timestamp + nonce
的模式罕容。
實現(xiàn)方法:
-
timestamp:一次正常的請求备恤,從發(fā)出到接收一般不會超過30秒。通過將時間戳與明文加密后一起傳輸锦秒,接收方解出時間戳后判斷是否超過30秒露泊,超過則認為非法。
- 優(yōu)點:無需儲存旅择;
- 缺點:無法抵御短時間內(nèi)的重放攻擊惭笑,即無法確保短時間內(nèi)的每次請求都是一次性的。
-
nonce:一次有效的隨機字符串生真,要求每次請求時沉噩,將
時間戳
+ip地址
+mac地址
等信息生成哈希值,作為nonce參數(shù)柱蟀。接收方會存儲每次的nonce參數(shù)川蒙,若識別到nonce參數(shù)已存在,則認為非法长已。- 優(yōu)點:真正實現(xiàn)每次請求都是一次性的派歌;
- 缺點:存儲空間會越來越大弯囊,即無法確保長時間的一次性校驗。
-
nonce+timestamp:nonce可以解決timestamp短時間內(nèi)的一次性問題胶果,timestamp可以解決nonce的存儲越來越大的問題(即只存儲短時間內(nèi)的nonce參數(shù))匾嘱。
- nonce存儲的清理:
- 每次校驗前判斷nonce存儲最后修改時間,超過閾值則清理早抠。(適用低并發(fā))
- 每隔固定時間霎烙,清理一次。
- 若接口每秒最多并發(fā)1000次蕊连,時間限制30秒悬垃,則可在校驗后判斷nonce數(shù)量是否超過1000*30=30000個,超過則清理甘苍。(適用高并發(fā))
- 優(yōu)點:短時間由nonce確保一次性尝蠕,長時間由timestamp確保一次性
- nonce存儲的清理:
安全風(fēng)險:傳輸?shù)膬?nèi)容易被竊取或篡改。
0x02 對稱加密:加密傳輸?shù)臄?shù)據(jù)
通過對傳輸?shù)臄?shù)據(jù)內(nèi)容進行加密载庭,使得中間人無法解析數(shù)據(jù)內(nèi)容看彼,就可以提升數(shù)據(jù)傳輸?shù)陌踩浴?/p>
加密的方法:
DES:一種對稱密鑰加密塊密碼算法,以64位為分組對數(shù)據(jù)加密囚聚,它的密鑰長度是56位靖榕,加密解密用同一算法;DES現(xiàn)在已經(jīng)不是一種安全的加密方法顽铸,主要因為它使用的56位密鑰過短茁计。
-
AES:高級加密標準,是美國聯(lián)邦政府采用的一種區(qū)塊加密標準谓松。AES的區(qū)塊長度固定為128比特星压,密鑰長度則可以是128,192或256比特鬼譬。AES是一種分組加密算法租幕,其模式又分為:
ECB(ElectronicCodebook,電子密碼本)
方法:將整個明文分成若干段相同的小段拧簸,然后對每一小段進行加密劲绪。
優(yōu)點:簡單、可并行計算盆赤、誤差不傳遞
缺點:不能隱藏明文模式(比如圖像加密輪廓仍在)贾富、可能對明文進行主動攻擊(改明文,后續(xù)內(nèi)容不影響)
風(fēng)險:ECB不需要初始向量(IV)牺六,因此在于輸入和輸出存在非常明顯的關(guān)聯(lián)颤枪,攻擊者可以從輸出輕松地猜出輸入數(shù)據(jù)。CBC(Cipher Block Chaining淑际,密碼分組鏈接)
方法:先將明文切分成若干小段畏纲,然后每一小段與初始塊或者上一段的密文段進行異或運算后扇住,再與密鑰進行加密。
優(yōu)點:不容易主動攻擊(誤差傳遞)盗胀、適合長報文傳輸
缺點:無法并行艘蹋、誤差傳遞、初始化向量IV的選取比較復(fù)雜
初始化IV的選取方式:固定IV票灰,計數(shù)器IV女阀,隨機IV(只能得到偽隨機數(shù),用的最多)屑迂,瞬時IV(難以得到瞬時值)
用途:長報文傳輸浸策,是SSL、IPSec標準CFB(CipherFeedback惹盼,密碼反饋)
方法:首先通過加密器加密iv生成密鑰流(key stream)庸汗;然后將密鑰流和明文異或得到密文。第二次手报,將第一次得到的密文通過加密器加密得到新的密鑰流蚯舱,然后把第二次要加密的明文和密鑰流進行異或生成密文......如此類推,最終得到密文昧诱。
優(yōu)點:不容易主動攻擊(誤差傳遞),隱藏了明文模式所袁,分組轉(zhuǎn)變?yōu)榱髂J秸档担杉用苄∮诜纸M數(shù)據(jù)
缺點:無法并行、誤差傳遞燥爷,唯一的IVOFB(OutputFeedback蜈亩,輸出反饋)
方法:先用塊加密器生成密鑰流(Keystream)斑芜,然后再將密鑰流與明文流異或得到密文流铸敏;解密是先用塊加密器生成密鑰流,再將密鑰流與密文流異或得到明文柏副。由于異或操作的對稱性所以加密和解密的流程是完全一樣的港华。
優(yōu)點:隱藏了明文模式道川,分組轉(zhuǎn)為流模式、可加密小于分組數(shù)據(jù)
缺點:無法并行立宜,可能對明文進行主動攻擊
用途:通信信道質(zhì)量不高時使用冒萄,比如衛(wèi)星通信CTR(Counter,計數(shù)器模式)
方法:完全的流模式橙数。將瞬時值與計數(shù)器連接起來尊流,然后對此進行加密產(chǎn)生密鑰流的一個密鑰塊,再進行XOR操作 灯帮。
優(yōu)點:不泄露明文崖技,并行逻住、一次一密、僅需實現(xiàn)加密函數(shù)迎献,無需填充
缺點:可能對明文進行主動攻擊瞎访,使用重復(fù)瞬時值會泄露所有信息。
安全風(fēng)險:初次交互需要交換密鑰忿晕,若交換過程中無保護措施装诡,可能會泄露密鑰。
0x03 非對稱加密:傳輸對稱加密的密鑰
非對稱加密存在公鑰和密鑰践盼,用公鑰加密的數(shù)據(jù)鸦采,只有對應(yīng)的私鑰才能解密;用私鑰加密的數(shù)據(jù)咕幻,只有對應(yīng)的公鑰才能解密渔伯。因此,A傳輸密鑰給B的過程中肄程,A先用B的公鑰加密密鑰锣吼,B收到后再用自己的私鑰解密得到密鑰。反之亦然蓝厌,這樣雙方可安全地傳輸密鑰玄叠。
加密方法:
- RSA:RSA算法基于一個十分簡單的數(shù)論事實:將兩個大質(zhì)數(shù)相乘十分容易,但是想要對其乘積進行因式分解卻極其困難拓提,因此可以將乘積公開作為加密密鑰读恃。RSA是目前最有影響力和最常用的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊代态,已被ISO推薦為公鑰數(shù)據(jù)加密標準寺惫。RSA算法理論可以參考:RSA算法理論
為何不用RSA直接傳輸數(shù)據(jù):RSA的解密速度太慢
- AES加密1M數(shù)據(jù),需要0.16秒蹦疑;密文體積是明文的2倍西雀;解密時間是加密時間的兩倍0.33秒;
- RSA加密1M數(shù)據(jù)歉摧,需要5秒艇肴;密文體積與明文相同;解密時間需要325秒叁温;
- AES加密1G數(shù)據(jù)豆挽,需要4分鐘;密文體積是明文的2倍券盅;解密時間是加密時間的兩倍帮哈;
- RSA加密1G數(shù)據(jù),需要1分鐘锰镀;密文體積與明文相同娘侍;解密時間需要65小時咖刃;
安全風(fēng)險:公鑰不可信,無法保證公鑰就是對方發(fā)送的憾筏。
0x04 數(shù)字證書:傳輸可信公鑰
數(shù)字證書是一個經(jīng)證書授權(quán)中心數(shù)字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件嚎杨。
加密方法:
1.把公鑰和識別信息用Hash算法生成消息摘要;
2.為防止冒充氧腰,用認證中心(CA)提供的私鑰加密消息摘要枫浙,生成數(shù)字簽名;
3.將公鑰古拴、識別信息箩帚、數(shù)字簽名合在一起形成數(shù)字證書;
驗證方法:
1.用認證中心(CA)提供的公鑰解密數(shù)字證書中的數(shù)字簽名黄痪,得到消息摘要A紧帕;
2.用Hash算法,生成數(shù)字證書中公鑰和識別信息的消息摘要B桅打;
3.校驗消息摘要A和消息摘要B是否一致是嗜;
流程圖如下: