區塊鏈學習之密碼學安全技術(五)

Hash 算法與數字摘要

Hash (哈希或散列)算法它能將任意長度的二進制明文串映射爲較短的(一般是固定長度的)二進制串(Hash值),而且不一樣的明文很難映射爲相同的Hash值。算法

Hash 定義

Hash (哈希或散列): 能將任意長度的二進制明文串映射爲較短的(一般是固定長度的)二進制串(Hash值),而且不一樣的明文很難映射爲相同的 Hash 值。
Hash 值在應用中又常被稱爲指紋或摘要(digest)。Hash 算法的核心思想也常常被應用到基於內容的編址或命名算法中數據庫

一個優秀的Hash算法將能實現以下功能:數組

  • 正想快速: 給定明文和 Hash 算法,在有限時間和有限資源內能計算獲得Hash值
  • 逆向困難: 給定(若干)Hash值,在有限時間內很難(基本不可能)逆推出明文
  • 輸入敏感: 原始輸入信息發生任何改變,新產生的 Hash 值都應該出現很大不一樣
  • 衝突避免: 很難找到兩端內容不一樣的明文,使得它們的 Hash 值一致(發生碰撞)、

衝突避免:有時候又稱爲「抗碰撞性」,分爲:安全

  • 弱抗碰撞性: 若是給定明文前提下,沒法找到與之碰撞的其餘明文,則算法具備「弱碰撞性」
  • 強抗碰撞性: 若是沒法找到任意兩個發生 Hash 碰撞的明文,則算法具備「強抗碰撞性」

常見算法

目前常見的 Hash 算法包括 MD5 和 SHA系列算法,MD5算法和SHA1已經被破解,通常推薦使用SHA2-256或更安全的算法網絡

性能

Hash算法分爲:框架

  • 計算敏感型(通常都是): 意味着計算資源是瓶頸,主頻越高的 CPU 運行Hash 算法的速度也越快。所以能夠經過硬件加速來提高Hash計算的吞吐量。
  • 非計算敏感型: 例如 scrypt 算法,計算過程須要大量的內存資源,節點不能經過簡單地增長更多的 CPU 來得到 Hash 性能的提高。這樣的Hash算法常常用於在 避免算力攻擊的場景

數字摘要

數字摘要:對數字內容進行Hash運算,獲取惟一的摘要值來指代原始完整的數字內容。數字摘要是 Hash算法最重要的一個用途。利用Hash函數的抗碰撞性特色,數字摘要能夠解決確保內容未被篡改過的問題。函數

Hash攻擊與防禦

Hash 算法並非一種加密算法,不能用於對信息的保護。但Hash算法經常使用於對口令的保存上。例如用戶登陸網站,網站後臺保存口令的Hash值,每次登陸進行比對便可,即使數據庫泄露,也沒法從 Hash值還原口令,只能進行窮舉。性能

Hash攻擊: 因爲有時用戶設置口令的強度不夠,只是一些常見的簡單字符串,如password,123456等。有人專門蒐集了這些常見口令,計算對應的Hash值,製做成字典。這樣經過Hash值能夠快速反查到原始口令。這一類以空間換時間的攻擊方法包括字典攻擊彩虹表攻擊(只保存一條Hash鏈的首尾值,相對字典攻擊能夠節省存儲空間)等。學習

Hash攻擊防範方法:爲了防範這一類攻擊,通常採用加鹽(salt)的方法。保存的不是口令明文的 Hash值,而是口令明文再加上一段隨機字符串(即「鹽」)以後的Hash值。Hash結果和「鹽」分別存放在不一樣的地方,這樣只要不是二者同時泄露,攻擊者就很難破解了。區塊鏈

加解密算法

加解密算法是密碼學的核心技術,可分爲兩大基本類型:

clipboard.png

加解密系統基本組成

現代加解密系統的典型組件通常包括: 加解密算法、加密密鑰、解密密鑰。其中,加解密算法自身是固定不變的,而且通常是公開可見的。密鑰則是關鍵的信息,須要安全地保存起來,甚至經過特殊硬件進行保護。對同一種算法,密鑰須要按照特定算法每次加密前隨機生成,長度越長,則加密強度越大。加解密基本過程以下:

clipboard.png

根據加解密過程當中使用的密鑰是否相同,算法能夠分爲對稱加密非對稱加密,兩種模式適用於不一樣的需求,剛好造成互補,某些時候能夠組合使用,造成混合加密機制。

