摘要:非對稱加密算法的安全性往往需要基于數學問題來保障,目前主要有基于大數質因子分解離散對數橢圓曲線等經典數學難題進行保護。消息認證碼基于對稱加密,可以用于對消息完整性進行保護。
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結果和“鹽”分別存放在不同的地方,這樣只要不是兩者同時泄露,攻擊者就很難破解了。
加解密算法加解密算法是密碼學的核心技術,可分為兩大基本類型:
加解密系統基本組成現代加解密系統的典型組件一般包括: 加解密算法、加密密鑰、解密密鑰。其中,加解密算法自身是固定不變的,并且一般是公開可見的。密鑰則是關鍵的信息,需要安全地保存起來,甚至通過特殊硬件進行保護。對同一種算法,密鑰需要按照特定算法每次加密前隨機生成,長度越長,則加密強度越大。加解密基本過程如下:
根據加解密過程中使用的密鑰是否相同,算法可以分為對稱加密和非對稱加密,兩種模式適用于不同的需求,恰好形成互補,某些時候可以組合使用,形成混合加密機制。
密碼學實現的安全往往是通過算法所依賴的數學問題來提供,而并非通過對算法的實現過程進行保密。
對稱加密算法對稱加密算法,加密和解密過程的密鑰是相同的。
優點:加解密效率(速度快,空間占用小)和加密強度都很高。
缺點:參與方都需要提前持有密鑰,一旦有人泄露則安全性被破壞,另外如何在不安全通道中提前分發密鑰也是個問題,需要借助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 為典型應用案例:
該過程的主要功能:在防止中間人竊聽和篡改的前提下完成會話密鑰的協商。
離散對數與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系統中。
主要特點:
最下面的葉節點包含存儲數據或其哈希值
非葉子幾點(包括中間節點和根節點)都是它的兩個孩子節點內容的哈希值
默克爾樹逐層記錄哈希值的特點,讓它具有了一些獨特的性質。例如,底層數據的任何變動,都會傳遞到其父節點,一層層沿著路徑一直到樹根。這意味著樹根的值實際上代表了對底層所有數據的“數字摘要”
默克爾樹的應用場景有如下:
快速比較大量數據:對每組數據排序后構建默克爾樹結構。當兩個默克爾樹根相同時,則意味著兩組數據必然相同。否則,必然存在不同。(由于Hash計算的過程可以十分迅速,預處理可以在短時間內完成。利用默克爾樹結構能帶來巨大的比較性能優勢)
快速定位修改: 一旦發現某個節點如Root的數值發生變化,沿著Root->N4->N1,即可快速定位到實際發生改變的數據塊D1
零知識證明: 如何向他人證明擁有某組數據(D0...D3)中包括給定某個內容D0而不暴露其他任何內容。方法:通過構造如上圖所示的一個默克爾樹,公布N1、N5、Root。D0擁有者通過驗證生成的Root是否跟提供的值一致,即可很容易檢測D0包括D1、D2、D3的存在。整個過程無法獲知其他內容。
布隆過濾器布隆過濾器: 是一種基于Hash的高效查找結構,能夠快速(常數時間內)回答“某個原始是否在一個集合內”的問題。
應用場景:布隆過濾器因為其高效性大量應用于網絡和安全領域,例如信息檢索、垃圾郵件規則、注冊管理等
基于Hash的查找基于Hash的快速查找算法: Hash可以將任意內容映射到一個固定長度的字符串,而且不同內容映射到相同串的概率很小。因此,可構成以個很好的“內容——》索引”的生成關系。(內容Hash后為索引通過索引可在數組中快速的查找當前內容)
基于Hash的快速查找算法的缺點:當映射后的值限制在一定范圍(如總數組的大小)內時,會發現 Hash 沖突的概率會變高,而且范 圍越小,沖突概率越大。很多時候,存儲系統的大小又不能無限擴展,這就造成算法效率的下降。為了提高空間利用率,后來人們基于Hash算法思想設計出了布隆過濾器結構。
更高效的布隆過濾器布隆過濾器: 采用多個Hash函數來提高空間利用率。對于同一個給定輸入來說,多個Hash函數計算出多個地址,分別在位串的這些地址上標記為1。進行查找時,進行同樣的計算過程,并查看對應原始,如果都為1,則說明較大概率是存在該輸入。
優點:大大提高了空間利用率,可以使用較少的空間來表示較大集合的存在關系。
總結: 無論是Hash算法,還是布隆過濾器,基本思想都是基于內容的編址。Hash函數存在沖突,布隆過濾器也存在沖突。這就造成了兩種方法都存在誤報的情況,但絕對不會漏報。
同態加密 同態加密同態加密: 是一種特殊的加密方法,允許對密文進行處理得到任然是加密的結果。即對密文直接進行處理,跟對明文進行處理后再對處理結果加密,得到的結果相同。
優點:同態加密可以保證實現處理者無法訪問到數據自身的信息
同態加密的兩個應用場景:
同態加密在云計算和大數據時代意義十分重大。從安全角度講,用戶還不敢將敏感信息直接放到第三方云上進行處理。如果有了比較實用的同態加密技術,則可以放心實用各種云服務,同時各種數據分析過程也不會泄露用戶隱私
對于區塊鏈技術,實用同態加密技術,運行在區塊鏈上的只能合約可以處理密文,而無法獲知真實數據,極大地提高了隱私安全性。
目前全同態的加密方案主要包括“基于理想個的方案”、“基于整數上近似GCD問題的方案”、“基于帶擾動學習問題的方案”。已知的同態加密技術往往需要較高的計算時間或存儲成本,相比傳統加密算法的性能和強度還有差距。
函數加密同態加密保護的是數據本身,而函數加密保護的是處理函數本身,即讓第三方看不到處理過程的前提下,對數據進行處理。
其他問題 零知識證明零知識證明: 證明者在不想驗證者提供任何額外信息的前提下,使驗證者相信某個論斷是正確的。
零知識證明至少要滿足三個條件:
完整性: 真實的證明可以讓驗證者成功驗證
可靠性: 虛假的證明無法讓驗證者保證通過驗證,但允許存在小概率例外
零知識: 如果得到證明,無法從證明過程中獲知除了所證明信息之外的任何信息
量子密碼學量子密碼學:隨著量子計算和量子通信的研究而受到越來越多的關注,將會對已有的密碼學安全機制產生較大的影響。
社交工程學即便存在理論上完美的技術,也不存在完美的系統!
個人理解:系統中有人的組成部分并不是堅不可破的,因為人帶有社會屬性,通過社會學攻擊可以輕易的攻破理論上完美的系統。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24127.html
摘要:區塊鏈最早出現在比特幣開元項目中。了不起的社會學實驗比特幣的誕生年化名中本聰的人發布比特幣白皮書,并在年公開了實現代碼比特幣的意義和價值比特幣首次真正從實踐意義上實現了安全可靠的去中心化數字貨幣機制。 區塊鏈最早出現在比特幣開元項目中。比特幣在誕生和發展過程中,借鑒了來自數字貨幣、密碼學、博弈論、分布式系統、控制論等多個領域的技術成果,作為核心支撐結構的區塊鏈技術大放異彩。 從實體貨幣...
摘要:關鍵步驟完成對一批交易的共識新區塊添加到區塊鏈結構上,被大家認可,確保未來無法被篡改比特幣的這種基于算力尋找串的共識機制稱為工作量證明。 定義與原理 定義 維基上給出定義: 一種分布式數據庫技術,通過維護數據塊的鏈式結構,可以維持增長的、不可篡改的數據記錄 基本原理 區塊鏈包括三個概念: 交易: 一次對賬本的操作,導致賬本狀態的一次改變,如添加一條轉賬記錄 區塊: 記錄一段時間內發生...
摘要:側鏈側鏈協議允許資產在比特幣區塊鏈和其他區塊鏈之間互轉。實現了比特幣區塊鏈的擴展證明在比特幣系統中驗證交易時,涉及交易合法性檢查雙重花費檢查腳本檢查等。 比特幣項目簡介 比特幣是基于區塊鏈技術的一種數字貨幣實現,比特幣網絡是歷史上首個經過大規模、長時間檢查的數字貨幣系統 比特幣網絡在功能上具有如下特點: 去中心化: 意味著沒有任何獨立個體可以對網絡中的交易進行破壞,任何交易請求都需要...
摘要:基于以太坊項目,以太坊團隊目前運營了一個公開的區塊鏈平臺以太坊網絡。主要特點以太坊區塊鏈底層也是一個類似比特幣網絡的網絡平臺,智能合約運行在網絡中的以太坊虛擬機里。以太坊采用交易作為執行操作的最小單位。 以太坊將比特幣針對數字交易的功能進一步進行了拓展,面向更為復雜和靈活的應用場景,支持了智能合約這一重要特性。 以太坊項目簡介 以太坊:項目最初的目標是打造以個智能合約的平臺,該平臺支持...
摘要:區塊鏈系統首先是一個分布式系統,分布式系統的核心問題包括一致性共識一致性問題一致性問題是分布式領域最為基礎也是最重要的問題。算法與算法問題是指分布式系統中存在故障,但不存在惡意節點的場景即可能消息丟失或重復,但無錯誤消息下的共識達成問題。 區塊鏈系統首先是一個分布式系統,分布式系統的核心問題包括一致性、共識 一致性問題 一致性問題是分布式領域最為基礎也是最重要的問題。如果分布式系統能實...
閱讀 2562·2021-09-02 15:40
閱讀 1566·2019-08-30 15:54
閱讀 1080·2019-08-30 12:48
閱讀 3398·2019-08-29 17:23
閱讀 1046·2019-08-28 18:04
閱讀 3664·2019-08-26 13:54
閱讀 606·2019-08-26 11:40
閱讀 2391·2019-08-26 10:15