EN
x

深入淺出OSNMA系列:Merkle Tree

Merkle Tree,一般來說也被稱之為Hash Tree,通俗的講,都是儲存方式hash值的每棵樹。從ICD的對merkle tree的描敘圖下也是可以看到。

在最(zui)框(kuang)架(jia),和哈(ha)(ha)(ha)希(xi)(xi)(xi)全(quan)部一(yi)(yi)(yi)模一(yi)(yi)(yi)樣(yang),他們把(ba)(ba)數(shu)據(ju)信(xin)(xin)息(xi)信(xin)(xin)息(xi)對半分小的(de)(de)(de)數(shu)據(ju)信(xin)(xin)息(xi)信(xin)(xin)息(xi)塊,有此類地(di)哈(ha)(ha)(ha)希(xi)(xi)(xi)和它相匹配的(de)(de)(de)。并(bing)且往里(li)(li)走,并(bing)不會馬上去運(yun)算根(gen)哈(ha)(ha)(ha)希(xi)(xi)(xi),還(huan)把(ba)(ba)接壤的(de)(de)(de)這(zhe)(zhe)兩(liang)(liang)哈(ha)(ha)(ha)希(xi)(xi)(xi)并(bing)成連成一(yi)(yi)(yi)片(pian)個字節(jie)(jie)串,接下來運(yun)算另(ling)一(yi)(yi)(yi)名(ming)(ming)字節(jie)(jie)串的(de)(de)(de)哈(ha)(ha)(ha)希(xi)(xi)(xi),那么每這(zhe)(zhe)兩(liang)(liang)哈(ha)(ha)(ha)希(xi)(xi)(xi)就(jiu)娶媳婦生子(zi),獲取(qu)了(le)(le)了(le)(le)個”子(zi)哈(ha)(ha)(ha)希(xi)(xi)(xi)“。若是最(zui)框(kuang)架(jia)的(de)(de)(de)哈(ha)(ha)(ha)希(xi)(xi)(xi)總量是單數(shu),那到(dao)結尾(wei)決不會現身另(ling)一(yi)(yi)(yi)名(ming)(ming)單身哈(ha)(ha)(ha)希(xi)(xi)(xi),這(zhe)(zhe)類現狀(zhuang)就(jiu)馬上對它進行哈(ha)(ha)(ha)希(xi)(xi)(xi)運(yun)算,所以(yi)說還(huan)能獲取(qu)它的(de)(de)(de)子(zi)哈(ha)(ha)(ha)希(xi)(xi)(xi)。是往里(li)(li)推(tui),我依(yi)然就(jiu)是模一(yi)(yi)(yi)樣(yang)的(de)(de)(de)方法,可以(yi)獲取(qu)數(shu)為比較少(shao)的(de)(de)(de)新兩(liang)(liang)級哈(ha)(ha)(ha)希(xi)(xi)(xi),終究決不會形連成一(yi)(yi)(yi)片(pian)棵倒掛現象的(de)(de)(de)樹,至樹根(gen)的(de)(de)(de)另(ling)一(yi)(yi)(yi)名(ming)(ming)座位,這(zhe)(zhe)那代(dai)就(jiu)剩余(yu)另(ling)一(yi)(yi)(yi)名(ming)(ming)根(gen)哈(ha)(ha)(ha)希(xi)(xi)(xi)了(le)(le),他們把(ba)(ba)它稱(cheng)作(zuo) Merkle Root。

Merkle Tree的特點


01

MT就是植樹,大都數是二叉樹,也能夠多叉樹,不管在是幾叉樹,它都兼具樹形式的所有特征 。
02

Merkle Tree的(de)樹葉連接點的(de)value是參數報(bao)告資(zi)(zi)料(liao)(liao)并(bing)集(ji)的(de)單元(yuan)參數報(bao)告資(zi)(zi)料(liao)(liao)還(huan)有單元(yuan)參數報(bao)告資(zi)(zi)料(liao)(liao)HASH。

03

非樹葉(xie)頂點的(de)(de)value是(shi)跟(gen)據它現(xian)在其它的(de)(de)樹葉(xie)頂點值,再采用(yong)Hash貝葉(xie)斯計算的(de)(de)而測(ce)得的(de)(de)。

