在過去的兩年裡,由於 WannaCry、NotPetya 和 Locky 的出現,勒索軟體吸引了大量的媒體報導。2017 年 5 月,WannaCry 勒索軟體在全球多個系統中迅速傳播。它攻擊了幾個知名組織,包括英國國民健康服務、西班牙電話公司 Telefonica、法國汽車品牌雷諾(Renault)、美國物流公司聯邦快遞(FedEx)、日本公司日立以及很多其他的大型企業。
勒索軟體的作者通過暗網托管服務,允許任何買家創建和改進惡意軟體。
暗網是互聯網的一部分,它無法通過普通的搜索引擎進入,需要一種特殊類型的匿名瀏覽器 Tor 去登錄。換句話說,暗網包含普通搜索引擎無法獲得的無索引數據。Tor 瀏覽器基本上通過一系列代理伺服器來路由用戶信息,這使得用戶身份無法識別且無法追蹤。暗網看起來與普通網站類似,但命名結構存在一些差異。暗網沒有如.com、.net 或.co 的頂級域名(TLD)。相反,它們只使用以.onion 結尾的域名網站。
1. 黑客貨幣化
根據網絡安全業務報告,預計到 2019 年,勒索軟體的損失成本將達到 115 億美元。在全球範圍內存在一些驅動因素使得勒索軟體業務持續增長。為了更快地獲得收益,網絡犯罪分子已經不再自主編制惡意軟體了,而是利用勒索軟體即服務(RaaS)來實現他們的需求,這種服務可以在暗網市場上獲得。
這些市場不僅可以讓犯罪專家花費更少的精力製造勒索軟體,而且還允許非技術型犯罪分子或程序員使用腳本進行勒索軟體操作。
攻擊者使用預先配置的計時器生成勒索軟體程序,如果在截止時間前未支付贖金,那數據就會被銷毀。攻擊者還共享了一個支付程序,該支付程序主要通過比特幣錢包進行交易(因為數字加密錢包提供匿名功能)。
2.WannaCry
WannaCry 攻擊是 2017 年 5 月 12 日發生的最大規模勒索軟體攻擊事件。WannaCry 利用了 Windows 操作系統中的漏洞,該漏洞首先由 NSA 發現,然後通過 Shadow Brokers 公開出來。它旨在探索 Windows SMBv1 和 SMBv2 中的漏洞,以便在網絡中橫向傳播。截至 2017 年 5 月 24 日,該勒索軟體已在 150 個國家和地區感染了超過 20 萬台計算機系統。
3.NotPetya
NotPetya 是另一種攻擊風格的勒索軟體,於 2017 年 6 月推出。NotPetya 勒索軟體在幾個方面明顯類似於 Petya 病毒 —— 它加密文件並顯示一個窗口來要求支付比特幣以恢復文件。最初的感染方式是從 M.E.Doc 的後端程序植入。通過 M.E.Doc 軟體感染系統後,NotPetya 使用 EternalBlue 和 EternalRomance 等工具在網絡中傳播。它還嘗試利用名為 Mimi Katz 的工具在受感染的計算機中查找管理憑據。
4.SimpleLocker
SimpleLocker 是第一個不感染任何計算機系統的勒索軟體攻擊,但其針對了幾種智能移動設備。黑客首先選擇的目標移動系統是 Android,這種勒索軟體的源頭一度被追蹤到了東歐。木馬程序的攻擊目標是插入到平板電腦和手機中的 SD 卡,它會自動抓取整套系統以獲取某些文件,然後要求支付現金來解密相應數據。該病毒通過谷歌應用商店(Google Play Store)進入設備。一旦安裝後,病毒會掃描受影響的設備以查找各種文件類型,並使用 AES 加密算法對其進行加密,將文件擴展名更改為.enc。它還用於從相應設備收集各種其他信息,例如 IMEI 號、設備型號和製造商,並將其發送到黑客遠程控制的伺服器。黑客利用這種病毒的最新版本甚至可以訪問設備攝像頭並顯示受害者的照片,恐嚇他們支付贖金。該種木馬軟體的威脅至今仍然潛伏在我們身邊。
5.TeslaCrypt
在 CryptoLocker 之後的一年內,又出現了一種新威脅,即 TeslaCrypt。一開始,許多人認為它是 CryptoLocker 的另一種形式,但是後來它被賦予了一個新的名稱 ——TeslaCrypt。這個勒索軟體針對的是一群和以往不同的人 —— 骨灰級玩家。TeslaCrypt 針對並影響了與視頻遊戲相關聯的輔助文件。這些輔助文件包含保存的遊戲文件、地圖、任何與遊戲相關的可下載內容等。這種勒索軟體的獨特之處在於,軟體作者不斷改進 Trojan 木馬,並在攻擊持續進行時,修復所有的漏洞。
6.CryptoLocker
CryptoLocker 是一種大規模的勒索軟體,於 2013 年 9 月 5 日首次在互聯網上發布,通過電子郵件附件和 Gameover Zeus 殭屍網絡進行傳播。它會對運行 Microsoft Windows 系統的設備產生影響,並通過惡意電子郵件附件持續傳播,並使用 RSA 加密算法加密存儲在用戶本地和網絡驅動器上的某些類型的文件。CryptoLocker 於 2014 年 5 月後期通過 Tovar 操作被移除,因其使 Gameover Zeus 殭屍網絡癱瘓。據報導,CryptoLocker 已成功向受害者勒索了 300 多萬美元。
7.PC Cyborg
1989 年出現了一個名為 PC Cyborg 的木馬,它具有隱藏文件夾和加密 C 盤中文件名的能力。導致受害者不得不向 PC Cyborg 公司支付 189 美元。
Forrester 最初提出的一種被廣泛接受的方法是以數據為中心的,這種方法被用來實現對所有的數據和資源進行始終驗證。它最初旨在解決扁平網絡的問題,後來用於幫助威脅行動者在不被察覺的情況下通過內網漫遊,竊取敏感和機密的信息。這種方法同樣允許安全專業人員重新獲得對網絡和應用的控制權。接下來我們開始研究零信任法:
1)識別敏感數據並分類:為了保護你的數據,首先需要查看並了解數據。如果你不了解自己的敏感數據,在感染後情況可能變得更糟。一旦識別出了敏感信息,你就有必要對它進行分類。
2)繪製數據流圖:對網絡中的應用流有一個高水平的了解是很重要的。除此之外,與利益相關者進行合作是件好事,他們包括網絡團隊、應用團隊和安全工程師,可以和他們一起利用現有模型準備最終的數據流。
3)建立網絡架構:零信任的設計展示了多個網絡之間的通信流程,並說明了用戶該如何訪問外部數據。在這種情況下,一個機構可以利用物理和虛擬的交換機配置確認微邊界。
4)構建政策基礎:這種方法的一個關鍵點是,安全專家應該在須知原則的基礎上限制用戶訪問,並實行有效的訪問控制。除了洞悉 IP 頭字段之外,安全團隊還需要了解用戶身份以及應用程序行為。
5)持續監測:你應該實時收集和檢查整個網絡和應用程序的日誌,不僅包括外部網絡的流量,還包括來自專用網的流量。內部流量的處理方式應與外部流量的處理方式相同。
訪問https://www.forrester.com/search?N=21061+10001sort=3everything=truesource=browse 了解零信任方法。
・訪問https://hbr.org/2017/01/the-truth-about-blockchain 了解 TCP/IP 和區塊鏈。
2009 年,中本聰發表了名為《比特幣:一個對等電子現金系統》的白皮書,旨在應對金融市場中存在的挑戰。該白皮書致力於開發一個允許一方到另一方的在線支付,卻無須通過金融機構中介的平台。比特幣解決的一個主要問題是關於雙花的,它可以避免比特幣的二次消費(數字貨幣的一個獨特問題是,如何避免用戶在花掉了某些幣值後,還能重複使用這些幣)。由於比特幣是數字貨幣,複製且公布數字化數據並不困難,所以會出現重複消費問題(即雙花問題)。預防這種情況的解決方案出現了 —— 那就是區塊鏈。然而,中本聰的原始文章沒有提到區塊鏈這個詞而是以區塊的鏈形式出現在比特幣源代碼的註釋中。
區塊鏈是一個分散的數據庫,它保證所有交易記錄的安全性,並且以添加的方式記錄。由於其數據庫的分散性,區塊鏈在眾多行業中迅速流行開來。對一個無法容忍一點失敗的組織來說,區塊鏈數據庫使得敏感信息實際上不可能被網絡罪犯所破壞。此外,區塊鏈不僅僅由可信的管理員或者開發人員管理,任何可以信任或來自已知或未知方的人员,都可以進行良好的管理。下面是區塊鏈網絡的圖形表示:
每個連接到網絡上的計算機都需要有區塊鏈節點的軟體,並且運行針對區塊鏈生態系統的應用程序。根據使用情況,這些計算機的參與可能會受到限制。例如,基於區塊鏈的銀行鏈生態系統只允許銀行節點運行銀行鏈的客戶端應用程序。
互聯網是一項具有 30 多年歷史的技術,其目的是通過 TCP/IP 和開放系統互連(OSI)模型棧共享信息。從互聯網誕生開始,無論是電子郵件還是 Web,甚至是電子商務,每一項新技術都顛覆了現有技術。互聯網是最強大的技術之一,其功能已強大,可以傳播思想並創造虛擬世界。
TCP/IP 是第一個構建標準化相似網絡之間通信的互聯網協議簇。而 OSI 模型是由國際標準化組織(ISO)開發的,以提供標準化系統之間通信的框架,而不用考慮供應商、模型或者技術。由於客戶端 / 伺服器網絡在本質上更加可靠和穩定,所以各類組織機構更喜歡基於客戶端 / 伺服器通信的兩種模型。重要的是,客戶使用的數據以及他們使用數據的方式需要得到更好的控制。在客戶端 / 伺服器模型中,客戶端管理自己的本地資源,例如工作站或任何設備的硬體和軟體組件,而伺服器是管理共享資源(例如硬體、網絡通信通道和數據庫)的功能系統。在對等網絡中,沒有監控、控制和執行命令的中央系統。儘管過去出於內部需要,小企業更喜歡使用這種方式,但大型機構總是避免對等網絡,因為使用它會有失去對其業務操作和管理的控制的風險。
然而,在連接整個世界的過程中,有一些時刻重新定義了創新,並為每個企業的需要提供了媒介。區塊鏈,一個由獨立節點組成的對等網絡,能在沒有任何第三方參與的情況下共享任何類型的數值。計算機的發展首先從大型計算機開始,十年後,互聯網出現了。雲計算由 Ramnath Chellappa 教授在 1997 年定義,Amazon 在 2006 年推出了彈性計算雲(EC2)服務。我們現在正處在一個新的時代,數據安全存儲的方式在不斷改變。
互聯網上所做的一切都是通過 TCP/IP 模型的 IP 包來完成的。IP 包是可以通過互聯網發送的最小數據單元,具有 IP 報頭和有效載荷兩個部分。
為了發送這些信息,它需要一個源 IP 地址和一個目的 IP 地址。區塊是這個過程的必需元素,它被鏈接在一起形成區塊鏈。區塊由區塊頭和區塊體組成。為了發送任何類型的值或完成任何類型的交易,它添加自己的數字簽名作為源標識符和公鑰,這與對等網絡中的目的地身份相似。
Web 應用是基於網絡的應用程序,它廣泛地應用於客戶端 / 伺服器模型中以服務用戶。然而,去中心應用(dApp)是在對等計算機網絡上運行的應用程序。
傳統的 Web 應用使用 CSS、HTML 和 JavaScript 來渲染前端頁面,通過 API 調用從數據庫中獲取數據。去中心應用的前端使用完全相同的技術來呈現頁面,但其使用連接到區塊鏈的智能合約取代了 API 的調用。
區塊鏈賬本的運作方式。為了理解系統的通用形式,重要的是了解鏈的多個狀態並進行進一步的探索。
1)交易準備:在這個階段,A 方創建一個交易,內容包括接收方的公共地址、源數字簽名和交易信息。現在,這個交易可被區塊鏈中的所有節點獲得。
2)交易驗證:區塊鏈的節點工作在去信任模型中,其中每個節點(運行區塊鏈客戶端軟體的機器)接收該交易信息,並用 A 方的公鑰驗證數字簽名。成功驗證之後,這個經過身份驗證的交易信息被放置在賬本隊列中,然後等待至所有節點成功驗證該交易為止。
3)區塊生成:隊列中的交易被安放在一起,網絡中的一個節點創建區塊。在比特幣區塊鏈中,當比特幣節點(也稱為礦工節點)通過解決一些複雜的數學問題創建了區塊,就會獲得比特幣獎勵。
4)區塊校驗:在成功地生成區塊後,網絡中的節點為了迭代校驗的過程會被處理,其中大多數節點需要達成共識機制。一般有四種常用的共識算法:工作量證明(PoW)、權益證明(PoS)、授權權益證明(DPoS)、實用拜占庭容錯(PBFT)等。比特幣使用 PoW 達成共識,以太坊使用 PoS 來達成共識。這種機制在金融領域起了很大的作用,能確保整個交易操作的安全性。
5)區塊鏈接:在成功達成共識之後,驗證區塊並將其添加到區塊鏈中。可以在下面的圖中了解區塊鏈的幾種狀態:
比特幣的世界狀態數據存儲於 chainstate 目錄,採用 LevelDB 進行管理,主要存儲當前還沒有花費的所有交易輸出以及交易的元數據信息,用來驗證新傳入的交易和塊,存儲這些數據的時候會做適當的壓縮。LevelDB 是一個可持久化的鍵值數據庫,利用磁碟順序寫性能比隨機寫大很多的特性,採用 LSM-Tree 結構,將磁碟的隨機寫轉化為順序寫,大大提高了寫速度。LSM 將樹結構拆成一大一小兩棵樹,較小的常駐內存,較大的持久化到磁碟。寫入操作會首先操作內存中的樹,隨著內存中樹的不斷變大,會觸發與磁碟中樹的歸併操作,而歸併操作本身僅有順序寫。Bitcoin 的 LevelDB 存儲了多種數據,其中最主要的為 Coin 數據,以的方式存儲,Key 是 CoinEntry 類型,由三部分組成:
1 字節的大寫字符 “C”(DB_COIN),32 字節的交易 ID 值以及 4 字節的序列號;Value 為 Coin 對象序列化後的值。
以太坊的世界狀態處理#
世界狀態是通過網絡中全局的未使用交易輸出 (UTXO) 來描述的,而以太坊則利用賬戶概念來描述狀態信息。賬戶狀態包含四個屬性,nonce,balance,storageRoot 和 codeHash。以太坊用 stateObject 來管理賬戶狀態,賬戶以 Address 為唯一標示,其信息在相關交易的執行中被修改。所有賬戶對象逐一插入 Merkle-PatricaTrie (MPT) 結構裡,形成 stateTrie。區塊頭數據結構中的 Root 字段存儲了 stateTrie 的 root 數值,即世界狀態的哈希值。
區塊鏈技術是建立在一組已經廣泛應用於整個行業的現有技術之上的。讓我們了解區塊鏈的每個組成部分,它們使整個系統在本質上具有分佈式的、不可篡改的、可信任的特點。
共識機制是區塊鏈系統的一個組成部分,負責在分佈式環境中達成一致協議。區塊鏈環境的開放性和去信任化是區塊鏈的核心特性,但是,額外的關注和嚴格的過程也很重要。因為任何人都可以參與和提交信息,所以評估每個參與者的目的至關重要,並且使每個人都採納用於避免欺詐企圖的政策。由此產生了共識機制,類似於信號處理,以確保在實際通信開始之前已經考慮了所有問題。下面是與區塊鏈達成共識的四個關鍵方法:
・PoW:比特幣的創始人中本聰發明了一種方法來實現區塊鏈的共識機制。在這種類型的共識中,通過相信那些完成了最大的可驗證計算工作量的節點,可以實現對欺詐的防範。區塊創建者,在數字貨幣的世界中也被稱為礦工,深知擁有強大的計算能力可以獲得更好的哈希率,進而挖礦成功並且獲得比特幣獎勵的機會也會增加。每個新的交易被廣播到網絡中的所有節點,並且每個節點持續監聽所有交易。想要在比特幣系統獲得獎勵的節點被稱為礦工,它們不只是傾聽,而且還收集交易。礦工必須用 PoW 算法解決一些複雜的數學問題。首先解決每個問題的礦工會得到比特幣獎勵。最後,驗證的區塊會被添加到每個礦工的區塊鏈中。
這個數學問題是將哈希應用於一組交易和一個現時值(一个 32 位隨機數)來實現所需哈希輸出結果的過程。如果輸出的哈希值小於目標哈希值,則礦工將贏得區塊並實現共識機制。當礦工贏得區塊時,每個區塊自帶一些比特幣(BTC),然後礦工會收到:
・2009 年 1 月 —2012 年 11 月:每個區塊 50 個 BTC。
・2012 年 11 月 —2016 年 7 月:每個區塊 25 個 BTC。
2016 年 7 月 —2020 年 2 月:每個區塊 12.5 個 BTC。
・2020 年 2 月 20 日 —2023 年 9 月:每個區塊 6.25 個 BTC。
・PoS:這是在節點之間的區塊鏈中達成共識並校驗交易的另一種方法。與 PoW 不同的是,PoS 區塊生成器不會根據其當前的堆棧來選擇。在這個機制中,不會獎勵區塊,PoS 中的礦工被稱為鑄造工。以太坊使用 PoS,選擇它的目的是避免任何伴隨大量電力消耗而產生的環境壓力。根據數字經濟學家 2017 年的報告,整個比特幣網絡一年所消耗的電力估計比愛爾蘭共和國一年消耗的還要多。比特幣使用 PoW 機制,並且全部都依賴於資源強大的礦工,這導致了更多的電力消耗。使用 PoS 機制,節點必須加入校驗池以便被選中為鑄造工。Casper 作為以太坊共識 PoS 協議,是一個擴展現有 PoW 機制的混合版共識機制,用於以太坊運行每一百個區塊中的最後一個。PoS 非常適合固定幣供應量的平台,人們可以用它來進行代幣分發而非投資。
・DPoS:這是另一種共識協議,並被認為是一種更快更有效的模型。DPoS 使用民主的方式來解決共識問題。在網絡中選擇區塊生成器並且確認交易大約需要一秒鐘。這樣,你不僅解決了共識問題,而且消除了不必要的監管干擾。
・PBFT:拜占庭故障是指故障檢測系統同時出現故障和正常工作的狀態,對不同的檢測器顯示不同的模式。如果一些節點成員向其他節點發送關於交易的不一致的信息,那麼可能導致整個網絡發生錯誤。PBFT 是一種保護網絡免受拜占庭故障的解決方案。
以太坊(Ethereum)是最成熟的區塊鏈之一,向平台提供了自定義區塊鏈系統的方法。比特幣的目的在於用它自己的共識機制來瓦解當前的支付系統和網上銀行,而以太坊目前正處於對現有計算機系統進行去中心化的過程中,因為它在客戶端 / 伺服器模型上運行得很好。
以太坊是一個分散的網絡,能夠在分佈式環境中運行應用程序。這個想法只是為了避免完全依賴單個實體來存儲和管理用戶的個人和業務數據。在當前的數據庫系統中,一旦數據在線存儲,客戶端就無法得知數據如何存儲、已經採取了哪些安全防範措施、誰可以讀取數據等信息。以太坊提供了一個平台來構建分佈式應用程序,這些應用程序直接連接每個堆棧持有者或某一方,以實現更好的透明度和零依賴性。即使比特幣和以太坊之間存在基本相似之處,它們在用途和功能上都存在顯著差異。隨著以太坊的使用,任何集中式服務都可以通過其獨特的編程能力轉換為分散式服務。
以太坊主要有三層 —— 以太坊虛擬機(EVM)、加密貨幣以及 gas(以太和油費或能源)。
智能合約是由其創建者編寫以執行特定任務的程序。儘管合約可以在任何區塊鏈版本上進行編碼,但是以太坊是最受歡迎的,因為它提供了可擴展的處理能力。
以太坊允許開發者為自己的智能合約進行編碼。智能合約可以用來:
・當特定事件發生時,通過自動觸發索賠來簡化索賠結算流程。
・管理用戶之間的協議。
・存儲有關應用程序的信息,如健康記錄和 KYC 信息。
在以太坊中,每個合約都有一個地址用以唯一標識它。此地址由哈希創建者的地址和已執行的交易數量來計算。
在將智能合約部署到公共區塊鏈環境中時,我們將得到智能合約的地址。現在,我們可以編寫代碼來與智能合約中的特定實例進行交互。合約具有若干標準,如 ERC20 標準,而其實現所需的方法也很重要。
讓我們嘗試建立第一份智能合約。我們將使用 Solidity 語言來編寫智能合約。編程語言 Solidity 類似於 JavaScript。要開始這個過程,我們首先必須使用 Ganache 包來設置環境,該包將用於創建一個私有區塊鏈。我們需要在線訪問 MyEtherWallet,可以在地址https://github.com/kvhnuke/etherwallet/releases 找到。
一旦安裝了軟件包,我們訪問https://remix.ethereum.org/ 上的鏈接進入以太坊 IDE。下面的截圖顯示了以太坊 IDE:
Remix 是 Solidity 的一個在線編譯器,用於編寫智能合約代碼。這個代碼是官方給用戶用以測試的。正如我們在下面的屏幕截圖中看到的,它有一個變量和兩個函數。變量 c 是一個整型變量並且是私有的,這意味著合約之外的任何人都不能訪問它。第一個函數是 plusbyone (),它通過遞增來改變 c 的值,第二個函數是 getC (),它訪問 c 並將其值返回給該函數的調用者。
當計數器代碼粘貼到 Remix 中時,它將如下面的屏幕截圖所示:
現在打開 Ganache,我們會看到這樣的東西。在屏幕的頂部,我們可以看到它說的是 RPC SERVER:
現在讓我們試著在瀏覽器中訪問 MyEtherWallet,看看這樣做的結果。在右上角,你將看到一個下拉菜單,顯示 MyEtherWallet 連接到以太坊了。默認情況下,它連接到以太坊的主網絡。我們必須通過點擊下拉菜單來改變這個選項。單擊 Add Custom Network/Node 選項,如下面的截圖所示:
現在我們可以輸入 Ganache 準備好的 RPC 伺服器信息。我們可以如下所示命名節點:
MyEtherWallet 已經通過 Ganache 與我們的自托管區塊鏈連接。用 MyEtherWallet 上傳智能合約。要執行此操作,我們將單擊位於 MyEtherWallet 導航欄頂部的 Contract 選項卡,並選擇 Deploy Contract 選項:
如我們所見,MyEtherWallet 要求我們提供合約的字節碼
要找到它,我們將回到 Remix IDE 並單擊 Details 按鈕:
現在我們將看到一個對話框,其中有關於計數器智能合約的信息。要複製字節碼,我們將單擊 BYTECODE 部分旁邊的剪貼板圖標:
現在將回到 MyEtherWallet 並將字節碼粘貼到 Byte Code 文本區域:
現在可以向下滾動並導入一個賬戶地址來上傳合約。默認情況下,Ganache 會出現 5 個地址,可以使用它們與私有鏈進行交互。我們將回到 Ganache,並且單擊按鍵圖標,這樣就可以訪問其中任何地址:
現在將看到私鑰與賬戶的綁定:
現在必須複製這個私鑰並將其粘貼到 MyEtherWallet 中:
現在可以單擊 Unlock 按鈕,並且 MyEtherWallet 會詢問我們是否需要簽署該交易並部署合約:
最後將看到一個成功的提示,如下面的截圖所示:
交易成功後,Ganache 將增加它的 CURRENT BLOK 值,我們用來部署合約的賬戶的交易數也將增加:
智能合約現在上傳到了區塊鏈。要通過遞增和遞減計數器與它交互,必須回到 MyEtherWallet 並選擇 Interact with Contract 選項:
MyEtherWallet 現在將要求我們提供新部署的智能合約所在的地址,以及我們合約的應用程序二進制接口(ABI)。我們可以按如下所示查看事務日誌:
如你所見,Ganache 告訴我們用於部署合約的地址。讓我們單擊交易,複製創建的合約地址,並將其粘貼到 MyEtherWallet 中:
下面的截圖告訴我們,MyEtherWallet 知道如何與我們的合約互動。我們將返回到 Remix 並單擊界面 ABI 旁邊的剪貼板圖標來複製它:
現在我們必須回到 MyEtherWallet,將 ABI 粘貼到其文本框中,然後單擊 Access 按鈕。我們可以通過單擊 Select a function 下拉菜單與合約互動:
在我們的代碼中,將計數 cs 的初始值設置為 0。要確認智能合約工作是否正常,我們需要調用 getC () 函數:
我們可以看到合約被返回,但是我們也做了其他的函數 plusbyone ()。調用 plusbyone () 來測試它。我們將再次選擇 function 下拉菜單,選擇 plusbyone,並創建一個新的交易:
這只是增加了 c 的值。現在,我們可以再次調用 getcount () 來確認值是否被更改:
EVM 是一個分佈式運行環境,用於構建和管理智能合約。在以太坊中,每一個程序都是由成千上萬台電腦組成的網絡來處理的。
智能合約被編譯成字節碼,一個名為 EVM 的部件可以讀取和執行字節碼。所有節點都使用各自的 EVM 執行此合約。根據基本定義,網絡中的每個節點都擁有一個交易副本和智能合約的網絡歷史記錄。EVM 負責按照開發人員預先編寫的規則執行合約。EVM 通過基於堆棧的字節碼計算這些數據,而開發人員則用高級語言(如 Solidity 或 Serpent)編寫智能合約。
gas#
當以太坊網絡中的每個節點都執行一個智能合約時,將耗費大量能源(gas)。因為消耗更多的能源意味著花費更多的錢,它也依賴於智能合約編程的水平。換句話說,EVM 中的每一個低級操作代碼都需要消耗一定數量的 gas 來執行其期望的輸出。
Gas 只是表示執行計算的成本,並幫助開發人員理解其智能合約代碼的能源消耗。和比特幣市場一樣,gas 的價值是由市場決定的。如果支付了更高的 gas 價格,節點將優先考慮這些交易以獲取利潤。
dApp#
dApp 採用了諸如加密標記和內部共識機制等激勵機制。分佈式應用程序不需要存儲其所有狀態。然而,基於以太坊的分佈式應用程序確實存儲了其可信狀態,這為最終用戶提供了一種經濟的解決方案。
除了與以太坊區塊鏈的客戶端接口外,dApp 客戶端需要對前端進行編程。客戶端通常是用 JavaScript 編寫的,因為它們可以在 Web 瀏覽器中運行,而我們大多數人都有這種瀏覽器。
dApp 瀏覽器使用 dApp 客戶端(通常用 JavaScript 編寫)與以太坊節點進行交互,然後與智能合約進行通信。dApp 確保了與以太坊節點的連接,並提供了更改連接的簡單過程。它還為用戶提供了一個賬戶接口,以便用戶可以輕鬆地與這些 dApp 互動。
在此基礎上,我們介紹了以太坊的一些核心組件,並觀察了智能合約在現實世界中的運行情況。
公有鏈#
使用公有鏈,鏈接區塊的過程總是使用各種節點,這些節點可以是獨立的、不可信的,甚至是未知的,並且可以參與共識過程來校驗區塊。在公有鏈中,任何人都可以簡單地在系統中下載區塊鏈節點客戶端並與任何人進行交易,也可通過區塊資源管理器讀取交易。比特幣和以太坊就是公有鏈的一些主要例子。
比特幣是第一個安全、可靠地進行資金轉移的分佈式平台。然而,以太坊被發明的目的不同 —— 為任何人提供一個平台來開發他們自己的去中心化應用程序,不僅限於只轉移貨幣,而是轉移任何價值。以太坊使用智能合約來實現一套自操作程序,這些程序在滿足某些條件時執行。
私有鏈#
設置私有鏈的組織將其配置為一個被許可的網絡。它的建立是為了提供更好的交易隱私,並且適用於銀行和其他金融機構。與公有鏈不同,僅用區塊鏈節點客戶端連接到互聯網將不足以啟動交易;與此同時,一個聯盟鏈只允許特定的和預先驗證過的人通過網絡訪問並傳輸任何類型的價值。
在該系統中,共識機制由預先選定的節點組控制和管理。這樣,即使區塊鏈在公共網絡中工作,它仍然是受限制的,只能由特定的節點組或甚至單個節點控制和維護。私有鏈也可以根據其限制和控制級別被稱為聯盟鏈。
其中最流行的實現之一是 Hyperledger Fabric,它是由 Linux 基金會托管的一個被許可的區塊鏈框架。
了解區塊鏈的體系結構和共識模型,請參閱https://www.researchgate.net/publication/318131748_An_Overview_of_Blockchain_Technology_Architecture_Consensus_and_Future_Trends。
區塊鏈是比特幣的基礎,近期受到廣泛關注。區塊鏈就像一個不可改變的賬本,允許交易以去中心化的方式進行。基於區塊鏈的應用如雨後春筍般湧現,涵蓋金融服務、信譽系統、物聯網等眾多領域,但區塊鏈技術仍存在可擴展性、安全性等諸多挑戰有待克服。本文對區塊鏈技術進行了全面的概述。本文首先對區塊鏈體系結構進行了概述,並對幾種典型的共識算法進行了比較。此外,還簡要列出了技術挑戰和最新進展。我們還對區塊鏈未來可能的發展趨勢進行了闡述。
需要搭建一個實驗環境,專門用於演示 Hyperledger 應用程序,以解決供應鏈管理中的一些實際問題。你需要在鏈接https://github.com/hyperledger/education.git 中獲得源代碼。
Hyperledger 是一項開源計劃,旨在通過分佈式賬本技術滿足行業核心需求,是由 Linux 基金會與信息技術、銀行、物流、運輸、金融、製造和物聯網等多家行業巨頭共同創建的一個聯合項目。
如今,加密貨幣仍致力於與某些政府和企業機構建立信任,而區塊鏈正是用於進行業務安全運營和管理的關鍵技術。由於比特幣本質上的僵化與靜態性質,它不適用於商業應用。雖然以太坊有能力通過其智能合約提升業務應用程序的擴展性,但由於其使用不受限制,金融機構和其他關鍵業務運營對於嘗試使用以太坊區塊鏈來進行它們的商業運營表現出猶豫的態度。
Hyperledger 是唯一的分佈式賬本技術框架,專門為那些需要採用許可區塊鏈來實現對整個系統進行更好控制的企業而精心構建的。因為 Hyperledger 更多地用於解決關鍵業務問題,它不支持任何加密貨幣平台或相關系統。
Hyperledger 項目成立於 2015 年 12 月,目前已經得到了埃森哲、空中客車、美國運通、思科、富士通、日立、IBM、英特爾、SAP、NEC、BBVA、Bitmark、博世、CA Technologies、Capgemini、安永、Factom、華三、NSE、甲骨文、普華永道、Redhat、三星、Ripple、Thales、Wipro、雲安全聯盟等多家行業領導者的讚賞和採用。
Hyperledger 項目還計劃用於區塊鏈愛好者、區塊鏈社區、企業和非營利組織之間的協作,以及構建分佈式賬本應用程序的全面統一的標準。正如 WordPress 徹底改變了網站響應方式和啟動時間一樣,Hyperledger 正在努力降低開發分佈式賬本應用程序的成本和總體時間。
Hyperledger 項目因其為平台協作開發跨行業框架的先驅性,受到廣泛讚賞。金融行業為了緊跟發展趨勢,對與 Hyperledger 平台的合作表現得最為積極。讓我們對 Hyperledger 的項目目標進行回顧,進一步理解其發展路線:
・社區驅動的基礎設施:由於 Hyperledger 項目得到了一些私人和政府機構的支持,它提供了一個高效、開放的社區驅動的環境。
企業級框架:與加密貨幣區塊鏈不同,Hyperledger 的開發旨在支持企業通過分佈式賬本網絡執行安全可靠的交易或事務處理。
・建立技術社區:該項目還旨在建立一個更具規模和效果的技術社區,以創新和開發區塊鏈智能合約及其他相關代碼。
・傳播區塊鏈意識:這是向企業和其他機構傳播關於區塊鏈技術意識及其業務應用思維的好方法。
Hyperledger 是一個開源框架,允許企業基於分佈式賬本技術構建企業級解決方案。該框架包含以下組件:
・共享賬本:一個內容僅可追加的賬本,按時間順序存儲數據塊。
・共識算法:一種實現對分佈式賬本內容的改變達成共識的協議方法。
・隱私:構建 Hyperledger 的主要目的是在具有關鍵任務的業務環境中實現具有安全可靠交易的許可網絡。
・智能合約:這是一些用戶計劃和處理交易請求的微小程序過程。
讓我們了解一下 Hyperledger 架構:
・共識層:主要負責根據預定義的規則生成每個訂單的協議並校驗交易。
・智能合約層:它負責交易請求和應用業務邏輯。
・通信層:用於協助節點間通過點對點傳輸進行通信的平台。
・數據存儲抽象:允許其他模塊使用各種數據來源。
・加密抽象:允許使用不同的加密算法而不影響其他模塊。
・身份服務:使得在區塊鏈設置期間可以使用額外的身份認證和授權。
・規則服務:負責管理多項規則,例如共識規則、背書規則和集團管理規則
API:使客戶端和應用程序能夠與區塊鏈模塊進行通信。
・互操作:提供了不同區塊鏈實例之間的互操作性。
Hyperledger 框架結構如下所示:
・Iroha:Hyperledger Iroha 是由 Soramitsu、Hitachi、NTT DATA 和 Colu 貢獻的區塊鏈框架。它旨在供 Android 和 iOS 軟體包下的移動應用程序開發人員使用,設計簡潔,包含 C++ 編程包和 YAC 一致性算法。
・Sawtooth:由英特爾提供,可以根據網絡規模來選擇使用多種共識算法。默認情況下,Hyperledger Sawtooth 使用消逝時間量證明(PoET)來實現節點之間的一致性。它旨在實現多功能性,同時支持許可和非許可的實現。
・Indy:Hyperledger Indy 是一個分佈式賬本,用於實現分散身份的業務解決方案,並提供跨多個支持分佈式賬本技術(DLT)的互操作性。它旨在實現跨節點和整個交易的隱私。
・Burrow:Hyperledger Burrow 是一個基於權限的智能合約系統,它為模塊化區塊鏈客戶端提供了一個使用以太坊虛擬機(EVM)構建的分權管理的智能合約解釋器。
網絡的多個節點之間建立和維護通信非常重要:
・節點(node):Hyperledger 網絡中有以下三種角色:
・客戶端(client):客戶端在網絡上提出交易請求。它必須連接到一個對等節點才能加入區塊鏈。客戶端有權將所需要的對等節點連接到網絡。
・對等節點(peer):對等節點監聽賬本更新廣播並保留副本。根據其性質,對等節點還可以分成兩種類型:
・背書節點(endorsing peer):負責對來自客戶端的交易提案進行檢查和背書
・確認節點(committing peer):提交方在提交網絡中的交易之前確認交易。
・排序服務(ordering service):排序服務接受完成背書的交易,並將它們按序存儲到一個區塊中,最後將其交付給確認中的對等節點。排序服務還為客戶端節點和對等節點提供共享和安全的通信通道。它充當廣播交易的媒介,並幫助用戶將其交付給對等節點。
・賬本(ledger):就像比特幣和以太坊一樣,Hyperledger 賬本提供了整個系統操作中所有有效和無效交易的驗證列表。它由排序服務創建,並與網絡中的所有對等節點保持一致。
・通道(channel):Hyperledger Fabric 中的通道是節點進行機密交易的受限通信媒介。通道特定於成員、共享賬本、鏈碼應用程序和訂購服務節點。
通道的每個 peer 節點必須由成員服務提供者(MSP)進行授權,該授權服務提供者驗證每個對等節點到其各自的通道對等節點及相應服務。
・世界狀態(the world state):這反映了有關網絡中所有資產的當前數據狀態。數據以下列格式安全存儲:
・LevelDB:Hyperledger Fabric 的默認數據庫,它只存儲鍵值對。
・CouchDB:最適合 Web 和本地應用程序,它本質上就是 JSON。它通過支持二進制滿足所有數據存儲需求。
・鏈碼(chaincode):chaincode 是由網絡成員商定和創建的來執行業務邏輯的。可以是一個用 GO——Node.js 編寫的程序:
・LevelDB:一種默認的編程語言,它運行在安全的 Docker 容器上並管理賬本狀態。
・CouchDB:另一種存儲 JSON 對象的數據庫編程語言。它還支持鍵值範圍查詢、複雜查詢和完整數據查詢。
・共識(consensus):共識就是對添加到账本的一組交易達成協議的過程。在 Hyperledger Fabric 中,通過以下三個步驟實現了共識:
・交易背書。
・排序。
・校驗和確認。
現在,讓我們了解這些共識組件以及它們如何與 Hyperledger 及其交易處理方法一起運作。
Hyperledger 的工作和交易處理流程可以解釋如下:
1)交易提交:在 Hyperledger Fabric 中,整個流程從客戶端應用程序提交交易開始:
每個客戶端應用程序都可以提交交易給背書對等節點來進行模擬處理和背書過程。
2)背書者將 RW 集發送給客戶端:每個背書對等節點模擬提議的交易並存儲名為 RW 集合的讀寫數據集。這些數據集由簽署背書對等節點簽名,並返回給客戶端應用程序:
交易背書:這是由模擬交易產生的簽名響應。像智能合約一樣,通過策略鏈碼可以有多種方式定義交易背書。一個交易背書策略類似於一個定義的鏈碼。
3)客戶端應用程序服務:一旦客戶端應用程序收到 RW 集和已批准的交易,它就必須將這些交易提交給排序服務。無論其他客戶端應用程序是否確認了交易背書和 RW 集,此方法都會繼續工作:
4)排序者將塊中的交易發送給確認中的對等節點:排序服務接受 RW 集和已經背書的交易,將它們排列成塊並將它們轉發給確認中的對等節點:
排序服務負責組織所有交易,然後將它們提交進賬本。默認情況下,Hyperledger Fabric 的排序服務是 Kafka,它是由 Apache Software Foundation(ASF)開發的開源的流事務處理平台。
現在,讓我們更詳細地了解排序服務的工作原理。將其劃分成幾個核心部分非常重要:
・排序服務的第 1 部分:一旦在指定的時間範圍內準備好一定數量的交易,就會創建一個塊,並按時間順序提交這些交易。與比特幣區塊鏈不同,Hyperledger Fabric 提供了最適合的排序機制,這有助於企業設計精細、靈活且可擴展的分佈式網絡系統。
・排序服務的第 2 部分:Hyperledger Fabric 支持三種排序服務機制 ——SOLO、Kafka 和簡化的拜占庭容錯(Simplified Byzantine Fault Tolerance,SBFT):
・SOLO:最適合軟體開發人員進行研究和測試,而且只有一個排序節點。
・Kafka:另一種可應用於生產的 Hyperledger Fabric 訂購機制。它由 ASF 開發,提供統一、高效、低延遲的軟體平台,用來處理實時源。在 Hyperledger Fabric 中,Kafka 處理 RW 集和背書交易。
・SBFT:類似於比特幣區塊鏈的 PoW 共識機制。該解決方案旨在克服拜占庭故障。即使網絡中存在惡意節點或一組惡意節點,系統也能正常工作。
5)確認對等節點校驗塊中的每個交易:確認對等節點校驗交易以確保 RW 集與當前世界狀態匹配。一旦確認對等節點校驗了交易,交易就會被更新到账本,並且世界狀態會默認使用來自 RW 集的寫入數據進行更新:
最後,確認對等節點必須通知客戶端應用程序交易的成功或失敗情況。
6)身份驗證:在交易流程的每一步,從背書到版本檢查,身份驗證仍然是一個持續的過程。
比特幣、以太坊與 Hyperledger#
區塊鏈平台的特徵,以便能夠更進一步了解那些流行的區塊鏈平台之間的對比:
・權限限制:定義了交易處理器創建或阻塞現有賬本的資格。在此上下文中,存在以下兩種類型:
・許可區塊鏈(permissioned blockchain):在此模型中,交易處理只能由預先選擇的用戶執行。Hyperledger Fabric 就是屬於這一類。
・非許可區塊鏈(permissionless blockchain):此模型不限制交易處理器創建或添加新區塊。以太坊和比特幣就是當前最受用戶歡迎的非許可區塊鏈。
・受限制的數據訪問:指定了區塊鏈網絡的讀取權限。有以下兩種類型:
・公共區塊鏈:在讀取正在進行的交易信息時沒有限制。任何人都可以使用區塊鏈節點客戶端下載更新的區塊鏈賬本。
・私有區塊鏈:在此類型的區塊鏈中,區塊鏈賬本的訪問僅限於預先選擇的用戶。
・共識機制:在分佈式網絡中,實現無信任網絡並確定所有交易的共識至關重要。這確保了只將有效、合法的交易添加到區塊鏈中。常見的共識算法有 PoW、PoS 和 PBFT。
・可伸縮性:可伸縮性取決於兩個因素 —— 節點和性能。節點可伸縮性是指可以在不影響整體性能的情況下將節點添加到區塊鏈網絡中,並且可伸縮性取決於每秒的交易數。
・匿名性:指區塊鏈中公開或隱藏的用戶身份。
・治理:區塊鏈社區中分配的決策權。區塊鏈平台必須由核心開發團隊或其他利益相關者來維護。
・原生貨幣:指區塊鏈中有效的貨幣,如比特幣區塊鏈中的比特幣。
腳本:指分佈式應用程序(dApp)所支持的編程級別:
關於區塊鏈與 CIA 安全三元組模型的細節:
・訪問https://ethereum.stackexchange.com/questions/25270/confidentiality-in-blockchain 了解區塊鏈的機密性。
・訪問https://gdr-securite.irisa.fr/redocs/download/redocs17-gemalto.pdf 了解私有鏈中的數據機密性。
PKI 簡析#
互聯網允許任何人与其他人連接,而且與現實世界不同的是,地理或者物理障礙並不存在。這使得在互聯網上正確識別一個人並建立進一步的可信交流變得十分困難。在下面的圖中,Alice 想通過互聯網與 Bob 會話,然而,Bob 拒絕了,因為他無法驗證 Alice 的身份。
PKI 通過在 Bob 和 Alice 之間添加一個可信第三方(TTP)來解決這個問題。在他們開始了解彼此之前,他們必須建立信任關係,而 TTP 有助於實現這一過程。在下面的圖中,Alice 與 Bob 共享數字證書,Bob 使用來自授信機構的公鑰來驗證 Alice 的簽名,進而對 Alice 進行身份認證。
在上圖中,TTP 是證書頒發機構(CA)。CA 機構通過生成一個證書,幫助用戶在互聯網上確立其身份:
・PKI:PKI 提供了一個層次標準來管理實體數字資產,從而建立一個安全的通信信道。且 PKI 不是僅限於用戶使用,它還被廣泛用於多個不同的應用系統,如電子郵件、Web 應用程序、智能卡等,稍後將對此進一步介紹。
・網絡設備:PKI 用於控制對路由器和交換機的訪問,進行基於 802.1X 的身份認證。
・應用程序:應用程序需要從 CA 獲得簽名證書才能在操作系統中運行。
・IPsec 隧道:路由器和防火牆使用證書對網絡上的其他端點進行身份認證。
・Radius 伺服器:由 PKI 證書保護輕量級目錄訪問協議(LDAP)查詢。
PKI 架構的一種實現,最初 X.509 設計詳細闡述了通過 CA 數字簽名的證書存儲和公鑰分發的過程。然而,X.509 的配置文件並沒有詳細說明如何支持證書的許多子字段和擴展,如下圖所示:
在各標準制定方的共同努力下,最終為 X.509 版本 3 的 PKI 以及版本 2 的證書撤銷列表等內容準備了大綱。在正式發布 RFC 2459 之前,提出了大約 11 個用於增強 X.509 標準的草案。
RFC 2510 是為了指定 PKI 中使用的消息協議而開發的。此後,針對增加登記協議的需要和對於 PKCS#10 消息格式的偏好,出現了兩個並行的發展路線。下圖解釋了 PKI 信息頭的演變過程。在版本 2 中,發布者的唯一標識 ID 和主題的唯一標識 ID 被添加到信息頭中。在版本 3 中,引入了一個擴展字段來標識規則和其他相關信息,如下圖所示:
此外,證書請求的語法是在帶有 PKCS#10 的 S/MIME WG 中開發的。RFC 2510 中定義了一個簡單的用戶登記協議,但是它沒有使用 PKCS#10 作為證書請求格式。
組成部分#
PKI 是各種組件、應用程序、規則和實踐的集合體,它們共同組合和保障了完整性、身份認證和不可抵賴性這三元安全要素的實現。數字證書是 PKI 的主要組成部分,在互聯網上起着數字身份證的作用。以下將分別介紹 PKI 的五個核心組件。
1. 非對稱密鑰加密
在密碼學中,加密是一個對信息進行編碼的過程,從而保證只有相關方能夠查看並理解原始信息。這種對信息進行加密的編碼過程可以用兩種方式實現:對稱加密和非對稱加密,分別解釋如下:
・對稱加密:在對稱加密中,數據的加密和解密過程使用同一個密鑰。這需要確保雙方使用相同的密鑰對數據進行加解密,如下圖所示:
・非對稱加密:在非對稱加密中,使用不同的密鑰來加密和解密數據。每個密鑰對是由公鑰和私鑰共同組合而成的。公鑰用於加密數據,而私鑰用於解密數據。公鑰與互聯網上的數據一起存在,而私鑰則由使用它的用戶個體來負責保存,如下圖所示:
公鑰和私鑰對可以由兩個唯一相關的圖形密鑰組成。下面是公鑰的一個例子:
公鑰通過網絡提供給所有人,並存儲在可訪問的存儲或目錄中。另一方面,私鑰必須為其所有者保持私有狀態,所以它有時也被稱為密鑰公鑰和私鑰在數學上是相互聯繫的。使用公鑰加密的數據只能由對應的私鑰解密。
2. 證書
證書是一種電子 ID,表示了希望通過網絡進行通信的用戶或設備的身份。該證書基本上確保了只有合法用戶才能連接到網絡。證書是由受信任的第三方(即 CA)對公鑰簽名而生成的。
以下是三種常用類型的證書:
・安全套接字層(SSL)證書:SSL 伺服器證書安裝在服務端主機伺服器上,例如 Web 應用程序、郵件伺服器、目錄或 LDAP 伺服器。此證書包含該應用程序所屬組織的標識信息。SSL 證書還包含一個系統公鑰。證書的主題(certificate subject)與伺服器的主機名匹配。此證書必須由受信任的證書頒發機構簽名。主要主機名作為證書主題字段中的通用名稱(Common Name)列出。
・客戶端證書:客戶端證書用於標識網絡用戶、設備、網關或任何其他類型的設備。它是一個數字憑證,用於校驗擁有證書的客戶端身份。今天,許多應用程序允許通過證書對特定資源的用戶進行身份認證,而不是通過用戶名和密碼。通過電子郵件進行通信的兩個用戶還可以使用客戶端證書認證各自的身份。
・代碼簽名證書:代碼簽名證書用於對系統上運行的軟體進行簽名。在用戶機器下載數百萬個應用程序的情況下,驗證程序代碼非常必要,因此,代碼簽名證書在其中扮演著重要的角色。
・電子郵件證書:發件人需要通過 S/MIME 協議為任何給定收件人選擇使用相應的公鑰。發件人可以從電子郵件證書中獲取此信息。通常,當電子郵件在組織內部通信並使用自己的 CA 時,使用 S/MIME 協議。
3. 證書頒發機構
證書頒發機構(CA)是一個受信任的第三方機構,它證明用戶、伺服器、數據庫和管理員就如同它們自己聲稱的那樣。CA 檢查用戶的憑證並授予證書,並使用密鑰對其進行簽名。CA 可以是一個開放的解決方案,也可以是提供證書服務的受監管解決方案,如下圖所示:
CA 的職能如下:
・簽發及交付證書。
・將證書和證書撤銷列表(CRL)發布到存儲庫。
・管理來自證書所有者的撤銷請求。
在下面的截屏中,我們可以看到客戶端系統中的數字簽名列表。列表中的證書是由多家證書頒發機構簽發的並具有各自的有效期:
不同類型的 CA 如下:
・公共數字證書頒發機構:有些公共證書提供者對用於商業和個人目的的證書進行管理。只有在支付了特定的費用後才能獲得這些 CA 頒發的數字證書。
・私有數字證書頒發機構:企業或機構的系統管理員可以向域內的系統應用和用戶頒發證書。例如 Windows 伺服器可以創建和存儲密鑰對,但是這些私有證書對於外部通信無效,僅限內部使用。
4. 註冊機構
註冊機構(RA)負責認證需要授信的新實體的身份。它還維護本地註冊數據信息,並發起舊證書的更新和撤銷過程。
RA 的功能如下所示:
・負責對需要 CA 證書的新用戶或系統進行身份認證。
・負責執行 CA 的部分功能。
・負責充當 CA 的代理。
・負責針對證書延期和證書撤銷過程進行本地註冊數據的更新維護。
5. 證書存儲庫
證書存儲庫(CR)是一個證書數據庫,PKI 環境中的所有節點都可以訪問它。它還保存證書相關撤銷信息和政策信息。此存儲庫以證書撤銷列表的形式來獲取更新的證書列表。
證書存儲庫的功能如下:
・它允許以未經身份驗證的方式檢索信息。
・它充當數據庫來保存公鑰證書、撤銷列表和政策等信息
PKI 架構在一個稱為信任鏈的模型上進行工作。該模型存在於每個身份之間的信任關係中。具體來說,兩層和三層的層次結構之間的區別是,第二層放置根 CA(root CA)或者發行 CA(issuing CA)。使用二層 CA 的主要原因是可以設置一個策略 CA(policy CA),負責給證書頒發 CA 發放證書。由此,三層的層次結構可以提供更好的安全性。策略 CA 也可以擔任系統的管理邊界。如果管理員由於密鑰洩露而需要撤銷許多 CA,這種設計也很有用,可以在第二層執行撤銷,保留根的其他分支可用,如下圖所示:
在簽名過程中,根 CA 使用其密鑰對中間證書進行數字簽名。這個過程保證了發放證書的真實性,聲明所發放的中間證書是根 CA 信任的。每個 CA 都可以從客戶端接收授權請求並發放證書。通常,客戶端無法訪問根 CA,但客戶端有資格持有根 CA 證書。客戶端將證書請求發送到所屬的 CA 來獲取安裝證書,如下圖所示:
在下面的圖中,我們可以看到共享數字證書的流程和對它們的解密。為了認證一方的身份,數字證書使用公鑰解密:
在理解了具有身份、中間人和根證書頒發機構的數字證書的層次結構之後,讓我們來了解如何在瀏覽器客戶端和使用 SSL 的網站之間建立信任連接通信。客戶端請求訪問 HTTPS 網站。客戶端的瀏覽器預先加載了許多根 CA 證書。步驟如下:
1)客戶端連接到使用 SSL 的網站。
2)網站將其身份和中間證書返回給客戶端。
3)客戶端使用中間證書的公鑰解密數字簽名,從而確認中間證書的真實性。
4)客戶端確認所請求的 URL 與身份證書中的 URL 相匹配。如果不匹配,將會顯示一個警告。
5)客戶端使用公鑰加密或解密流量,伺服器使用私鑰加密或解密流量
多密鑰加密周期流程圖:
我們可以進一步了解使用和處理密鑰的幾個階段:
・密鑰創建:密鑰生成並存儲在密鑰管理伺服器上。密鑰管理器使用一個安全的隨機位生成器,通過加密過程生成密鑰對。一旦密鑰對被創建,它就會與其所有屬性一起存儲在密鑰存儲數據庫中。屬性通常由名稱、大小、實例、激活日期、翻轉、鏡像值、密鑰訪問和其他關聯屬性組成。可以計劃密鑰激活時間,也可以在創建密鑰時激活密鑰。加密密鑰管理器跟蹤加密密鑰的當前和過去的實例。
・密鑰使用和滾動更新:密鑰管理器負責允許授權用戶或系統去檢索信息,並允許它們處理加密或解密。它還負責管理加密密鑰的整個生命周期和每個密鑰實例的狀態。如果一個機構的政策規定它應該每年使用一組新的密鑰,那麼密鑰管理器應該保留密鑰的以前版本,只分發當前版本。但是,為了執行解密過程,仍然可以檢索以前的版本。
・密鑰撤銷:管理員連接到密鑰管理器伺服器來撤銷密鑰,以便不再將其用於進一步的加密和解密過程。如果需要,管理員甚至可以重新激活密鑰,並將其用於接下來的過程。在某些情況下,管理員還可以使用從以前