專利名稱:數據發(fā)布的制作方法
技術領域:
本發(fā)明涉及一種提供對數據的受控訪問的數據發(fā)布系統(tǒng)。例如,根據用戶的預付款,該系統(tǒng)可用于在一定的時期內提供對多點傳送的聲頻或視頻節(jié)目內容的訪問。但是本發(fā)明并不限于用于多點傳送數據分組網絡,也可能用于,比如包括諸如DVD(數字萬用磁盤)的存儲介質在內的其它的成批數據發(fā)布渠道。
背景技術:
多點傳送技術被開發(fā)用于因特網,它能夠將數據高效地從數據源發(fā)布給大量的接收者。但是,現有的多點傳送協(xié)議的高效性和可升級性部分地依賴于這一事實,即數據源不必有任何有關數據接收者的知識。這在希望在數據源和接收者之間建立保密關系,例如以便將諸如電視節(jié)目的流式視頻數據僅傳送給那些已為接收節(jié)目而預先付費的訂購者時將存在問題。
一般地,可以通過在數據源對數據進行加密,然后控制用戶對解密數據所需密鑰的訪問來建立這種保密關系。一個簡單的方法是用一個單個話路密鑰加密數據。該話路密鑰一直保持不變直到一個新的用戶希望訪問該數據,或直到現有的用戶之一被排除。此時,需要一個新的話路密鑰并將其發(fā)布給所有的用戶。雖然通過使用密鑰的分級可以一定程度地改善該密鑰發(fā)布方案的效率,在排除或加入一個特定的用戶時在這種密鑰的分級中只有一些需要改變,但是在新用戶加入或離開時,該方案仍然有較大的傳輸開銷。
在本發(fā)明共同待審的國際專利申請PCT/GB98/03753(BT caseA25728/WO)中描述的另外一個方法中,數據在數據源被劃分為一系列的應用數據單元(ADU)并且每個ADU使用一個不同的密鑰。這些密鑰由一個初始種子值系統(tǒng)地生成為一個序列。該種子值也被傳送給每個用戶終端處的保密模塊,該保密模塊控制最終用戶可否使用該密鑰。
發(fā)明內容
根據本發(fā)明的第一方面,提供一個發(fā)布數據的方法,包括(a)對多個數據單元中的每一個數據單元用密鑰序列中的一個密鑰進行加密;(b)將加密過的數據單元傳送給多個用戶終端;(c)將至少一個種子值傳送給一個用戶終端;(d)從該種子值生成一個密鑰序列,其密鑰個數大于傳送給用戶終端的種子值的個數;以及(e)在用戶終端使用所述的密鑰序列解密數據單元,特征在于,在步驟(d)中,生成一個構成步驟(a)的密鑰序列的一個任意雙重界定部分的密鑰序列,并且,所述部分的上下邊界在序列中的位置由步驟(c)中傳送的至少一個種子值來決定。
本發(fā)明提供一個發(fā)布數據的方法,其中如在上面提到的共同待審的申請中揭示的系統(tǒng)中那樣,用一個不同密鑰的序列加密連續(xù)的數據單元。但是,本發(fā)明的方法提供進一步的顯著的優(yōu)點,其中每個用戶可用的密鑰序列的范圍不是如在前一個系統(tǒng)中那樣可能是無限的,而是被雙重界定,也就是說,用戶可用的密鑰序列的開始和結束位置是事先確定的。如下面進一步說明的那樣,數據發(fā)送者,或代表數據發(fā)送者而動作的密鑰發(fā)布方,可以通過選擇發(fā)送給用戶的種子值來任意地確定用戶可用的密鑰序列的開始和結束點及長度。對密鑰序列的任何所希望的部分都存在一個種子的集合,該集合提供對該部分并且僅對該部分的訪問。通過給用戶提供對雙重界定的密鑰集合的訪問,而不是對一個無限制的密鑰集合的訪問,本發(fā)明使不必在每個用戶終端安裝由數據發(fā)送者控制的用于控制用戶訪問密鑰的保密模塊。
優(yōu)選地在步驟(a)中使用的密鑰序列如下生成(A)對一個或多個初始種子值進行運算,生成更多個中間種子值,該中間種子值隱蔽該初始種子值;(B)進一步對前一步驟生成的值進行運算,生成更多個深一層的值,該深一層的值隱蔽前一步驟生成的值;(C)重復步驟(B)直到生成的值的個數等于或大于步驟(a)所需的密鑰的個數。
優(yōu)選地,該方法包括(i)用一組不同的隱蔽函數中的每一個函數對一個根種子值進行運算,生成多個深一層的值;(ii)用該組不同的隱蔽函數中的每一個函數對前一步驟生成的深一層的值進行運算;(iii)重復步驟(ii),通過該重復或每個重復,生成值樹中的下一層;(iv)在步驟(a)中,使用步驟(ii)的最后一次重復中導出的值作為密鑰序列。
(v)在步驟(c)中,將至少一個來自根種子值下面的樹的值傳送給一個用戶,傳送給該用戶的值在樹中的位置決定了用戶用于解密數據單元的可用密鑰序列部分的位置和范圍。
隱蔽函數對輸入值進行運算以生成輸出值,其中即使已知該函數,也不易從輸出值推導出輸入值。隱蔽函數可以包括,比如,諸如MD5(消息摘要數5)的加密哈希函數。
發(fā)明人發(fā)現,一種系統(tǒng)地生成一系列的密鑰同時可以對用戶可用的序列部分的位置和范圍進行簡單控制的有效方法是用一組不同的隱蔽函數重復運算以生成一個值的樹。在下面更詳細的說明的例子中,使用了一個由一對對稱的隱蔽函數形成的二叉樹。一個函數是一個右轉移位后跟一個哈希函數,另一個函數是左旋移位后跟一個哈希函數。本發(fā)明的本特征并不限于使用二叉樹,也可以用三叉樹或更高級樹來實現。
優(yōu)選地,在步驟(c)中,種子值被通過通信網絡傳送給用戶終端,在本情形下,種子值優(yōu)選地從多個密鑰管理節(jié)點被傳送給用戶終端,其中節(jié)點在不同地點連接到網絡上。
本發(fā)明的優(yōu)選的實施例的另一個優(yōu)點是提供對編碼數據的訪問的發(fā)布種子值的處理可以被移交給多個位于不同地點的密鑰管理節(jié)點,這些節(jié)點的一些或全部遠離數據源。這樣建立的數據控制系統(tǒng)可靈活用于大量的接收者。
一般,數據單元和種子值通過相同的通信網絡來發(fā)布。但是,這個并不必要。例如,可以將數據單元發(fā)布在諸如DVD的成批數據存儲介質上,而隨后通過因特網將種子值在線地發(fā)送給用戶。很明顯,這些例子僅用于說明,可以采用很多不同的實現方法。
優(yōu)選地以隱含地標識每個種子的順序傳送任何接收者構建用于整個密鑰序列的一個特定子范圍所需的密鑰的種子。在這種情況下,根據要求的最小和最大值和傳送種子的預先確定的順序的知識,推導出該種子的索引,而不用顯式地列出每個種子的索引號。優(yōu)選地每個加密的數據單元承載一個未加密的索引號以向各用戶標識解密該數據單元應該使用序列中的哪一個密鑰。
根據本發(fā)明的另一個方面,提供一種加密發(fā)布數據的方法,包括(a)用一個或多個隱蔽函數對至少一個根種子值進行運算,從而生成多個深一層的值;(b)用一個或多個隱蔽函數對前一步驟生成的深一層的值或從其導出的值進行運算;(c)重復步驟(b),通過該重復或每個重復生成值樹中的下一層;(d)用由步驟(c)中生成的一個或多個推導出的密鑰值序列加密多個數據單元。
根據本發(fā)明的另一個方面,提供一種發(fā)布數據的方法,包括用密鑰序列中的一個密鑰加密多個數據單元中的每個單元,將加密的數據單元傳送給多個用戶終端,其特征在于,根據一個密鑰構造算法生成該密鑰序列并將其分配到應用數據單元中,并且,該密鑰構造算法的復本被發(fā)布給多個密鑰管理器,以便在使用中,接收者可以從一個密鑰管理器獲得用于訪問數據的一個任意部分的密鑰,而不必向任何數據發(fā)送者查詢。
本發(fā)明的這個方面提供一種數據發(fā)布的方法,其中密鑰管理可以被移交給多個密鑰管理節(jié)點,使系統(tǒng)可以被升級以包含大量的用戶。
根據本發(fā)明的另一個方面,在根據前述方面的方法中,提供一個包括多個加密的數據單元的數據載體。該數據載體可以是,比如,諸如DVD盤、計算機存儲器的一個區(qū)域、或用數據單元編碼的數據傳輸信號之類的數據存儲介質。
本發(fā)明還包含使用本發(fā)明的用戶終端、數據服務器以及密鑰管理器、使用這些設備的方法和包括這些設備的網絡。
下面參照附圖來詳細說明實施本發(fā)明的系統(tǒng),其中圖1是一個實施本發(fā)明的網絡的示意圖;圖2表示圖1所示網絡中的一個用戶終端的結構;圖3表示圖1所示網絡中的一個密鑰管理節(jié)點的結構;圖4表示圖1所示網絡中的一個數據發(fā)送者的結構;圖5表示圖1所示網絡中傳輸的數據分組的格式;圖6表示通過密鑰管理節(jié)點進行的密鑰發(fā)布;圖7表示一個雙向哈希鏈;圖8表示兩個隱蔽函數的生成;圖9表示一個二叉哈希樹;圖10表示一個連續(xù)二叉哈希樹;圖11表示一個混合二叉哈希鏈樹的元素;
圖12表示一個混合二叉哈希鏈樹;圖13說明混合二叉哈希鏈樹的構造;圖14表示一個二叉哈希鏈樹的生長序列;圖15表示一個連續(xù)二叉哈希鏈樹混合;圖16表示一個第二二叉哈希樹的元素;圖17說明揭示和隱蔽BHC-T中的種子對;圖18說明揭示和隱蔽第二二叉哈希樹中的種子;圖19表示一個多維密鑰序列;圖20a到20e表示一個通用模型。
具體實施例方式
一個數據通信系統(tǒng)包括一個通過數據通信網絡2連接到多個用戶終端3的數據服務器1。雖然為了便于說明只示出幾個用戶終端,但在實際中數據服務器1可能與很多終端同時通信。在本例中,數據通信網絡2是公共因特網并由通過節(jié)點4相互連接的多個子網絡2a-2c組成。該子網絡和相關聯的路由器支持IP(因特網協(xié)議)多點傳送。
在本例中,數據服務器1是視頻服務器。該數據服務器從一個海量存儲設備1a讀取一個視頻數據流并用諸如MPEG2的合適的壓縮算法壓縮數據。然后數據服務器1中的保密模塊將壓縮的視頻數據流分成應用數據單元(ADU)。例如,每個ADU可以包含對應于一分鐘的視頻信號的數據。然后利用一個加密算法用系統(tǒng)地生成的密鑰序列對ADU加密,其中每個ADU用不同的密鑰。合適的加密算法包括DES(數據加密標準)(US聯合標準FIPSPUB46)。這是一個傳統(tǒng)的私有密鑰算法。用于生成密鑰序列的種子值也從數據服務器1傳送給多個密鑰管理節(jié)點。該密鑰管理節(jié)點散布在數據通信網絡中的不同位置。為了響應來自一個用戶終端的請求,密鑰管理節(jié)點將多個種子值傳送給該終端。在傳送種子值前相應的密鑰管理節(jié)點可能實施檢查,例如,確認相關的用戶終端是否有權訪問所請求的數據。例如,該用戶可能有所請求的訪問從視頻數據服務器1多點傳送的某一電影的權利。如果該電影是每次付費觀看,該密鑰管理節(jié)點負責檢查該用戶是否有該視頻數據服務器的運營者的帳戶和是否已為該電影適當地預付費。如果這些條件都滿足,則該密鑰管理節(jié)點將選擇的種子發(fā)布給用戶,允許用戶生成密鑰。該密鑰對應于在數據服務器中用來加密組成該電影的ADU的密鑰序列部分。如下的詳細說明,用于生成密鑰序列的算法使適當選擇的種子值可用來提供對原始密鑰序列的一個任意界定部分的訪問。
圖2表示一個用戶終端3的主要的功能組成部分。網絡接口22從或向數據通信網絡2接收或發(fā)送ADU。該ADU從接口22傳遞給訪問模塊23。與訪問模塊23可能位于一個獨立的保密模塊(例如智能卡)中的以前的系統(tǒng)不同,在實施本發(fā)明的系統(tǒng)中,訪問模塊可以是一個在用戶終端的主處理器中運行的軟件模塊。訪問模塊23包括一個解密模塊D,一個密鑰生成模塊K和一個種子存儲器SS。種子存儲器存儲從密鑰管理節(jié)點接收的種子值并用一個密鑰構造算法,如下面詳細說明的那些算法,來處理那些種子值以生成一系列的密鑰。該一系列密鑰有由種子存儲器SS保存的種子值決定的開始點和結束點。把本序列中的密鑰順序地傳遞給解密模塊D。解密模塊D解密從接口22接收的一系列的ADU,并將其傳遞給應用層模塊24。這將進行進一步的處理,例如用MPEG2解密算法,并將結果數據傳遞給一個輸出設備,在本例中是一個視頻顯示單元VDU 25。在優(yōu)選的實現中,接口22可以通過ISDN調制解調器用硬件實施或通過TCP-IP(傳輸控制協(xié)議-因特網協(xié)議)棧用軟件實施。
用戶終端可以用多種形式實施。例如,終端可以包括帶有適當網絡接口的個人計算機、智能移動電話、以及與電視機協(xié)力提供因特網訪問的機頂盒。
圖3表示圖1的網絡中的一個密鑰管理節(jié)點的一個例子的結構。該節(jié)點通過TCP-IP棧將數據分組傳送給數據發(fā)送者和用戶終端或“接收者”。以傳統(tǒng)的方式使用一個公共密鑰加密算法通過加密套接字協(xié)議層(SSL)32傳送數據分組,密鑰管理應用程序33以在后面進一步詳細說明的方式從數據發(fā)送者接收種子值并將發(fā)布的種子值發(fā)送給用戶終端。與密鑰管理應用程序33關聯的數據存儲器330保存從該數據發(fā)送者或每個數據發(fā)送者接收的種子值。用戶通過一個用戶接口34與密鑰管理應用程序相互作用,例如,用戶接口34可以用HTML(超文本鏈接標示語言)和CGI為用戶終端提供網頁。
圖4表示圖1的網絡中的一個數據發(fā)送者的一個例子的結構。數據應用程序41輸出數據,在本例中,數據包括一個被分為多個應用數據單元的MPEG2視頻流。該視頻節(jié)目內容從存儲器410中導出。ADU被傳遞給訪問模塊42。它包括一個加密子模塊、一個密鑰生成子模塊K和一個種子存儲器SS。子模塊K協(xié)同諸如后面見一步詳細說明的密鑰構造算法使用隨機生成的種子值來生成一個密鑰序列。種子值也可以通過加密套接字層43和TCP-IP棧44從訪問模塊42輸出。加密的ADU也通過TCP-IP棧44輸出。
數據服務器和密鑰管理節(jié)點都可以用商用的平臺,如COMPAQ ProliantTM服務器或Sun Microsystems Enterprise 5000TM服務器來實現。
圖5表示數據發(fā)送者輸出的一個數據幀的格式。它包括一個承載加密ADU的數據有效負載、一個密鑰索引ki和一個話路標識符SE。密鑰索引和話路標識符按原樣發(fā)送。
一般,密鑰值可以通過與用于發(fā)布ADU相同的通信網絡發(fā)布給用戶終端。
在本說明書中用術語“應用數據單元”(ADU)來描述從保密或商業(yè)的觀點來看有用的最小數據單元。ADU的大小可能隨著所需的應用和保密性變化。它可能是一個初始化幀和一個視頻序列中的相關的“P-幀”集合,或者可能是對一個網絡游戲的10分鐘的訪問。用來加密的ADU可能與一個應用的不同層使用的ADU不同。例如,在本例中ADU與MPEG壓縮算法處理的視頻幀的持續(xù)期間不同,也與用戶購買的個人節(jié)目項的持續(xù)期間不同。為了提高系統(tǒng)的性能,可能只部分地加密ADU,其余的按原樣發(fā)送。ADU的大小可能在隨內容而定的流的持續(xù)期間變化。如果在15分鐘內有一百萬個接收者加入一個多點傳送數據流,應用數據單元的大小是系統(tǒng)可升級性的一個主要的決定因素,但ADU的大小也是15分鐘,那么這將只需要一個重新分配密鑰(re-key)事件。下面詳細說明不同的密鑰序列構造算法。
發(fā)送者去耦結構本發(fā)明不限于使用圖1的方法中的簡單的時序。例如,本發(fā)明可應用于大規(guī)模的網絡游戲。
在這種游戲中,ADU的經濟價值與時間或數據量無關,僅與一個完全的應用特定因素有關。在本例中,參加者按每“游戲分鐘”付費,持續(xù)期間不是嚴格地與實際時間的分鐘有關,而是由游戲時間保持器定義和發(fā)信號表示。該游戲包括很多虛擬地域,每個由不同的地域控制器調節(jié)。該地域控制器提供帶給地域生命的后臺事件和數據。它們將這個加密的數據傳送給每個地域的一個多點傳送地址,但是在所有的地域的任何時間使用相同的ADU索引和密鑰。因此盡管被散布到多個多點傳送地址,但是整個游戲是一個單一保密多點傳送話路。游戲者只要有當前密鑰就可以調入任何地域的后臺數據。地域中的游戲者創(chuàng)建的前臺事件不加密,但如果不參看后臺數據它們將毫無意義。
圖6表示這種游戲的數據流。只示出了與游戲安全性相關的數據流以及在游戲進程中,而不是在設立時,發(fā)送的數據流。所有的游戲者都在發(fā)送數據,但圖中只示出加密的發(fā)送者,S-地域控制器。同樣,只示出解密的接受者,R-游戲者。游戲控制器設立游戲保密性,其在圖中未示出,在下面說明。密鑰管理操作委派給多個復制的密鑰管理器,KM,其使用保密Web服務器技術。
保密多點傳送話路的密鑰在一個序列中每游戲分鐘(每ADU)變化一次。所有的加密數據都以一個未加密的ADU索引開頭,該索引指向用于解密的密鑰。在設立階段后,游戲控制器、地域控制器和密鑰管理器保存有可以計算整個游戲持續(xù)期間使用的密鑰序列的初始種子。也可以使用分階段的設立。
游戲設立1.游戲控制器(未示出)在驗證身份的有效性后,單點傳送一個共享的“控制話路密鑰”給所有的KM和S。所有S和所有KM運行保密Web服務器以便通過客戶驗證的加密套接字層(SSL)通信傳送給每個KM和S用各公共密鑰加密。游戲控制器還把它將要用于控制消息的多點傳送地址通知給所有的KM和S,這些KM和S要立即加入該地址。
2.游戲控制器然后生成用于構造整個密鑰序列的初始種子值并將其多點傳送給所有的KM和所有S,用控制話路密鑰加密該消息并使用一個適于所涉及的大概是少量目標的可靠的多點傳送協(xié)議。
3.游戲以一個驗證的話路目錄聲明來宣告,如在Mark Handley(UCL)的“可升級的因特網多媒體會議系統(tǒng)”,博士論文(1997年11月14日)中描述的那樣定期地重復多點傳送(未示出)。經驗證的聲明可以避免攻擊者建立虛假付費服務器來收取游戲的收益。該聲明協(xié)議被增強以包括密鑰管理器地址和每游戲分鐘的價格的詳細信息。為了獲得每游戲分鐘的價格,密鑰管理器監(jiān)聽該聲明以及接收者。該聲明還必須指明正在使用的密鑰序列構造。
接收者話路設立,持續(xù)期間和終止1.從話路目錄聽到該游戲廣告后,一個希望付費加入游戲的接收者用合適的形式聯系一個KM網絡服務器,請求一定數量的游戲分鐘。這在圖6中表示為“單點傳送設立”。R為所請求的游戲分鐘付費給KM,可能是給出她的信用卡的信息或以一些電子現金的形式或在先前游戲中贏得的代用幣支付。作為回報,KM將一組中間種子發(fā)送給R使其可以計算她購買的密鑰序列的子范圍。在下一節(jié)描述的該密鑰序列的構造使該過程成為可能。所有這些都發(fā)生在加密套接字協(xié)議層(SSL)通信中,只有KM需要驗證,而不是R。
2.R用她購買的中間種子生成相關的密鑰。
3.R加入由游戲應用程序確定的相關多點傳送,其中的一個多點傳送總是來自一個S的加密的后臺地域數據。R用前一步計算的密鑰序列解密這些消息,這樣使其余的游戲數據有意義。
4.每當時間保持器發(fā)出表示一個新的游戲分鐘的信號時(通過控制多點傳送),所有的地域控制器遞增其ADU索引并使用序列中的下一個密鑰。它們都使用相同的ADU索引。每個R注意到來自S的消息中的ADU索引被遞增并使用序列中的下一個適當的密鑰。
5.當游戲分鐘索引到達R所購買的序列的末尾時,應用程序在游戲者失去訪問權之前給她發(fā)出一個“插入硬幣”的警告。游戲分鐘繼續(xù)遞增直到到達所需密鑰超出R可計算的范圍的位置。如果R沒有購買更多的游戲分鐘,她必須退出該游戲。
這種情形說明了只要密鑰管理器通過一些預先安排知道每個ADU索引的經濟價值或每個ADU的訪問策略,發(fā)送者如何與所有接收者的加入和退出活動完全去耦。不必在密鑰管理器和發(fā)送者之間進行任何通信。發(fā)送者不必監(jiān)聽任何接收者的活動。如果密鑰管理器需要避免出售已經傳輸的ADU,它們只需與來自發(fā)送者的變化的ADU序列號流保持同步。在本例中,密鑰管理器通過監(jiān)聽多點傳送數據本身來同步。在其他情形下,同步可能只簡單地基于時間,可以是通過顯式的同步信號也可以通過一天中時間的同步來隱含地進行。在另外的情形下(例如,商用軟件的多點傳送發(fā)布),傳輸的時間可能無關。例如,可能是定期地重復傳輸,購買序列的一部分的密鑰的接收者可以在以后的任何時間收聽。
在本例中用預付來購買種子。這可以保證密鑰管理器不保持關于他們的用戶的狀態(tài)。這意味著由于不需要中央狀態(tài)庫所以他們可以被無限地復制,否則將會是下列情形如果種子是用帳戶購買則需要檢查用戶的帳戶狀態(tài)。
下面說明密鑰構造的不同方法。
密鑰序列構造在下面的所有密鑰序列構造中,使用下列的符號●b(v)是表示用于隱蔽v值的函數的符號。即,對手不能通過有限的計算從b(v)得到v。一個隱蔽或單向函數的例子是諸如MD5哈希(IETF RFC1321)或標準加密哈希1(NIST Sha-1)的哈希函數。好的哈希函數一般只需要較少的計算資源。哈希函數被設計為將任何大小的輸入減小為固定大小的輸出。在所有情況下,我們都將使用已經具有與輸出相同大小的輸入,只使用哈希的隱蔽屬性,而不使用大小減小屬性。
●bh(v)表示重復應用于前一個結果的函數b(),總共h次。
●r(v)是任何可快速計算的1對1函數,該函數將一組輸入值映射到它自己。循環(huán)的(旋轉的)位移位是這種函數的一個例子。
●c(v1,v2,...)是一個函數,其組合數值v1,v2等,使得在給出結果和除一個運算數以外的所有運算數的情況下,剩余的運算數可以被簡單地推導出來。也可以選擇c()以便使如果運算數的位是獨立的和無偏差的,則結果的位也將是獨立的和無偏差的。XOR函數是這種組合函數的一個簡單例子。c()理想上也應該是用來簡單地推導出剩余運算數的函數,如XOR的情況下,為v1=c(c(v1,v2,...),v2,...)。
在節(jié)4.5中說明所有的構造的一個通用模型,但先用它自己的術語介紹每個方案更為清楚。
雙向哈希鏈(BHC)雙向哈希鏈結構只被證明在一種有限的形式下是安全的,但是我們堅持對其進行描述。因為該有限版本形成了一個后面方案的基礎。也可能有使用無限形式的情形1.發(fā)送者隨機地生成2個初始種子值,v(0,0)&v(0,1)。作為一個具體的例子,我們將假設這些值為128位寬。
2.發(fā)送者決定所需的最大密鑰序列的長度,H3.發(fā)送者對每個種子重復地應用相同的隱蔽函數以生成2個長度(H)相等的種子鏈。因而值為v(0,0)到v(H-1,0)和v(0,1)到v(H-1,1)。由于項H-1經常出現,簡明起見,我們引入另一個常數G=H-1。
因此在形式上,v(h,0)=bh(v(0,0));v(h,1)=bh(v(0,1)) (4.1.1)4.為了生成密鑰k0,發(fā)送者組合鏈0的第一個種子v(0,0)和鏈1的最后一個種子v(G,1)。
為了生成密鑰k1,發(fā)送者組合鏈0的第二個種子v(1,0)和鏈1的倒數第二個種子v(G-1,1),以此類推。
形式上,kh=c(v(h,0),v(G-h,1))(4.1.2)嚴格地說,使用的流密碼不需要128b密鑰,因此可以通過截斷該組合結果的最高(或最低)有效位導出一個較短的密鑰,一般截至64b。流密碼的選擇是不相關的只要它是快速和安全的。
5.發(fā)送者開始多點傳送該流,用k0加密ADU0(應用數據單元0),用k1加密ADU1,以此類推。但至少保持ADU序列號為不加密。
6.如果發(fā)送者委托密鑰管理,它必須秘密地將2個初始種子值傳送給密鑰管理器。生成新的初始種子對并將其與用先前計算的密鑰加密過的流式數據并行傳送給密鑰管理器。
接收者如下重新構造該序列的一部分1.當接收者被授權訪問ADUm到ADUn時,發(fā)送者(或密鑰管理器)單點傳送種子v(m,0)和v(G-n,1)給該接收者。
2.該接收者通過對用(4.1.1)發(fā)送的種子重復地應用隱蔽函數來生成種子鏈v(m,0)到v(n,0)和v(G-n,1)到v(G-m,1)。
3.接收者用與發(fā)送者相同的方式用(4.1.2)生成密鑰km到kn。
但是,該接收者無法知道種子v(h,0)(其中,h<m)或v(h,1)(其中,h>n),除非對那些發(fā)送者已揭示的隱蔽種子之前的隱蔽種子進行窮盡搜索。因此,接收者無法計算超出km到kn范圍的密鑰。
4.通過發(fā)送該范圍的界限處的相關種子,任何其它的接收者可以訪問一個完全不同的ADU范圍;“開始”種子來自第一鏈,“結束”種子來自第二鏈。
圖7中深灰色背景的種子的范圍表示對第一個提到的接收者隱蔽的種子。連向深灰色背景的密鑰的引線也是對該接收者隱蔽的。
因此,通過對于每個話路每個接收者僅發(fā)送2個種子,每個接收者可以被授權訪問任何鄰接密鑰范圍。不幸的是,這種構造只能有限的使用,除非每個接收者可以被限制為在一個發(fā)送者序列中曾經只有一個密鑰范圍被揭示過。如果一個接收者被授權訪問一個早先范圍,然后另一個后來范圍(比如k0到k1然后為kG-1到kG),她可以計算在(k0到kG)之間的所有的值。這是因為種子v(0,0),v(G-1,1),v(G-1,0)和v(G,1)將必須被揭示,但僅v(0,0)和v(G,1)可以揭示整個序列。
一個可以繞過這個限制的方法是定期地用一個新的種子值重新開始第二個鏈(即保持H為低)并禁止一個接收者在H個ADU內進行兩次訪問。但是,這需要在密鑰管理器上保存每個用戶的狀態(tài)。可能有一些適合本方案的合適的應用,例如用戶只能擴充訂購而不能退出然后恢復的商業(yè)模型。這種情況下,這將是一個非常有效的方案。
第二個可以繞過這個限制的方法是注意只有在兩個最低限度的短鏈之間有間隙空間的情況下才可能有兩個不相交的鏈。換言之,H<4的鏈永遠是安全的。這種短鏈似乎不大使用,但后面我們將用該特征從短BHC片段建立一個混合構造。
二叉哈希樹(BHT)二叉哈希樹需要兩個公知的隱蔽函數b0()和b1()。我們將它們稱為“左”和“右”隱蔽函數。一般它們可以通過在單個隱蔽函數b()前應用兩個簡單的1對1函數r0()和r1()中的一個,由單個隱蔽函數b()來構造。如圖8所示。
這樣b0(s)=b(r0(s));b1(s)=b(r1(s))例如,第一個公知的隱蔽函數可以是一個一位左旋循環(huán)移位后跟一個MD5哈希函數,而第二個隱蔽函數可以是一個一位右旋循環(huán)移位后跟一個MD5哈希函數。其它的可選方法可以是在一個隱蔽函數之前先與1進行XOR或連接一個公知的字??磥磉x擇消耗處理器資源最小但消耗量一樣的兩個函數是有利的,因為這將在所有情形下平衡負載并限制對隱藏信道的易感性,如果處理器負載水平將揭示出所選擇的被執(zhí)行函數就可能出現這種隱藏信道。另外,為了提高有效性,可以使用哈希函數的兩個類型,例如具有兩個不同的初始化向量的MD5。但是,竄改試驗算法似乎是不明智的。
密鑰序列如下構造1.發(fā)送者隨機地生成一個初始種子值s(0,0),作為一個具體的例子,我們假定其值為128位寬。
2.在需要一個新的初始值前,發(fā)送者決定需要的最大的樹深度D,該深度將導出一個最大密鑰序列長度,N0=2D。
3.發(fā)送者分別對該初始種子應用“左”和“右”隱蔽函數,生成兩個“左”和“右”第一層中間種子值s(1,0)=b0(s(0,0));s(1,1)=b1(s(0,0))。
發(fā)送者生成四個第二層中間種子值s(2,0)=b0(s(1,0));s(2,1)=b1(s(1,0));s(2,2)=b0(s(1,1));s(2,3)=b1(s(1,1)),以此類推,創(chuàng)建一個深度為D層的中間種子值的二叉樹。
形式上,如果sd,i是一個比初始種子s0,0低d層的中間種子sd,i=bp(s(d-1),i/2) (4.2.1)其中i為偶數時p=0,i為奇數時p=1。
4.如前所述,通過從橫穿樹的葉子的種子值或通過它們的截斷的推導值來構造該密鑰序列。
即,如果D=5,k0=s(5,0);k1=s(5,1);...k31=s(5,31)。
形式上,ki=sD,i(4.2.2)5.發(fā)送者開始多點傳送該流,用k0加密ADU0,用k1加密ADU1,以此類推。但至少保持ADU序列號為不加密。
6.如果發(fā)送者委托密鑰管理,它必須秘密地將初始種子值傳送給密鑰管理器。生成新的初始種子并將其與用先前計算的密鑰加密過的流式數據并行地傳送給密鑰管理器。
接收者如下重新構造該序列的一部分1.當一個接收者被授權訪問從ADUm到ADUn時,發(fā)送者(或一個密鑰管理器)將一個種子集合單點傳送給該接收者(例如使用SSL)。該集合由離樹根最近的中間種子組成,這些中間種子使得能夠計算需要的密鑰范圍而不能計算該范圍之外的任何密鑰。
這些通過檢驗最大和最小種子的索引i來識別,該檢驗基于下面的事實一個偶數索引總是一個“左”孩子,而一個奇數索引總是一個“右”孩子。從葉子開始往上,在樹的每一層上進行檢驗。在移到上一層之前總是需要揭示一個“右”最小值或一個“左”最大值。如果一個種子被揭示,索引就向內移動一個種子,以便在移到上一層前,最小值和最大值總分別為偶數和奇數。為了向上移一層,如果需要,最小和最大索引被二等分并下舍入。這保證它們之間的差可預測地減2。如前所述,對新索引重復該奇數/偶數檢驗,揭示“右”最小值或“左”最大值。繼續(xù)該處理直到最小值和最大值交錯或相遇。它們可能在其中一個或兩個都向內移動后交錯。它們可能在兩個都向上移動后相遇,在該情形下,需要在結束該過程前揭示它們相遇處的種子。在附錄A中以類似C的編碼更形式上說明該過程。
2.顯然,每個接收者需要知道給予他的每個種子在樹中的位置。這些種子和它們的索引在被揭示時可以被顯式地成對。另外,為了減少所需的帶寬,協(xié)議可以指明發(fā)送種子的順序以便可以從最小和最大索引及種子的順序隱含地計算出每個索引。這是可能的,因為只有一個允許重新創(chuàng)建任何一個密鑰范圍的最小種子集合。
每個接收者可以與發(fā)送者一樣對這些中間種子重復相同的隱蔽函數對以重新創(chuàng)建密鑰序列,km到kn(等式4.2.1&4.2.2)。
3.通過向其它的任何接收者發(fā)送一個不同的中間種子集合,可以授權他訪問一個完全不同的ADU范圍。
圖9中示出了一個D=4的密鑰序列的創(chuàng)建過程。
作為一個例子,我們循環(huán)相關的中間種子,這些中間種子允許一個接收者重新創(chuàng)建從k3到k9的密鑰序列。對接收者隱蔽的種子和密鑰以灰色背景表示。當然,在實踐中一般D的值大于4。
注意到每一層可被分配一個任意的d值,只要它唯一地標識該層即可。什么也不依賴于d或D的實際值。因此發(fā)送者不必揭示樹向上延伸多遠,從而改善了保密性。
往往一個話路在開始時會有一個未知的持續(xù)期間。顯然,D的選擇限制了從任何一個開始點開始的密鑰序列的最大長度。最簡單的作法(work-round)是如果需要,生成一個新的初始種子并在舊樹旁邊開始一個新的二叉哈希樹。如果所有的發(fā)送者和接收者都知道D,各方都能立即發(fā)現超出最大密鑰索引2D的密鑰范圍。在這種情形下給每個新樹分配一個“樹-id”并與每個樹的種子一起指明它是明智的。
另一個避免該上限的方法是使D是可變的,例如,D=D0+f(i),而不是常數。圖10中示出了這樣一個連續(xù)的BHT,其中D0=4并且每M個密鑰D加1。在本例中,M取固定值7。但是增加該復雜性并沒有太大意義,因為不同的樹分支的公共種子只是沿著樹的最右手邊分支的種子sd,2d。如果這些種子中的任何種子曾被揭示過則整個未來的樹都將被揭示。因此,這個“改進”將永遠不會在向用戶揭示任意密鑰范圍時被用來提高效率,所有其能節(jié)省的只是發(fā)送者非常偶然地將普通的消息中的一個新初始種子傳遞給密鑰管理器。相反,它引入一個安全缺陷,因為它創(chuàng)建一個“無限”值種子的集合,對此,任何數量的窮盡搜索都是值得做的。另一方面,如第一種作法那樣必需定期生成一個新初始種子,對BHT的攻擊脆弱性設置了一個上限。
二叉哈希鏈-樹混合(BHC-T)這種構造方法被稱為混合是因為二叉哈希樹(BHT)用只有兩個種子長的雙向哈希鏈(BHC)的片段構建。為了便于理解,我們將以從根到葉子的方向構建樹以構造一個BHC片段來開始說明,如圖11所示。這僅僅是為了便于理解,后面我們將推薦構建樹的最佳方式是從邊而不是從根開始。
1.我們假設有兩個隨機生成的初始種子值s(0,0)和s(0,1)。作為一個具體例子,同樣,我們假定它們的值為128位寬。
2.現在我們對每個種子應用相同的隱蔽函數以生成兩個隱蔽的種子v(1,0)和v(1,1)。
3.為了生成子種子s(1,1),我們將第一個種子s(0,0)與隱蔽的第二個種子v(1,1)組合。
為了生成子種子s(1,2),我們將第二個種子s(0,1)與隱蔽的第一個種子v(1,0)組合。
4.如果我們現在隨機地生成一個第三初始種子s(0,2)并隱蔽其以生成v(1,2),我們可以用相同的方式組合第二和第三初始種子和它們的相反隱蔽值以生成另外兩個子種子s(1,3)和s(1,4)。這意味著每對父母種子生成4個孩子,當與其一邊的兄弟(同父母)組合時生成兩個,當與另一邊的異父(母)兄弟組合時生成另外兩個。結果,如果新的子種子象他們的父母那樣被隱蔽和組合,這種構造生成一個二叉樹,因為種子的個數在每一次生成時翻倍。但是,該樹只在種子的頂行(假定在該行創(chuàng)建了2個以上的初始種子)的中間之下分支。如果從頂部構建(參見后敘),樹的邊向內“萎縮”。
形式上,s(d,i)=c(s(d-1,i/2),v(2d-1,i/2+1)) i為奇數=c(s(d-1,i/2),v(2d-1,i/2-1)) i為偶數(4.3.1)其中,v(h,j)=b(s((h-1)/2,j))。
圖11a)圖示BHC-T混合的兩對父母種子<s(0,0),s(0,1)和<s(0,1),s(0,2)。其中的環(huán)表示每對公共的父母種子,外邊的環(huán)中的外側值落在圖的邊沿之外,因為我們只關注中央的父母種子s(0,1)的后代。圖11b)示出相同的3個父母生成相同的4個孩子,但是為了更好地說明二叉樹是如何形成的,從圖中隱藏了被隱蔽的種子,就好象它們從來就沒有通信過。在下面的圖中帶環(huán)的父母種子表示與上面的圖中所示的相同的3個帶環(huán)的種子。將序列延續(xù)到右邊的兩個點劃箭頭表示如果在右邊還有另外一個父母,父母種子s(0,2)是如何生成另外兩個孩子的。與每對箭頭相交的點劃線表示該線之上的父母組合以生成線之下的孩子。我們將在后面的圖中用簡化的形式表示這種構造。
圖12表示一個示例混合樹的一部分。正如二叉哈希樹,用于加密連續(xù)的ADU的密鑰是樹的葉子上的種子的序列或它們的截斷的推導值。圖中示出如何通過把帶環(huán)的種子揭示給一個特定接收者來揭示一個示例密鑰范圍,k3到k9。
為了說明如何從邊而不是從根開始構建樹,我們現在來說明本構造的進一步的扭曲(twist)。先前注意到選擇XOR函數是因為如果兩個運算數的XOR產生一個第三值,這3個值中的任何2個可以被XOR以產生該第三個值。這在圖13中說明,其中所有種子的值都與圖11中的相同。如果s(0,1)初始未知,而s(0,0)和s(1,2)已知,則由于下列“扭曲”屬性可以推導出s(0,1)和s(1,1)s(0,1)=c(s(1,2),b(s(0,0)))s(1,1)=c(s(0,0),b(s(0,1)))圖14表示發(fā)送者如何從“邊”開始構建BHC-T混合構造。種子創(chuàng)建的順序用編號的圓圈表示??梢园慈魏雾樞騽?chuàng)建的種子都被分配有相同的編號后跟一個區(qū)分字母。與帶環(huán)的節(jié)點相鄰的較暗的圓圈表示必須隨機地生成的種子。我們把這些種子稱為初級種子。這些種子決定下一個帶環(huán)的節(jié)點之前的所有的后續(xù)中間種子的值。
1.發(fā)送者隨機地生成種子0的128位的值。
2.然后生成種子1&2。它們形成4個種子構成的框的對角,因此通過“扭曲”算法設定相反的對角值3和4形式上,s(d-1,i/2)=c(s(d,i),v(2d-1,i/2+1))如果i為奇數
=c(s(d,i),v(2d-1,i/2-1))如果i為偶數 (4.3.2)其中,v(h,j)=b(s((h-1)/2,j))注意如果根種子的d=0,則d沿從葉子到根的方向成為遞增的負數。
3.然后必須生成種子5,與2形成另一對對角。
4.這通過等式(4.3.2)揭示相反的對角種子6和7。
5.種子7和2形成另外一個4種子框的上面的角,通過等式(4.3.1)設定種子8a&8b。
6.在種子9被隨機地生成之后該圖形以類似地方式繼續(xù)。這種構造方法的一個優(yōu)點是樹可以無限制地生長—不必事先決定任何限制。
7.發(fā)送者開始多點傳送該流,用k0加密ADU0,用k1加密ADU1,以此類推。但至少保持ADU序列號為不加密。
即,ki=s(D,i)其中D=0 (4.3.3)8.如果發(fā)送者委托密鑰管理,它必須秘密地將初級種子傳送給密鑰管理器。生成新的初級種子對并將其與用先前計算的密鑰加密過的流式數據并行傳送給密鑰管理器。
接收者如下重新構造序列的一部分1.當一個接收者被授權訪問從ADUm到ADUn,發(fā)送者(或一個密鑰管理器)將一個種子集合單點傳送給該接收者。該集合由樹中能計算所需密鑰范圍的中間種子的最小集合組成。
這些通過以與BHT類似但鏡相的方式檢驗最大和最小種子的索引i來識別。在移到上一層之前總是需要揭示一個“左”最小值或一個“右”最大值。如果一個種子被揭示,索引就向內移一個種子,以便在移到上一層前,最小值和最大值總分別為奇數和偶數。為了向上移一層,如果需要,最小和最大索引被二等分并下舍入。這保證它們之間的差可預測地減小1。對新索引重復該奇數/偶數檢驗。繼續(xù)該處理直到最小值和最大值相隔二或三。如果它們相隔二,則它們與它們之間的種子一起被揭示。如果它們被相隔三,如果最小值為偶數,則它們僅與它們之間的兩個種子一起被揭示。如果最小值為奇數,則需要再向上移一層以便什么也不揭示并允許開始下一輪。在檢驗開始之前,對于被請求的范圍的寬度已經小于2的情況檢驗異常初始條件。
在附錄B中以類似C的編碼更形式上說明該過程。
2.顯然,每個接收者需要知道其所給定的每個種子在樹中的位置。這些種子和它們的索引在被揭示時可以被顯式地成對。另外,為了減少所需的帶寬,協(xié)議可以指明發(fā)送種子的順序以便從最小和最大索引及種子的順序隱含地計算出每個索引。例如,附錄B中的算法對相同的密鑰范圍總是以相同的順序揭示相同的種子。
3.每個接收者可以與發(fā)送者一樣對這些中間種子重復相同的隱蔽和組合函數對,以重新創(chuàng)建密鑰序列,km到kn(等式4.3.1,4.3.2&4.3.3)。
4.通過向其它的任何接收者發(fā)送一個不同的中間種子集合,可以授權他訪問一個完全不同的ADU范圍。
由于BHC-T可以從邊開始構建,它適合用于持續(xù)期間未知的話路。連續(xù)地隨機生成新中間根種子限制了它對攻擊的脆弱性,但允許序列的連續(xù)計算。為了進一步限制脆弱性,發(fā)送者可以延遲未來種子的生成以拒絕任何接收者計算超出序列中的一個特定未來點的密鑰。這將限制種子空間的強力搜索可用的時間。但是,從邊開始構建樹導致取決于每個新根種子(從而對該種子的攻擊值)的密鑰的個數成指數地增長。
通過定期地遞增被定義為葉子層的層,在每M個密鑰(除了第一個外)的序列之后將其向離該根更近的方向移動一層,可以界定根種子的值。
形式上,這需要將等式(4.3.3)替換為ki=s(-i/M,i)i<M時ki=s(1-i/M,i) i=M時(4.3.4)這在圖15中用M=8來說明。當然,在實踐中M應該要大得多,以便保證不用觸及樹的左手邊最上面的分支就能有效地描述所有合理長度的接收者話路。
前面我們注意到只有當H<4時,BHC是固有保密的。在本鏈樹混合中使用的BHC片段的H=2,這保證了該混合方案的保密性。我們還建議一個二叉鏈樹混合可以從長度為3(H=3)的鏈片段構造而不犧牲保密性。在這種情形下,每個父母種子在與其兄弟或異父(母)兄弟配對時將產生6個孩子,使在每一層的樹寬度3倍增長(一個三叉樹-BHC3-T)。這種構造方法如圖20e所示,但更詳細的分析留給將來的工作。它可能比BHC-T更為有效,但稍微復雜一點。
二叉哈希樹II(BHT2)我們現在提出另一種基于二叉樹的構造,其是以加強對強力攻擊的安全性的方式組合BHT和BHC-T方法。我們使用相同的種子符號sd,i,但是在d的起源位于BHT的根的情況下,其值隨著接近葉子而增大。圖16中示出樹的一個元素。與BHT的情形相同,我們在這種構造方法中使用兩個隱蔽函數b0()和b1(),我們分別稱之為“左”和“右”。
1.我們假設有兩個隨機生成的初始種子值s(0,0)和s(0,1)。作為一個具體例子,同樣,我們假定它們的值為128位寬。
2.發(fā)送者決定需要的最大樹深度D。
我們從每個初始種子產生2個隱蔽值,每個種子分別使用每一個隱蔽函數。
v(1,0)=b0(s(0,0));v(1,1)=b1(s(0,0));v(1,2)=b0(s(0,1));v(1,3)=b1(s(0,1))。
3.為了生成子種子s(1,1),我們將兩個左隱蔽種子v(1,0)和v(1,2)組合。
為了生成子種子s(1,2),我們將兩個右隱蔽種子v(1,1)和v(1,3)組合。
4.如果我們現在隨機地生成一個第三初始種子s(0,2),我們可以用相同的方式組合第二和第三初始種子以產生另外兩個子種子s(1,3)和s(1,4)。與BHC-T混合同樣,這意味著每個父母種子生成2個孩子以構建一個二叉樹,但邊沿向內“萎縮”。事實上,如果層d包含nd個種子,則n(d+1)=2nd-2.只要使用2個以上的初始種子,則該樹將趨向一個二叉樹。
形式上s(d,i)=c(v(2d-1,i/2),v(2d-1,i/2+1)) i為奇數=c(v(2d-1,i/2),v(2d-1,i/2-1)) i為偶數(4.4.1)其中,v(h,j)=b(s((h-1)/2,j))。
5.然后就用橫穿樹的葉子的種子值構造密鑰序列。
形式上,ki=sD,i(4.4.2)6.發(fā)送者開始多點傳送該流,用k0加密ADU0(應用數據單元0),用k1加密ADU1,以此類推。但至少保持ADU序列號為不加密。
圖16a)圖示BHT2的兩個父母種子對<s(0,0),s(0,1)和<s(0,1),s(0,2)。與用于說明BHC-T混合的方式完全相同,在圖的a)部分和b)部分中,環(huán)表示每對公共的父母種子。與前述相同,圖16b)示出如何描述用BHT2構建的種子樹。為簡明起見,從外觀上隱藏了被隱蔽的中間種子值。一旦這些內部值被隱藏,則所得的BHT2看上去與圖4.3.2中的BHC-T混合相同。
用于計算要揭示一個密鑰范圍需揭示哪些種子的算法也與附錄B中的BHC-T混合的算法相同,因此圖12中帶環(huán)的種子也是將k3到k9揭示給一個特定的接收者。
橫穿一個從3個初始種子(在層0)構建的深度為D的BHT2的葉子的密鑰的最大個數為2D+2。如果需要一個連續(xù)的樹,密鑰可以被定義為從中間種子層下行而不是停留在橫穿它們的層,與圖10中所示的連續(xù)BHT類似。
我們已經在(4.4.1)中示出如何只用4個隱蔽值的兩個組合值來構建一個二叉樹。
每次取4個值中的2個,得到6個可能的組合c1=c(v(1,0),v(1,1))
c2=c(v(1,2),v(1,3))c3=c(v(1,0),v(1,2))c4=c(v(1,1),v(1,3))c5=c(v(1,0),v(1,3))c6=c(v(1,1),v(1,2))c1和c2每個只依賴于一個父母種子。因此,僅揭示父母就會揭示一個孩子,防止二者都被使用。另外,c6=c(c3,c4,c5)和c5=c(c3,c4,c6),以此類推。因此揭示這些組合中的任意3個就隱含地揭示第四個。但是,可以使用任意3個組合而不是象BHT2中那樣僅使用2個。對所得到的三叉樹(BHT3)的分析留給將來的工作。
通用模型我們已經提出4種密鑰序列構造,現在提出一個通用模型,其允許所有這些方案和其它類似的方案可以用相同的術語來描述。
我們定義兩個坐標平面●一個具有位于坐標(h,j)的離散值v的“隱蔽”平面,這樣,通常在一個h坐標的值被隱蔽以產生h+1處的值,具體的映射關系依賴于該方案。
●一個具有位于坐標(d,i)的離散值s的“組合”平面,這些值是以同樣依賴于該方案的方式組合來自隱蔽平面的值而得到的結果。
每種構造都由在隱蔽平面上的基本數學“分子”構建。圖20a到20e將這些分子表示為一組粗黑箭頭,表示從h=0的軸開始,從一個值v映射到下一個值的隱蔽函數,為了示出該構造如何在j軸方向生長,粗的淺灰色的箭頭表示對完成下一個分子的相鄰值的隱蔽。一個分子由三個常數定義●H,一個分子沿隱蔽平面的h軸的高度●P,在一個分子中使用的隱蔽函數的個數●Q,為了產生組合平面中的每個值,組合來自隱蔽平面上的每個分子所得到的值的個數。
隱蔽平面中的一個分子的初始值v直接從組合平面上的先前值s映射(在圖20a到20e中以點劃線表示)如果h mod H=0;v(h,j)=s(MH,j) (4.5.1).
隱蔽平面分子中的后續(xù)值從先前值隱蔽(用粗箭頭表示)如果h mod H 0;v(h,j)=bp(v((h-1),j/P)) (4.5.2).
其中,p=j mod P然后,隱蔽平面分子中的最終結果值被組合以產生組合平面中的下一些值(用細線表示)s(d,i)=c(v(h0,j0),...v(hq,jq),...v(h(Q-1),j(Q-1)) (4.5.3).
其中hq和jq被定義為每個構造的參數q的函數。
因此,沿隱蔽平面的h軸的每H大小,組合平面中的d遞增1。
表1給出H,P和Q的值和定義每個構造的hq和jq的公式。它還參照說明使用本通用模型的各構造的附圖。
表4.5.1-定義每個密鑰序列構造的通用模型的系數在所有情形下,除非需要一個連續(xù)的構造,密鑰由下式定義的序列構建ki=s(D,i) (4.5.4)其中D=log(N0)其中N0是需要的密鑰的最大個數順便提一下,單向函數樹(OFT)(one-way function tree)[McGrew98]由設定{...?}產生。
存儲和處理之間的折衷在所有的MARKS構造中,在發(fā)送者加密前和在接收者解密前,都用少量的種子生成較多的密鑰。在任一情形下,可能用于存儲密鑰序列的存儲容量有限,密鑰序列所需的存儲量相對于種子而言成指數增長。在這種情形下,可以計算前面幾個密鑰而存儲允許計算其余密鑰的種子。通常,不是節(jié)省存儲容量就是避免相同計算的重復,這取決于存儲或處理時間中哪個最緊缺。
利用BHC,在計算第一密鑰前,必須遍歷整個反向鏈。但不必存儲每個值??赡艽鎯χ虚g點,4分之3點等處的值而其余的被丟棄。由于該序列回退進(eatback into)該反向鏈,所以下一個值總可以通過從先前存儲的值再次運行哈希鏈,根據需求在途中存儲更多的值來重新計算。
利用所有的樹構造,需要在話路開始前計算任何在通向第一密鑰的樹的分支下的中間種子,但同樣它們不必被全部存儲。離葉子最近的中間種子應被存儲(高速緩存),因為它們將最先用來計算下幾個密鑰。當需要離根較近的中間種子時,只要從未丟棄密鑰管理器原始發(fā)送的種子就可以重新計算它們。
效率正如上面提到的,H3的BHC絕對有效但是不安全。因此我們將把討論局限于已經詳細地分析過的基于二叉樹的構造。表5.2.1表示BHT,BHC-T和BHT2的每個保密多點傳送話路的各種參數,其中R,S和KM分別是接收者,發(fā)送者和密鑰管理器,如節(jié)3中的定義,N(=n-m+1)是接收者需要的隨機位于密鑰空間中的密鑰范圍的長度,Ws是種子的大小(一般為128b),Wh是協(xié)議頭開銷的大?。籺s是隱蔽一個種子(加上一個相對可以忽略的循環(huán)移位和/或組合運算)所用的處理器時間。
表1-BHT,BHC-T和BHT2的每個保密多點傳送話路的各種參數[i]如表中所示,用于每個接收者的話路設立的單點傳送消息的大小與每個接收者需要的最小存儲量相等。只有當接收者如上所述為了處理而選擇折衷存儲時才是這樣。已經為最小發(fā)送者存儲行使用相同的折衷。處理等待時間是指接收者在接收到其話路的單點傳送設立消息后準備對輸入數據的解密所需的時間。應注意在別的成員加入或退出時沒有等待時間開銷,就如同在適用于非計劃逐出的方案中一樣。應注意每個密鑰的處理數字假定密鑰的連續(xù)訪問。在這種情形下,在任何話路中要存儲的最有效值(除了構造樹所需揭示的最小集合外)是從根到當前使用密鑰的分支上的那些值。每個密鑰的平均處理就是整個樹中的哈希運算的次數除以葉子上的密鑰的個數。只有發(fā)送者(或者有多個發(fā)送者時為一個組控制器)被要求為初始種子生成隨機位。需要的位數顯然等于這些初始種子的最小發(fā)送者存儲量。
可以看到只有依賴于組成員的大小的參數是關于每個接收者的參數。兩個這樣的參數(存儲量和處理等待時間)的開銷被發(fā)布給組成員,因此對每個接收者是常數。只有單點傳送消息的大小會在密鑰管理器處造成隨組成員的大小線性增長的開銷,但是該開銷在每個接收者話路中只負擔一次。當然,沒有一個每接受者開銷自身是依賴于組大小的,就如同在所有允許非計劃逐出的方案中一樣。因此,提出的所有的構造都是高度可升級性的。
相互比較這些方案,可能令人驚訝,混合BHC-T和BHT2在發(fā)送消息方面的效率與BHT非常相近。它們都是只要求每個接收者話路設立消息中多一個種子的這樣一個平均水平。如果N較大,與每個接收者話路需要的密鑰的個數相比較這是微不足道的。平均來講,BHC-T需要的處理時間是BHT的兩倍,BHT2需要的處理時間是BHT的四倍。我們將看到保密性的提高使這些開銷是值當的。
BHT使用BHT,樹中的每個種子在價值上是其孩子的兩倍。因此,傾向于窮盡搜索種子空間以找到對樹中當前已知的最高種子值隱蔽的正確值。對MD5哈希來說,這平均包括2127次MD5運算??赡軙业揭粋€值,其不正確但是對一個與已知值沖突的值隱蔽(一般用MD5每264次運算找到一個)。這只有通過使用種子以產生一個密鑰范圍并對據推測用其加密的一些數據進行檢驗時比較明顯。在成功破解一層之后,下一層又將在價值上為兩倍,但將需要相同的強力來分裂。應注意在Sun SPARCserver-1000上一個128b輸入的MD5哈希(可移植源)大約用4us。因此,2128次MD5運算將需要4e25年。
BHC-T使用BHC-T混合,抗攻擊的強度取決于攻擊發(fā)生在哪個方向。如果我們取BHC-T的單個元素,它有4個種子值-有2個父母和2個孩子,如表5.3.1中所示并在圖17中說明。給出4個值中的任何1個,都不能計算出其它的值,因為沒有足夠的信息來檢驗正確性。給出4個值中的3個,只用一個隱蔽運算就可以計算出第四個。只給出4個值中的2個,表中列出了計算其它2個值的難度,這取決于給出的是哪2個值。字母“i”表示一個輸入值,單元格中的值表示在給定輸入的情況下確保找到輸出值對所必需的隱蔽函數運算的次數。w是數空間中的位數(MD5為128)。圖17中圖示出相同的信息,輸入值上帶圈,隱蔽值的背景為灰色。
圖17-揭示和隱蔽BHC-T中的種子對如果給出在“方塊”的一個邊上的一個父母和一個孩子,則可以窮盡地搜索對面的父母,通過把每個位隱蔽并與2個給定值的XOR比較來檢驗每個值。因此對“邊路”(sideways)攻擊可以保證在2w次隱蔽運算之后能夠成功。
如果只給出2個孩子值,對父母中的一個進行窮盡搜索稍稍有點麻煩。即,推測一個父母值s(0,1),僅當下式成立時該值是正確的c(s(0,1),b(c(s(1,1),b(s(0,1)))))=s(1,2)因此,對“向上”攻擊可以保證在2(w+1)次隱蔽運算之后能夠成功。
在這種構造中,找到與2個給定值相適合但也不是正確的值對(一個雙重沖突)的2個未知值的可能性較小。如果這種對確實出現,只能通過用它們產生密鑰并用加密數據檢驗該密鑰來檢驗它們。因此,雙重沖突的較小概率可以稍微地減少攻擊任務的復雜性。
邊路攻擊只能在與已知的最高種子相同的層最多取得一個種子。由于在右邊的下一個“框”中只知道一個值,對右側的攻擊會在一個偶數索引的孩子處結束。同樣地,對左邊的攻擊被一個奇數索引的孩子阻斷。向上的攻擊是所剩的唯一的選擇。一個成功的向上攻擊不給出任何多余的密鑰,但是當后跟一個邊路攻擊時會揭示上一個邊路攻擊的密鑰的兩倍之多。
BHT2BHT2抗攻擊的強度采用與BHC-T混合相似的形式,只是設計的抗向上攻擊的強度要大得多。與BHC-T同樣,組成方塊的4個值中只知道一個時不能揭示任何其它的值。但是,與BHC-T不同,3個值不一定能立即給出第四個。如果只有一個父母未知,需要2w次隱蔽運算來保證找到它。只給出其中的2個值時,表5.3.2列出了計算另外2個值的難度,這取決于給出的是哪2個值。如前所述,表格中的值表示在給定的輸入時保證找到輸出值對所必需的隱蔽函數運算的次數。圖18中圖示出相同的信息,輸入值上帶圈,隱蔽值的背景為灰色。
表2-揭示和隱蔽BHT2中的種子對圖18-揭示和隱蔽BHT2中的種子子集合如果給出一個父母和在“方塊”的任一個邊上的一個孩子,則可以窮盡地搜索對面的父母,通過把每個值隱蔽并與2個已知值的XOR比較來檢驗每個值。因此對“邊路”攻擊可以保證在2w次隱蔽運算之后能夠成功。給出一個父母和對面的一個孩子的情況下也一樣。
如果只給出2個孩子的值,在BHT2中對父母值的窮盡搜索要麻煩得多。對每個右邊父母值s(0,1)的推測值,它必須是左隱蔽的,然后左父母值必須被窮盡地搜索以找到一個左隱蔽的值,將其與第一左隱蔽的推測值組合以給出該左孩子的給定值。但是,當這2個父母推測值是右隱蔽時,他們不可能被組合而給出正確的右孩子。因此,右父母的下一個推測值必須與一個左父母的隱蔽值的窮盡搜索組合,如此類推。這相當于只給出s(1,1)和s(1,2),要解下列聯立方程c(b0(s(0,0)),b0(s(0,1)))=s(1,1)c(b1(s(0,0)),b1(s(0,1)))=s(1,2)為了保證成功為此需要窮盡搜索2個父母的組合的方陣,即22w次隱蔽運算。在從孩子到父母的方向上的較大的抗強力攻擊的強度在圖中以較深的灰色背景顯示。另外一種方法是存儲一個父母的所有的左隱蔽值和右隱蔽值以避免重新計算它們。但是只有一個父母的每個可能值的未被索引的左隱蔽值會消耗多于5e27TB的存儲量,其開銷使其他的攻擊方法在經濟上要合算得多。
有關雙重沖突的評述與BHC-T一樣適用于BHT2,只是錯誤的值對只可能在4個哈希沖突同時地偶然發(fā)現時出現,該情況出現的概率非常小。
同BHC-T中同樣,BHT2中的邊路攻擊被限制在最多一個“框”中。因此,為了獲得任何有效個數的密鑰,馬上就必須面臨向上攻擊。一個邊路攻擊的2w次隱蔽運算可能比合法地獲得被攻擊的密鑰更昂貴。一旦必須面臨向上攻擊,2w的隱蔽運算次數確實會導致尋找別的方法。
一般安全性通常,構建一個樹需要的隨機值越多,它能包含的在由每個新隨機種子生成的子樹的界限內的持續(xù)攻擊就更多。但是,正如上面關于連續(xù)樹的討論中所述的那樣,對于較長的話路,在安全性和連續(xù)的密鑰空間的方便性之間有一個折衷。隨機生成的種子的隨機性是另一個須被正確設計的潛在缺陷領域。
所有MARKS構造在合法組成員勾結時都是脆弱的。如果一個成員的子組在他們內部同意每個人購買一個不同范圍的密鑰空間,他們可以共享接收到的種子從而他們都能夠訪問他們的本來是單獨的密鑰空間的并集。套利是已討論過的成員勾結的一個變種。這種情況是一個組成員購買整個密鑰序列并將各部分以比出售價低的價格出賣,如果大部分密鑰由超過一個的用戶購買仍能從中牟利。用無組成員防止勾結的保護方法在關于“水印”的節(jié)6.3中討論。
最后,對任何特定的應用,整個系統(tǒng)的安全性顯然依賴于設立話路時使用的安全的強度。上面的例子情形描述需解決的問題并推薦標準的加密技術以滿足它們。使用任何MARKS構造的應用的總體的安全性總是與最弱的部分的強度一樣。
當前工作中討論的密鑰管理方案適用于與其它的機構進行模塊組合以滿足下述的其他的商業(yè)需求。
多發(fā)送者的多點傳送只要所有的發(fā)送者使用相同的密鑰序列,多發(fā)送者的多點傳送話路可以通過使用MARKS構造來保密。它們不必同時使用相同的密鑰,只要它們使用的密鑰都是同一個序列的一部分即可。只要將ADU索引作為加密的ADU的頭來不加密地傳輸,即使每個發(fā)送者與其他發(fā)送者失序,接收者也知道使用哪一個密鑰。如果對應用的商業(yè)模型很重要的話,節(jié)3的例子情形描述了多個發(fā)送者如何同步它們使用的ADU索引。
如果多發(fā)送者的多點傳送中的每個發(fā)送者使用不同的密鑰或密鑰序列,每個發(fā)送者創(chuàng)建一個不同的保密多點傳送話路即使他們都使用相同的多點傳送地址。這由多點傳送話路和2.1節(jié)中定義的保密多點傳送話路之間的區(qū)別可以推出。在這種情形下,每個保密多點傳送話路必須被獨立于其它的話路創(chuàng)建和維護。但是,還有一些被稱為分期償還初始化的范圍[Balen99]。即,不同的保密多點傳送話路都可以使用相同的設立數據以節(jié)省消息發(fā)送。例如,商業(yè)模型可能是客戶總是必須從一組有關的發(fā)送者中的每一個購買相同的ADU,如果他們從每個發(fā)送者購買的話。在這種情形下,每個發(fā)送者可以將所有發(fā)送者共同的密鑰的MARKS序列和一個該發(fā)送者特有的長期密鑰組合起來??蛻艨梢再徺I公共范圍密鑰的相關的種子,然后購買她希望解密的每個發(fā)送者的一個附加的長期密鑰。
非連續(xù)和多連續(xù)密鑰的訪問MARKS構造被設計為在授權每個接收者訪問一個較寬的序列的一個任意子范圍的密鑰序列時有效,但不適用于數據不連續(xù)或需要一個序列的幾個任意不連接的部分的情況。因此MARKS的目標是在一維上自然連續(xù)的數據流,例如實時的多媒體流等。
但是,一旦接收者訪問過一個范圍的密鑰,顯然不能強迫以連續(xù)的順序訪問它們。例如,接收者可能存儲音樂流的一個子范圍,該音樂流用MARKS密鑰序列中的一個加密并通過因特網多點傳送。使用下載的音軌的索引,接收者以后可以使用從MARKS序列中無順序地取出的相關密鑰,以隨機的順序挑選想聽的音軌。
MARKS還可以用來限制對連續(xù)但是多維的數據的訪問。在M.Fuchs,C.Diot,T.Turletti,M.Hoffman的“一種ALF設計的命名方法”(“a NamingApproach for ALF Design”)中描述了這種應用的一些例子。該文章發(fā)表在倫敦的HIPPARCH學術討論會的會議錄上(1998年6月)。圖19中示出一個2維密鑰序列空間。
例如,對多點傳送的股票報價的訪問可以按訂購的期間和按訂購的期貨市場的范圍出售。每個報價需要用2個中間密鑰的XOR結果值來加密。因此實際上用于加密的“最終密鑰”是ki,j=c(k’0,i,k’1,j).
一個中間密鑰將來自一個序列k’0,i,其中i每分鐘遞增一次。另一個中間密鑰可能來自一個序列k’1,j,其中j表示期貨報價的月數。一個研究1到2年期貨的商人將不僅根據其想訂購的期間購買相關的k’0,i的子范圍,而且會購買中間密鑰k’1,12到k’1,24的范圍。
諸如海法加密(1997年1月)中的Ross Anderson& Charalampos Manifavas(劍橋大學)的“變色龍-一種新的流密碼”(“Chameleon-A New Kind of streamCipher”)中的方法(上面已經描述過)可以用來給用于解密數據流的密鑰加水印。因此,由任何MARKS構造生成的密鑰都被視為中間密鑰。發(fā)送者通過組合每個中間密鑰和節(jié)2.2中描述的一個長期密鑰塊(具體例子中是512kB)創(chuàng)建一個最終密鑰的序列。每個接收者被給定一個相同塊的長期的加水印的版本以從其中間密鑰序列產生一個加水印的最終密鑰的序列,從而強制水印解密。
但是,這種方法具有變色龍方法的一個共同缺陷。它為由不忠的授權接收者傳遞到完全無授權的接收者(該接收者沒有長期密鑰塊)的任何密鑰或數據創(chuàng)建一個審計跟蹤。在這種情形下,如果跟蹤密鑰或數據,可以跟蹤到揭示密鑰或數據的叛徒。但是,可以把中間密鑰,而不是最終密鑰傳送給任何有時具有仍然有效的長期密鑰塊的接收者。因此一個未被授權訪問特定中間密鑰(其未加水印)的接收者可以用其自己的密鑰塊創(chuàng)建加水印的最終密鑰,從而解密加密流。雖然產生的密鑰和數據都加蓋有她自己的水印,這只是將審計跟蹤交給泄露的目標,而不是源。因此,對這種類型的“內部”叛徒只有很小的威懾力。
返回到MARKS構造的特定情形,變色龍的這個一般缺陷意味著可以內部傳遞中間種子或中間密鑰而不必害怕審計跟蹤。例如,在上面的網絡游戲的例子中,一組玩游戲者可以勾結起來,每人買一個不同的游戲小時并在他們之間共享他們每人購買的中間種子。為了產生真正的密鑰,每個玩游戲者可以使用她自己的有水印的長期密鑰塊,她需要該密鑰塊來玩游戲。沒有創(chuàng)建用于跟蹤誰傳遞了無水印的中間種子的審計跟蹤。但是,如果任何玩游戲者試圖將帶水印的密鑰或數據傳送給最近沒有玩游戲因此沒有其自己的有效的長期密鑰塊的人,有審計跟蹤。類似地,因為長期密鑰塊也包括一個可跟蹤叛徒接收者的水印,如果一個玩游戲者傳送他們的長期密鑰塊時,也有審計跟蹤。
非計劃驅逐正如已經指出的那樣,MARKS構造允許隨時從組中驅逐成員,但是只能在每個接收者話路設立時已計劃過。如果預先計劃的驅逐是一般的情形,但偶而也需要非計劃的驅逐,任何MARKS方案可以與其它的方案,如LKH++[Chang99],組合以允許偶然的非計劃驅逐。為了實現這個目標,與上述水印一樣,由任何MARKS構造生成的密鑰序列都被視為中間密鑰。這些與一個例如用LKH++發(fā)布的組密鑰組合(如進行XOR)以生成一個用于解密數據流的最終密鑰。因此要在任何時間生成該最終密鑰需要MARKS中間密鑰和LKH++中間密鑰二者。
當然,可以組合(如進行XOR)任何個數的中間密鑰以同時滿足多種需求。例如,MARKS,LKH++和變色龍中間密鑰可以被組合以便同時實現低成本的計劃驅逐,偶然的非計劃驅逐和防止泄露到長期組外的帶水印的審計跟蹤。
形式上,最終密鑰,ki,j...=c(k’0,i,k’1,j)其中中間密鑰k’可以用MARKS構造或在關于加水印和多維密鑰序列的前兩節(jié)中描述的其它的方法來生成。
通常,以這種方式組合產生一個綜合方案,其存儲成本是各單獨成員方案的總和。但是,組合LKH++和MARKS,其中大部分驅逐是計劃的,去掉了LKH++的所有重新分配密鑰的消息,除非確實需要非計劃的驅逐。
本發(fā)明不限于用于多點傳送數據網絡。下面通過舉例來說明另外兩個使用領域。
虛擬個人網絡(VPN)通過建立一個VPN,一個大公司允許其員工或定約人從因特網上的任何地方與公司的其他部分通信。實現其的一個方法是給每個工人該整個公司使用的一個組密鑰。結果,每當一個工人加入或離開公司時,都必須改變該組密鑰。作為替換方法,無論工人加入或離開與否,該密鑰應該在一個MARKS構造決定的序列中定期地變化。當建立每個新雇傭合同時,分配給每個員工允許其計算序列中的下一個值的種子直到其合同需要續(xù)約。提前離開的工人被視為一個非計劃驅逐。
數字萬用盤(DVD)DVD原來表示數字化視頻光盤,因為其容量適合于該介質。但是,它可用來存儲諸如軟件或聲頻等要求較少存儲量的內容。代替在每次選擇聲頻音軌或軟件主題時,壓制一個不同的稀疏地填充的DVD,通過使用本發(fā)明,用數百個相關的音軌或主題填充其容量來生產每個DVD。每個音軌或主題構成一個ADU。每個ADU可以用使用一種MARKS構造生成的序列中的一個不同的密鑰來加密。這些DVD可以被大量生產并免費分發(fā)(如作為雜志上的封面光盤)。任何擁有這些DVD中的一個的人然后可以通過因特網購買種子,這將給出一個范圍的訪問密鑰以解密DVD上的一些ADU。MARKS適用于這種情形,因為一旦DVD被壓制加密密鑰就不能再改變,所以使用物理介質的商業(yè)模型不傾向依賴于非計劃驅逐。本方案可用于與變色龍組合以對密鑰和數據加水印。
上面我們描述了管理很大的組的密鑰的方案,通過將發(fā)送者與所有接收者的加入和離開活動完全去耦,保持接收者啟動的因特網多點傳送的可升級性。發(fā)送者也完全與承擔該接收者的活動費用的密鑰管理器去耦。我們已經示出許多商業(yè)應用具有只需要無中央控制的密鑰管理器的模型,在這種情形下,可能有無限的密鑰管理器的復本。當復制的無中央控制的密鑰管理器中的一個失敗時,不會影響其姐妹服務器中的進程的處理,從而使整個系統(tǒng)與問題隔離,提高恢復性。為了說明這些點我們提出了一個按每分鐘收費的大規(guī)模網絡游戲的工作例子。
通過使用系統(tǒng)地改變組密鑰而不是由用戶的加入或離開活動驅動重新分配密鑰來實現上述的優(yōu)點。去耦的實現是通過發(fā)送者和密鑰管理器事先安排多點傳送數據流中的經濟值的單元(關于付費的“應用數據單元”)。通過遞增數據中聲明的ADU索引通知系統(tǒng)的密鑰改變。使用這種模型,當一個接收者加入或離開時對其他發(fā)送者和接收者都沒有副作用。我們還確保多點傳送不用于密鑰管理,只用于數據傳送。因此,重新分配密鑰不易受隨機傳輸失敗的影響,當使用多點傳送時隨機傳輸失敗的修復比較復雜。
傳統(tǒng)的密鑰管理方案成功地提高了允許非計劃驅逐組成員的技術的可升級性,但是最好的技術仍然在發(fā)送消息方面開銷很大。相反我們關注于計劃驅逐的問題。即,在一些任意將來的ADU之后,但在接收者請求一個話路時計劃的驅逐。我們斷言很多基于預先支付或訂購的商業(yè)情形不需要非計劃的驅逐但確實需要任意的計劃驅逐。這樣的例子包括付費電視,按次計費電視或網絡游戲。
為了實現計劃的但任意的驅逐,我們設計了由發(fā)送者用來系統(tǒng)地改變組密鑰的密鑰序列構造的選擇,以便任何序列的子范圍都可以通過揭示少量的種子(每個16B)來重新構造。這樣接收者可以被授權訪問數據序列的任意子范圍。所有可行的方案使用O(log(N))個種子可以為每個接收者揭示N個密鑰。各方案的不同之處在于計算每個密鑰的處理負載,其為了安全性而作的折衷。處理負載最重的方案在開始時平均只需要O(2(log(N)-1))次快速哈希運算,然后平均只需要另外16次哈希運算以計算序列中的每個新密鑰,該操作可事先進行。處理負載最輕的方案比它的處理量少四倍。
為了將本工作放入環(huán)境中,對于按秒收費的付費電視,在15分鐘內有一千萬觀看者的10%接入或離開,最好的替換方案(Chang et al)可能會每秒鐘生成幾十RB千個字節(jié)數量級的重新分配消息以多點傳送給每個組成員。本工作只需要在或許四小時的觀看開始時,給每個接收者單點傳送一個幾百字節(jié)的消息。
附錄A-識別BHT的中間種子的最小集合的算法在下列的類C語言碼段中●函數odd(x)檢驗x是否為奇數●函數reveal(d,i)將種子sd,i揭示給接收者<pre listing-type="program-listing"><![CDATA[min=m;max=n;if(min max)error(); //拒絕min maxfor(d=D;d=0;d--) { //從樹的底部開始操作 //每個循環(huán)沿樹往上移一層if(min==max) { //min和max會聚 reveal(d,min); //...揭示子樹的根... break; //...并退出}if odd(min) {//奇數最小值永遠不會是左孩子... reveal(d,min); //...揭示奇數最小種子 min++;//將min向右移動一個種子}if!odd(min) { //偶數最大值永遠不會是右孩子... reveal(d,max); //...揭示偶數最大種子 max--;//將max向右移動一個種子 } if(min max)break;//如果min&max是表兄弟,則退出 min/=2; //...二等分min... max/=2; //...二等分max...} //...向上一層,循環(huán)]]></pre>
附錄B-識別BHC-T的中間種子的最小集合的算法在下列的類C語言碼段中●函數odd(x)檢驗x是否為奇數●函數reveal(d,i)將種子sd,i揭示給接收者<pre listing-type="program-listing"><![CDATA[min=m;max=n;if(min max)error(); //拒絕min maxd=0; //從樹的底部開始操作 if(max<=min+1) { //請求的min&max是相鄰的或相同的... reveal(d,min); //...所以揭示左邊... if(max<min) //...請求的min&max是不相同的... reveal(d,max); //...所以也揭示右邊... break;//...并退出... }for(d=0;;d++) { //每個循環(huán)沿樹往上移一層 if(max<=min+3){ //min&max相隔2或3個... if(max<min+3){ //min&max相隔2個... reveal(d,min); //...所以揭示左邊... reveal(d,max); //...和右邊... reveal(d,min+1); //...和中間... break; //...并退出 }else{ //min&max相隔3個,所以... if(!odd(min)){ //...僅當min為偶數時... reveal(d,min+1);//...揭示左中間... reveal(d,max-1);//...和右中間... break; //...并退出 } }} if!odd(min) { //偶數最小值永遠不會是右孩子... reveal(d,min); //...揭示偶數最小種子 min++; //將min向右移動一個種子 } if odd(max) { //奇數最大值永遠不會是左孩子... reveal(d,max); //...揭示奇數最大種子 max--;//將max向左移動一個種子 }min/=2;//...二等分min... max/=2;//...二等分max...} //...向上一層,循環(huán)]]></pre>
權利要求
1.一種發(fā)布數據的方法,包括(a)對多個數據單元中的每一個數據單元用密鑰序列中的一個密鑰進行加密;(b)將加密過的數據單元傳送給多個用戶終端;(c)將至少一個種子值傳送給一個用戶終端;(d)從該種子值生成一個密鑰序列,其密鑰個數大于傳送給用戶終端的種子值的個數;以及(e)在用戶終端使用所述的密鑰序列解密數據單元,特征在于,在步驟(d)中,生成一個構成步驟(a)的密鑰序列的一個任意雙重界定部分的密鑰序列,并且,所述部分的上下邊界在序列中的位置由步驟(c)中傳送的至少一個種子值來決定。
2.根據權利要求1所述的方法,其中步驟(a)中使用的密鑰序列如下生成(a)對一個或多個初始種子值進行運算,生成更多個中間種子值,該中間種子值隱蔽該初始種子值;(b)進一步對前一步驟生成的值進行運算,生成更多個深一層的值,該深一層的值隱蔽前一步驟生成的值;(c)重復步驟(b)直到生成的值的個數等于或大于步驟(a)所需的密鑰的個數。
3.根據權利要求1或2所述的方法,其中步驟(d)包括組合從多個不同的種子值中導出的值。
4.根據權利要求1、2或3所述的方法,其中步驟(d)包括利用多個不同的隱蔽函數中的每一個對多個種子值進行運算。
5.根據權利要求4所述的方法,包括(I)用一組不同的隱蔽函數中的每一個函數對至少一個根種子值進行運算,生成多個深一層的值;(II)用該組不同的隱蔽函數中的每一個函數對前一步驟生成的深一層的值或從其導出的值進行運算;(III)重復步驟(II),通過該重復或每個重復,生成值樹中的下一層;(IV)在步驟(a)中,使用從步驟(III)中生成的一層或多層中的種子序列中導出的值作為密鑰序列;(V)在步驟(c)中,將來自樹體內的至少一個值傳送給一個用戶終端,傳送給該用戶終端的該值或每個值在樹中的位置決定了用戶用于解密數據單元的可用密鑰序列部分的位置和范圍。
6.根據權利要求5所述的方法,包括,在步驟(I)中(i)用所述組不同的隱蔽函數對多個不同的種子值進行運算(ii)對所述不同的隱蔽函數中的每一個,組合用一個隱蔽函數對種子值中的一個進行運算的結果和用同一個或另一個隱蔽函數對另一個種子值進行運算的結果,從而生成多個深一層的值。
7.根據權利要求3所述的方法,其中步驟(d)包括(I)組合分別從第一和第二隱蔽函數鏈中導出的第一和第二值,從而生成一個第一下一個種子或密鑰,該第一和第二隱蔽函數鏈有各自不同的種子(II)組合從第一鏈中第一值的位置后面的一個位置導出的一個值和從第二鏈中的第二值的位置前面的一個位置導出的一個值,從而生成一個深一層的下一個種子或密鑰值。
8.根據權利要求7所述的方法,包括重復步驟(II)從而生成深一層的密鑰值,在每一個重復中,來自第一鏈中的前一個位置后面的位置的值和第二鏈中的前一個位置前面的位置的值被組合。
9.根據前述權利要求中所述的任何一種方法,其中所述種子值通過一個通信網絡傳送給所述用戶終端。
10.根據權利要求9所述的方法,其中所述種子值被從多個密鑰管理節(jié)點傳送給用戶終端。
11.一種加密發(fā)布數據的方法,包括(a)用一個或多個隱蔽函數對至少一個根種子值進行運算,從而生成多個深一層的值;(b)用一個或多個隱蔽函數對前一步驟生成的深一層的值或從其導出的值進行運算;(c)重復步驟(b),通過該重復或每個重復生成值樹中的下一層;(d)用步驟(c)中生成的層或多層中導出的一個密鑰值序列加密多個數據單元。
12.一種將數據傳送給一組用戶的方法,包括(a)加密發(fā)布的數據;(b)系統(tǒng)地并獨立于組成員變化地改變用于加密發(fā)布數據的密鑰;(c)將所述數據傳送給所述用戶;(d)在所述用戶的終端解密數據,特征在于,從許多初始種子值生成更多個中間種子值并從該中間種子值導出多個用于加密發(fā)布數據的密鑰。
13.根據權利要求12所述的方法,其中密鑰序列的每個可能的子集都可以從相應的種子值組合中導出。
14.根據前述權利要求中的任何一項的方法,其中每個加密的數據單元承載一個未加密的索引號以便向各用戶標識應該使用序列中的哪一個密鑰來解密該單元數據。
15.根據權利要求1到14中的任何一項的方法,其中任何接收者用來構造整個密鑰序列的一個特定子范圍密鑰所需的種子以隱含地標識每個種子的順序傳送。
16.根據前述權利要求中的任何一項的方法,其中多個數據發(fā)送者使用彼此相同的密鑰序列來加密相同的或不同的數據單元。
17.根據前述權利要求中的任何一項的方法,其中從種子生成的序列中的每個密鑰被作為一個中間密鑰以與另一個中間密鑰或密鑰序列組合以生成一個用以加密或解密數據單元的密鑰序列。
18.一種發(fā)布數據的方法,包括用密鑰序列中的一個密鑰加密多個數據單元中的每個單元;將加密過的數據單元傳送給多個用戶終端,其特征在于,根據一個密鑰構造算法生成該密鑰序列并將其分配到應用數據單元,并且,該密鑰構造算法的復本被發(fā)布給多個密鑰管理器,以便在使用中,接收者可以從一個密鑰管理器獲得用于訪問數據的一個任意部分的密鑰,而不必向任何數據發(fā)送者查詢。
19.一種操作用戶終端的方法,包括a)接收多個用一個密鑰序列加密過的數據單元;b)接收一個或多個種子值;c)從一個或多個種子值生成一個任意雙重界定的密鑰序列,其密鑰個數大于在步驟(b)中接收的種子的個數;以及d)使用在步驟(c)中生成的值或由其導出的值解密所述應用數據單元。
20.一種被設計為根據權利要求18的方法操作的密鑰管理器。
21.一種被設計為根據權利要求19的方法操作的用戶終端。
22.一種被設計為根據權利要求1到19所述的任何一種方法操作的通信網絡。
23.根據權利要求22所述的網絡,其中使用一種多點傳送或廣播傳輸模式來發(fā)布數據。
24.根據權利要求22或23所述的網絡,其中所述網絡包括一個虛擬個人網絡(VPN),并且其中用于構造用于解密數據的不同密鑰子范圍的不同種子組合給予虛擬個人網絡的成員對該VPN的不同訪問期間。
25.一種數據載體,包括在根據權利要求1到19中的任何一個方法中使用的多個加密過的數據單元。
全文摘要
在數據發(fā)布系統(tǒng)中,數據被劃分為許多應用數據單元。系統(tǒng)地生成一個密鑰序列,在數據源用不同的密鑰對每個數據單元進行加密。在接收方,生成對應的密鑰用于解密數據單元以使用該數據。用于生成密鑰的結構是通過傳送選擇的一個或多個種子值的組合,用戶可以使用整個密鑰序列的一個固有限定的子集。
文檔編號H04L12/22GK1408153SQ0081076
公開日2003年4月2日 申請日期2000年7月20日 優(yōu)先權日1999年7月23日
發(fā)明者羅伯特·約翰·布里斯科 申請人:英國電訊有限公司