日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

NEO改进协议提案2(NEP-2)

發(fā)布時間:2025/5/22 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NEO改进协议提案2(NEP-2) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 摘要
  • 動機(jī)
  • 基本原理
  • 詳述

    前綴
    建議詳述
    加密步驟
    解密步驟

  • 向后兼容性
  • 測試用例
  • 實(shí)現(xiàn)

摘要

提出了一種以58字符 Base58Check編碼的可打印字符串的形式對密碼保密型私鑰記錄進(jìn)行加密和編碼的方法。加密私鑰記錄旨在用于紙質(zhì)錢包。每一個記錄字符串都包含除了密碼之外重構(gòu)私鑰所需的所有信息,并且該方法使用加鹽和scrypt來抵抗暴力攻擊。

動機(jī)

密碼和密碼保護(hù)型密鑰是個人間發(fā)送資產(chǎn)的新實(shí)踐。想要發(fā)送資產(chǎn)的人可以通過郵政郵件郵寄一個受密碼保護(hù)的紙錢包并通過電話或者email給接收者密碼,以保證傳遞的安全不受其他通道的攔截。紙錢包的使用者可以攜帶資金的加密私鑰并在家中留存一份拷貝以預(yù)防意外的遺失和偷竊。把資產(chǎn)存在銀行賬戶或者保險箱中的紙錢包的用戶可以把密碼留在家里或者與可信的伙伴分享已預(yù)防銀行中的某人乘機(jī)訪問紙錢包并花費(fèi)其中的資產(chǎn)。預(yù)見和不可預(yù)見的關(guān)于密碼保護(hù)型私鑰的用例還有很多。
另一方面,標(biāo)準(zhǔn)的密碼保護(hù)型私鑰格式使得其能夠共享來自不同錢包客戶端的私鑰。

基本原理

用例:作為一個NEO紙錢包用戶,我喜歡添加加密的功能,如此我的NEO紙錢包可以拆解成兩個因子:我有的和我知道的。
用例:作為一個NEO用戶想要用一個私鑰向個人或者公司付款,我不必?fù)?dān)心任何通信渠道會攔截我的key和導(dǎo)致資產(chǎn)的被盜。我想要提供一個密碼保護(hù)型密鑰,伴隨一個可以通過其他渠道傳輸?shù)拿艽a。

詳述

本提議運(yùn)用到了以下函數(shù)和定義:
·AES256加密、AES256解密,是眾所周知的AES分組編碼不考慮初始向量和塊連接的簡單格式。這些函數(shù)每一個都需要一個256位的key和16字節(jié)的輸入和確定的16字節(jié)的輸出。
·SHA256,一種眾所周知的任意字節(jié)長度輸入和固定產(chǎn)出32字節(jié)長度hash的哈希算法。
·scrypt,一個著名的密鑰推導(dǎo)算法。它需要以下參數(shù)(string) password, (string) salt, (int) n, (int) r, (int) p, (int) length,并固定產(chǎn)生一個長度等于length長度的字節(jié)數(shù)組。
Base58Check,一個在NEO系統(tǒng)中廣泛使用的用58的字符byte[]編碼的方法。

前綴
建議將Base58Check編碼過后的字符串以6字開頭。數(shù)字6旨在從用戶的角度表示一種需要其他東西才能生效的私鑰–總的定義可以理解為將來包括特別是在多簽交易中的密鑰,并且被選遵從現(xiàn)有前綴5,多見于WIF格式表示一種非加密私鑰。
建議第二個字符應(yīng)該給出提示所需什么因子,對于加密密鑰需要一個密碼,建議使用大寫字母P。
為保持加密密鑰的大小,在AES加密中不使用初始向量(IVS)。相反,使用scrypt從密碼以及NEO地址的32位hash作為鹽導(dǎo)出用于類似初始向量用途的合適值。

