own
搜索
金堆金融 门户首页 新闻资讯 网币 查看内容

数字币钱包和安全使用基础

2018-7-7 11:50| 发布者: admin| 查看: 228| 评论: 0

摘要: 以前的文章几乎都是关于区块链的实现,各底层组件和原理的分享。更新有点慢,我们在凑志同道合的技术组织分享技术文章,有相关技术或有这方面技术研究方向的,可以私聊我一起参与分享。本次主要从应用层数字币,介绍 ...

以前的文章几乎都是关于区块链的实现,各底层组件和原理的分享。更新有点慢,我们在凑志同道合的技术组织分享技术文章,有相关技术或有这方面技术研究方向的,可以私聊我一起参与分享。

本次主要从应用层数字币,介绍数字币目前钱包的一些背景概念和使用。

一, 区块链数字币钱包背景知识 

各种太多的术语,比如和银行对比,和普通的帐户相比之类的文章很多,看太多反而容易云里雾里。
几个主要是背景: 

数字币的地址:

现下主流的区块链公链:btc和以太坊(USDT跟btc基本一样,EOS主网虽上线了,但离应用还有距离)

19i3aHq2Uy84Q1mJG34qqiyFvfTD54MNTX 一个普通的比特币地址.
0x5d8e2dD659C5135A174f854C4Bf561E51C666687  一个普通的以太坊地址.

其他已知市面上绝多数的数字币,都跑在以太坊这个公链上,以太坊开发支持了智能合约,很多数字币均是在以太坊ERC20协议上,状态和交易数据也是存储在以太坊上,因此对于这些数字币来说帐户和转账交易模式是与以太坊基本一样的。 

数字币的地址就是帐户的基本单位,转入或转出数字币均是以地址为单位进行的, 它是通过由私钥非对称加密算法(椭圆曲线算法,参考之前的文章)计算出来的公钥,然后使用公钥推导出来的。大概的过程是:

1. 生成私钥与公钥
2. 将公钥通过SHA256哈希算法处理得到32字节的哈希值
3. 对得到的哈希值通过RIPEMD-160算法来得到20字节的哈希值
4. 把版本号+Hash160组成的21字节数组进行双次SHA256哈希运算,得到的哈希值的头4个字节作为校             验和,放置21字节数组的末尾
5. 对组成25位数组进行Base58编码,就得到地址
这里仅说明大概步骤,涉及的详细推导不展开。


为什么ETH地址和EOS地址是一样的?

就如前面说的,在以太坊上运行的币种,帐户和转账交易模式是与以太坊基本一样的。

数字币的所有权是通过私钥和地址来确立的。我们可以先简单地用类比来理解,私钥就类似于银行账户密码;地址就类似于银行账号。

私钥

私钥是数字币帐户的最重要部分,它可以通过非对称加密算出公钥,以及有一个对应的帐户数字币地址,同样的也是一串经过编码后的字符,比如5K1TaGDVJD3XETBAi2GT7GzmS4Lna24XQ3Mp5RsZTRwfnvjrYLn

私钥和地址从哪来?

上面讲到用钱包来生成比特币私钥和地址的,它的生成过程本质上是计算一个随机数。甚至我们使用抛硬币的方式也可以生成比特币的私钥,然后通过手工计算来算出地址。这是因为私钥就是一个随机选出的数字而已。256长度的随机数字组成一个私钥。
有了私钥,就可以通过加密函数来生成地址。这个生成方向是单向的。也就是你知道了地址是无法通过解密方法来计算出私钥的。就目前的人类计算机运算能力,穷尽全地球的计算机也破解不了。 

比特币的私钥与地址的对应是不存在状态的,由于它是密码学算法来保证对应关系的,因此你可以在任意脱机硬件中保存你的私钥,由于从来就不接触互联网,因为没人能黑了你脱机的私钥。但是便利性当然也大打折扣,这就是冷钱包的基础概念。 

真正必须存在比特币网络里的东西是“交易”,比如你的地址收到一笔比特币,这次“交易”是会被比特币网络记录的,这是不能离开网络的。

二,主流数字币钱包

这里仅仅介绍下用户量相对大的,较为主流的数字币钱包应用。 这里所说的钱包已经跟你自己完全从0开始下载比特币客户端btcoind自己生成帐户和钱包不一样,市面上主流的钱包应用是为了方便在投资和购买数字币的过程,降低普通用户对数字币的使用门槛。因此我把它们按使用门槛不同,分成不同类型:

入手简单,注册即可使用

blockchain
metamask 浏览器插件钱包
coinbase 

此类钱包在用户完成平台的注册后,能帮助用户直接生成新的钱包地址,由于地址是在平台生成的,因此私钥也会保存在它们这,私钥由平台保存也并不代表不安全,对于一些数字币新手,大的平台保存私钥可能比自己保存(自己被黑,私钥弄丢)更安全。 


imtoken
myetherwallet (仅以太坊和以太上的其他币)  
jaxx
比特派

此类钱包不保存用户的私钥,使用的时候往往是用户自己选择已有的地址导入,平台会根据给定的地址去公链查询余额,转账的时候输入自己的私钥地址进行转账。使用此类钱包时,需要自己已有数字币帐户,比如你可能直接用对应的客户端生成的地址,或来自于其他以前某个钱包应用平台帮助你生成的。 

