姚 影 ,顏 擁 ,郭少勇 ,熊 翱 ,張 旺
(1.國網(wǎng)浙江省電力有限公司電力科學(xué)研究院,浙江 杭州 310014;2.北京郵電大學(xué),北京 100876)
傳統(tǒng)互聯(lián)網(wǎng)業(yè)務(wù)的身份認(rèn)證技術(shù)主要以用戶名密碼為主[1],但隨著互聯(lián)網(wǎng)業(yè)務(wù)越來越多,不同的業(yè)務(wù)需要重復(fù)注冊不同的賬號,并且通常同一個用戶不同賬號之間的密碼存在關(guān)聯(lián)性,容易造成密碼泄露的風(fēng)險[2]。同時,傳統(tǒng)認(rèn)證系統(tǒng)是中心化[3]的,用戶隱私信息存放在企業(yè)系統(tǒng)中。但是身份認(rèn)證信息存儲方式較為簡單,相關(guān)系統(tǒng)易受攻擊、用戶隱私身份信息泄露的隱患較大。并且傳統(tǒng)的中心化認(rèn)證系統(tǒng)是業(yè)務(wù)系統(tǒng)的唯一認(rèn)證接口,如果其遭受到有效攻擊,那么系統(tǒng)存在極大的崩潰風(fēng)險[4],因此為了解決用戶隱私信息安全、維護(hù)業(yè)務(wù)系統(tǒng)的穩(wěn)定性,構(gòu)造分布式的身份認(rèn)證系統(tǒng)是現(xiàn)在亟待解決的問題。
區(qū)塊鏈技術(shù)[5]發(fā)展于比特幣中,具有分布式去中心化、數(shù)據(jù)可追溯、不可篡改的優(yōu)點。因為其分布式去中心化的特性,如果想要有效攻擊區(qū)塊鏈網(wǎng)絡(luò)的話,需要同時攻克其不同節(jié)點[6],因此其比中心化網(wǎng)絡(luò)更加穩(wěn)定可靠;區(qū)塊鏈的數(shù)據(jù)可追溯不可篡改[7]的特點,使得無人能夠修改區(qū)塊鏈上的數(shù)據(jù),因此區(qū)塊鏈網(wǎng)絡(luò)下的不同節(jié)點之間能夠相互信任彼此。區(qū)塊鏈的高穩(wěn)定性和信任傳遞的能力為身份認(rèn)證技術(shù)提供了新的思路[8]。
聯(lián)盟鏈作為區(qū)塊鏈的一種是由多個機構(gòu)共同參與管理的,與公有鏈訪問權(quán)限全公開不同的是,只有這些機構(gòu)擁有聯(lián)盟鏈的寫入與訪問權(quán)限[9]。由于聯(lián)盟鏈弱化了網(wǎng)絡(luò)復(fù)雜性,可以使用更松散的共識機制,因此共識效率比公有鏈高很多同時具有去中心化的優(yōu)勢[10],具有很大的實用價值。
本文針對傳統(tǒng)身份認(rèn)證所存在的重復(fù)認(rèn)證、身份隱私不安全、單一系統(tǒng)易受攻擊等痛點,結(jié)合聯(lián)盟鏈的優(yōu)勢,構(gòu)建出一套基于聯(lián)盟鏈的身份認(rèn)證方法。并為了提高系統(tǒng)的認(rèn)證效率,改進(jìn)了分布式身份認(rèn)證方法中聯(lián)盟鏈的共識算法[11]。
為了解決傳統(tǒng)身份認(rèn)證中存在的不同問題,本文利用區(qū)塊鏈技術(shù)構(gòu)建分布式身份認(rèn)證方案[12]?;趨^(qū)塊鏈的分布式身份認(rèn)證架構(gòu)包括四個部分:可信授權(quán)中心、聯(lián)盟鏈網(wǎng)絡(luò)、業(yè)務(wù)系統(tǒng)和用戶,其結(jié)構(gòu)如圖1 所示。在本系統(tǒng)中,用戶通過提交自身身份信息至業(yè)務(wù)的身份認(rèn)證系統(tǒng),由業(yè)務(wù)系統(tǒng)將用戶的身份信息加密上鏈,完成用戶身份的注冊;當(dāng)用戶訪問業(yè)務(wù)系統(tǒng)時,業(yè)務(wù)系統(tǒng)從區(qū)塊鏈節(jié)點上獲取相應(yīng)用戶注冊信息,與用戶認(rèn)證信息進(jìn)行對比驗證,完成用戶認(rèn)證功能。
圖1 基于聯(lián)盟鏈的分布式身份認(rèn)證架構(gòu)
分布式身份認(rèn)證架構(gòu)各個部分的功能如下:
(1)可信授權(quán)中心:負(fù)責(zé)為各業(yè)務(wù)系統(tǒng)和用戶頒發(fā)數(shù)字證書。
(2)區(qū)塊鏈網(wǎng)絡(luò):每個區(qū)塊鏈節(jié)點由區(qū)塊鏈中的一個企業(yè)維護(hù),提供用戶實體身份信息上鏈和查詢等功能。
(3)業(yè)務(wù)系統(tǒng):提供各類業(yè)務(wù)服務(wù)的不同應(yīng)用系統(tǒng),并且對訪問系統(tǒng)的用戶進(jìn)行注冊和認(rèn)證功能。
(4)用戶:訪問業(yè)務(wù)系統(tǒng)的人,身份認(rèn)證系統(tǒng)的使用者。
在本方案設(shè)計的認(rèn)證系統(tǒng)中,用戶的注冊信息通過可信信道送到區(qū)塊鏈網(wǎng)絡(luò)中,并廣播共識到所有區(qū)塊鏈結(jié)點中,區(qū)塊鏈網(wǎng)絡(luò)中的任意服務(wù)節(jié)點均可獲取用戶的注冊身份,從而能夠?qū)崿F(xiàn)對用戶單點注冊多點認(rèn)證的功能,省去了重復(fù)注冊用戶賬號密碼的麻煩。用戶認(rèn)證信息包含以下幾種數(shù)據(jù),具體見表1。
表1 身份信息數(shù)據(jù)說明
1.2.1 注冊身份流程
用戶注冊流程如下:
(1)用戶U 在本地根據(jù)ECC 秘鑰生成算法生成自己的公私鑰對(UPK,USK),其中公鑰為UPK,私鑰為USK。
(2)用戶U 在業(yè)務(wù)系統(tǒng)的注冊接口輸入自己的用戶身份UID、用戶認(rèn)證信息UAI、公鑰UPK。
(3)業(yè)務(wù)系統(tǒng)BS 接收到用戶發(fā)來的注冊信息(UID,UAI,UPK),核查UID 與UPK 是否和已有注冊用戶的身份或公鑰沖突,如果至少有其中一項沖突,則向用戶反饋注冊失敗信息,并返回第(1)步重新開始;若都不沖突,則向下進(jìn)行。
(4)業(yè)務(wù)系統(tǒng)BS 將用戶身份UID、用戶認(rèn)證信息UAI進(jìn)行hash 運算得到用戶的身份信息摘要IS,返回給用戶,并通知用戶注冊身份信息正確。
(5)用戶U 收到身份信息摘要IS 后,用自己的私鑰USK 對身份信息摘要進(jìn)行加密,生成數(shù)字簽名DS,發(fā)送給業(yè)務(wù)系統(tǒng)。
(6)業(yè)務(wù)系統(tǒng)BS 收到用戶數(shù)字簽名DS 后,將其與用戶身份UID、用戶公鑰UPK 發(fā)送給區(qū)塊鏈節(jié)點s。
(7)區(qū)塊鏈結(jié)點s 接收到業(yè)務(wù)系統(tǒng)發(fā)來的相關(guān)信息后,將信息打包共識到區(qū)塊鏈網(wǎng)絡(luò),并由可信授權(quán)中心為用戶發(fā)布數(shù)字證書DC。
(8)當(dāng)區(qū)塊鏈網(wǎng)絡(luò)將注冊信息共識成功后,由業(yè)務(wù)系統(tǒng)BS 通知用戶U 注冊成功,并將數(shù)字證書DC 返回給用戶,由用戶保存。
1.2.2 認(rèn)證身份流程
用戶認(rèn)證流程如下:
(1)用戶U 在業(yè)務(wù)系統(tǒng)認(rèn)證接口輸入用戶身份UID、用戶認(rèn)證信息UAI 與數(shù)字證書DC。
(2)業(yè)務(wù)系統(tǒng)BS 接收到用戶發(fā)來的認(rèn)證信息(UID,UAI,DC)后,將其廣播到聯(lián)盟鏈上的所有業(yè)務(wù)系統(tǒng)中,一起對其進(jìn)行驗證。并由各系統(tǒng)對認(rèn)證信息進(jìn)行共識投票。
(3)業(yè)務(wù)系統(tǒng)BS 根據(jù)用戶身份UID 到區(qū)塊鏈節(jié)點s上查找注冊時UID 對應(yīng)的公鑰UPK′。并判斷鏈上用戶公鑰UPK′與數(shù)字證書DC 內(nèi)的用戶公鑰UPK 是否一致。若UPK≠UPK′,則說明用戶身份信息與注冊時綁定的用戶公鑰不一致,在認(rèn)證共識中投反對票;若UPK=UPK′,則說明用戶身份信息與注冊時綁定的用戶公鑰一致,進(jìn)行下一步驗證。
(4)業(yè)務(wù)系統(tǒng)BS 根據(jù)用戶身份UID 進(jìn)一步到區(qū)塊鏈節(jié)點處獲取注冊時UID 對應(yīng)的用戶數(shù)字簽名DS。并用用戶數(shù)字證書DC 內(nèi)的用戶公鑰UPK 對數(shù)字簽名DS 進(jìn)行解密,得到用戶身份對比身份信息摘要IS′。
(5)業(yè)務(wù)系統(tǒng)BS 對用戶身份UID 與用戶認(rèn)證信息UAI進(jìn)行hash 計算,得到用戶認(rèn)證身份信息摘要UIS。若IS≠IS′,則說明用戶輸入的認(rèn)證信息UAI 不正確,認(rèn)證失敗;若IS=IS′,則說明用戶輸入的身份信息與注冊時無誤,驗證成功,在認(rèn)證共識中投通過票。
(6)聯(lián)盟鏈網(wǎng)絡(luò)根據(jù)最終的認(rèn)證共識投票情況給出認(rèn)證結(jié)果,業(yè)務(wù)系統(tǒng)BS 根據(jù)認(rèn)證結(jié)果判斷是否為用戶提供服務(wù)。
為了使身份認(rèn)證系統(tǒng)工作更加高效,提高其注冊、認(rèn)證的吞吐量,本節(jié)對PBFT 算法[13]進(jìn)行優(yōu)化,以滿足分布式身份認(rèn)證對共識效率的要求。
節(jié)點數(shù)為N 的傳統(tǒng)PBFT 算法網(wǎng)絡(luò),可以容錯f 個拜占庭節(jié)點,其中f=(N-1)/3。但是為了這個容錯能力,產(chǎn)生了很多無效的通信[14]。因為節(jié)點在收到2f+1 個正確的消息之后就可以進(jìn)入下一階段,但是每個節(jié)點要向網(wǎng)絡(luò)中廣播大于3f 個消息[15]。無效的通信主要發(fā)生在準(zhǔn)備階段的全網(wǎng)廣播。因此,改進(jìn)的PBFT 算法引入動態(tài)權(quán)重機制,稱其為“動態(tài)實用拜占庭容錯算法(Dynamic Practical Byzantine Fault Tolerance,DPBFT)”,根據(jù)節(jié)點在共識過程中的表現(xiàn)情況來動態(tài)調(diào)整不同節(jié)點之間的權(quán)重值。每個共識節(jié)點維護(hù)一個權(quán)重向量表WT={w1,w2,…,wi,…,wN},其中權(quán)重p=n/N 反映出i 節(jié)點的動態(tài)通信性能和可信度。WT會隨著共識的進(jìn)行而不斷更新,在每輪共識結(jié)束之后,每個共識節(jié)點會根據(jù)此次共識的投票和通信情況對自己維護(hù)的WT進(jìn)行更新。共識期間選擇權(quán)重最大的那幾個節(jié)點來進(jìn)行選擇性廣播。之后在共識流程的廣播階段,節(jié)點將在各自的廣播域內(nèi)進(jìn)行投票消息廣播,并且廣播域?qū)㈦S著WT的更新而更新。引入一個動態(tài)參數(shù)p 來表示選擇性廣播域的大小,其中p=n/N。n 為選擇性廣播域中節(jié)點的個數(shù)。
算法流程如圖2 所示。首先初始化共識節(jié)點的投票權(quán)重,開始進(jìn)行一次正常的PBFT 投票流程。然后根據(jù)每次投票的結(jié)果,動態(tài)調(diào)整權(quán)重,構(gòu)建選擇性廣播域。改進(jìn)的PBFT 算法與傳統(tǒng)的PBFT 算法流程大體相似,只是在一致性協(xié)議的廣播階段進(jìn)行相應(yīng)改進(jìn)。這里對改進(jìn)后的算法一致性協(xié)議階段進(jìn)行主要功能描述:
圖2 改進(jìn)的PBFT 算法流程圖
(1)PRE-PREPARE 階段:主節(jié)點接收客戶端發(fā)送的PRE-PREPARE 消息,并將消息廣播給參與共識的所有節(jié)點。
(2)PREPARE 階段:從節(jié)點收到主節(jié)點發(fā)送的PREPREPARE 消息后生成PREPARE 消息,根據(jù)WT和p 值去定一個選擇性廣播域,將PREPARE 消息選擇性廣播給自己的共識域內(nèi)的節(jié)點。如果接收到超過2f+1 個正確的準(zhǔn)備消息,則會進(jìn)入COMMIT 階段。
(3)COMMIT 階段:節(jié)點生成COMMIT 消息并廣播到共識域內(nèi)節(jié)點,其他節(jié)點驗證COMMIT 消息,驗證通過后,進(jìn)行ADJUST 階段。
(4)ADJUST 階段:根據(jù)共識結(jié)果給每個參與共識節(jié)點的情況進(jìn)行打分。根據(jù)各個節(jié)點提交commit 的時間,為每個節(jié)點離散化0~100 分?jǐn)?shù)。根據(jù)式(1):
式中Qi為i 節(jié)點本輪共識的得分,ti為i 節(jié)點提交commit的時間,T 為第一個commit 發(fā)生到共識結(jié)束總耗時。第一個提交commit 的節(jié)點得分100 分,未參加commit 的節(jié)點得分為0。并根據(jù)式(2)動態(tài)調(diào)整每個節(jié)點權(quán)重。
式中q 為上一狀態(tài)權(quán)重在新權(quán)重中所占比例,wi為上一狀態(tài)中i 節(jié)點權(quán)重值。
區(qū)塊鏈節(jié)點上只保存用戶認(rèn)證信息的摘要,不保存用戶認(rèn)證信息UAI 的明文信息,攻擊者即使攻破聯(lián)盟鏈網(wǎng)絡(luò)中的節(jié)點也無法獲取用戶對應(yīng)的認(rèn)證信息UAI。并且用戶公鑰由可信授權(quán)中心頒發(fā)數(shù)字證書,只有合法注冊的公鑰才能在業(yè)務(wù)系統(tǒng)上驗證。攻擊者很難同時獲取用戶的數(shù)字證書DC 和認(rèn)證信息UAI 來偽造用戶身份。因此本系統(tǒng)可以有效保證用戶的身份信息安全。
用戶身份信息加密保存在區(qū)塊鏈節(jié)點,每個業(yè)務(wù)系統(tǒng)都可以通過訪問聯(lián)盟鏈網(wǎng)絡(luò)獲取用戶加密身份信息進(jìn)行驗證。當(dāng)某個業(yè)務(wù)認(rèn)證系統(tǒng)癱瘓后,用戶可以選擇就近業(yè)務(wù)系統(tǒng)進(jìn)行驗證。因此本系統(tǒng)可以實現(xiàn)單點注冊,多點認(rèn)證,提升可用性的同時有效防止中心化業(yè)務(wù)認(rèn)證系統(tǒng)的易崩潰,不穩(wěn)定的風(fēng)險。
基于GO 編程語言實現(xiàn)了一個多節(jié)點聯(lián)盟鏈實驗系統(tǒng),用以模擬在本設(shè)計方案中用戶注冊以及用戶行為上鏈共識過程。在該系統(tǒng)中對原PBFT 算法和本文提出的DPBFT 算法進(jìn)行了性能測試。主要分析PBFT 與DPBFT在不同的p、q 值的選取上存在的性能差異。
認(rèn)證時延是指企業(yè)或授權(quán)中心向區(qū)塊鏈網(wǎng)絡(luò)發(fā)送上鏈信息到區(qū)塊鏈網(wǎng)絡(luò)完成共識的時間間隔。在不同節(jié)點數(shù)量的情況下,比較了PBFT 和DPBFT 算法的認(rèn)證時延,同時引入影響廣播域大小的因子p 和分?jǐn)?shù)調(diào)整的衰減因子q 來觀察其對認(rèn)證時延的影響。每個數(shù)據(jù)都是重復(fù)測試20 次后取的平均值。實驗結(jié)果如圖3 所示,DPBFT 算法比PBFT 算法所產(chǎn)生的認(rèn)證時延要小。當(dāng)區(qū)塊鏈網(wǎng)絡(luò)節(jié)點數(shù)量和衰減因子q 確定時,p 的大小決定了節(jié)點選擇性廣播域的大小。從圖中可以看出,p 越小,交易時延越小,共識效率越高。但不可為了追求共識效率設(shè)置很小的p 值,因為當(dāng)p 值小于2/3 時,節(jié)點不能接收到足夠的信息進(jìn)入確認(rèn)狀態(tài),導(dǎo)致全網(wǎng)不能共識。
圖3 相同q 值不同p 值的DPBFT 算法與PBFT 算法的交易時延
衰減因子q 對選擇性廣播域的大小沒有影響,因此其對共識效率也沒有影響。在無網(wǎng)絡(luò)波動的情況下,觀察了區(qū)塊鏈網(wǎng)絡(luò)節(jié)點數(shù)量和影響廣播域因子p 確定時,不同的衰減因子q 對網(wǎng)絡(luò)共識時間的影響,結(jié)果如圖4(a)所示。衰減因子q 越大,最近一次共識得分對整體分?jǐn)?shù)的影響效果越大。因此,q 越大,網(wǎng)絡(luò)收斂到最佳廣播域的速度越快。但當(dāng)存在網(wǎng)絡(luò)波動時,如圖4(b)所示,最近一次共識結(jié)果的得分不能象征整體網(wǎng)絡(luò)中節(jié)點的可依靠程度。因此,q 越大,節(jié)點得分調(diào)整幅度過大,導(dǎo)致一直沒法收斂到最佳狀態(tài),共識效率提升不高。所以,為了使共識效率達(dá)到最理想狀態(tài),應(yīng)該根據(jù)網(wǎng)絡(luò)波動情況,選擇合適的q 值。
圖4 相同p 值不同q 值的DPBFT 算法與PBFT 算法的共識時間
“吞吐量(Transaction Per Second,TPS)”指的是在單位時間內(nèi)完成的認(rèn)證的數(shù)量。實驗中每秒向區(qū)塊鏈網(wǎng)絡(luò)發(fā)送100 條認(rèn)證請求,記錄每秒能夠完成認(rèn)證的數(shù)量,并在不同節(jié)點個數(shù)的情況下進(jìn)行測試。圖5 所示為改進(jìn)前后的PBFT 的吞吐量對比圖??梢钥闯?,在相同節(jié)點數(shù)量和相同衰減因子q 的情況下,改進(jìn)的PBFT 算法比PBFT 算法吞吐量高,隨著網(wǎng)絡(luò)節(jié)點數(shù)量的增加,每種算法的吞吐量都會下降,因為共識階段需要廣播的消息變多了。同時,在相同節(jié)點數(shù)量的情況下,p 越小,選擇性廣播域越小,每一條消息的共識時間越短,因此吞吐量越高。
圖5 DPBFT 算法與PBFT 算法的吞吐量比較
針對傳統(tǒng)身份認(rèn)證技術(shù)的弊端,提出了一種基于聯(lián)盟鏈的分布式身份認(rèn)證方法。用戶在業(yè)務(wù)系統(tǒng)注冊身份之后,身份信息加密廣播共識到所有聯(lián)盟鏈節(jié)點,每個節(jié)點都可以對注冊的用戶進(jìn)行認(rèn)證,達(dá)成用戶單點注冊多點登錄的功能并有效防止了用戶身份隱私泄露的風(fēng)險。用戶認(rèn)證過程由全網(wǎng)共識投票,即使服務(wù)節(jié)點故障,也可依靠整個系統(tǒng)的分布式魯棒性來保證認(rèn)證系統(tǒng)的正常工作,提高系統(tǒng)的抗攻擊能力。最后通過實驗表明,本方法比傳統(tǒng)聯(lián)盟鏈共識效率更快,吞吐量更高??筛鶕?jù)網(wǎng)絡(luò)情況調(diào)整p、q 值,達(dá)到效率最大化。