面(mian)對OSNMA策略(lve)而(er)言,選好幾(ji)個(ge)個(ge)16個(ge)胡(hu)特進(jin)(jin)程(cheng)(cheng)的個(ge)性化默克爾樹,16個(ge)胡(hu)特進(jin)(jin)程(cheng)(cheng)各是(shi)(shi)相應m0~m15,對mi開始次哈希,則到X(0,i),所以咧(lie)樹從底往下(xia)提(ti),第(di)0層(ceng)(ceng)的進(jin)(jin)程(cheng)(cheng)數量英文(wen)為(wei)(wei)16,第(di)六(liu)層(ceng)(ceng)的進(jin)(jin)程(cheng)(cheng)數為(wei)(wei)8,第(di)2層(ceng)(ceng)的進(jin)(jin)程(cheng)(cheng)數為(wei)(wei)4,3、層(ceng)(ceng)的進(jin)(jin)程(cheng)(cheng)數為(wei)(wei)2,第(di)六(liu)層(ceng)(ceng)進(jin)(jin)程(cheng)(cheng)數為(wei)(wei)1,也是(shi)(shi)根進(jin)(jin)程(cheng)(cheng)。往下(xia)提(ti)一點,進(jin)(jin)程(cheng)(cheng)數少(shao)半是(shi)(shi)這(zhe)是(shi)(shi)由于選的是(shi)(shi)一個(ge)個(ge)充分(fen)二叉(cha)樹。在這(zhe)其中mi的值是(shi)(shi)由公開密(mi)(mi)鑰分(fen)類+公開密(mi)(mi)鑰標碼+公開密(mi)(mi)鑰構(gou)成,這(zhe)也就綁定qq至osnma電(dian)一文(wen)使用的的進(jin)(jin)行(xing)加密(mi)(mi)算法流程(cheng)(cheng)圖的手機驗證(zheng)。

OSNMA中進行默克爾樹合作退(tui)回(hui)DSM-PKR華圖共秘(mi)鑰的(de)驗正(zheng),是借助hash不易逆和只需要播(bo)發六個分支(zhi)(zhi)配上公用秘(mi)鑰自已產(chan)生有一家分支(zhi)(zhi),構造幾個分支(zhi)(zhi)即刻來完成對根分支(zhi)(zhi)的(de)較(jiao)驗。現實情況舉有一家舉例說明就(jiu)很(hen)比(bi)較(jiao)容易搞清楚了(le)。

ICD中(zhong),MID是用(yong)做(zuo)標(biao)識在當下(xia)播發的(de)(de)(de)DSM-PKR中(zhong)的(de)(de)(de)通用(yong)秘鑰的(de)(de)(de)相對感情,舉例說(shuo)明MID=0的(de)(de)(de)之后,mi=公開(kai)密(mi)鑰類行+0+公開(kai)密(mi)鑰,另一個再播只發X(0,1),X(1,1),X(2,1),X(3,1)。檢驗環節是這類的(de)(de)(de),

第一個步mi對其進(jin)行sha-256獲得(de)X(0,0)

其二步將X(0,0)+X(0,1),其次對之(zhi)和的數據(ju)顯(xian)示實行(xing)(xing)sha-256運(yun)行(xing)(xing),得(de)出最終標識為X(1,0)

其次步將X(1,0)+X(1,1),而后對一(yi)起(qi)的大數據(ju)參與sha-256運營,應納(na)稅所(suo)得額結杲標記符(fu)號為X(2,0)

第(di)四點步將X(2,0)+X(2,1),第(di)二步對結(jie)合的數據表格實行(xing)sha-256操(cao)作步驟,得(de)到結(jie)果記號為X(3,0)

五步(bu)將X(3,0)+X(3,1),以后對(dui)累(lei)加的的數據開始sha-256進(jin)行,得出最終標記圖片(pian)為X(4,0)

X(4,0)就是(shi)根(gen)點位,與從(cong)服務使(shi)用(yong)的(de)根(gen)點位做出相對(dui)既(ji)可以(yi)要知道檢定可不可以(yi)是(shi)可以(yi)順利通過(guo)。

 分(fen)(fen)別另外的(de)(de)的(de)(de)MID,只(zhi)需要將步(bu)湊中(zhong)的(de)(de)下表是(shi)以(yi)分(fen)(fen)別表格(ge)格(ge)式中(zhong)寫(xie)出的(de)(de)采取代替,工藝流程也是(shi)致的(de)(de)。

python實例

'''事實上動用的(de)(de)是,不(bu)需注重(zhong)那繁雜,直觀做(zuo)1個簡化版(ban)的(de)(de)merkleTree,就可(ke)以了(le)用來(lai)OSNMA的(de)(de)做(zuo)工作。為了(le)OSNMA的(de)(de)merkleTree的(de)(de)pcb電路(lu)板層數(shu)越(yue)多和時間數(shu)是固定住的(de)(de)

'''


class OSNMAMerkleTree:

def __init__(self,hashFun):

self.hashFun = hashFun

self.allNodes=dict()#大部分接點(dian)的數(shu)值便用三個(ge)(ge)數(shu)字9表現,首(shou)個(ge)(ge)表現層,最(zui)后一個(ge)(ge)個(ge)(ge)表現這1層的第(di)幾塊

self.leafm0_15=[]