密碼學實現的安全每每是經過算法所依賴的數學問題來提供,而並不是經過對算法的實現過程進行保密。

對稱加密算法

對稱加密算法,加密和解密過程的密鑰是相同的。

  • 優勢:加解密效率(速度快,空間佔用小)和加密強度都很高。
  • 缺點:參與方都須要提早持有密鑰,一旦有人泄露則安全性被破壞,另外如何在不安全通道中提早分發密鑰也是個問題,須要藉助Diffie-Hellman協議或非對稱加密方式來實現。

對稱密碼從實現原理上能夠分爲兩種:

  • 分組密碼: 將明文切分爲定長數據塊做爲基本加密單位,應用最爲普遍。分組對稱加密表明算法包括 DES、3DES、AES、IDEA等
  • 序列密碼: 每次只對一個字節或字符進行加密處理,且密碼不斷變化,只用在一些特定領域,如:數字媒介的加密等。序列密碼,又稱流密碼,每次經過僞隨機數生成器來生成僞隨機密鑰串。

對稱加密算法適用於大量數據的加解密過程;不能用於簽名場景;而且每每須要提早分發好密鑰;

非對稱加密算法

非對稱加密能夠很好的解決對稱加密中提早分發密鑰的問題。非對稱加密中,私鑰通常須要經過隨機數算法生成,公鑰能夠根據私鑰生成。公鑰通常公開,他人可獲取的;私鑰通常是我的持有,他人不能獲取

非對稱加密算法:

  • 優勢: 是公私鑰分開,不安全通道也可以使用。
  • 缺點:是處理速度(特別是生成密鑰和解密過程)每每比較慢,通常比對稱加解密算法慢2~3個數量級;同時加密強度也每每不如對稱加密算法。

非對稱加密算法的安全性每每須要基於數學問題來保障,目前主要有基於大數質因子分解、離散對數、橢圓曲線等經典數學難題進行保護。表明算法包括: RSA、ElGamal、橢圓曲線(ECC)、SM2等系列算法。目前廣泛認爲RSA類算法可能在不遠的未來被破解,通常推薦可採用安全強度更高的橢圓曲線系列算法。

選擇明文攻擊

在非對稱加密中,因爲公鑰是公開能夠獲取的,所以任何人均可以給定明文,獲取對應的密文,這就帶來選擇明文攻擊的風險。 在已知明文攻擊、已知密文攻擊、選擇明文攻擊中,最有威脅的爲選擇明文攻擊。

  • 已知明文攻擊: 獲得了一些給定的明文和對應的密文
  • 已知密文攻擊: 只知道密文,只能經過統計特性分析其中有什麼規律了
  • 選擇明文攻擊:經過公鑰加密一些經常使用語,截取發送方的密文和公鑰加密後的密文對比獲取信息。

爲了規避選擇明文攻擊這種風險,現有的非對稱加密算法都引入了必定的保護機制。對一樣的明文使用一樣密鑰進行屢次加密,獲得的結果徹底不一樣,這就避免了選擇明文攻擊的破壞。實現上有多種思路:

  • 對明文先進行變形,添加隨機的字符串或標記,再對添加後結果進行處理。
  • 先用隨機生成的臨時密鑰對明文進行對稱加密,而後再對對稱密鑰進行加密,即混合利用多種加密機制。

混合加密機制

混合加密機制同時結合了對稱加密和非對稱加密的優勢。先用計算複雜度高的非對稱加密協商出一個臨時的對稱加密密鑰(也稱爲會話密鑰)而後雙方經過對稱加密算法傳遞的大量數據進行快速的加解密處理。

HTTPS 在傳統的HTTP層和TCP層之間經過引入 Transport Layer Security/Secure Socket Layer(TLS/SSL)加密層來實現可靠的傳輸
HTTPS 爲典型應用案例:

clipboard.png

該過程的主要功能:在防止中間人竊聽和篡改的前提下完成會話密鑰的協商。

離散對數與Diffie-Hellman 密鑰交換協議

Diffie-Hellman(DH)密鑰交換協議是一個經典協議,使用該協議能夠在不安全信道完成對稱密鑰的協商,以便後續通訊採用對稱加密。

