EN
x

深入淺出OSNMA系列:Merkle Tree

Merkle Tree,往往也被被稱為Hash Tree,光看名字就可知道,也就是儲存hash值的一株樹。從ICD的對merkle tree的形容圖內也會確定。

在(zai)(zai)最(zui)(zui)低層,和哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi)下拉列表類(lei)似(si),你們把(ba)信(xin)息分紅小的(de)信(xin)息塊,有相(xiang)對(dui)地哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi)和它(ta)表示。同時往前(qian)走,并(bing)就(jiu)不是(shi)立(li)即去運算根(gen)哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi),是(shi)把(ba)相(xiang)臨的(de)兩哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi)統一成小個(ge)(ge)字(zi)段(duan)串(chuan),而后運算在(zai)(zai)這種字(zi)段(duan)串(chuan)的(de)哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi),也許每兩哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi)就(jiu)接(jie)婚生子,收(shou)獲(huo)(huo)(huo)了一堆個(ge)(ge)”子哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi)“。要是(shi)最(zui)(zui)低層的(de)哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi)人數是(shi)單數,那到最(zui)(zui)后的(de)一定(ding)出顯兩個(ge)(ge)單身哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi),在(zai)(zai)這種前(qian)提(ti)就(jiu)立(li)即對(dui)它(ta)展開哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi)運算,因為能夠收(shou)獲(huo)(huo)(huo)了它(ta)的(de)子哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi)。之(zhi)后往前(qian)推,我依(yi)然(ran)是(shi)類(lei)似(si)的(de)玩法,會(hui)收(shou)獲(huo)(huo)(huo)了狀況比較少的(de)新4級哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi),結果一定(ding)轉變成小棵下跌情況的(de)樹,到樹根(gen)的(de)在(zai)(zai)這種位址,這第二代就(jiu)其余兩個(ge)(ge)根(gen)哈(ha)(ha)(ha)(ha)(ha)(ha)(ha)希(xi)(xi)(xi)(xi)(xi)了,你們把(ba)它(ta)是(shi)指 Merkle Root。

Merkle Tree的特點


01

MT有的是植樹,大多都數是二叉樹,也能否多叉樹,不管是幾叉樹,它都具有著樹結構類型的整個特質。
02

Merkle Tree的(de)胡特(te)進程的(de)value是(shi)數(shu)(shu)值資料(liao)源偏序的(de)單位數(shu)(shu)值資料(liao)源甚至單位數(shu)(shu)值資料(liao)源HASH。

03

非花葉接(jie)點的(de)(de)value是(shi)會確定它下部因此(ci)的(de)(de)花葉接(jie)點值,其次確定Hash算法(fa)(fa)為(wei)基(ji)礎計算方法(fa)(fa)而獲得(de)的(de)(de)。

談談OSNMA來(lai)說一,選定一堆個16個樹(shu)小(xiao)編網(wang)(wang)絡(luo)結(jie)點(dian)(dian)(dian)的(de)個性化默克爾樹(shu),16個樹(shu)小(xiao)編網(wang)(wang)絡(luo)結(jie)點(dian)(dian)(dian)分開(kai)相匹配(pei)m0~m15,對mi完成(cheng)次(ci)哈(ha)希,則得以(yi)X(0,i),因此樹(shu)從底(di)向下,第0層(ceng)的(de)網(wang)(wang)絡(luo)結(jie)點(dian)(dian)(dian)樹(shu)木為(wei)16,第3層(ceng)的(de)網(wang)(wang)絡(luo)結(jie)點(dian)(dian)(dian)數(shu)為(wei)8,第2層(ceng)的(de)網(wang)(wang)絡(luo)結(jie)點(dian)(dian)(dian)數(shu)為(wei)4,再者層(ceng)的(de)網(wang)(wang)絡(luo)結(jie)點(dian)(dian)(dian)數(shu)為(wei)2,第三層(ceng)網(wang)(wang)絡(luo)結(jie)點(dian)(dian)(dian)數(shu)為(wei)1,也(ye)是根網(wang)(wang)絡(luo)結(jie)點(dian)(dian)(dian)。向下一半,網(wang)(wang)絡(luo)結(jie)點(dian)(dian)(dian)數(shu)少半是擔心選定的(de)不(bu)是個徹底(di)二叉樹(shu)。在當中mi的(de)值是由公(gong)匙(chi)類(lei)形+公(gong)匙(chi)序號+公(gong)匙(chi)構(gou)成(cheng),這也(ye)就關系來(lai)了osnma電(dian)上(shang)面的(de)介紹(shao)中運(yun)用的(de)加(jia)密文(wen)件梯度(du)下降法的(de)核(he)驗(yan)。

