• 微课视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
微课江湖
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 微课视频
  • 安全教程
  • 安全设置
  • 杀毒防毒
  • 病毒查杀
  • 脚本攻防
  • 入侵防御
  • 工具使用
  • 业界动态
  • Exploit
  • 漏洞分析
  • 加密解密
  • 手机安全
  • 区块链
您的位置:首页 > 网络安全 >区块链 > 关于区块链钱包的基础密码学 (1)

关于区块链钱包的基础密码学 (1)

作者:以太坊爱好者 字体:[增加 减小] 来源:互联网 时间:2018-11-03

以太坊爱好者向大家分享了关于区块链钱包的基础密码学 (1),其中包含区块链钱包等知识点,遇到此问题的同学们可以参考下

通过区块链,人类历史上首次通过技术彻底、纯粹地保障「私有财产神圣不可侵犯」。

让人沉思,让人兴奋的一段话。

可在这背后的基础技术「密码学」是如何工作,以及保障数字资产的安全呢?无论你是爱好者亦或投资客,应该需要多少了解背后的原理,免得误解,轻则闹笑话,重则损失资产。因为我们总会听到一些鬼扯的故事(帮我找回密码吧!私钥发到群里了诶!),皆是由于对钱包本质的不了解。

本文仅谈论钱包原型涉及的相关密码学,不包含 keystore,助记词,转账交易等。


钱包如何生成

这是以太坊黄皮书关于钱包(私钥、公钥、地址)的描述,仅仅 2 行文字。主要讲解私钥通过 ECDSA(椭圆曲线签名算法)推导出公钥,继而经过 Keccak 单向散列函数推导出地址。

分解为 3 个步骤:
1. 创建随机私钥 (64 位 16 进制字符 / 256 比特 / 32 字节)
2. 从私钥推导出公钥 (128 位 16 进制字符 / 512 比特 / 64 字节)
3. 从公钥推导出地址 (40 位 16 进制字符 / 160 比特 / 20 字节)

这是我从 ethereumjs/keythereum 中剥离出来的 JavaScript 代码,关于黄皮书上的公式的具体实现,仅仅 6 行代码。

这是一件很奇妙的事情,2 行文字,6 行代码承载着亿万级别的资产,但往往越简单,越奥妙。以上的 6 行代码,就已经囊括密码学中大多数技术,比如随机数生成器、非对称加密,单向散列函数等。以下我会为大家解剖这 6 行代码,逐一介绍背后相关的密码学知识。

随机数

随机数用于生成私钥,若随机数可以被预测或重现,则私钥就会立刻形同虚设。所以保证随机数拥有下列三项特征,至关重要:

1.随机性:不存在统计学偏差,完全杂乱的数列
2.不可预测性:不能从过去的数列推测下一个出现的数
3.不可重现性:除非将数列保存下来,否则不能重现相同的数列
软件本身是无法生成具有不可重现性的随机数,因为运行软件的计算机本身仅具备有限的内部状态。所以通过确定性的代码,在周期足够长的情况下,必然会出现相同的随机数。因此要生成具备不可重现性的随机数,需要从不确定的物理现象中获取信息,比如周围温度、环境噪音、鼠标移动,键盘输入间隔等。

在 Linux 内核中维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。熵(entropy)是描述系统混乱无序程度的物理量,一个系统的熵越大则说明该系统的有序性越差,即不确定性越大。

所以在选择生成私钥的随机数方法时,需要选择满足密码学强度的随机数方法,比如 Node 中的 crypto.randomBytes。当你调用 crypto.randomBytes(32) 方法时,它会等待熵池搜集足够的信息后,返回 64 位的随机数,即私钥。

const privateKey = crypto.randomBytes(32)// privateKey.toString('hex'): ea4692a11d962b249f8f0439d642a9013a1a08807649311d3672886d72d1fe51

另外,在以太坊中想要获得随机数是一件不容易的事情,因为矿工需要得到同样的结果,并经过验证提交到区块链上。但如果 EVM 存在 random opcode,矿工会生成不一致随机数,无法达成共识。

目前社区也提出相应的方案,Mist 的作者 Alex van de Sande 提出使用 blockhashes 生成随机数,但由于矿工拥有操纵区块数据的能力,如果有能力且愿意放弃 5 个区块的奖励,理论上可以间接影响随机数,所以不是完全足够安全可靠。

为了解决矿工有可能作恶的问题,国内社区提出 RANDAO: A DAO working as RNG of Ethereum 项目,构建一个人人可以参与的 DAO,通过经济激励,由所有参与者共同决定一个随机数。在 RANDAO 的基础上,Vitalik Buterin 也提出 RANDAO++ 方案,感兴趣可以看看。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-11-03什么是双向锚定?双向锚定介绍
  • 2018-11-03万云IDE:如何在几分钟内搭建好一个区块链开发环境?
  • 2018-11-03如何在Core钱包中提取BCC?Windows用户看过来
  • 2018-11-03几张简单的图就揭示了整个区块链世界
  • 2018-11-03Cobo钱包使用教程(双语版)
  • 2018-11-03谈谈“分叉”与“空投”这两大糖果派发方式
  • 2018-11-03区块链资产「地址、密码、私钥、助记词、Keystore 」
  • 2018-11-03加密货币协议会变胖还是变瘦?
  • 2018-11-03为什么去中心化和分布式存储对一个更好的互联网至关重要?
  • 2018-11-03IOTA的通证价值基础与激励价值的关系

文章分类

  • 安全教程
  • 安全设置
  • 杀毒防毒
  • 病毒查杀
  • 脚本攻防
  • 入侵防御
  • 工具使用
  • 业界动态
  • Exploit
  • 漏洞分析
  • 加密解密
  • 手机安全
  • 区块链

最近更新的内容

    • 如何在Localethereum上购买以太坊
    • 区块链简介-什么是私有链
    • 科普 | 非技术宅的区块链简介: 1.共识
    • 如何妥善备份你的以太坊钱包?
    • 一文看懂比特币ETF
    • 比特币私钥,公钥和地址的关系
    • 比特币的主心骨:网络节点 (nodes)
    • 最佳辅助-DMI(动向指标)策略
    • 区块链共识的确定性
    • 加密货币的经济学市值问题(从零开始学区块链)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2015-2018 All Rights Reserved. 微课江湖 版权所有