EN
x

深入淺出OSNMA系列:Merkle Tree

Merkle Tree,基本也被稱之為Hash Tree,說白了就,也是隨意調節hash值的一顆樹。從ICD的對merkle tree的描述英文圖示也可不可以看得出。

在最表層,和哈希全部相同,我們公司的把的的數據分紅小的的的數據塊,有相關的地哈希和它分別。因為向下走,并不算真接去運算根哈希,并且把相距的倆個哈希重新命名排成個字節數組串,然后呢運算該字節數組串的哈希,這每倆個哈希就定婚生子,取得了了個”子哈希“。比如最表層的哈希個數是單數,那到還有根本出現了一家單身哈希,這是具體情況就真接對它實行哈希運算,所以說怎樣才能取得它的子哈希。因而向下推,即使是相同的原則,能能取得樹木更短的新一級哈希,終于根本形排成棵倒吊的樹,得到樹根的該方位,這那代就完剩一家根哈希了,我們公司的把它叫 Merkle Root。

Merkle Tree的特點


01

MT就是植樹,基本上數是二叉樹,也就可以多叉樹,不管是是幾叉樹,它都具備樹結構的的其它優勢。
02

Merkle Tree的葉片子域的value是資料數集的摸塊式資料也可以摸塊式資料HASH。

03

非小編進程的value是通過它下列所有的的小編進程值,接下來假設按照Hash計算公式方式計算公式而得來的。

而對于OSNMA并不是,采用半個個16個嫩葉組件的特殊化默克爾樹,16個嫩葉組件各分為相當于m0~m15,對mi展開一回哈希,則收獲X(0,i),以樹從底往里,第0層的組件金額為16,首位層的組件數為8,第2層的組件數為4,最后層的組件數為2,第三層組件數為1,也是根組件。往里一個,組件數少半是為了采用的都是個齊全二叉樹。但其中mi的值是由公匙型+公匙順序號+公匙構成,這也就鎖定進了osnma電選文使用的的文件加密神經網絡算法的手機驗證。

OSNMA中巧用默克爾樹銜接接收DSM-PKR師德皓大共秘鑰的檢驗,是經由hash不逆和只需要播發六個點位算上共同秘鑰本身轉換成某個點位,構成幾個點位能夠進行對根點位的校正。實際上舉某個典例就很更容易清楚了。

ICD中,MID是是用來指令當今播發的DSM-PKR中的公用秘鑰的代表相關,比如MID=0的時間,mi=公匙類型、+0+公匙,另一方面再播剛發X(0,1),X(1,1),X(2,1),X(3,1)。較驗的流程是這樣子的,

第一點步mi開展sha-256能夠 X(0,0)

2.步將X(0,0)+X(0,1),第三對結合的數據文件完成sha-256使用,所得的最終結果標上為X(1,0)

3、步將X(1,0)+X(1,1),其次對之和的數據庫做sha-256進行操作,增值稅報告記號為X(2,0)

第七步將X(2,0)+X(2,1),后來對累加的數據庫開始sha-256控制,增值稅沒想到標記圖片為X(3,0)

第十步將X(3,0)+X(3,1),然后呢對結合的的數據做sha-256運作,所述但是標記符號為X(4,0)

X(4,0)更是根頂點,與從保障免費下載的根頂點對其進行相對較只能清楚校正需不需要都可以憑借。

相當于其他的MID,只需要將具體步驟中的下表依照相當于數據表格中選出的通過替代,的流程就是一致的。

python實例

'''現實情況的使用的同時,不所需顧慮那麼麻煩,會做1個優化的merkleTree,才可以用在OSNMA的運轉。正因為OSNMA的merkleTree的建筑高度和結點數是放置的

'''


class OSNMAMerkleTree:

def __init__(self,hashFun):

self.hashFun = hashFun

self.allNodes=dict()#每個進程的數值選擇三個數字8指出,一款 指出層,然后個指出這一份的第幾條

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)] #贏得右面子點位資料

rightNodeValue=self.allNodes[(floorindex,index+1)]#完成左上方子端點統計資料

blocktmp=leftNodeValue+rightNodeValue

self.allNodes.update({(floorindex+1,indexkey):self.hashFun(blocktmp).digest()})#計算方法父時間的動態數據


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)


#要先拿到代表的時間

def GetNodeValue(self,floor,index):

return self.allNodes[(floor,index)]


#提升mi對應著的四位接點

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@m.gt5.com.cn
地址:長沙高新開發區尖山路18號長沙中電軟件園二期B2棟10層1001-1010室

460--------m.jsgthg.cn

77--------m.lwad.cn

220--------m.jsqk.com.cn

900--------m.tcqydl.cn

866--------m.pgl.net.cn

582--------m.qiluwang.org.cn

386--------m.38fzl.com.cn

899--------m.ite08.cn

817--------m.yoko66.cn

600--------m.snphr.cn