美文网首页区块链
WDC地址生成逻辑

WDC地址生成逻辑

作者: WisdomChain中文社区 | 来源:发表于2019-05-23 16:43 被阅读0次

一、 地址生成步骤

wdc中,每个用户都可以生成自己的账户地址,账户地址是来自于生成的密钥对,其关系如下:

图1 地址生成

如图1所示,可以看到,在地址生成之前,有两个密钥会先生成,一个是私钥,一个是公钥,这是通过公开密钥算法生成的,在wdc系统中,采用的是椭圆线密码算法,具体说是Curve25519曲线,一个私钥必然对应着一个公钥,私钥必须妥善保存,公钥可以公开,而地址是根据公钥通过一个规则转化而来的。

生成步骤如下:

1)、通过25519曲线算法,生成密钥对,其中获得公钥,长度为32字节

2)、对公钥进行SHA3-256计算,获得结果为s1

3)、取得s1后面22字节,并且根据主网或测试网,分别增加前缀WX或WS,大写表示,获得结果为s2

4)、s2即为原始生成地址

5)、对s2进行地址校验和处理,得到结果s3

6)、s3为生成的地址

关于地址校验和

1)、对于上述步骤生成的s2进行所有字符的小写处理,得到r1

2)、将r1进行SHA3-256计算,得到哈希值r2

3)、将r1与r2进行字符比较,相同位置的字符,若对应哈希值的字符大于0x8则将r1中对应的字符转为大写(若是数字就不变)

4)、转化后的r1就是具备校验和能力的地址

[if !supportLists]二、 [endif]keystore生成逻辑

keystore是用来保存私钥的,其文件格式如下:

{"address": "","crypto": {"cipher": "aes-256-ctr","ciphertext": "a2c41861058818b64e3a9bc580d39e5d3308c181182e1ffc103bd281fafff2ad","cipherparams": {"iv": "5faf6f9e553054d1a51846da5137abc05faf6f9e553054d1a51846da5137abc0"},"kdf": "Argon2id","kdfparams": {“timeCost”:4,“memoryCost”:20480,“parallelism”:2,"salt": "65e11aebbb91020af7ce714120fe4e62bdb838826b81e27b55934348"},"mac": "757684ab512d907c8b04a9041dd4d4b8df8918f71a3dc7bdffb8d353f89b1add"},"id": "88ee2f87-99d8-40ee-b6ee-91e50f554d73","version": 1}

上述文件中的字段含义如下:

1)、address地址字符串2)、crypto包含加密参数说明,如下字段说明3)、cipher使用的加密算法,wdc钱包使用aes-256-ctr的私钥加密算法aes是对称密钥算法256是密钥位数ctr是加密模式

4)、ciphertext这是私钥被加密后的文本注意,我们对私钥进行加密时,是对私钥的十六进制形式的字符串进行加密,而不是二进制格式。并且加密时,不包含十六进制格式的0x符号5)、cipherparams这是AES-256-CTR算法需要用到的参数,只需要用到其中的iv参数,在生成keystore文件的时候,这个值随机生成,注意是二进制128位长度的,也就是16字节以下部分是对密钥进行加密的方法参数6)、kdf使用的密钥加密方法,这里使用的是Argon2id,这是一种哈希算法

7)、timeCost\memoryCost\parallelism这是Argon2id的参数,分别是散列计算的迭代次数,必须使用的存储器的大小以及可以并行计算散列的CPU数量

8)、salt这是哈希计算使用的盐值,采用长度与Argon2id哈希计算的值一样的长度注意,salt是需要随机计算出来的argon2id我们设定的输出结果是32字节,因此salt也生成为32字节大小

9)、mac这是用来比较解密密钥与口令的10)、id这是UUID,可以直接通过程序计算得到

11)、versionkeystore格式的版本号,默认为1

【keystore生成逻辑】

一个keystore表示一个用户私钥,用户生成私钥时必须提供密码,密码的长度不得小于6位(注意,密码长度并非必须校验的加密规则,只是一个前端校验的建议)1)、通过随机函数生成私钥2)、随机生成AES需要用到的iv向量值3)、随机生成salt值(注意盐值的长度与argon2id的哈希结果等长)4)、获得用户输入的密码p14)、将salt与p1连接起来,salt+p1,得到s15)、使用argon2id计算s1,得到derivedKey6)、这个derivedKey就是用来提供给AES的密钥,使用derivedKey,通过AES算法加密生成出的私钥cypherText7)、将derivedKey与加密后的私钥连接,derivedKey+cypherText,得到dc,SHA3-512计算得出MAC值

【keystore解密逻辑】

1)、用户输入密码2)、读取keystore中的salt值3)、使用生成keystore文件时的步骤,计算出一个mac值4)、读取keystore中的mac值,与计算出的mac值比较,若不一致则退出操作5)、若匹配成功,则取出用户密码以及keystore中存储的加密的私钥,进行解密计算

相关文章

  • WDC地址生成逻辑

    一、地址生成步骤 在wdc中,每个用户都可以生成自己的账户地址,账户地址是来自于生成的密钥对,其关系如下: 如图1...

  • 逻辑地址vs物理地址

    一、地址空间定义 物理地址空间 :硬件支持的地址空间逻辑地址空间 :在CPU运行的进程看到的地址 二、逻辑地址生成...

  • 操作系统复习

    物理地址和逻辑地址 物理地址:存单元的真正地址。逻辑地址:CPU所生成的地址。例如,你在进行C语言指针编程中,可以...

  • 操作系统拾遗--内存管理之分页式存储(一)

    1. 概念 逻辑地址:CPU所生成的地址。逻辑地址分为两部分:① P--页号:它包含每个页在物理内存中的基址,用来...

  • 存储

    逻辑地址:用户编程使用的是逻辑地址,逻辑地址都是从0开始,有两种逻辑地址形式:一维逻辑地址(地址)二维逻辑地址(段...

  • 有关Django的ORM和SQLAlchemy

    原文地址Django的特色是从ORM快速生成后台管理界面,我要做的是我只用指定逻辑关系的必要件(包括逻辑链条各元素...

  • WDC有机会重塑网络社交广告生态:链上广告DAPP初版UI正式发

    Wisdom Chain有机会重塑网络社交广告生态 为什么WDC有机会重塑传统互联网社交广告生态?来看看WDC对广...

  • 转发|原已孵化未映射资产处理公告

    致WDC(智慧链)社区: WDC(智慧链)主网已于2019年7月8日启动,原孵化资产已映射到主链。已孵化但未...

  • 2020-05-09OS

    逻辑地址的建立--逻辑地址到物理地址的转换 建立:c程序里的函数、变量名(逻辑地址)-(编译)-.s文件-(汇编)...

  • btc钱包探索纪实

    起因: 研究下btc转账,弄个自己的btc钱包,满足下好奇心,哈哈 一,功能整理: 1,公私钥,地址生成逻辑,私钥...

网友评论

    本文标题:WDC地址生成逻辑

    本文链接:https://www.haomeiwen.com/subject/cosbzqtx.html