XRP seed phrase privatekey address之间的关系

/ 区块链 / 0 条评论 / 2330浏览

介绍

Ripple帐户的“ secret_key”和地址之间的关系与其他密码完全不同。在Ripple中,当我们说“ secret_key”时,它不是指用于签署帐户交易的私钥(与大多数其他加密货币一样),而是指派生签名密钥对的种子。

下面以根帐户为例,说明ripple帐户的机密(种子)如何生成地址和签名密钥对。

从密码短语到种子 对密码执行SHA-512哈希处理。 种子=步骤1的结果的前128位。 示例: 根帐户由密码短语生成masterpassphrase。 由此产生一个种子:(DEDCE9CE67B451D852FD4E846FCDE31C十六进制),或snoPBrXtMeMyMHUVTgbuqAfg1SUTbBase-58-Check编码。

在大多数情况下,钱包客户会直接生成(随机)种子,而不是从密码短语中得出。

从种子到家庭生成器(根帐户) 设置一个计数器,i= 032位数字), 将种子附加计数器i, 对步骤2的结果执行SHA-512哈希处理, Family Generator的private_key =第三步结果的上半部分。 如果计算出的private_key为零或大于椭圆曲线的阶数,则将计数器i加1,然后从步骤2开始重复。 例如, 从seed DEDCE9CE67B451D852FD4E846FCDE31CFamily Generator的private_key = sha512的上半部分(DEDCE9CE67B451D852FD4E846FCDE31C + 00000000)=395898665728F57DE5D90F1DE102278A967D6941A45A6C9A98CB123394489E55

相应的public_key = 03D49C56E1B185F1BE899AE66A02EFC17F78EA6FC53AF85E0FE54C6E8B7F8C71A8

从家庭生成器到具有index_number的(子)帐户 默认情况下,index_number = 0

设置一个计数器,i = 032位数字) 在GeneratorPublic_key后面加上index_number32位),然后加上计数器i, 对步骤2的结果执行SHA-512哈希处理, Additional_key =步骤3结果的上半部分。 如果extra_key为零或大于椭圆曲线的顺序,则将counter-i加1,然后从步骤2开始重复。 帐户的private_key=生成者的private_key + Additional_key(修改曲线的顺序)。 例如

Family Generatorpublic)= 03D49C56E1B185F1BE899AE66A02EFC17F78EA6FC53AF85E0FE54C6E8B7F8C71A8, 对于第一个子帐户(index_number = 0), 帐户的private_key =1ACAAEDECE405B2A958212629E16F2EB46B153EEE94CDD350FDEFF52795525B7 帐户的public_key =0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020

从帐户的Public_Key到地址 对公钥执行SHA-256哈希处理。 对步骤1的结果执行RIPEMD-160哈希。 使用version_byte=对步骤2的结果执行Base-58-Check编码0。 例如, 帐户的public_key = 0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020, ripple 地址 = rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh

从公钥进行的地址计算与用于导出普通比特币地址的协议完全相同。唯一的区别是用于base-58编码的字符集: Ripple使用的字母集是rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz, (相比之下,比特币的:)123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

概要 该账户家庭纹波的颇为相似,HD-Wallet的Bitcoin(BIP32)功能。masterpassphrase --> seed --> root account --> accountRipple的婴儿阶段起,的工作流程就已嵌入到涟漪代码中。但是,某种程度上,从未将帐户系列的使用引入最终用户,也从未由钱包客户建立。现在,Ripple网络中唯一的Root帐户用例是验证程序之间的共识过程。

然而,当今大多数波纹钱包客户仍将种子(例如snoPBrXtMeMyMHUVTgbuqAfg1SUTb)用作帐户的“secret_key”,可能是出于兼容性考虑。

参考文献: https://wiki.ripple.com/Account_Family https://github.com/ripple/rippled/blob/master/src/ripple/crypto/impl/GenerateDeterministicKey.cpp