本發(fā)明涉及區(qū)塊鏈,尤其是涉及一種基于區(qū)塊鏈的點對點內(nèi)容分發(fā)下載方法。
背景技術(shù):
1、隨著互聯(lián)網(wǎng)在線交互活動的急劇增長,高效的內(nèi)容傳輸需求尤為迫切。在2022年,視頻流量已經(jīng)占到了互聯(lián)網(wǎng)流量的82%。同時,根據(jù)《數(shù)字中國發(fā)展報告(2020年)》,我國移動互聯(lián)網(wǎng)接入流量由2015年底的41.9億gb增長到2020年的1656億gb。這種不斷增長的大數(shù)據(jù)傳輸需要內(nèi)容分發(fā)網(wǎng)絡的支持。傳統(tǒng)的中心化內(nèi)容分發(fā)網(wǎng)絡中,內(nèi)容傳輸?shù)倪吘壘彺娣掌饔筛髦行幕膬?nèi)容分發(fā)商部署。其不足之處在于:(1)中心化的內(nèi)容分發(fā)服務存在單點問題,易成為網(wǎng)絡攻擊的目標;(2)用戶需提前購買預置的帶寬來處理峰值請求,以及很多閑置的服務資源被浪費,這些消耗均會分攤給用戶,導致價格較昂貴。為解決這一問題,分布式的點對點內(nèi)容分發(fā)網(wǎng)絡技術(shù)成為了具有前景的替代方案。它可以利用普通節(jié)點構(gòu)建的分布式網(wǎng)絡及閑置的帶寬來提供內(nèi)容分發(fā)服務。點對點內(nèi)容分發(fā)的模式如圖1所示,主要包含三種角色,分別為內(nèi)容提供者、內(nèi)容分發(fā)者與內(nèi)容消費者。如圖1所示,三種角色間的關(guān)系為:內(nèi)容提供者提供內(nèi)容、支付費用給內(nèi)容分發(fā)者用于內(nèi)容的分發(fā),同時獲得內(nèi)容消費者支付的用于購買內(nèi)容的費用;內(nèi)容分發(fā)者替內(nèi)容提供者向內(nèi)容消費者發(fā)送內(nèi)容,同時獲得內(nèi)容提供者支付的費用;內(nèi)容消費者獲得內(nèi)容,同時向內(nèi)容提供者支付費用。該內(nèi)容分發(fā)過程中,最重要的是保證分發(fā)的高效性和各參與方獲得應得的結(jié)果。然而,典型的攻擊(比如,內(nèi)容分發(fā)者可能與內(nèi)容消費者串通使得在沒有實際內(nèi)容發(fā)送的情況下從內(nèi)容提供者獲取付款;內(nèi)容提供者可能與內(nèi)容消費者串通,以阻止分發(fā)者獲得他們應得的付款)很可能使得某些參與方得不到應得的結(jié)果,這些參與方由此可能會離開點對點網(wǎng)絡,最終導致整個點對點內(nèi)容分發(fā)網(wǎng)絡的崩潰。為此,本專利結(jié)合區(qū)塊鏈作為去中心化的可信第三方,協(xié)調(diào)整個點對點內(nèi)容分發(fā)過程,基于智能合約及安全協(xié)議設(shè)計,保證點對點內(nèi)容分發(fā)下載過程的安全及高效。
2、現(xiàn)有點對點內(nèi)容下載的方法分為以下幾類:
3、(1)通用點對點信息交換方法。包括流行的bittorrent協(xié)議在內(nèi)的多種點對點信息交換方法,該類方法眾所周知的缺點在于不能嚴格保證公平性,可能導致參與者付出與收入的部分嚴重不平衡,最終離開內(nèi)容分發(fā)網(wǎng)絡。
4、(2)公平交換協(xié)議。大量的公平交換的方法針對嚴格的公平性保證進行研究。然而,在點對點的內(nèi)容分發(fā)場景下,傳統(tǒng)公平性的定義不足以保證內(nèi)容分發(fā)的公平性。
5、(3)其他相關(guān)的去中心化內(nèi)容分發(fā)方案。該類方法主要存在內(nèi)容保密性無法滿足的問題,即在分發(fā)過程中,內(nèi)容可能會泄露給攻擊者。此外,直接使用現(xiàn)有方法,會導致區(qū)塊鏈上的存儲及計算成本過高,由此不具有實用性。
技術(shù)實現(xiàn)思路
1、本發(fā)明的目的在于提供一種基于區(qū)塊鏈的點對點內(nèi)容分發(fā)下載方法,保證完成性(任何點對點內(nèi)容分發(fā)網(wǎng)絡的誠實參與方可以得到應得的。具體而言,內(nèi)容分發(fā)者將獲得與消耗帶寬對應的報酬,內(nèi)容消費者獲得正確的內(nèi)容并支付費用,內(nèi)容提供者提供正確的內(nèi)容并獲得對應的報酬)、機密性(內(nèi)容在傳輸過程中不會泄露隱私信息給攻擊者)、健壯性(使用區(qū)塊鏈作為去中心化的可信第三方協(xié)調(diào)內(nèi)容交換過程,抵抗單點問題等攻擊)和高效性(發(fā)送到區(qū)塊鏈的消息負載小,實現(xiàn)區(qū)塊鏈上的低存儲和計算消耗;同時通信的輪次最優(yōu),僅和內(nèi)容塊數(shù)量n相關(guān),無需額外步驟)。
2、為實現(xiàn)上述目的,本發(fā)明提供了一種基于區(qū)塊鏈的點對點內(nèi)容分發(fā)下載方法,包括三個階段:準備階段、下載傳輸階段、解密階段;
3、準備階段:內(nèi)容提供者部署智能合約,內(nèi)容分發(fā)者在合約部署成功后,通過向區(qū)塊鏈發(fā)送消息加入本次分發(fā),內(nèi)容提供者從加入的分發(fā)者中選擇一個;內(nèi)容分發(fā)者接收內(nèi)容提供者發(fā)送的內(nèi)容塊的對序列,驗證其簽名,通過后保存在本地,然后向區(qū)塊鏈發(fā)送確認,表明已經(jīng)準備好內(nèi)容分發(fā);其中,對序列包括多個“對”,每個“對”包括內(nèi)容塊密文及內(nèi)容塊密文簽名;
4、下載傳輸階段:內(nèi)容消費者發(fā)送下載請求至區(qū)塊鏈,內(nèi)容分發(fā)者在看到下載請求后,與內(nèi)容消費者之間執(zhí)行可驗證公平分發(fā)協(xié)議,然后內(nèi)容分發(fā)者提交“收據(jù)”證明至區(qū)塊鏈智能合約,由此獲得區(qū)塊鏈向內(nèi)容分發(fā)者支付的內(nèi)容分發(fā)費用;
5、解密階段:內(nèi)容提供者發(fā)送加密后的解密密鑰數(shù)組至區(qū)塊鏈上,內(nèi)容消費者從區(qū)塊鏈上獲取解密密鑰并解密內(nèi)容,內(nèi)容消費者隨后發(fā)送確認到區(qū)塊鏈,區(qū)塊鏈收到確認后將立即或者在未收到確認后的一段時間后自動將內(nèi)容提供的費用支付給內(nèi)容提供者。
6、優(yōu)選的,準備階段包括以下步驟:
7、內(nèi)容提供者部署智能合約,其中合約的參數(shù)包括提供者的公鑰pk_p、內(nèi)容的唯一標識h_m、內(nèi)容塊數(shù)量n、確認時間t_cf、提供者對于每個內(nèi)容塊的分發(fā)將要支付給分發(fā)者的費用b_p以及提供者對于每個內(nèi)容塊將要向內(nèi)容消費者收取的費用b_c;
8、內(nèi)容分發(fā)者在合約部署成功后,通過向區(qū)塊鏈發(fā)送消息加入本次分發(fā),消息包括分發(fā)者的公鑰pk_d;
9、內(nèi)容提供者從加入的分發(fā)者中選擇一個,然后執(zhí)行如下操作:隨機生成一個主密鑰mk,根據(jù)主密鑰的哈希值h_mk和內(nèi)容塊數(shù)量n,調(diào)用秘鑰樹生成算法ktgen獲得秘鑰樹kt,內(nèi)容提供者本地存儲mk和kt;使用kt的n個葉子節(jié)點作為秘鑰對每個內(nèi)容塊進行加密,然后對每個加密的內(nèi)容塊進行簽名,獲得內(nèi)容塊的對序列,并將該對序列發(fā)送給選擇的內(nèi)容分發(fā)者;
10、內(nèi)容分發(fā)者接收內(nèi)容提供者發(fā)送的內(nèi)容塊的對序列,驗證其簽名,通過后保存在本地,然后向區(qū)塊鏈發(fā)送確認,表明已經(jīng)準備好內(nèi)容分發(fā)。
11、優(yōu)選的,下載傳輸階段包括以下步驟:
12、內(nèi)容消費者發(fā)送下載請求至區(qū)塊鏈,消息包含的參數(shù)為內(nèi)容消費者的公鑰pk_c以及初始下載的內(nèi)容塊下標ζ,默認情況下ζ=1,表示從第一個內(nèi)容塊開始下載;
13、內(nèi)容分發(fā)者與內(nèi)容消費者之間執(zhí)行可驗證公平分發(fā)協(xié)議進行內(nèi)容傳輸,在結(jié)束時,內(nèi)容消費者獲得內(nèi)容塊的對序列,而內(nèi)容分發(fā)者收到分發(fā)內(nèi)容塊的“收據(jù)”;
14、內(nèi)容分發(fā)者將最新的“收據(jù)”提交到區(qū)塊鏈,智能合約驗證收據(jù),通過后根據(jù)“收據(jù)”中內(nèi)容塊的下標及結(jié)合初始下載的內(nèi)容塊下標ζ,自動計算出分發(fā)的內(nèi)容塊數(shù)量ctr,然后將對應的費用ctr*b_p自動發(fā)送給內(nèi)容分發(fā)者。
15、優(yōu)選的,解密階段包括以下步驟:
16、內(nèi)容提供者根據(jù)內(nèi)容塊數(shù)量n、初始內(nèi)容塊下標ζ,鏈上計算的已分發(fā)內(nèi)容塊數(shù)量ctr和主密鑰哈希值h_mk,調(diào)用秘鑰元素揭示算法revealkeys,生成需要揭示的秘鑰元素數(shù)組rkarray,然后通過非對稱加密的公鑰pk_c進行加密,并將密文發(fā)送至鏈上;
17、內(nèi)容消費者從鏈上獲取加密的秘鑰元素數(shù)組rkarray,可初步驗證是否可以恢復出ctr個解密秘鑰,通過后使用與pk_c對應的私鑰進行解密,從而獲得秘鑰元素數(shù)組,調(diào)用恢復秘鑰算法recoverkeys,獲得用于解密ctr個內(nèi)容塊的秘鑰,然后對加密的內(nèi)容塊進行解密獲得內(nèi)容塊明文,向智能合約發(fā)送確認,智能合約將對應的費用ctr*b_c發(fā)送給內(nèi)容提供者,下載流程完成。
18、優(yōu)選的,可驗證公平分發(fā)協(xié)議,具體包括:
19、對于n個對序列,接收者在收到發(fā)送者發(fā)送的每個內(nèi)容塊密文及內(nèi)容塊密文簽名對后,驗證密文數(shù)字簽名,通過后發(fā)回一個包含內(nèi)容消費者簽名的“收據(jù)”,以確認發(fā)送者的帶寬貢獻;發(fā)送者在驗證“收據(jù)”的合法性后,繼續(xù)發(fā)送下一個內(nèi)容塊;任意一方在發(fā)送過程中可能終止;
20、將內(nèi)容按照相同大小進行劃分并編號,發(fā)送者始終使用最新的收據(jù)來計算總共傳輸了多少塊,并向任意驗證者證明其帶寬總貢獻。
21、優(yōu)選的,秘鑰樹生成算法ktgen獲得秘鑰樹kt,輸入內(nèi)容塊數(shù)量n,隨機取值的主密鑰mk的哈希值h_mk,輸出一顆秘鑰樹,秘鑰樹具有n個葉子節(jié)點,構(gòu)造具體為:
22、初始化一個長度為2n-1的數(shù)組kt,kt的第一個值為h_mk,如果n為1,則停止計算;否則從0到n-2,依次計算該節(jié)點的左子節(jié)點kt[2i+1]為h(kt[i]||0),以及右子節(jié)點為kt[2i+2]為h(kt[i]||1),然后返回整個秘鑰樹kt。
23、優(yōu)選的,秘鑰元素揭示算法revealkeys,輸入內(nèi)容塊數(shù)量n,起始內(nèi)容塊下標ζ,需要揭示的秘鑰個數(shù)ctr,主密鑰哈希值h_mk,輸出一個用于保存將要發(fā)送到區(qū)塊鏈用于恢復解密秘鑰的數(shù)組rkarray,構(gòu)造具體為:
24、執(zhí)行秘鑰樹生成算法ktgen獲得秘鑰樹kt,計算起始內(nèi)容塊在秘鑰樹中的下標start=n+ζ-2,若僅需解密一個內(nèi)容塊,即ctr為1,則添加(start,kt[start])到結(jié)果數(shù)組rkarray中并返回;
25、若ctr為2,則進一步判斷start的奇偶性,為奇數(shù)時,則添加((start-1)/2,kt[(start-1)/2])到結(jié)果數(shù)組rkarray中,為偶數(shù)時,則必定這兩個節(jié)點均為葉子節(jié)點,分別添加(start,kt[start])和(start+1,kt[start+1])到結(jié)果數(shù)組rkarray中并返回;
26、若需要解密的內(nèi)容塊個數(shù)ctr大于2,則通過迭代的方式計算這ctr個元素在秘鑰樹kt中從葉子節(jié)點到根節(jié)點的方向最頂部的節(jié)點,然后將這些節(jié)點添加到rkarray中并返回。
27、優(yōu)選的,恢復秘鑰算法recoverkeys輸入內(nèi)容塊數(shù)量n,需要解密的內(nèi)容塊個數(shù)ctr和秘鑰元素揭示算法所返回的數(shù)組rkarray,輸出長度為ctr的數(shù)組keyarray,用于存儲解密內(nèi)容塊的秘鑰,具體構(gòu)造為:
28、對于數(shù)組rkarray中的每一個元素,均執(zhí)行恢復秘鑰算法ktgen,用于恢復其在秘鑰樹kt中的葉子節(jié)點,添加葉子節(jié)點的值到結(jié)果數(shù)組keyarray中返回。
29、因此,本發(fā)明采用上述的一種基于區(qū)塊鏈的點對點內(nèi)容分發(fā)下載方法,技術(shù)效果如下:
30、(1)本發(fā)明提供一種基于區(qū)塊鏈的點對點內(nèi)容分發(fā)下載方法,相較于傳統(tǒng)中心化的內(nèi)容分發(fā)網(wǎng)絡,具有解決單點問題、無需提前購置多余帶寬處理峰值請求,以及節(jié)點帶寬可得到充分利用的優(yōu)勢,對于內(nèi)容在互聯(lián)網(wǎng)的快速傳輸具有重要作用;
31、(2)本發(fā)明提供一種可驗證的公平分發(fā)機制,可以準確的在點對點內(nèi)容分發(fā)網(wǎng)絡中量化分發(fā)者的帶寬貢獻,且內(nèi)容分發(fā)者的公平性可得到保證,即內(nèi)容分發(fā)者最多只會損失發(fā)送一個內(nèi)容塊的帶寬,同時該分發(fā)過程通訊輪次最優(yōu),具有高效性;
32、(3)本發(fā)明提供一種在點對點內(nèi)容分發(fā)網(wǎng)絡中優(yōu)化區(qū)塊鏈上存儲消耗的高效密鑰推導方法,可以在保證內(nèi)容分發(fā)過程中內(nèi)容機密性的同時,實現(xiàn)最優(yōu)化的鏈上存儲和計算消耗,由此具有實用性,且為區(qū)塊鏈在廣泛的去中心化應用場景落地提供了技術(shù)和設(shè)計方面的思路借鑒。