DH的缺點:

  • 阻塞性攻擊:沒有提供雙方身份的任何信息. 它是計算密集性的,所以容易遭受阻塞性攻擊,即對手請求大量的密鑰.受攻擊者花費了相對多的計算資源來求解無用的冪係數而不是在作真正的工做.
  • 容易遭受中間人的攻擊

消息認證與數字簽名

消息認證碼和數字簽名技術經過對消息的摘要進行加密,可用於消息放篡改和身份證實問題。

消息認證碼

消息認證碼: 全稱是「基於Hash的消息認證碼」。消息認證碼基於對稱加密,能夠用於對消息完整性進行保護。

基本過程: 對某個消息利用提早共享的對稱密鑰和Hash算法進行加密處理,獲得HMAC值。該HMAC值持有方能夠證實本身擁有共享的對稱密鑰,而且也能夠利用HMAC確保消息內容未被篡改。

消息認證碼通常用於證實身份的場景, 主要問題是須要共享密鑰

數字簽名

數字簽名基於非對稱加密,既能夠用於證明某數字內容的完整性,又同時能夠確認來源。

典型的場景: A經過信道發給B一個文件(一份信息),B如何獲知收到的文件即爲A發出的原始版本?A能夠先對文件內容進行摘要,而後用本身的私鑰對摘要進行加密(簽名),以後同時將文件和簽名發給B。B收到文件和簽名後,用A的公鑰來解密簽名,獲得數字摘要,與收到文件進行摘要後的結果進行比對。若是一致,說明該文件確實是A發的(別人沒法擁有A的私鑰),而且文件內容沒有被修改過(摘要結果一致)

知名的數字簽名算法包括DSA 和 安全強度更高的ECSDA等。
除普通的數字簽名應用場景外,針對一些特定的安全需求,產生了一些特殊數字簽名技術:

  • 盲簽名: 簽名者須要在沒法看到原始內容的前提下對信息進行簽名。盲簽名能夠實現對所簽名內容的保護,防止簽名者看到原始內容。另外一方面,盲簽名還能夠實現防止追蹤,簽名者沒法將簽名內容和簽名結果進行對應。
  • 多重簽名:即n個簽名者中,收集到至少m個(n>=m>=1)的簽名,即認爲合法。其中,n是提供的公鑰高數,m是須要匹配公鑰的最少的簽名個數
  • 羣簽名:即某個羣組內一個成員能夠表明羣組進行匿名簽名。簽名能夠驗證來自於該羣組,卻沒法準確追蹤到簽名的是哪一個成員
  • 環簽名: 環簽名是一種簡化的羣簽名。簽名者首先選定一個臨時的簽名者集合,集合中包括簽名者自身。而後簽名者利用本身的私鑰和簽名集合中其餘人的公鑰就能夠獨立地產生簽名,而無需他人的幫助。簽名者集合中的其餘成員可能並不知道本身被包含在最終的簽名中 。環簽名在保護匿名性方面有不少的用途。

安全性

數字簽名算法自身的安全性由數學問題進行保障,但在使用上,系統的安全性也十分關鍵。目前常見的數字簽名算法每每須要選取合適的隨機數做爲配置參數,配置參數不合理的使用或泄露都會形成安全漏洞,須要進行安全保護。

數字證書

對於非對稱加密算法和數字簽名來講,很重要的一點就是公鑰的分發。但在傳輸過程當中,公鑰有沒有多是僞造的呢?傳輸過程當中有沒有可能被篡改?一旦公鑰出了問題,則整個創建在其上的安全體系的安全性將不復存在。

數字證書機制: 能夠證實所記錄信息的合法性,好比證實某個公鑰是某個實體(如組織或我的)的,而且確保一旦內容被篡改能被探測出來,從而實現對用戶公鑰的安全分發。

根據保護公鑰的用途,能夠分爲:

  • 加密數字證書:用於保護用於加密信息的公鑰
  • 簽名驗證數字證書:用於保護用於進行解密簽名進行身份驗證的公鑰

通常狀況下,證書須要由證書認證機構來進行簽發和背書

證書規範

通常來講,一個數字證書內容可能包括基本數據(版本、序列號)、所簽名對象信息(簽名算法類型、簽發者信息、有效期、被簽發人、簽發的公開密鑰)、CA的數字簽名,等等。目前使用最普遍的標準爲ITU和ISO聯合制定的X.509的 v3 版本規範
證書的頒發者還須要對證書內容利用本身的私鑰添加簽名,以防止別人對證書內容進行篡改。

證書格式

