㈠ 數字簽名/數字證書/對稱/非對稱加密/CA 等概念明晰
此次不深入源碼、不分析原理、只釐清一些易混淆概念及其關聯。
本次將從通信演變歷史的角度出發,一步步闡述概念及其作用。
通過本篇文章,你將了解到:
大部分時候,咱們交流都是靠嘴對嘴,信息完全暴露在他人的耳朵里。
拉拉家常無關緊要,但要是涉及重要、私密的信息就不能這樣子了。
此時可能想到,那我們就說悄悄話吧。
悄悄話只能是倆人近距離才能實現,若是天各一方怎麼才能將信息安全送給對方呢?
大家或多或少地看過諜戰片,那會兒卧底如何將信息傳給組織呢?答案是通過密碼本。
雙方約定好用一個密碼本,密碼本其實是個映射關系:
此時雙方通信是經過加密的,我們稱為密文通信。第三者想要破解信息,就需要拿到密碼本或是破譯出密碼本映射關系,從而將密文轉為明文。
隨著科學技術的發展,人們的交流由書信逐漸過渡為電子通信。
當我們在鍵盤上敲擊一段文字後,這段信息會通過網路發送給對方,怎麼保證這段信息不被別人輕易知道呢?
我們想到了加密,雙方在傳輸信息前商量好一個密鑰,發送方用密鑰將信息進行加密形成密文後再發送,接收方在收到密文後使用之前協商的密鑰進行解密。
舉個簡單例子:
小明現在將信息進行對稱加密:
那麼將明文hello,每個字元+1,得出如下結果:
hello--->ifmmp
小紅拿到密文ifmmp後,她知道密鑰X=1,因此她將密文每個字元-1,得出如下結果:
ifmmp--->hello
至此,小明和小紅成功進行了交流。
此時小剛想知道小明和小紅聊了啥,於是截獲了信息:
但是由於小剛拿到的是密文信息:ifmmp。因為不知道密鑰,因此無法反推出明文:hello。因此小明和小紅的信息交流安全得到了保證。
當然對稱加密演算法沒那麼簡單,常見的對稱加密演算法有如下幾種:
似乎使用對稱加密就可以解決咱們通信安全問題,但引入了另一個問題:
是否有種方式可以光明正大地傳遞信息呢?
答案是:非對稱加密。
接著來看看小明和小紅如何使用非對稱加密來實現安全通信。
小明和小紅分別生成自己的公私鑰:
由上可知,用小紅的公鑰加密的信息只能由小紅的私鑰解開,只要小紅的私鑰沒有泄漏,那麼小明和小紅的通信是安全的。
當然了,真正非對稱加密演算法並沒有那麼簡單,常見的幾種非對稱加密演算法:
小明和小紅的通信真是安全的嗎?
此時小剛又來搞事情了:
以上信息表明:
小明和小紅一合計,想出來了一個辦法:
消息摘要(Message Digest)特點:
常見的消息摘要演算法:MD5、SHA1。
雖然採用了消息摘要,但是小剛依然能夠自己偽造信息,並生成對應的消息摘要,小紅收到後驗證摘要是正確的,便認為是小明發的,這種做法還是有漏洞。
在前邊用到了小紅的公鑰、私鑰,而沒用到小明的公鑰、私鑰。
在消息摘要的基礎上,想辦法讓小明的公私鑰也參與到通信過程中來:
與消息摘要過程對比,此時多了一個步驟:
用私鑰加密的信息的過程我們稱之為:數字簽名
數字簽名具有不可抵賴性的特點。根據前面的描述,用私鑰加密的信息,只有對應的公鑰才能解開。
因此,若是小紅使用了小明的公鑰解開了密文,那麼說明該消息肯定是小明發過來的。反之,小明使用私鑰加密後發出去,代表這信息是確認是自己發的,這就是他的簽名。
常見的數字簽名演算法:RSA、DSA、ECDSA。
老規矩,用圖來看看小明與小紅如何使用數字簽名的。
小明發送信息過程:
小紅處理信息過程:
由上可知:
數字簽名有兩個作用:
整個流程小明的公私鑰、小紅的公私鑰都參與了。
因為小剛沒有小明的私鑰,所以他無法生成小明的數字簽名,最終無法通過小紅對數字簽名的驗證。
這么看來小剛是無能無能為力了?非也!
回顧一下之前說的對稱加密的痛點:如何傳遞對稱密鑰?
實際上非對稱加密也存在問題:如何傳遞公鑰?
可見,無論是對稱加密還是非對稱加密都需要解決密鑰傳遞問題。
若是小剛偽造了小紅的公鑰,情況如下:
因為公鑰被偽造了,所以小剛可以為所欲為。
小明如何才能知道自己收到的公鑰是小紅的呢?
這時候就需要引入權威機構:CA(Certificate Authority) 證書授權中心
有了CA,小紅發布公鑰的流程變了:
用圖表示如下:
圖上5個步驟,有些同學對第4步不太理解:
似乎又回到了原點:如何安全傳遞公鑰的問題。
其實,信任是有起點的。
CA 不僅為他人生成證書,也生成自己的證書,CA 為自己生成的證書里包含了CA的公鑰。
CA 的證書在電腦、手機等設備出場的時候就會預置在系統里、瀏覽器里。
因此,當小明驗證小紅的證書時,會在系統里尋找能夠解開小紅證書的CA 公鑰,若是找到則說明小明證書的頒發機構是可信任的,既然信任了該證書,那麼從證書里取出的公鑰,小明也認可是小紅的。
至此,小紅的公鑰就安全地傳給了小明,後面就可以愉快地通信了。
系統里找不到對應的證書會有什麼影響?大家還記得12306網站剛開始運行的時候,用瀏覽器訪問時瀏覽器會提醒說該網站不受信任,12306提示用戶安裝自己的根證書。
這也從側面說明了,咱們不要輕易更改系統里的證書。
對稱加密存在密鑰傳送被泄漏的風險,非對稱加密雖然不需要傳遞私鑰,但是需要傳遞公鑰,也存在被中間人攻擊的風險。
為此,引入了CA 生產證書解決了非對稱加密公鑰傳遞問題。
然後非對稱加密速度慢,適合加密數據量少的信息,對稱加密速度快,適合加密數據量大的信息。
如何將對稱加密與非對稱加密結合起來打造一個安全的通信鏈路,下篇我們將重點分析其中的典型:SSL/TLS 的原理與應用。
㈡ 區塊鏈 --- 分布式金融(DeFi)
DeFi是decentralized finance(分布式金融) 一詞的縮寫,通常是指基於以太坊的數字資產和金融智能合約,協議以及分布式應用程序(DApps)。
簡單來說,DeFi就是將傳統金融搬到區塊鏈網路里,但相比傳統金融,它通過區塊鏈實現了去中心化,也就是去掉了中間人的角色,從而降低了中間環節帶來的巨額成本。
DeFi最終要實現的是資產通證化,以智能合約功能性替代傳統中心化的金融機構,使用戶以更低的成本享受到金融服務,並且提升整個金融體系的運行效率,降低運行成本。同時打造一個面向全球開放的無國界金融體系,以打造開放、透明、安全全新的去中心化系統,讓所有人都可以自由地進行交易。
隨著區塊鏈的迅速發展,DeFi的應用場景也在不斷地豐富,而金融業是其中最有前景的行業。
與銀行相似,用戶可以存錢並從其他借入其資產的用戶那裡獲得利息。但是,在這種情況下, 資產是數字的 ,智能合約將貸方與借款人聯系起來,執行貸款條款並分配利息。這一切都發生了,而無需彼此信任或中間人銀行。而且,由於區塊鏈提供的透明性,通過減少中間商,貸方可以賺取更高的回報,並更清楚地了解風險。
去中心化交易所,簡稱DEX,DEX是使用智能合約執行交易規則,執行交易並在必要時安全處理資金的加密貨幣交易所。當使用DEX進行交易時,沒有中心化交易所運營商,也無需注冊,沒有身份驗證或提款費用。
DEX可以使用訂單薄進行交易,比如你要用10個A換15個B,那麼我記下來。然後一會又來了一個人說我要用15個B換10個A,我說太好了,正好配對上了。於是,我就在鏈上生成一筆交易,把你們倆的幣互換。這個時候匯率其實就是給交易的雙方做參考用的——建議你用這個匯率容易找到配對。這樣一來,去中心化交易所只是把交易雙方的需求匹配了一下放上鏈,就不存在智能合約讀取鏈外匯率信息的問題了。
這方法有很多缺陷。無論這個DEX做得多麼用戶友好,它對比中心化交易所效率一定是很差的,首先幣價波動的時候很難找到匹配,其次小幣種肯定也很難找到匹配,然後交易延遲應該也不小。 但相對於中心交易所,它還是有唯一的優勢——靠譜。
DEX還可以使用AMM(自動做市商)交易,即按照自己的供求關系計算匯率,以保證自己手中的幣不會被別人低價買空。最簡單的辦法就是永遠保證自己的A幣和B幣的數量是個定值,這樣就算賣空了,虧損也是有限的,而且,市場總會把價格調到合適的水平——因為反正如果匯率低了就會有人買,匯率高了就會有人賣。
通過這種簡單的方法,可以獲得一個不需要從鏈外獲得匯率信息就可以自動根據供求關系調整的市場。當然,這東西的弱點也很明顯——如果一開始的匯率不在市場匯率附近,就會承受大量的虧損。而且AMM中還存在「無償損失」。
穩定幣是旨在保持特定價值的代幣,通常與美元等法定貨幣掛鉤。
例如,DAI是與美元掛鉤並抵押以太坊(ETH)鏈上數字資產的穩定幣。它的發行是通過一個借貸的智能合約,來實現的:每個人都可以通過抵押一定數量的ETH(以太幣)來換取和美元1:1錨定的DAI。這里,DAI採用的是 超額抵押 的形式,對於每個DAI,在MakerDAO智能合約中鎖定有1.50美元的以太坊作為抵押。
如果你抵押價值150美元的以太幣,那麼只能換來價值100美元的DAI。然後,這個智能合約中寫定了,如果你在某個時間內歸還這100美元的DAI並且付一部分利息,那麼你就可以拿回自己抵押的以太幣。
但是這裡面有個問題——以太坊的價格是會變動的。而且,虛擬貨幣的價格變動可是相當劇烈的,如果遇上以太坊暴跌了怎麼辦?那麼原本值150美元的以太坊可能瞬間就不到100美元了,這個時候抵押的資產不如我貸出來的資產多,DAI的價格就不可能再錨定美元,因為大家都能看到:DAI不值那麼多錢了。
怎麼解決這個問題呢?超額抵押的作用就顯出來了——即便以太坊價格波動幅度再大,但是從150美元跌到100美元總歸還需要些時間。而這就給資產清算的空間:首先,我們規定抵押物不得少於150%的貸款,也就是如果以太坊漲了沒關系,但是一旦跌了,你得立刻補倉到150%,否則你的抵押物會進入清算的智能合約。
用來裝DeFi的虛擬資產,可以用於轉賬等。
資產管理工具(也叫看板)就是專門提供錢包掃描服務,可以查看錢包的明細,還有歷史記錄。
最主要的三大資產管理工具是Debank、Zerion以及 Zapper。
一般來說,市場上會有很多挖礦的機會,這也是大家理財賺錢的機會。這時候,就有做資產管理,或者是提供理財的金融服務的機器人站出來說,我是專門幫你做賺錢生意的,只要你把錢給我,我就會去市場上找賺錢的機會,幫你去賺錢。
YFI是其中最主要的一種理財工具。
區塊鏈世界的機器人都是去中心化治理的,也就是說,沒有明確是歸屬於誰的。這種情況下,如果機器人出故障了,我們應該找誰的責任?應該怎麼做?損失誰來負責?這種情況下,就需要保險機器人了,它是專門就是為其他機器人投保了。
區塊鏈世界的機器人都是去中心化的,且公開透明的,自動執行的。這些機器人的升級、維護應該怎麼做?如何來確保機器人的去中心化呢?
一般,是由很多人圍著同一個機器人一起磋商,投票決定如何讓機器人去升級、提供服務。DAO機器人就是幫助這些人跟機器人之間形成一種去中心化的治理關系的機器人。
專門提供一種資產價格的機器人,比如,剛剛舉例的小c機器人收到一個比特幣的時候,它是需要知道一個比特幣到底值多少錢。否則,是沒辦法計算應該給小明貸款多少錢的。這種時候,預言機機機器人就會跑到小c面前,輸入一個價格,告訴小c機器人,比特幣現在價值1萬美金。
以太坊是一個維護數字價值共享賬本的區塊鏈網路,幾乎所有DeFi應用程序(稱為智能合約或Dapp)都建立在以太坊區塊鏈上,組成網路的參與者代替了中心權力機構,以分散的方式控制網路本地加密貨幣以太(ETH)的發行。
defipulse公布的 DeFi排名 ,該排名跟蹤鎖定全球DeFi智能合約中的實時價值。
MakerDAO在DeFi領域是毫無疑問的龍頭,MakerDAO之於DeFi就如比特大陸之於 礦圈。
MakerDAO 成立於2014年,是以太坊上 自動化抵押貸款平台 ,同時也是穩定幣 Dai 的提供者。MakerDAO 是建立在以太坊上的去中心化的衍生金融體系,它採用了雙幣模式,一種為穩定幣 Dai,另一種為權益代幣和管理型代幣 MKR。Dai 於2017年12月主網上線。通過雙幣機制,MakerDAO使得整個去中心化的質押貸款體系得以運轉。
Dai和美元進行1:1錨定,和其他穩定幣一樣,Dai也存在價格波動。和其他穩定幣不一樣的是,Dai是通過 超額抵押 加密數字貨幣,從而獲得價值。USDT、TrueUSD 和 GUSD 這一類的中心化穩定幣每發行1美元的代幣背後都存在1美元的法幣作為儲備,而1 Dai背後是以超出1美元的數字資產作為儲備。
與USDT、TrueUSD等不同的是,Dai的運行機制是公開透明的,這也是 Dai的優勢之一。不僅 Dai本身透明,換取 Dai的抵押物以太坊的價值波動和數量也一樣透明,對外公開可見。
Compound協議打造的是一個無中介的貸款平台,借方獲得利益,貸方支付利息。(頭等倉註:通常我們把代幣存入借貸池的一方稱為借方,向借貸池中借代幣的一方稱為貸方。)
Compound的新ERC-20代幣簡稱cToken,使用戶能更簡便的進行借貸操作。例如,支持cDAI與DAI交換,DAI持有者就可以將代幣借給cDAI用戶。不是所有的錢包都支持交換,但在Eidoo錢包中,用戶可以輕松地用cDAI交換DAI,從而出借DAI換取利息。如今,Compound總共支持8種cToken,鎖定資產合計高達約等值於2億美元:cDAI、cETH、cUSDC、cBAT、cWBTC、cSAI、cREP、cZRX。
借方可以隨時從Compound中提取代幣,自動、瞬時計算利息。如果是通過像Eidoo這樣的非託管錢包來提幣,無需任何中介(因為以太坊的去中心化協議就能做到)。
貸方則必須鎖定代幣作為抵押品,根據基礎資產的雄厚薄弱,獲取50-75%的信貸。
Compound協議還設有10%的利息作為准備金,而剩餘的90%利息歸借方。無任何費用,無協議代幣。基於以太坊的信貸市場,形成了一個真正的去中心化流動池,以一種無中介、自主、快速的方式發放和獲得貸款。
Synthetix是基於以太坊的 合成資產發行協議 。Synthetix目前支持發行的合成資產包括法幣、加密貨幣、大宗商品。其中法幣主要有美元(sUSD)、歐元(sEUR)、日元(sJPY),不過目前基本上以sUSD為主。加密貨幣方面有比特幣(sBTC)和以太坊(sETH)等,此外,還有反向的加密資產,例如iBTC,當BTC價格下跌,iBTC價格上漲,從而獲利。大宗商品方面當前以金(sXAU)和銀(sXAG)為主。
Synthetix上交易是去中心化的模式進行的,且無須交易對手存在,也不用擔心流動性和滑點問題。在其交易所上的交易都是通過智能合約執行的,是對智能合約的交易,而不是訂單簿交易。這些都有其獨特的交易體驗和部分優勢。
Synthetix跟其他資產發行協議一樣,也需要進行資產抵押才能發行,例如MakerDAO協議要生成dai,需要抵押ETH。Synthetix也類似,但它抵押的是其原生代幣SNX。用戶只要在其智能合約中鎖定一定量的SNX,即可發行合成資產。其中其質押率非常高,是其發行資產的750%,只有達到750%的目標閥值才有機會獲得交易手續費和SNX新代幣的獎勵。
TVL就是每個DeFi協議的鎖倉總價值,越高越好。
Dex就是交易量,越高越好。
活躍地址數量代表以太坊上的DeFi用戶數,越多越好。
手續費越低越好。
以太坊作為一個基礎設施,它的市值可以很高,但是,說到它與DeFi市值的比例,那以太坊的市值應當是越低越好,越高就說明這個市場越成熟。
參考鏈接:
https://zhuanlan.hu.com/p/206910261
https://zhuanlan.hu.com/p/366412971
https://zhuanlan.hu.com/p/377856331
https://www.hu.com/question/324838085/answer/1526607416
如有不對,煩請指出,感謝~
㈢ 加密、簽名、證書的作用及運用場景
本文主要是簡單介紹了常見的加密類型、各自的運用場景、為什麼需要數字簽名和數字證書、HTTPS涉及到的加密流程等。這里主要從使用者的角度出發,對演算法本身不做過多介紹。
對稱/非對稱加密均屬於 可逆加密,可以通過密鑰將密文還原為明文 。
有時候,我們希望明文一旦加密後,任何人(包括自己)都無法通過密文逆推回明文,不可逆加密就是為了滿足這種需求。
不可逆加密主要通過 hash演算法實現:即對目標數據生成一段特定長度hash值 ;無論你的數據是1KB、1MB、1GB,都是生成特定長度的一個Hash值(比如128bit)。這里大家應該能感受到一點 不可逆 的味道,加密後128bit的hash值顯然無法還原出1個G甚至更大的不規則數據的, hash可以看做是原來內容的一個摘要 。
常見演算法:
小明給小紅寫信:
經過九轉十八彎後,信的內容有可能:1. 被窺視 2. 被篡改(冒充小明發送假消息) :
小紅先 生成對稱加密的密鑰key1 ,然後通過一個安全的渠道交予小明。
傳輸數據時,小明 使用key1加密 ,而小紅收到後再 使用key1解密 。
這時候 中間者既看不到原來的內容,也沒辦法篡改 (因為沒有密鑰):
【對稱加密】實現簡單,性能優秀 ,演算法本身安全級別高。然而對 密鑰的管理 卻是個很頭疼的問題:一旦密鑰交到對方手裡,對方對密鑰的保管能力 我方是沒辦法控制 的,一旦對方泄露的話,加密就形同虛設了。
相對而言,【非對稱加密】的公鑰就沒有這個憂慮,因為 公鑰 的設計就是為了 可以公開的 ,盡管對方泄露,我方也不會有任何損失。
小紅生成一對公私鑰,自己持有私鑰(pri_key1),將公鑰(pub_key1)交予小明。
傳輸數據時,小明使用 公鑰加密 ,小紅使用 私鑰解密 。
因為 中間者沒有私鑰,公鑰加密的內容是無法獲取的 。此時達到了 防窺視 的效果:
然而因為 公鑰是可以公開的 ,如果 中間者知曉公鑰 的話,盡管沒有辦法看到原來的內容,卻 可以冒充小明發送假消息 :
這時小紅在想,如果小明發送消息時,能帶上 只有他自己才能生成 的數據(字元串),我就能 驗證是不是小明發的真實消息 了。
通常這個 能證實身份的數據(字元串) 被稱之為 數字簽名(Signature)
小明再生成一對公私鑰 ,自己持有私鑰(pri_key2),將公鑰交予小紅(pub_key2)。
當小明傳輸數據時(可能很大),除了公鑰加密明文之外,還要帶上簽名:(1) 對明文做一個hash摘要 (2)對摘要進行私鑰加密,加密結果即簽名(傳輸內容=內容密文+簽名)
小紅收到後:(1) 解密簽名獲取hash (2)解密內容密文,對解密後的明文進行hash;如果兩個hash一致,說明驗簽通過。
盡管中間者修改了傳輸內容,但因為簽名無法冒認(沒有私鑰),小紅驗簽失敗,自然不會認可這份數據:
通常 非對稱加密要做到防窺視和防篡改,需要有兩對公私鑰 :對方的公鑰用於內容加密,自己的私鑰用於簽名(讓對方驗證身份)。
因為HTTP協議明文通信的安全問題,引入了HTTPS:通過建立一個安全通道(連接),來保證數據傳輸的安全。
伺服器是 沒辦法直接將密鑰傳輸到瀏覽器的 ,因為在 安全連接建立之前,所有通信內容都是明文的 ,中間者可窺視到密鑰信息。
或許這時你想到了非對稱加密,因為公鑰是不怕公開的:
然而在第2步, 中間者可以截取伺服器公鑰,並替換成了自己的公鑰 ,此時加密就沒意義了:
為了 防止公鑰被假冒,數字證書(digital certificate )便誕生了 。
當伺服器需要告訴瀏覽器公鑰時,並不是簡單地返回公鑰,而是響應 包含公鑰信息在內的數字證書 。
證書主要包含以下內容:
瀏覽器通過 【頒發機構的公鑰】進行解密驗簽 ,驗簽通過即說明證書的真實性,可以放心取 證書擁有者的公鑰 了。( 常用CA機構的公鑰都已經植入到瀏覽器裡面 )
數字證書只做一件事: 保證 伺服器響應的 公鑰是真實的 。
以上保證了 [瀏覽器⇒伺服器] 是加密的,然而 [伺服器⇒瀏覽器] 卻沒有(上圖第4步);另外一個是 性能問題 ,如果所有數據都使用非對稱加密的話,會消耗較多的伺服器資源,通信速度也會受到較大影響。
HTTPS巧妙地結合了非對稱加密和對稱加密,在保證雙方通信安全的前提下,盡量提升性能。
HTTPS(SSL/TLS)期望 建立安全連接後,通信均使用【對稱加密】 。
建立安全連接的任務就是讓 瀏覽器-伺服器協商出本次連接使用的【對稱加密的演算法和密鑰】 ;協商過程中會使用到【非對稱加密】和數字證書。
特別注意的是:協商的密鑰必須是不容易猜到(足夠隨機的):
其中比較核心的是隨機數r3(pre-master secret),因為之前的r1、r2都是明文傳輸的, 只有r3是加密傳輸 的。至於為什麼需要三個隨機數,可以參考:
以上是一個比較簡單的HTTPS流程,詳細的可以參考文末的引用。
參考資料:
[1] 數字證書應用綜合揭秘
[2] SSL/TLS協議運行機制的概述
[3] 圖解SSL/TLS協議
[4] 《圖解HTTP》
㈣ 灝忔槑鎶婅嚜宸眖q絀洪棿鍔犲瘑浜嗭紝灝忕孩鐪嬩笉鍒板ス鐨勫姩鎬侊紝浣嗘槸灝忕孩鍙戠殑鍔ㄦ侊紝灝忔槑鑳戒笉鑳界湅鍒般
鍙浠
㈤ 小明同學在自己的電腦上使用word文檔寫了一篇日誌。他想不讓別人輕易看到裡面的內容。你能幫他想想辦法嗎
如果自己的文檔中有不願讓人看見的小秘密,或者所編輯的文件涉及到單位或公司的機密,往往需要防止別人查看我們的文檔。只有對Word文檔進行加密,才能夠實現對Word文檔的保護。給Word文檔加密主要有以下幾個方法:文件加密文件菜單設置:1、打開需要加密的Word文檔。2、選「文件」的「另存為」,出現「另存為」對話框,在「工具」中選「常規選項」,出現「保存」選項卡。3、分別在「打開許可權密碼」和「修改許可權密碼」中輸入密碼(這兩種密碼可以相同也可以不同)。4、再次確認「打開許可權密碼」和「修改許可權密碼」。按「確定」退出「保存」選項卡。5、文件存檔。
由工具菜單設置:1、打開需要加密的Word文檔。2、選「工具」菜單的「選項」命令,出現「選項對話框」。3、在「選項」對話框中選「保存」選項卡。4、分別在「打開許可權密碼」和「修改許可權密碼」中輸入密碼,點「確定」退出。5、將文件保存。
㈥ HTTPS加密原理
HTTP、HTTPS在我們日常開發中是經常會接觸到的。
我們也都知道,一般 Android 應用開發,在請求 API 網路介面的時候,很多使用的都是 HTTP 協議;使用瀏覽器打開網頁,也是利用 HTTP 協議。看來 HTTP 真是使用廣泛啊,但是,HTTP 是不安全的。利用網路抓包工具就可以知道傳輸中的內容,一覽無余。比如我經常會使用 Fiddler 來抓包,搜集一些有趣的 API 介面。
那麼問題來了,如何保證 HTTP 的安全性呢?基本上所有的人都會脫口而出:使用 HTTPS 協議。99.9% 的人都知道 HTTPS 會將傳輸的內容進行加密,但是接著問具體加密的過程和步驟,很多人就啞口無言了。
為了防止出現這種尷尬的局面,所以今天你就要好好看看這篇的內容了。以後就可以裝個逼,哈哈!
先科普一下,加密演算法的類型基本上分為了兩種:
對稱加密的意思就是說雙方都有一個共同的密鑰,然後通過這個密鑰完成加密和解密,這種加密方式速度快,但是安全性不如非對稱加密好。
舉個例子,現在學霸小明這里有一道數學題的答案:123 。他想把答案傳給自己一直暗戀的小紅。所以他們雙方在考試開考前,約定了一把密鑰:456 。那麼小明就把答案內容經過密鑰加密,即 123 + 456 = 579 ,將 579 寫在小紙條上扔給小紅。如果此時別人撿到了小紙條,不知道他們是加密傳輸的,看到上面的 579 ,會誤以為答案就是 579 ;如果是小紅撿到了,她拿出密鑰解密,579 - 456 = 123 ,得到了正確的答案。
這就是所謂的對稱加密,加解密效率高,速度快,但是雙方任何一方不小心泄露了密鑰,那麼任何人都可以知道傳輸內容了。
講完了對稱加密,我們看看啥是非對稱加密。
非對稱加密就是有兩把密鑰,公鑰和私鑰。私鑰自己藏著,不告訴任何人;而公鑰可以公開給別人。
經過了上次作弊後,小紅發現了對稱加密如果密鑰泄露是一件可怕的事情。所以她和小明決定使用非對稱加密。小紅生成了一對公鑰和私鑰,然後把公鑰公開,小明就得到了公鑰。小明拿到公鑰後,把答案經過公鑰加密,然後傳輸給小紅,小紅再利用自己的私鑰進行解密,得到答案結果。如果在這個過程中,其他人得到傳輸的內容,而他們只有小紅公鑰,是沒有辦法進行解密的,所以也就得不到答案,只有小紅一個人可以解密。
因此,相比較對稱加密而言,非對稱加密安全性更高,但是加解密耗費的時間更長,速度慢。
對稱加密和非對稱加密的具體應用我還是深有體會的,因為所在的公司是做金融支付方面的,所以加解密基本上算是天天見了。
說完加密類型後,我們再來看看 HTTPS 。
我們先來看一個公式:
HTTPS = HTTP + SSL
從這個公式中可以看出,HTTPS 和 HTTP 就差在了 SSL 上。所以我們可以猜到,HTTPS 的加密就是在 SSL 中完成的。
所以我們的目的就是要搞懂在 SSL 中究竟幹了什麼見不得人的事了?
這就要從 CA 證書講起了。CA 證書其實就是數字證書,是由 CA 機構頒發的。至於 CA 機構的權威性,那麼是毋庸置疑的,所有人都是信任它的。CA 證書內一般會包含以下內容:
正好我們把客戶端如何校驗 CA 證書的步驟說下吧。
CA 證書中的 Hash 值,其實是用證書的私鑰進行加密後的值(證書的私鑰不在 CA 證書中)。然後客戶端得到證書後,利用證書中的公鑰去解密該 Hash 值,得到 Hash-a ;然後再利用證書內的簽名 Hash 演算法去生成一個 Hash-b 。最後比較 Hash-a 和 Hash-b 這兩個的值。如果相等,那麼證明了該證書是對的,服務端是可以被信任的;如果不相等,那麼就說明該證書是錯誤的,可能被篡改了,瀏覽器會給出相關提示,無法建立起 HTTPS 連接。除此之外,還會校驗 CA 證書的有效時間和域名匹配等。
接下來我們就來詳細講一下 HTTPS 中的 SSL 握手建立過程,假設現在有客戶端 A 和伺服器 B :
到此,SSL 握手過程就講完了。可能上面的流程太過於復雜,我們簡單地來講:
我們可以發現,在 HTTPS 加密原理的過程中把對稱加密和非對稱加密都利用了起來。即利用了非對稱加密安全性高的特點,又利用了對稱加密速度快,效率高的好處。真的是設計得非常精妙,令人贊不絕口。
好了,HTTPS 加密原理到這就講的差不多了,不知道電腦前的你有沒有看懂呢?
如果有哪裡不明白的地方,可以在底下留言交流。
bye ~~