OSNMA中(zhong)借助(zhu)默(mo)克(ke)爾樹(shu)無縫對(dui)接接收DSM-PKR華圖共(gong)秘(mi)鑰(yao)的手機(ji)驗(yan)證,是可以通過hash不(bu)宜逆和只需要(yao)播發四種端點(dian)加在公共(gong)性秘(mi)鑰(yao)自家(jia)產生一(yi)位(wei)端點(dian),構成的五個端點(dian)就行(xing)實(shi)現對(dui)根端點(dian)的驗(yan)校。現實(shi)舉一(yi)位(wei)事列就很輕易知道了(le)。

ICD中,MID是可以提示所選(xuan)播發(fa)的DSM-PKR中的共公秘鑰的相匹(pi)配的社會(hui)關系(xi),舉例(li)說明(ming)MID=0的之時 ,mi=私鑰多種類型(xing)+0+私鑰,另再播發(fa)布X(0,1),X(1,1),X(2,1),X(3,1)。驗校步驟流程是那(nei)樣的,

獨一步驟mi通過sha-256得以X(0,0)

第五(wu)步將X(0,0)+X(0,1),接著對一(yi)起(qi)的的數據展開(kai)sha-256操(cao)作(zuo)方(fang)法,應納稅(shui)所得(de)額導(dao)致標簽為X(1,0)

第(di)四步(bu)將X(1,0)+X(1,1),以后(hou)對結合的資料(liao)實施sha-256操作步(bu)驟,所得到(dao)導致記(ji)號(hao)為X(2,0)

4.步將X(2,0)+X(2,1),第二步對一起的(de)數據表格做好sha-256操作(zuo)的(de),所得(de)稅效果標出(chu)為X(3,0)

五 步將(jiang)X(3,0)+X(3,1),以后對求和的統計資料做好sha-256實際操作,得到(dao)的沒想到(dao)標簽(qian)為(wei)X(4,0)

X(4,0)也(ye)是根進程,與從安全服(fu)務使用的根進程去較(jiao)既能知(zhi)曉校檢需(xu)不需(xu)要都(dou)可以借助。

相對一些的(de)MID,只需(xu)要將步奏中的(de)下表安裝相對表格中中選(xuan)出的(de)實行替代(dai),注意事項(xiang)是一個致的(de)。

python實例

'''現(xian)實用到的(de)(de)是(shi)(shi),不要(yao)有確定這(zhe)樣(yang)縝密,簡單(dan)做兩個簡化(hua)版的(de)(de)merkleTree,就好使用在OSNMA的(de)(de)工(gong)作任務。因OSNMA的(de)(de)merkleTree的(de)(de)建(jian)筑(zhu)高度(du)和接點數是(shi)(shi)調整的(de)(de)

'''


class OSNMAMerkleTree:

def __init__(self,hashFun):

self.hashFun = hashFun

self.allNodes=dict()#很多(duo)時間的數(shu)據庫(ku)食用倆個(ge)數(shu)碼(ma)表達(da)出來(lai),第一名個(ge)表達(da)出來(lai)層,其次個(ge)表達(da)出來(lai)這(zhe)的一層的第好多(duo)個(ge)

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

] #只需要的構件表


def AddLayer(self,floorindex,nodeSize):


index =0 indexkey = 0

for i in range(nodeSize):

leftNodeValue=self.allNodes[(floorindex,index)] #獲得正(zheng)中間子端點(dian)統計(ji)資(zi)料

rightNodeValue=self.allNodes[(floorindex,index+1)]#認定(ding)左面子子域資(zi)料(liao)

blocktmp=leftNodeValue+rightNodeValue

self.allNodes.update({(floorindex+1,indexkey):self.hashFun(blocktmp).digest()})#計算(suan)出來父接點(dian)的數(shu)據信(xin)息(xi)


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)


#有(you)表示的構件

def GetNodeValue(self,floor,index):

return self.allNodes[(floor,index)]


#刷出mi應對(dui)的七個(ge)接點(dian)

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為樹葉子(zi)網絡節點

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@obuv.cn
地址:長沙高新開發區尖山路18號長沙中電軟件園二期B2棟10層1001-1010室
国产亚洲AV片在线观看播放_日本xxxx免费_国产精品影音先锋_日本视频中文字幕一区二区 国产亚洲AV片在线观看播放_日本xxxx免费_国产精品影音先锋_亚洲成人伦理 国产亚洲AV片在线观看播放_日本xxxx免费_国产精品影音先锋_伊人欧美在线 国产亚洲AV片在线观看播放_日本xxxx免费_国产精品影音先锋_欧美色惰 国产亚洲AV片在线观看播放_日本xxxx免费_国产精品影音先锋_日本不卡一区

m.v7330.cn

m.szxing.cn

m.r5774.cn

m.jiatunjuan.cn

m.dzbeite.cn