还有一种钱包的概念是各数字币交易所的钱包, 交易所钱包是一个更宽概念的钱包。交易所钱包的使用,需要用户把数字币充入钱包内,然后就可以在交易所内频繁的参与各类币种的交易了,比如你持有btc,eth等基础币,可以用它在交易所内完成对其他币种的交易,然后在你认为需要的时候把对应的币重新提出到自己的钱包内。 

具体选哪一款呢?

  1. 对网络安全的新手们, 更加建议选择一个靠谱的, 主流的中心化钱包,比如: Blockchain 。对于太在意私钥保存在平台这事,不用太在意,比特币出现之前。 中心化的钱包对新手可能反而会更友好,不用担心没有备份,不用担心弄丢私钥。要知道丢失私钥可就真的丢失了你的数字财产,目前是找不回来的。 

  2. 对网络安全了解不多,但投资数目较大的(土豪你好),推荐上硬件钱包,Ledger Nano S(便宜点),TREZOR(品质好), 还有个KeepKey 

  3. 长期投资,以及对数字币交易频繁的,比如持有eth,btc等基础币,对使用基础币购买交易其他币种。那么放交易所里即可。提到自己的钱包有手续费不说,有时候网络拥堵的时候还要干等着。

  4. 如果做长期投资,或对区块链技术有一定了解,那么轻钱包是很好的选择。推荐 比特派, imToken 。Jaxx 虽然时间比较长,安全性上经历过很多考验。但是使用体验上还是差一些。 

三,比特币钱包与以太坊钱包客户端

bitcoin客户端,源码在https://github.com/bitcoin/bitcoin bitcoind昨晚比特的客户端,它可以直接生成新的比特币钱包,管理自己的钱包内帐户,使用方式就像一个传统的shell命令行一样, 比如使用命令: 

bitcoin  getnewaddress  生成新的地址
bitcoin getbalance获取钱包的余额
bitcoin sendtransaction
bitcoin-cli dumpprivkey 1my1bitcoin1addres11111  导出比特币地址帐户对应的私钥
...等等其他命令非常丰富,可以google下

geth是以太坊的客户端, 源码在https://github.com/ethereum/go-ethereum  

私钥是如此重要, 因此eth在bitcoin的基础上,针对帐户安全做一些加强,使用了keystore的概念, :
keystore: 以太坊 geth客户端生成帐户时,使用的加密存储方式。 

例如,用geth:

$ geth account new 
Your new account is locked with a password. 
Please give a password. Do not forget this password. 
Passphrase: 
Repeat passphrase: 
Address: {af1441461a56ea892c836e8f8e534749a5d7c004} 

$ geth account list Account #0: {af1441461a56ea892c836e8f8e534749a5d7c004} keystore:~/.ethereum/keystore/UTC--2018-07-01T05-11-42.005346641Z--af1441461a56ea892c836e8f8e534749a5d7c004

这过程中需要用户输入一个密码,这个密码用来加密私钥。 


一个keystore文件的内容: 

{
    "address": "af1441461a56ea892c836e8f8e534749a5d7c004",
    "crypto": {
        "cipher": "aes-128-ctr",
        "ciphertext": "37a7a4a117528db141d1f31c78b4c180ea38d96a5b9f09d6d08cc98abf1791be",
        "cipherparams": {
            "iv": "c286464ca6f05d3cf0cc8aaa67338ea1"
        },
        "kdf": "scrypt",
        "kdfparams": {
            "dklen": 32,
            "n": 262144,
            "p": 1,
            "r": 8,
            "salt": "d4aef201d1e8036ad3c186c848716a278e3b48461d68d26421cbc19f5fb65e38"
        },
        "mac": "22d253b8477729dc19666ed25cd3833a48832c4ecd0a7062d02aeb7698741b3c"
    },
    "id": "0fe9bd36-6b42-48ce-a10c-2f960a5c7874",
    "version": 3
}


几个主要字段意义: 

cipher:对称 AES 算法的名称;
cipherparams:上述 cipher 算法需要的参数;
ciphertext:你的以太坊私钥使用上述 cipher 算法进行加密;
kdf:密钥生成函数,用于让你用密码加密 keystore 文件;
kdfparams:上述 kdf 算法需要的参数;
Mac:用于验证密码的代码。

keystore加解密过程图(借用一个流程图): 


助记词

就跟词意一样,助记词是为了有利于人记住私钥而出现的,私钥的一串字符完全没有规律很难记忆,因此有了助记词。
助记词到私钥的过程,是遵从了一个算法标准的推导,这里不做展开。只要知道记住助记词即可推出私钥。

丢失或泄露这些信息带来的安全后果

密码泄漏了,基本无损;
keystore 泄漏了,密码没有泄漏,基本无损;
私钥泄漏了,意味数字资产可以被人转走;
助记词泄漏了,一样意味着能被人转走资产;
keystore+密码泄漏了,两个一起泄露,意味着被人转币;

至此关于钱包相关的介绍到此结束,后续介绍下如何使用编程api,编程实现转账,生成帐户,常见的以太坊与比特币公链一笔交易数据的查询与解析。


鲜花

握手

雷人

路过

鸡蛋

最新评论

乐享宝

保险技能干货签单交流

客服电话

18929342108

工作时间 周一至周六 8:00-17:30

客服QQ点击咨询

微信公众号

QQ交流群

Copyright © 2011-2025 www.dindui.com All Rights Reserved. 互联网金融投资理财贷款门户网站_www.dindui.com 深圳市双芯科技有限公司admin@92zh.cn 粤ICP备15103847号-3

返回顶部