X.509規範中通常推薦使用PEM格式來存儲證書相關的文件。證書文件的文件名後綴通常爲.crt或.cer,對應私鑰文件的文件名後綴通常爲.key,證書請求文件的文件名後綴爲.csr。有的時候也統一用.pem做爲文件名後綴。此外還有DER格式,是採用二進制對證書進行保存,能夠與PEM格式互相轉換。

證書信任鏈

證書中記錄了大量信息,其中最重要的包括「簽發的公開密鑰」和「CA數字簽名」兩個信息。所以,只要使用CA的公鑰再次對着個證書進行簽名比對,就能證實某個實體的公鑰是不是合法的。

那麼怎麼證實用來驗證對實體證書進行簽名的CA公鑰自身是否合法呢?

  • 能夠經過上層的CA頒發的證書來進行認證
  • 某些根CA能夠經過預先分發證書來實現信任基礎

證書做爲公鑰信任的基礎,對其生命週期進行安全管理十分關鍵。

PKI 體系

在非對稱加密中,公鑰能夠經過證書機制來進行保護,但證書的生成、分發、撤銷等過程並無在X.509規範中進行定義。安全地管理和分發證書能夠遵循PKI(Public Key Infrastructure)體系來完成。PKI體系核心解決的是證書生命週期相關的認證和管理問題。PKI是創建在公私鑰基礎上實現安全可靠傳遞消息和身份確認的一個通用框架,並不表明某個特定的密碼學技術和流程。

PKI 基本組件

PKI至少包括以下核心組件:

  • CA(Certification Authority): 負責證書的頒發和做廢,接收來自RA的請求,是最核心的部分。(主要完成對證書信息的維護)
  • RA(Registration Authority): 對用戶身份進行驗證,校驗數據合法性,負責登記,審覈過了就發給CA
  • 證書數據庫: 存放證書,多采用X.500系列標準格式。能夠配合LDAP目錄服務管理用戶信息

操做流程: 用戶經過RA登記申請證書,提供身份和認證信息等;CA審覈後完成證書的製造,頒發給用戶。用戶若是須要撤銷證書則須要再次向CA發出申請。

證書的簽發

CA對用戶簽發證書其實是對某個用戶公鑰,使用CA的私鑰對其進行簽名。這樣任何人均可以用CA的公鑰對該證書進行合法性驗證。驗證成功則承認該證書中所提供的用戶公鑰內容,實現用戶公鑰的安全分發。

用戶證書的簽發能夠有兩種方式:

  • 由CA直接來生成證書(內含公鑰)和對應的私鑰發給用戶
  • 由用戶本身生成公鑰和私鑰,而後由CA來對公鑰內容進行簽名(這種方式整個過程當中,用戶能夠保持私鑰信息的私密性,不會被其餘方獲知包括CA方)

證書的撤銷

證書超過有效期後會做廢,用戶也能夠主動向CA申請撤銷某證書文件。

CA 沒法強制收回已經頒發出去的數字證書,所以爲了實現證書的做廢,每每還須要維護一個撤銷證書列表,用於記錄已經撤銷的證書序號。(因此第三方驗證某個證書時,第一步就是檢查該證書是否在撤銷列表中,若是存在則沒法驗證經過。若是不在則繼續後續驗證)

Merkle 樹結構

Merkle(默克爾)樹:又叫哈希樹,是一種典型的二叉樹結構,由一個根節點、一組中間節點和一組葉節點組成。區塊鏈出現以前,普遍用於文件系統和P2P系統中。

clipboard.png

主要特色:

  • 最下面的葉節點包含存儲數據或其哈希值
  • 非葉子幾點(包括中間節點和根節點)都是它的兩個孩子節點內容的哈希值

默克爾樹逐層記錄哈希值的特色,讓它具備了一些獨特的性質。例如,底層數據的任何變更,都會傳遞到其父節點,一層層沿着路徑一直到樹根。這意味着樹根的值實際上表明瞭對底層全部數據的「數字摘要」

