在最下層,和哈希(xi)信息庫(ku)類似,你們(men)把信息拆分小(xiao)的(de)(de)(de)信息塊,有應當(dang)地哈希(xi)和它對(dui)應著(zhu)。因此(ci) 以上(shang)面走,并(bing)不再(zai)是同(tong)時(shi)去運(yun)算根(gen)哈希(xi),還把相(xiang)互鄰近的(de)(de)(de)5個(ge)哈希(xi)合為排成個(ge)字段(duan)串,后來(lai)運(yun)算整個(ge)字段(duan)串的(de)(de)(de)哈希(xi),只要每5個(ge)哈希(xi)就(jiu)出(chu)嫁生子(zi),得(de)出(chu)了個(ge)”子(zi)哈希(xi)“。這樣最下層的(de)(de)(de)哈希(xi)數(shu)是單數(shu),那到(dao)接下來(lai)勢必(bi)顯示一(yi)名單身哈希(xi),此(ci)類時(shi)候就(jiu)同(tong)時(shi)對(dui)它實現哈希(xi)運(yun)算,因此(ci) 能不能得(de)出(chu)它的(de)(de)(de)子(zi)哈希(xi)。因而以上(shang)面推,仍舊是類似的(de)(de)(de)方(fang)式英文,就(jiu)可以得(de)出(chu)人數(shu)越少的(de)(de)(de)新第(di)一(yi)哈希(xi),終極(ji)勢必(bi)形(xing)排成棵下跌的(de)(de)(de)樹,來(lai)到(dao)了樹根(gen)的(de)(de)(de)整個(ge)地位,這第(di)一(yi)代就(jiu)吃不完一(yi)名根(gen)哈希(xi)了,你們(men)把它稱做 Merkle Root。
Merkle Tree的小編(bian)結點的value是動態(tai)信息碰面的象限(xian)動態(tai)信息還(huan)有象限(xian)動態(tai)信息HASH。
非嫩葉構件(jian)的(de)(de)value是只能(neng)根據它后面(mian)那些(xie)的(de)(de)嫩葉構件(jian)值,但是假(jia)設按照Hash優化(hua)算法折算而推算出的(de)(de)。
相對(dui)(dui)OSNMA來(lai)講,選購(gou)一堆個16個葉(xie)(xie)片子(zi)域(yu)(yu)(yu)的(de)(de)特種默克爾(er)樹,16個葉(xie)(xie)片子(zi)域(yu)(yu)(yu)各自相匹(pi)配的(de)(de)m0~m15,對(dui)(dui)mi做出一起哈希,則收獲X(0,i),因(yin)此樹從底向(xiang)(xiang)下(xia),第0層(ceng)(ceng)的(de)(de)子(zi)域(yu)(yu)(yu)顆(ke)數(shu)(shu)為16,一的(de)(de)子(zi)域(yu)(yu)(yu)數(shu)(shu)為8,第2層(ceng)(ceng)的(de)(de)子(zi)域(yu)(yu)(yu)數(shu)(shu)為4,其次層(ceng)(ceng)的(de)(de)子(zi)域(yu)(yu)(yu)數(shu)(shu)為2,4.層(ceng)(ceng)子(zi)域(yu)(yu)(yu)數(shu)(shu)為1,也是根子(zi)域(yu)(yu)(yu)。向(xiang)(xiang)下(xia)一,子(zi)域(yu)(yu)(yu)數(shu)(shu)少半是畢竟選購(gou)的(de)(de)是個根本二叉樹。這(zhe)其中mi的(de)(de)值(zhi)是由公開(kai)密鑰類行+公開(kai)密鑰識(shi)別碼+公開(kai)密鑰形成(cheng),這(zhe)也就關聯關系(xi)來(lai)到了osnma電(dian)一文(wen)運行的(de)(de)加密方式(shi)神經網絡算法(fa)的(de)(de)認證。
OSNMA中(zhong)利(li)用默克爾樹連接拒收DSM-PKR師(shi)德皓大共秘鑰(yao)的核實,是能夠 hash切勿逆和只需要播發四位分(fen)支(zhi)(zhi)加進公(gong)開秘鑰(yao)自(zi)我自(zi)動生成這(zhe)個分(fen)支(zhi)(zhi),組成了5-7個分(fen)支(zhi)(zhi)既能做好對根分(fen)支(zhi)(zhi)的較驗。實計舉這(zhe)個例就很可能知道了。
ICD中(zhong)(zhong),MID是(shi)代替指示燈當今播(bo)發的DSM-PKR中(zhong)(zhong)的公益(yi)性秘鑰(yao)的相應(ying)的關系的,舉(ju)例子(zi)MID=0的之前,mi=私鑰(yao)分類+0+私鑰(yao),其余再(zai)播(bo)只發X(0,1),X(1,1),X(2,1),X(3,1)。校檢環節是(shi)這(zhe)的,
一號步mi進行sha-256獲得X(0,0)
第一步將X(0,0)+X(0,1),其次對結(jie)合的資料來sha-256實際操作(zuo),得(de)到后果標志為(wei)X(1,0)
三(san)是步(bu)將(jiang)X(1,0)+X(1,1),之后對累加的數據表格做sha-256操(cao)作步(bu)驟(zou),所述畢竟標記符號(hao)為(wei)X(2,0)
四號步(bu)將X(2,0)+X(2,1),接(jie)下來對求和的參數確(que)定sha-256實操,得到的結果顯示(shi)標示(shi)為X(3,0)
第十五(wu)步將X(3,0)+X(3,1),然而對累加的動(dong)態數據(ju)展開sha-256工作,所得稅率結果(guo)顯示標識(shi)為X(4,0)
X(4,0)乃(nai)是根分支,與從業務在線(xian)下載的(de)根分支做好較就可以(yi)了解檢驗(yan)可不可以(yi)可能使(shi)用。
相應(ying)的某(mou)個(ge)的MID,只需要將步(bu)驟中的下表(biao)通過相應(ying)的圖表(biao)中列成的開始替代,步(bu)驟流程不是(shi)致的。
python實例
'''實計選(xuan)擇(ze)的(de)(de)時會,不都(dou)要采取那些錯綜復雜,直(zhi)觀做(zuo)一家細(xi)化的(de)(de)merkleTree,就可以(yi)用作(zuo)OSNMA的(de)(de)工作(zuo)的(de)(de)。這是因為OSNMA的(de)(de)merkleTree的(de)(de)疊(die)加層(ceng)數(shu)和(he)進程數(shu)是比較固定的(de)(de)
'''
class OSNMAMerkleTree:
def __init__(self,hashFun):
self.hashFun = hashFun
self.allNodes=dict()#大(da)多數進程的(de)統計資料使用的(de)這(zhe)(zhe)兩個(ge)(ge)數子提(ti)出(chu),第(di)一次個(ge)(ge)提(ti)出(chu)層(ceng),2個(ge)(ge)提(ti)出(chu)這(zhe)(zhe)層(ceng)的(de)第(di)這(zhe)(zhe)幾個(ge)(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
] #只需要的網(wang)絡節點表
def AddLayer(self,floorindex,nodeSize):
for i in range(nodeSize):
leftNodeValue=self.allNodes[(floorindex,index)] #授予左面子構(gou)件數據表(biao)格
rightNodeValue=self.allNodes[(floorindex,index+1)]#贏得右方子點位信息
blocktmp=leftNodeValue+rightNodeValueself.allNodes.update({(floorindex+1,indexkey):self.hashFun(blocktmp).digest()})#計算(suan)方法父頂點的數據顯(xian)示
def GeneratorMerkleTree(self,data_blocks):
if not data_blocks:
return None
self.leafm0_15 = data_blocks
self.allNodes.clear()
floorindex=0 index =0for 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為樹葉(xie)分支(zhi)
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]