建議詳述
對象標(biāo)識符前綴:0x0142。這是在Base58Check編碼記錄開頭的常量字節(jié),它們的存在導(dǎo)致結(jié)果字符串具有可預(yù)見的前綴。
用戶如何判斷:58個字符總是以“6P”開頭
有效載荷字節(jié)數(shù)(不包括前綴):37
·1字節(jié)(FLAG字節(jié)):始終為0xE0
·4字節(jié):Sha256(Sha256(expected_neo_address))[0…3]),用于拼寫檢查和加鹽。
16字節(jié):AES加密密鑰材料記錄(加密半數(shù)1)
16字節(jié):AES加密密鑰材料記錄(加密半數(shù)2)
在BASE58CHECK編碼(前綴6Py)中的范圍:
最小值:6PYJXKPVNKXUZAFD2B5ZSZAFJYNP4EZQQECJS39 449 QUUXLNXJLX6LG(基于01 42 E0加三十六個00)
最大值:6PyxG5TnGyLyxDrZiqxBuxxdotBNTBI3D61MQBXPPZQZEJTVQQHSCNK(基于01 42 E0加三十六個FF)

加密步驟
1、計算NEO地址(ASCII),
并獲取SHA256(SHA256())的前四個字節(jié).我們將其叫做地址哈希。
2.使用Scrypt從密碼導(dǎo)出一個密鑰。
·參數(shù):密碼是以UTF-8格式的密碼。鹽采用之前得到的地址hash,n=16384,r=8,p=8,length=64
·把結(jié)果的64字節(jié)分成2半,稱他們?yōu)閷?dǎo)出半數(shù)1和導(dǎo)出半數(shù)2.
3.做AES256加密(block = privkey[0…15] xor derivedhalf1[0…15], key = derivedhalf2),把16字節(jié)的結(jié)果叫做加密半數(shù)1.
4.做AES256加密(block = privkey[16…31] xor derivedhalf1[16…31], key = derivedhalf2),把16字節(jié)的結(jié)果叫做加密半數(shù)2.
加密私鑰是以下Base58Check編碼下的串聯(lián),總共39字節(jié),沒有Base58 checksum:
·0x01 0x42 + flagbyte + addresshash + encryptedhalf1 + encryptedhalf2

解密步驟
1.從用戶那獲取加密私鑰和密碼。
2.把密碼和地址hash帶入Scrypt函數(shù)得到半導(dǎo)出數(shù)1和半導(dǎo)出數(shù)2.
3.用AES256Decrypt解密半導(dǎo)出數(shù)1和半導(dǎo)出數(shù)2,并合并兩部分并將結(jié)果和半導(dǎo)出數(shù)1做異或得到明文形式私鑰。
4.把明文私鑰轉(zhuǎn)化成NEO地址。
5.求NEO地址hash,并驗(yàn)證加密私鑰記錄中的地址hash是否與之匹配。如果不是,則報告密碼錯誤。

向后兼容性

向后兼容性是最小的,由于它是一種新標(biāo)準(zhǔn)幾乎擴(kuò)展了WIF格式。假設(shè)私鑰數(shù)據(jù)的入口可以接受現(xiàn)存格式的私鑰(比如16進(jìn)制數(shù)或者WIF格式);本草案使用的密鑰格式不能被錯誤地用于任何現(xiàn)有的格式,并保留自動檢測能力。

測試用例

Test 1:
? Passphrase: TestingOneTwoThree
? Encrypted: 6PYVPVe1fQznphjbUxXP9KZJqPMVnVwCx5s5pr5axRJ8uHkMtZg97eT5kL
? Unencrypted (WIF): L44B5gGEpqEDRS9vVPz7QT35jcBG2r3CZwSwQ4fCewXAhAhqGVpP
? Unencrypted (hex): CBF4B9F70470856BB4F40F80B87EDB90865997FFEE6DF315AB166D713AF433A5
Test 2:
? Passphrase: Satoshi
? Encrypted: 6PYN6mjwYfjPUuYT3Exajvx25UddFVLpCw4bMsmtLdnKwZ9t1Mi3CfKe8S
? Unencrypted (WIF): KwYgW8gcxj1JWJXhPSu4Fqwzfhp5Yfi42mdYmMa4XqK7NJxXUSK7
? Unencrypted (hex): 09C2686880095B1A4C249EE3AC4EEA8A014F11E6F986D0B5025AC1F39AFBD9AE

實(shí)現(xiàn)

? neo-project/neo: https://github.com/neo-projec...
? CityOfZion/neon-js: https://github.com/CityOfZion...

原文:來自 https://github.com/neo-projec...

總結(jié)

以上是生活随笔為你收集整理的NEO改进协议提案2(NEP-2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。