默克爾樹的應用場景有以下:

  • 快速比較大量數據:對每組數據排序後構建默克爾樹結構。當兩個默克爾樹根相同時,則意味着兩組數據必然相同。不然,必然存在不一樣。(因爲Hash計算的過程能夠十分迅速,預處理能夠在短期內完成。利用默克爾樹結構能帶來巨大的比較性能優點)
  • 快速定位修改: 一旦發現某個節點如Root的數值發生變化,沿着Root->N4->N1,便可快速定位到實際發生改變的數據塊D1
  • 零知識證實: 如何向他人證實擁有某組數據(D0...D3)中包括給定某個內容D0而不暴露其餘任何內容。方法:經過構造如上圖所示的一個默克爾樹,公佈N一、N五、Root。D0擁有者經過驗證生成的Root是否跟提供的值一致,便可很容易檢測D0包括D一、D二、D3的存在。整個過程沒法獲知其餘內容。

布隆過濾器

布隆過濾器: 是一種基於Hash的高效查找結構,可以快速(常數時間內)回答「某個原始是否在一個集合內」的問題。

應用場景:布隆過濾器由於其高效性大量應用於網絡和安全領域,例如信息檢索、垃圾郵件規則、註冊管理等

基於Hash的查找

基於Hash的快速查找算法: Hash能夠將任意內容映射到一個固定長度的字符串,並且不一樣內容映射到相同串的機率很小。所以,可構成以個很好的「內容——》索引」的生成關係。(內容Hash後爲索引經過索引可在數組中快速的查找當前內容)

基於Hash的快速查找算法的缺點:當映射後的值限制在必定範圍(如總數組的大小)內時,會發現 Hash 衝突的機率會變高,並且範 圍越小,衝突機率越大。不少時候,存儲系統的大小又不能無限擴展,這就形成算法效率的降低。爲了提升空間利用率,後來人們基於Hash算法思想設計出了布隆過濾器結構。

更高效的布隆過濾器

布隆過濾器: 採用多個Hash函數來提升空間利用率。對於同一個給定輸入來講,多個Hash函數計算出多個地址,分別在位串的這些地址上標記爲1。進行查找時,進行一樣的計算過程,並查看對應原始,若是都爲1,則說明較大機率是存在該輸入。

優勢:大大提升了空間利用率,可使用較少的空間來表示較大集合的存在關係。

總結: 不管是Hash算法,仍是布隆過濾器,基本思想都是基於內容的編址。Hash函數存在衝突,布隆過濾器也存在衝突。這就形成了兩種方法都存在誤報的狀況,但絕對不會漏報。

同態加密

同態加密

同態加密: 是一種特殊的加密方法,容許對密文進行處理獲得任然是加密的結果。即對密文直接進行處理,跟對明文進行處理後再對處理結果加密,獲得的結果相同。
優勢:同態加密能夠保證明現處理者沒法訪問到數據自身的信息

問題與挑戰

同態加密的兩個應用場景:

  • 同態加密在雲計算和大數據時代意義十分重大。從安全角度講,用戶還不敢將敏感信息直接放到第三方雲上進行處理。若是有了比較實用的同態加密技術,則能夠放心實用各類雲服務,同時各類數據分析過程也不會泄露用戶隱私
  • 對於區塊鏈技術,實用同態加密技術,運行在區塊鏈上的只能合約能夠處理密文,而沒法獲知真實數據,極大地提升了隱私安全性。

目前全同態的加密方案主要包括「基於理想個的方案」、「基於整數上近似GCD問題的方案」、「基於帶擾動學習問題的方案」。已知的同態加密技術每每須要較高的計算時間或存儲成本,相比傳統加密算法的性能和強度還有差距。

函數加密

同態加密保護的是數據自己,而函數加密保護的是處理函數自己,即讓第三方看不處處理過程的前提下,對數據進行處理。

其餘問題

零知識證實

零知識證實: 證實者在不想驗證者提供任何額外信息的前提下,使驗證者相信某個論斷是正確的。

零知識證實至少要知足三個條件:

  • 完整性: 真實的證實可讓驗證者成功驗證
  • 可靠性: 虛假的證實沒法讓驗證者保證經過驗證,但容許存在小几率例外
  • 零知識: 若是獲得證實,沒法從證實過程當中獲知除了所證實信息以外的任何信息

量子密碼學

量子密碼學:隨着量子計算和量子通訊的研究而受到愈來愈多的關注,將會對已有的密碼學安全機制產生較大的影響。

社交工程學

即使存在理論上完美的技術,也不存在完美的系統!
我的理解:系統中有人的組成部分並非堅不可破的,由於人帶有社會屬性,經過社會學攻擊能夠輕易的攻破理論上完美的系統。

總結

clipboard.png

相關文章
相關標籤/搜索