区块链中密码学与安全技术
生活随笔
收集整理的這篇文章主要介紹了
区块链中密码学与安全技术
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
區(qū)塊鏈的定義
- 區(qū)塊鏈的定義,應(yīng)當(dāng)是:區(qū)塊鏈?zhǔn)且环N按照時(shí)間順序?qū)?shù)據(jù)進(jìn)行分布式存儲(chǔ)的塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu),它利用共識機(jī)制進(jìn)行數(shù)據(jù)驗(yàn)證,利用密碼學(xué)進(jìn)行數(shù)據(jù)保護(hù)和用戶安全訪問,利用智能合約來操作數(shù)據(jù),從而成為不可篡改和不可偽造的分布式賬本。所以,分布式存儲(chǔ)、共識機(jī)制、密碼學(xué)原理和智能合約構(gòu)成區(qū)塊鏈的核心技術(shù)內(nèi)容。
區(qū)塊鏈和密碼學(xué)之間的關(guān)系
- 區(qū)塊鏈和密碼學(xué)是相互促進(jìn)發(fā)展的一個(gè)過程,區(qū)塊鏈中大量使用了密碼學(xué)的知識;同樣的,為了滿足區(qū)塊鏈的不同場景,也反向促進(jìn)了密碼學(xué)的進(jìn)一步發(fā)展。
引言
- 本篇會(huì)講述密碼學(xué)在區(qū)塊鏈中的具體的使用,從而理解為什么區(qū)塊鏈可以防止消息被篡改、怎么進(jìn)行數(shù)字身份認(rèn)證。比特幣中是如何通過多重簽名實(shí)現(xiàn)多個(gè)人共同管理某個(gè)賬戶的比特幣交易。
密碼學(xué)分類
- 古典密碼學(xué)主要關(guān)注信息的保密書寫和傳遞,以及與其相對應(yīng)的破譯方法。
- 現(xiàn)代密碼學(xué)不只關(guān)注信息保密問題,還同時(shí)涉及信息完整性驗(yàn)證(消息驗(yàn)證碼)、信息發(fā)布的不可抵賴性(數(shù)字簽名)、以及在分布式計(jì)算中產(chǎn)生的來源于內(nèi)部和外部的攻擊的所有信息安全問題。總而言之,現(xiàn)代密碼學(xué)是互聯(lián)網(wǎng)安全的基石。
密碼學(xué)知識
Hash函數(shù)
- 在有限合理的時(shí)間內(nèi),將任意長度的消息壓縮為固定長度的輸出值,并且是不可逆的。其輸出值稱為哈希值,也稱為散列值。
- Hash函數(shù)常用于實(shí)現(xiàn)數(shù)據(jù)完整性和實(shí)體認(rèn)證,同時(shí)也構(gòu)成多種密碼體制和協(xié)議的安全保障
哈希函數(shù)的評價(jià)標(biāo)準(zhǔn)
- 正向快速:給定明文和Hash算法,在有限時(shí)間和有限資源內(nèi)能計(jì)算得到Hash值;
- 逆向困難:給定(若干)Hash值,在有限時(shí)間內(nèi)很難(基本不可能)逆推出明文;
- 輸入敏感:原始輸入信息發(fā)生任何改變,新產(chǎn)生的Hash值都應(yīng)該出現(xiàn)很大不同;
- 沖突避免:很難找到兩段內(nèi)容不同的明文,使得它們的Hash值一致(發(fā)生碰撞)。
例子
- 如果對于先前的輸入做一點(diǎn)點(diǎn)的更改,輸出的結(jié)果也會(huì)發(fā)生變化
碰撞
- 碰撞是指兩個(gè)不同的消息在同一個(gè)哈希函數(shù)作用下,具有相同的哈希值。哈希函數(shù)的安全性是指在現(xiàn)有的計(jì)算資源(包括時(shí)間、空間、資金等)下,找到一個(gè)碰撞是不可行的。
- 沖突避免有時(shí)候又稱為“抗碰撞性”,分為“弱抗碰撞性”和“強(qiáng)抗碰撞性”。
- 如果給定明文前提下,無法找到與之碰撞的其他明文,則算法具有“弱抗碰撞性”;
- 如果無法找到任意兩個(gè)發(fā)生Hash碰撞的明文,則稱算法具有“強(qiáng)抗碰撞性”。
哈希函數(shù)的種類
- 目前常見的Hash算法包括MD和SHA系列算法。具體分類如下:
MD5(RFC 1321)是Rivest于1991年對MD4的改進(jìn)版本。它對輸入仍以512位進(jìn)行分組,其輸出是128位。MD5比MD4更加安全,但過程更加復(fù)雜,計(jì)算速度要慢一點(diǎn)。MD5已被證明不具備“強(qiáng)抗碰撞性”。
SHA(Secure Hash Algorithm)并非一個(gè)算法,而是一個(gè)Hash函數(shù)族。NIST(National Institute of Standards and Technology)于1993年發(fā)布其首個(gè)實(shí)現(xiàn)。
目前知名的SHA-1算法在1995年面世,它的輸出為長度160位的Hash值,抗窮舉性更好。SHA-1設(shè)計(jì)時(shí)模仿了MD4算法,采用了類似原理。SHA-1已被證明不具備“強(qiáng)抗碰撞性”。
NIST還設(shè)計(jì)出了SHA-224、SHA-256、SHA-384和SHA-512算法(統(tǒng)稱為SHA-2),跟SHA-1算法原理類似。
SHA-3相關(guān)算法也已被提出.
- 目前,MD5和SHA1已經(jīng)被破解,一般推薦至少使用SHA2-256或更安全的算法。
Hash函數(shù)在區(qū)塊鏈中的應(yīng)用
- SHA256和RIPEMD160
- RIPEMD160主要用于生成比特幣地址。
- SHA256是構(gòu)造區(qū)塊鏈所用的主要密碼哈希函數(shù)。
- 在HyperLedger-Fabric區(qū)塊鏈平臺中,Hash函數(shù)主要用于檢測數(shù)據(jù)未經(jīng)授權(quán)的修改,簽名者的身份識別和抗抵賴。
加密解密算法
- 加解密算法是密碼學(xué)的核心技術(shù)。
分類
組成
- 現(xiàn)代加解密系統(tǒng)的典型組件一般包括:加解密算法、加密密鑰、解密密鑰。
- 在加解密系統(tǒng)中,加解密算法自身是固定不變的,并且一般是公開可見的;密鑰則是最關(guān)鍵的信息,需要安全地保存起來,甚至通過特殊硬件進(jìn)行保護(hù)。
- 一般來說,對同一種算法,密鑰需要按照特定算法每次加密前隨機(jī)生成,長度越長,則加密強(qiáng)度越大。加解密的基本過程如下圖所示:
- 加密過程中,通過加密算法和加密密鑰,對明文進(jìn)行加密,獲得密文。
- 解密過程中,通過解密算法和解密密鑰,對密文進(jìn)行解密,獲得明文。
- 根據(jù)加解密過程中所使用的密鑰是否相同,算法可以分為對稱加密(symmetric cryptography,又稱公共密鑰加密,common-key cryptography)和非對稱加密(asymmetric cryptography,又稱公鑰加密,public-key cryptography)。兩種模式適用于不同的需求,恰好形成互補(bǔ)。某些時(shí)候可以組合使用,形成混合加密機(jī)制,比如數(shù)字信封。
安全技術(shù)
消息認(rèn)證碼與數(shù)字簽名
- 消息認(rèn)證碼和數(shù)字簽名技術(shù)通過對消息的摘要進(jìn)行加密,可用于消息防篡改和身份證明問題。
關(guān)于消息驗(yàn)證碼
- 消息認(rèn)證碼全稱是“基于Hash的消息認(rèn)證碼”(Hash-based Message Authentication Code,HMAC)。
基本過程為:對某個(gè)消息利用提前共享的對稱密鑰和Hash算法進(jìn)行加密處理,得到HMAC值。該HMAC值持有方可以證明自己擁有共享的對稱密鑰,并且也可以利用HMAC確保消息內(nèi)容未被篡改。
一般用于證明身份的場景
如Alice、Bob提前共享和HMCA的密鑰和Hash算法,Alice需要知曉對方是否為Bob,可發(fā)送隨機(jī)消息給Bob。Bob收到消息后進(jìn)行計(jì)算,把消息HMAC值返回給Alice,Alice通過檢驗(yàn)收到HMAC值的正確性可以知曉對方是否是Bob。注意這里并沒有考慮中間人攻擊的情況,假定信道是安全的。
關(guān)于數(shù)字簽名
- 數(shù)字簽名基于非對稱加密,既可以用于證實(shí)某數(shù)字內(nèi)容的完整性,又同時(shí)可以確認(rèn)來源(或不可抵賴,Non-Repudiation)。
簽名過程:發(fā)方將原文用哈希算法求得數(shù)字摘要,用簽名私鑰對數(shù)字摘要加密得數(shù)字簽名,發(fā)方將原文與數(shù)字簽名一起發(fā)送給接受方。
(Q:?為什么要將原文進(jìn)行數(shù)字摘要之后,利用私鑰和摘要,對原文進(jìn)行簽名,而不是直接用對原文進(jìn)行簽名?
A:原因有二:
一是因?yàn)榉菍ΨQ加密算法的加密速度,遠(yuǎn)小于對稱加密速度。直接對原文進(jìn)行簽名,消耗較大;而是因?yàn)榉菍ΨQ加密,對加密信息的長度,有著嚴(yán)格的要求,只能用于少量數(shù)據(jù)的加密。比如,RSA加密算法,要求加密的數(shù)據(jù)不得大于53個(gè)字節(jié)。
)
驗(yàn)證過程:?收方驗(yàn)證簽名,即用發(fā)方公鑰解密數(shù)字簽名,得出數(shù)字摘要;收方將原文采用同樣哈希算法又得一新的數(shù)字摘要,將兩個(gè)數(shù)字摘要進(jìn)行比較,如果二者匹配,說明經(jīng)數(shù)字簽名的電子文件傳輸成功。
用于防止消息篡改的場景
Alice通過信道發(fā)給Bob一個(gè)文件(一份信息),Bob如何獲知所收到的文件即為Alice發(fā)出的原始版本?
Alice可以先對文件內(nèi)容進(jìn)行摘要,然后用自己的私鑰對摘要進(jìn)行加密(簽名),之后同時(shí)將文件和簽名都發(fā)給Bob。
Bob收到文件和簽名后,用Alice的公鑰來解密簽名,得到數(shù)字摘要,與收到文件進(jìn)行摘要后的結(jié)果進(jìn)行比對。
如果一致,說明該文件確實(shí)是Alice發(fā)過來的(別人無法擁有Alice的私鑰),并且文件內(nèi)容沒有被修改過(摘要結(jié)果一致)
數(shù)字簽名的目的
- 數(shù)字簽名可以證實(shí)某數(shù)字內(nèi)容的完整性和確認(rèn)其來源,也就是不可抵賴性。理論上所有的非對稱加密算法都可以用來實(shí)現(xiàn)數(shù)字簽名,常用算法包括 DSA(Digital Signature Algorithm,基于 ElGamal 算法)和 ECSDA(Elliptic Curve Digital Signature Algorithm,基于橢圓曲線算法)等。
數(shù)字簽名與消息驗(yàn)證碼的區(qū)別
- 消息驗(yàn)證碼是基于對稱加密,可以用于對消息完整性(integrity)進(jìn)行保護(hù)。通信雙方需要提前共享的對稱密鑰和Hash算法。
- 數(shù)字簽名是基于非對稱加密,MAC不僅能夠保證完整性,還能夠保證真實(shí)性。雙方不需要共享密鑰,私鑰僅僅需要被一方掌握。
特殊的數(shù)字簽名算法
盲簽名
- 簽名者需要在無法看到原始內(nèi)容的前提下對信息進(jìn)行簽名。實(shí)現(xiàn)對所簽名內(nèi)容的保護(hù),防止簽名者看到原始內(nèi)容;同時(shí)實(shí)現(xiàn)防止追蹤,簽名者無法將簽名內(nèi)容和簽名結(jié)果進(jìn)行對應(yīng)。
多重簽名
- 當(dāng) x 個(gè)簽名者中,收集到至少 y 個(gè)(x >= y >= 1)的簽名,即認(rèn)為合法。x 是提供的公鑰個(gè)數(shù),y 是需要匹配公鑰的最少的簽名個(gè)數(shù)。它可以有效地被應(yīng)用在多人投票共同決策的場景中。比特幣交易中就支持多重簽名,可以實(shí)現(xiàn)多個(gè)人共同管理某個(gè)賬戶的比特幣交易。
群簽名
- 群組內(nèi)某一個(gè)成員可以代表群組進(jìn)行匿名簽名。簽名可以驗(yàn)證來自于該群組,卻無法準(zhǔn)確追蹤到簽名的是哪個(gè)成員。同樣存在一些問題,就是群簽名需要存在一個(gè)群管理員來添加新的群成員,因此存在群管理員可能追蹤到簽名成員身份的風(fēng)險(xiǎn)。
環(huán)簽名
- 簽名者首先選定一個(gè)包括簽名者自身的臨時(shí)簽名者集合。用自己的私鑰和簽名集合中其他人的公鑰就可以獨(dú)立的產(chǎn)生簽名,而無需他人的幫助。簽名者集合中的其他成員可能并不知道自己被包含在最終的簽名中。環(huán)簽名的主要用途在保護(hù)匿名性,屬于一種簡化的群簽名。
數(shù)字證書
- 解決的問題:公鑰可能被篡改的危機(jī)
- 對于非對稱加密算法和數(shù)字簽名來說,很重要的一點(diǎn)就是公鑰的分發(fā)。
- 理論上任何人可以公開獲取到對方的公鑰。然而這個(gè)公鑰有沒有可能是偽造的呢?傳輸過程中有沒有可能被篡改掉呢?一旦公鑰自身出了問題,則整個(gè)建立在其上的安全體系的安全性將不復(fù)存在。數(shù)字證書機(jī)制正是為了解決這個(gè)問題,它就像日常生活中的一個(gè)證書一樣,可以證明所記錄信息的合法性。
- 比如證明某個(gè)公鑰是某個(gè)實(shí)體(如組織或個(gè)人)的,并且確保一旦內(nèi)容被篡改,就能被探測出來,從而實(shí)現(xiàn)對用戶公鑰的安全分發(fā)。
分類
- 加密數(shù)字證書:用于保護(hù)用于加密信息的公鑰。
- 簽名驗(yàn)證數(shù)字證書:進(jìn)行解密簽名進(jìn)行身份驗(yàn)證的公鑰。
- 兩種類型的公鑰也可以同時(shí)放在同一證書中。同時(shí)證書需要由證書認(rèn)證機(jī)構(gòu)CA來進(jìn)行簽發(fā)和背書。權(quán)威的商業(yè)證書認(rèn)證機(jī)構(gòu)包括 DigiCert、GlobalSign等。用戶也可以自行搭建CA 系統(tǒng),在私有網(wǎng)絡(luò)中進(jìn)行使用。
- 證書作為公鑰信任的基礎(chǔ)。怎么用證書來實(shí)現(xiàn)公鑰的安全分發(fā)呢?在HyperLedger-Fabric中,使用的是PKI體系來保證的。
- 一個(gè)數(shù)字證書內(nèi)容可能包括證書域(證書的版本、序列號、簽名算法類型、簽發(fā)者信息、有效期、被簽發(fā)主體、簽發(fā)的公開密鑰)、CA 對證書的簽名算法和簽名值等。證書的頒發(fā)者還需要對證書內(nèi)容利用自己的私鑰進(jìn)行簽名,以防止他人篡改證書內(nèi)容。
PKI體系
-
在非對稱加密中,公鑰可以通過證書機(jī)制來進(jìn)行保護(hù),但證書的生成、分發(fā)、撤銷等過程并沒有在X.509規(guī)范中進(jìn)行定義。在實(shí)際工程中,安全地管理和分發(fā)證書可以遵循PKI(Public Key Infrastructure)體系來完成。PKI體系核心解決的是證書生命周期相關(guān)的認(rèn)證和管理問題,在現(xiàn)代密碼學(xué)應(yīng)用領(lǐng)域處于十分基礎(chǔ)和重要的地位。在HyperLedger-Fabric區(qū)塊鏈系統(tǒng)中,就是用PKI體系來對證書進(jìn)行管理的。
- PKI的全稱是Public Key Infrastructure公鑰基礎(chǔ)設(shè)施,是建立在公私鑰基礎(chǔ)上實(shí)現(xiàn)安全可靠傳遞消息和身份確認(rèn)的一個(gè)通用框架。包含3個(gè)核心組件:
- CA 是最核心的組件,負(fù)責(zé)完成對證書信息的維護(hù)。通常的操作流程為:
- 用戶通過 RA 登記申請證書,提供身份和認(rèn)證信息等 → CA 審核后完成證書的制造,頒發(fā)給用戶 →?用戶如果需要撤銷證書則需要再次向 CA 發(fā)出申請。
證書的簽發(fā)
- CA對用戶簽發(fā)證書實(shí)際上是對某個(gè)用戶公鑰,使用CA的私鑰對其進(jìn)行簽名。這樣任何人都可以用CA的公鑰對該證書進(jìn)行合法性驗(yàn)證。驗(yàn)證成功則認(rèn)可該證書中所提供的用戶公鑰內(nèi)容,實(shí)現(xiàn)用戶公鑰的安全分發(fā)。
- 用戶證書的簽發(fā)可以有兩種方式
2,另一種是由用戶自己生成公鑰和私鑰,然后由CA來對公鑰內(nèi)容進(jìn)行簽名。
- 后者情況下,用戶一般會(huì)首先自行生成一個(gè)私鑰和證書申請文件(Certificate Signing Request,即csr文件),該文件中包括了用戶對應(yīng)的公鑰和一些基本信息,如通用名(common name,即cn)、組織信息、地理位置等。
- CA只需要對證書請求文件進(jìn)行簽名,生成證書文件,頒發(fā)給用戶即可。整個(gè)過程中,用戶可以保持私鑰信息的私密性,不會(huì)被其他方獲知(包括CA方)。
證書的撤銷
- 證書超出有效期后會(huì)作廢,用戶也可以主動(dòng)向CA申請撤銷某證書文件。
- 由于CA無法強(qiáng)制收回已經(jīng)頒發(fā)出去的數(shù)字證書,因此為了實(shí)現(xiàn)證書的作廢,往往還需要維護(hù)一個(gè)撤銷證書列表(Certificate Revocation List,CRL),用于記錄已經(jīng)撤銷的證書序號。
- 因此,通常情況下,當(dāng)?shù)谌綄δ硞€(gè)證書進(jìn)行驗(yàn)證時(shí),需要首先檢查該證書是否在撤銷列表中。如果存在,則該證書無法通過驗(yàn)證。如果不在,則繼續(xù)進(jìn)行后續(xù)的證書驗(yàn)證過程。
?
Merkle樹結(jié)構(gòu)?
- Merkle(默克爾)樹,又叫哈希樹,是一種典型的二叉樹結(jié)構(gòu),由一個(gè)根節(jié)點(diǎn)、一組中間節(jié)點(diǎn)和一組葉節(jié)點(diǎn)組成。在區(qū)塊鏈系統(tǒng)出現(xiàn)之前,廣泛用于文件系統(tǒng)和P2P系統(tǒng)中。其基本結(jié)構(gòu)如下圖所示?
- 其主要特點(diǎn)為:
· 非葉子節(jié)點(diǎn)(包括中間節(jié)點(diǎn)和根節(jié)點(diǎn))都是它的兩個(gè)孩子節(jié)點(diǎn)內(nèi)容的哈希值。
- 進(jìn)一步地,默克爾樹可以推廣到多叉樹的情形,此時(shí)非葉子節(jié)點(diǎn)的內(nèi)容為它所有的孩子節(jié)點(diǎn)內(nèi)容的哈希值。
- 默克爾樹逐層記錄哈希值的特點(diǎn),讓它具有了一些獨(dú)特的性質(zhì)。例如,底層數(shù)據(jù)的任何變動(dòng),都會(huì)傳遞到其父節(jié)點(diǎn),一層層沿著路徑一直到樹根。這意味樹根的值實(shí)際上代表了對底層所有數(shù)據(jù)的“數(shù)字摘要”。
Merkle樹應(yīng)用場景
1.快速比較大量數(shù)據(jù)
- 對每組數(shù)據(jù)排序后構(gòu)建默克爾樹結(jié)構(gòu)。當(dāng)兩個(gè)默克爾樹根相同時(shí),則意味著兩組數(shù)據(jù)必然相同。否則,必然存在不同。由于Hash計(jì)算的過程可以十分快速,預(yù)處理可以在短時(shí)間內(nèi)完成。利用默克爾樹結(jié)構(gòu)能帶來巨大的比較性能優(yōu)勢。
2.快速定位修改
- 例如上圖Merkle樹結(jié)構(gòu)圖中。如果D1中數(shù)據(jù)被修改,會(huì)影響到N1、N4和Root。因此,一旦發(fā)現(xiàn)某個(gè)節(jié)點(diǎn)如Root的數(shù)值發(fā)生變化,沿著Root→N4→N1,最多通過O(lgn)時(shí)間即可快速定位到實(shí)際發(fā)生改變的數(shù)據(jù)塊D1。
?
布隆過濾器
- 布隆過濾器是一種基于 Hash 的高效查找結(jié)構(gòu),能夠快速判斷某個(gè)元素是否在一個(gè)集合內(nèi)。
- 首先回顧一下基于Hash的快速查找,由于Hash算法具有一一對應(yīng)的特點(diǎn),即一個(gè)內(nèi)容對應(yīng)一個(gè)Hash值,而Hash值最終是可以轉(zhuǎn)化為二進(jìn)制編碼,這就天然的構(gòu)成了一個(gè) “ 內(nèi)容 - 索引 ” 的一個(gè)結(jié)構(gòu)。
- 假如給定一個(gè)內(nèi)容和存儲(chǔ)數(shù)組,通過構(gòu)造Hash函數(shù),使Hash值總量不超過數(shù)組的大小,就可以實(shí)現(xiàn)快速的基于內(nèi)容的查找。如 “孤獨(dú)寂寞冷” 的 Hash 值如果是 “1000”,則存放到數(shù)組的第 1000 個(gè)單元上去。如果需要快速查找任意內(nèi)容,如 “孤獨(dú)寂寞冷” 字符串是否在存儲(chǔ)系統(tǒng)中,只需要計(jì)算 Hash 值,并用 Hash 值查看系統(tǒng)中對應(yīng)元素即可。
- 布隆過濾器采用了多個(gè) Hash 函數(shù)來提高空間利用率。對同一個(gè)給定輸入來說,多個(gè) Hash 函數(shù)計(jì)算出多個(gè)地址,分別在對應(yīng)的這些地址上標(biāo)記為 1。進(jìn)行查找時(shí),進(jìn)行同樣的計(jì)算過程,并查看對應(yīng)元素,如果都為 1,則說明較大概率是存在該輸入。
- 布隆過濾器相對單個(gè) Hash 算法查找,大大提高了空間利用率,可以使用較少的空間來表示較大集合的存在關(guān)系。上面講的Hash查找和布隆過濾器,基本思想都是基于內(nèi)容的編址。
- 下圖是一個(gè)布隆過濾器的示意圖
- 布隆過濾器(Bloom Filter)的核心實(shí)現(xiàn)是一個(gè)超大的位數(shù)組和幾個(gè)哈希函數(shù)。假設(shè)位數(shù)組的長度為m,哈希函數(shù)的個(gè)數(shù)為k:
- 以上圖為例,具體的操作流程:
對于集合里面的每一個(gè)元素,將元素依次通過3個(gè)哈希函數(shù)進(jìn)行映射,每次映射都會(huì)產(chǎn)生一個(gè)哈希值,這個(gè)值對應(yīng)位數(shù)組上面的一個(gè)點(diǎn),然后將位數(shù)組對應(yīng)的位置標(biāo)記為1。
查詢W元素是否存在集合中的時(shí)候,同樣的方法將W通過哈希映射到位數(shù)組上的3個(gè)點(diǎn)。如果3個(gè)點(diǎn)的其中有一個(gè)點(diǎn)不為1,則可以判斷該元素一定不存在集合中。反之,如果3個(gè)點(diǎn)都為1,則該元素可能存在集合中。
可以從圖中可以看到:假設(shè)某個(gè)元素通過映射對應(yīng)下標(biāo)為4,5,6這3個(gè)點(diǎn)。雖然這3個(gè)點(diǎn)都為1,但是很明顯這3個(gè)點(diǎn)是不同元素經(jīng)過哈希得到的位置,因此這種情況說明元素雖然不在集合中,也可能對應(yīng)的都是1,這是誤判率存在的原因。
- 布隆過濾器因?yàn)槠涓咝源罅繎?yīng)用于網(wǎng)絡(luò)和安全領(lǐng)域,例如信息檢索(BigTable和HBase)、垃圾郵件規(guī)則、注冊管理等。
同態(tài)加密
介紹
- 同態(tài)加密是一種加密形式,它允許人們對密文進(jìn)行特定的代數(shù)運(yùn)算得到仍然是加密的結(jié)果,將運(yùn)算后的數(shù)據(jù)進(jìn)行解密,其解密所得到的結(jié)果與對明文進(jìn)行同樣的運(yùn)算結(jié)果一樣。
- 傳統(tǒng)的加密方案關(guān)注的都是數(shù)據(jù)存儲(chǔ)安全。即,發(fā)送者要給接收者發(fā)送加密的東西,需要對數(shù)據(jù)進(jìn)行加密后再發(fā)送。沒有密鑰的接收者,不可能從加密結(jié)果中得到有關(guān)原始數(shù)據(jù)的任何信息。只有擁有密鑰的接收者才能夠正確解密,得到原始的內(nèi)容。需要注意到,這個(gè)過程中,用戶是不能對加密結(jié)果做任何操作的,只能進(jìn)行存儲(chǔ)、傳輸。對加密結(jié)果做任何操作,都將會(huì)導(dǎo)致錯(cuò)誤的解密,甚至解密失敗!
- 同態(tài)加密提供了一種對加密數(shù)據(jù)進(jìn)行處理的功能。也就是說,其他人可以對加密數(shù)據(jù)進(jìn)行處理,但是處理過程不會(huì)泄露任何原始內(nèi)容。同時(shí),擁有密鑰的用戶對處理過的數(shù)據(jù)進(jìn)行解密后,得到的正好是處理后的結(jié)果。
- 區(qū)塊鏈中的應(yīng)用:使用同態(tài)加密技術(shù),運(yùn)行在區(qū)塊鏈上的智能合約可以處理密文,而無法獲知真實(shí)數(shù)據(jù),極大的提高了隱私安全性。
例子
A和B兩個(gè)用戶。A需要把自己的數(shù)據(jù)給B處理。有兩種方式:
方式一:A把自己的數(shù)據(jù)進(jìn)行加密,發(fā)送給B。B將數(shù)據(jù)解密后,對數(shù)據(jù)進(jìn)行處理,然后得到目標(biāo)結(jié)果Result。最后把處理后的結(jié)果發(fā)送給A。
方式二: A把自己的數(shù)據(jù)進(jìn)行加密,發(fā)送給B。B直接對加密的數(shù)據(jù),進(jìn)行處理,然后得到處理的結(jié)果Result*.A收到Result*之后,通過私鑰解密Result*,最終得到Result。
方式二用到的方法,就是同態(tài)加密。
在方式二的方式中,B完成了對A數(shù)據(jù)的處理目的,并且保證了A用戶的隱私!
補(bǔ)充
- 什么是同態(tài)呢?它來自代數(shù)領(lǐng)域,包括四種類型:加法同態(tài)、乘法同態(tài)、減法同態(tài)和除法同態(tài)。同時(shí)滿足加法同態(tài)和乘法同態(tài),則意味著是代數(shù)同態(tài),即全同態(tài)。同時(shí)滿足四種同態(tài)性,則被稱為算數(shù)同態(tài)。
- 在計(jì)算機(jī)中如果實(shí)現(xiàn)了全同態(tài)意味著對于所有處理都可以實(shí)現(xiàn)同態(tài)性。只能實(shí)現(xiàn)部分特定操作的同態(tài)性,被稱為特定同態(tài)。
意義
- 換言之,這項(xiàng)技術(shù)令人們可以在加密的數(shù)據(jù)中進(jìn)行諸如檢索、比較等操作,得出正確的結(jié)果,而在整個(gè)處理過程中無需對數(shù)據(jù)進(jìn)行解密。其意義在于,真正從根本上解決將數(shù)據(jù)及其操作委托給第三方時(shí)的保密問題,例如云計(jì)算。
問題
- 雖然同態(tài)加密的優(yōu)勢很明顯,并且已經(jīng)實(shí)現(xiàn),但是存在的問題就是需要較高的計(jì)算時(shí)間或存儲(chǔ)成本,相比傳統(tǒng)加密算法的性能和強(qiáng)度還有差距。困難與機(jī)會(huì)同在。
參考鏈接
- 密碼學(xué)在區(qū)塊鏈中的應(yīng)用
- 區(qū)塊鏈中的密碼學(xué)與安全技術(shù)
?
總結(jié)
以上是生活随笔為你收集整理的区块链中密码学与安全技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将一个Excel文件中的sheet移
- 下一篇: netty开发教程(一)