self.InterNode=[[(0,1),(1,1),(2,1),(3,1)],#m0

[(0,0),(1,1),(2,1),(3,1)],#m1

[(0,3),(1,0),(2,1),(3,1)],#m2

[(0,2),(1,0),(2,1),(3,1)], [(0,5),(1,3),(2,0),(3,1)], [(0,4),(1,3),(2,0),(3,1)], [(0,7),(1,2),(2,0),(3,1)], [(0,6),(1,2),(2,0),(3,1)], [(0,9),(1,5),(2,3),(3,0)], [(0,8),(1,5),(2,3),(3,0)],

[(0,11),(1,4),(2,3),(3,0)],#m10

[(0,10),(1,4),(2,3),(3,0)],#m11

[(0,13),(1,7),(2,2),(3,0)], [(0,12),(1,7),(2,2),(3,0)], [(0,15),(1,6),(2,2),(3,0)],

[(0,14),(1,6),(2,2),(3,0)],#m15

] #只(zhi)需要(yao)的分支(zhi)表


def AddLayer(self,floorindex,nodeSize):


index =0 indexkey = 0

for i in range(nodeSize):

leftNodeValue=self.allNodes[(floorindex,index)] #要先(xian)拿到靠左邊子分(fen)支數劇

rightNodeValue=self.allNodes[(floorindex,index+1)]#有(you)左側子子域統計資料(liao)

blocktmp=leftNodeValue+rightNodeValue

self.allNodes.update({(floorindex+1,indexkey):self.hashFun(blocktmp).digest()})#換算父頂點(dian)的數據(ju)統計


index+=2 indexkey+=1


def GeneratorMerkleTree(self,data_blocks):

if not data_blocks:

return None


self.leafm0_15 = data_blocks

self.allNodes.clear()

floorindex=0 index =0

for block in data_blocks:

self.allNodes.update({(floorindex,index):self.hashFun(block).digest()})

index+=1


self.AddLayer(0,8)

self.AddLayer(1,4)

self.AddLayer(2,2)

self.AddLayer(3,1)


#作(zuo)為(wei)相匹配的(de)的(de)進程

def GetNodeValue(self,floor,index):

return self.allNodes[(floor,index)]


#取得mi對應(ying)著的十個端點

def GetMiNodes(self,miIndex=0):

Nodes=[]

for i in range(4):

tmp=self.InterNode[miIndex][i]

nodedata=self.GetNodeValue(tmp[0],tmp[1])

Nodes.append(nodedata)

return Nodes


def verifyRoot(self,mid,ITNS,leaf):

node = self.hashFun(leaf).digest()

for it_node in ITNS:

if mid % 2 == 0:

node = self.hashFun(node + it_node).digest()

else:

node = self.hashFun(it_node + node).digest()

mid = mid // 2

return node==self.allNodes[(4,0)]

#index為MID,mi為葉片結點

def verifycalRoot(self,MID,mi):

x0i=self.hashFun(mi).digest()

for item in self.InterNode[MID]:

ifMID%2==0:

x0i=x0i+self.allNodes[item]

else:

x0i=self.allNodes[item]+x0i

MID =MID // 2

x0i=self.hashFun(x0i).digest()

return x0i


def showallnodes(self):


for i, v in self.allNodes.items():

print(i,v)

def getAllNodes(self):

return self.allNodes

def getleafi(self,i):

return self.leafm0_15[i]

考生://en.wikipedia.org/wiki/Merkle_tree
上一篇:聚焦 | 我們八周年啦!
下一篇:年終回顧 | 衛導的2023年
需用關心或是面對一些問題? 聯系我們
解決方案
定位、導航與授時(PNT)
導航自動化檢測與認證
自動化測試實驗室
復雜電磁環境模擬測試系統
北斗室內外無縫定位系統
導航干擾監測定位系統
產品中心
衛星導航星座模擬器
導航安全性檢測模擬器
導航監測與防護設備
信號記錄與回放系統
三維場景建模與仿真
自動化測試評估軟件
行業應用
航空航天
電力
通信
汽車
企業
政府
公司
關于我們
加入我們
資訊中心
新聞資訊
媒體報道
展會及產品發布
視頻中心
支持
技術支持
資源庫
在線支持中心
聯系我們
聯系我們
供應商招募
合作伙伴招募
辦公電話:0731-89603147轉801
客服郵箱:gln@gzdeye.com.cn
地址:長沙高新開發區尖山路18號長沙中電軟件園二期B2棟10層1001-1010室
2021天堂在线亚洲精品专区_熟妇高潮一区二区三区_99色影院_欧美极品一区 2021天堂在线亚洲精品专区_熟妇高潮一区二区三区_99色影院_小小影视官网 2021天堂在线亚洲精品专区_熟妇高潮一区二区三区_99色影院_国产揄拍视频在线观看 2021天堂在线亚洲精品专区_熟妇高潮一区二区三区_99色影院_欧美精品成人A在线观看 2021天堂在线亚洲精品专区_熟妇高潮一区二区三区_99色影院_午夜亚洲福利

m.nhgolden.cn

m.ylmfsoft.cn

m.lt1069.cn

m.gxnnfpw.cn

m.g5141.cn