Bitcoin Forum
May 25, 2024, 07:35:47 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: 小白贴  (Read 971 times)
min68953222guaij@163.com (OP)
Newbie
*
Offline Offline

Activity: 35
Merit: 0


View Profile
July 08, 2016, 02:27:56 PM
 #1

钱包加密
比特币客户端中的核心是私钥,拥有私钥就拥有私钥对应比特币的使用权限,所以,加密钱包的核心对象就显而易见——私钥。在解剖加密过程前,我们先捋一捋其中的一些名词,稍不小心就会把这些名词给混淆:

密码:从外部输入的,用来加解密钱包的字符串。
主密钥:一个32字节的随机数,直接用于钱包中私钥的加密,加密完后立即删除。
主密钥密文:根据外部输入【密码】对【主密钥】进行AES-256-CBC加密的结果,该加密为对称加密。
主密钥密文生成参数:主要是保存有【主密钥】得到【主密钥密文】中参与运算的一些参数。由该参数配合【密码】可以反推得到【主密钥】。
私钥:椭圆曲线算法私有秘钥,即钱包中的核心,拥有私钥就拥有私钥对应的比特币使用权,而私钥对应的公钥只是关联比特币,没有比特币的使用权限。
私钥密文:【主密钥】对【私钥】进行AES-256-CBC加密解密的结果,该加密为对称加密。
 

首先,程序生成32个字节随机数作为【主密钥】,然后根据外部输入的【密码】结合生成的【主密钥密文生成参数】一起对【主密钥】进行AES-256-CBC加密,加密结果为【主密钥密文】。稍后,我们将【主密钥】对钱包内的【私钥】进行AES-256-CBC加密得到【私钥密文】,待加密完成后,删除【私钥】,保留【私钥密文】;同时删除主密钥,保留【主密钥密文】和【主密钥密文生成参数】。就这样,钱包的加密就完成了。然后我们来总结一下加密过程的输入输出:输入:【密码】;中间生成:【主密钥】、【主密钥密文生成参数】、【主密钥密文】、【私钥密文】;最终保留:【主密钥密文生成参数】、【主密钥密文】、【私钥密文】;内部输入:【私钥】。

 

Bitcoin wallet

钱包解密
在顺利理解的前提下,理解钱包解密就顺水推舟了;鉴于加密钱包就是加密【私钥】,很多人可能会自然的认为解密钱包就是将【私钥密文】还原成【私钥】。这个思路是没错的,但是里面具体的操作其实并没有将所有【私钥密文】解密成【私钥】,具体操作听我慢慢道来:

我们有注意到,所有的【私钥】都是被一个32字节随机数【主密钥】加密的,所以解密【私钥】,首先要将【主密钥】还原。而经过加密钱包后,我们只保留了【主密钥密文】和【主密钥密文生成参数】,同时我们还知道,这两个数据再加上【密码】就可以反推出【主密钥】。到此,我想你应该有一个清晰的解密思路了。

解密钱包,首先根据外部输入的【密码】结合保存的【主密钥密文】和【主密钥密文生成参数】恢复出【主密钥】,得到了【主密钥】,那么所有的【私钥密文】就可以被解密成私钥【私钥】。但是,要注意一下,这里钱包并没有将所有的【私钥密文】解密成【私钥】,而是解密钱包就此终止。所以,你要记住解密钱包并没有解密所有【私钥密文】,而是恢复出【主密钥】的过程。当然你不用担心,拥有【主密钥】和【私钥密文】,获取【私钥】是轻而易举的。这样,在每次使用需要使用【私钥】的时候,都是通过【主密钥】去解密一次【私钥密文】,用完之后我们依然保存的是【私钥密文】。

修改密码
在理解上述两个过程后,再来看修改钱包密码就很容易了。我们知道在加解密钱包的过程中,我们并没有使用我们输入的【密码】直接加密钱包中的【私钥】,而是将【密码】间接地关联【主密钥】,使用【主密钥】来加解密【私钥】。所以【主密钥】就成为了加解密的核心,而【密码】是加密【主密钥】得到【主密钥密文】的,所以叫【密码】关联于【主密钥】。加密后的钱包中没有保存【主密钥】,而是保存了【主密钥密文】和【主密钥密文生成参数】。

比特币修改【密码】的做法是:输入【新密码】和【旧密码】,用【旧密码】结合【主密钥密文】和【主密钥密文生成参数】解密出【主密钥】,然后使用【新密码】重新加密【主密钥】得到【新主密钥密文】,然后删除【主密钥】而终止。

总结一下修改【密码】的过程,我们发现整个过程中【主密钥】和【私钥密文】都没变,变化的是【主密钥密文】。所以修改【密码】其实主要是修改【主密钥密文】的过程,之后就只能通过【新密码】来解密出【主密钥】进而解密【私钥密文】达到解密钱包的效果。

安全性理解
分析了加密钱包、解密钱包以及修改钱包密码过程,我来简单的整体理解一下钱包的加解密的安全性。根据上面的分析,我们知道加密钱包其实是用32字节随机数【主密钥】去加密【私钥】的,我们输入的【密码】并没有直接加密【私钥】,而是通过关联【主密钥】间接地加密【私钥】。同时我们知道钱包中私钥最核心的也是32字节随机数,32字节随机数的私钥要通过暴力破解基本是不可能的,我们暂时理解为32字节随机数作为密码绝对安全。整个加密钱包过程其实就是将我们各种可能不安全的个性【密码】转换成关联于一个32字节的随机数【主密钥】来加密【私钥】,这个时候可以理解为将【密码】关联于一个和私钥有着同样安全等级的【主密钥】,然后用【主密钥】来直接保证【私钥】的安全。

解密钱包和修改钱包密码的过程中,我们需要尽可能的保证【私钥】的安全,不让【私钥】出现在内存中。所以比特币解密钱包的时候,并没有将所有【私钥】解密出来放到内存中,而是解密【主密钥】放在内存中,需要使用【私钥】时才用【主密钥】去解密【私钥密文】得到【私钥】,使用完后立即清除【私钥】。这样,我们最大限度的防止了【私钥】出现在内存中出现的概率,而是将所有的操作集中在【主密钥】一个点上,我们的原则就是保证【私钥】不被恶意窃取。
ps99729729hai@163.com
Jr. Member
*
Offline Offline

Activity: 40
Merit: 10


View Profile
July 10, 2016, 08:05:15 AM
 #2

普及知识啊
quandao40
Member
**
Offline Offline

Activity: 112
Merit: 10


View Profile
July 10, 2016, 09:32:47 AM
 #3

看不下去 Grin
Aimee1993
Hero Member
*****
Offline Offline

Activity: 630
Merit: 500


View Profile
July 10, 2016, 03:33:02 PM
 #4

密密麻麻  受不了
scoffild
Sr. Member
****
Offline Offline

Activity: 366
Merit: 250



View Profile
July 11, 2016, 11:12:23 AM
 #5

钱包加密
比特币客户端中的核心是私钥,拥有私钥就拥有私钥对应比特币的使用权限,所以,加密钱包的核心对象就显而易见——私钥。在解剖加密过程前,我们先捋一捋其中的一些名词,稍不小心就会把这些名词给混淆:

密码:从外部输入的,用来加解密钱包的字符串。
主密钥:一个32字节的随机数,直接用于钱包中私钥的加密,加密完后立即删除。
主密钥密文:根据外部输入【密码】对【主密钥】进行AES-256-CBC加密的结果,该加密为对称加密。
主密钥密文生成参数:主要是保存有【主密钥】得到【主密钥密文】中参与运算的一些参数。由该参数配合【密码】可以反推得到【主密钥】。
私钥:椭圆曲线算法私有秘钥,即钱包中的核心,拥有私钥就拥有私钥对应的比特币使用权,而私钥对应的公钥只是关联比特币,没有比特币的使用权限。
私钥密文:【主密钥】对【私钥】进行AES-256-CBC加密解密的结果,该加密为对称加密。
 

首先,程序生成32个字节随机数作为【主密钥】,然后根据外部输入的【密码】结合生成的【主密钥密文生成参数】一起对【主密钥】进行AES-256-CBC加密,加密结果为【主密钥密文】。稍后,我们将【主密钥】对钱包内的【私钥】进行AES-256-CBC加密得到【私钥密文】,待加密完成后,删除【私钥】,保留【私钥密文】;同时删除主密钥,保留【主密钥密文】和【主密钥密文生成参数】。就这样,钱包的加密就完成了。然后我们来总结一下加密过程的输入输出:输入:【密码】;中间生成:【主密钥】、【主密钥密文生成参数】、【主密钥密文】、【私钥密文】;最终保留:【主密钥密文生成参数】、【主密钥密文】、【私钥密文】;内部输入:【私钥】。

 

Bitcoin wallet

钱包解密
在顺利理解的前提下,理解钱包解密就顺水推舟了;鉴于加密钱包就是加密【私钥】,很多人可能会自然的认为解密钱包就是将【私钥密文】还原成【私钥】。这个思路是没错的,但是里面具体的操作其实并没有将所有【私钥密文】解密成【私钥】,具体操作听我慢慢道来:

我们有注意到,所有的【私钥】都是被一个32字节随机数【主密钥】加密的,所以解密【私钥】,首先要将【主密钥】还原。而经过加密钱包后,我们只保留了【主密钥密文】和【主密钥密文生成参数】,同时我们还知道,这两个数据再加上【密码】就可以反推出【主密钥】。到此,我想你应该有一个清晰的解密思路了。

解密钱包,首先根据外部输入的【密码】结合保存的【主密钥密文】和【主密钥密文生成参数】恢复出【主密钥】,得到了【主密钥】,那么所有的【私钥密文】就可以被解密成私钥【私钥】。但是,要注意一下,这里钱包并没有将所有的【私钥密文】解密成【私钥】,而是解密钱包就此终止。所以,你要记住解密钱包并没有解密所有【私钥密文】,而是恢复出【主密钥】的过程。当然你不用担心,拥有【主密钥】和【私钥密文】,获取【私钥】是轻而易举的。这样,在每次使用需要使用【私钥】的时候,都是通过【主密钥】去解密一次【私钥密文】,用完之后我们依然保存的是【私钥密文】。

修改密码
在理解上述两个过程后,再来看修改钱包密码就很容易了。我们知道在加解密钱包的过程中,我们并没有使用我们输入的【密码】直接加密钱包中的【私钥】,而是将【密码】间接地关联【主密钥】,使用【主密钥】来加解密【私钥】。所以【主密钥】就成为了加解密的核心,而【密码】是加密【主密钥】得到【主密钥密文】的,所以叫【密码】关联于【主密钥】。加密后的钱包中没有保存【主密钥】,而是保存了【主密钥密文】和【主密钥密文生成参数】。

比特币修改【密码】的做法是:输入【新密码】和【旧密码】,用【旧密码】结合【主密钥密文】和【主密钥密文生成参数】解密出【主密钥】,然后使用【新密码】重新加密【主密钥】得到【新主密钥密文】,然后删除【主密钥】而终止。

总结一下修改【密码】的过程,我们发现整个过程中【主密钥】和【私钥密文】都没变,变化的是【主密钥密文】。所以修改【密码】其实主要是修改【主密钥密文】的过程,之后就只能通过【新密码】来解密出【主密钥】进而解密【私钥密文】达到解密钱包的效果。

安全性理解
分析了加密钱包、解密钱包以及修改钱包密码过程,我来简单的整体理解一下钱包的加解密的安全性。根据上面的分析,我们知道加密钱包其实是用32字节随机数【主密钥】去加密【私钥】的,我们输入的【密码】并没有直接加密【私钥】,而是通过关联【主密钥】间接地加密【私钥】。同时我们知道钱包中私钥最核心的也是32字节随机数,32字节随机数的私钥要通过暴力破解基本是不可能的,我们暂时理解为32字节随机数作为密码绝对安全。整个加密钱包过程其实就是将我们各种可能不安全的个性【密码】转换成关联于一个32字节的随机数【主密钥】来加密【私钥】,这个时候可以理解为将【密码】关联于一个和私钥有着同样安全等级的【主密钥】,然后用【主密钥】来直接保证【私钥】的安全。

解密钱包和修改钱包密码的过程中,我们需要尽可能的保证【私钥】的安全,不让【私钥】出现在内存中。所以比特币解密钱包的时候,并没有将所有【私钥】解密出来放到内存中,而是解密【主密钥】放在内存中,需要使用【私钥】时才用【主密钥】去解密【私钥密文】得到【私钥】,使用完后立即清除【私钥】。这样,我们最大限度的防止了【私钥】出现在内存中出现的概率,而是将所有的操作集中在【主密钥】一个点上,我们的原则就是保证【私钥】不被恶意窃取。



学习了


       █
      ██
     ██
   ██ ██
 █ ██ ██
██ ██ ██
██ ██ ██
██ ██ ██
██ ██ ██
██ ██ ██
   
       █
      ██
     ██
   ██ ██
 █ ██ ██
██ ██ ██
██ ██ ██
██ ██ ██
██ ██ ██
██ ██ ██
  B

          ▄▄▄▄▄▄
     ▄▄████████████▄▄
   ▄█████▀▀    ▀▀█████▄
  ████▀            ▀████
 ████                ████
▐███                  ███▌
███▌                  ▐███
▐███           ▄▄     ███▌
 ████         ▀███▄  ▐███
  ████▄         ▀███▄███
   ▀█████▄▄     ▄█████▀
     ▀▀████████████▀▀
          ▀▀▀▀▀▀
T 
Better. Quick.

Transparent.






             ▄████▄▄   ▄
█▄          ██████████▀▄
███        ███████████▀
▐████▄     ██████████▌
▄▄██████▄▄▄▄█████████▌
▀████████████████████
  ▀█████████████████
  ▄▄███████████████
   ▀█████████████▀
    ▄▄█████████▀
▀▀██████████▀
    ▀▀▀▀▀






▄█████████████████████████▄
███████████████████████████
███████████████▀       ████
██████████████      ▄▄▄████
██████████████    ▐████████
██████████████    ▐████████
██████████            ▐████
██████████            █████
██████████████    ▐████████
██████████████    ▐████████
██████████████    ▐████████
▀█████████████    ▐███████▀






                   ▄▄████
              ▄▄████████▌
         ▄▄█████████▀███
    ▄▄██████████▀▀ ▄███▌
▄████████████▀▀  ▄█████
▀▀▀███████▀   ▄███████▌
      ██    ▄█████████
       █  ▄██████████▌
       █  ███████████
       █ ██▀ ▀██████▌
       ██▀     ▀████
                 ▀█▌
weisonghypsp291
Sr. Member
****
Offline Offline

Activity: 462
Merit: 250



View Profile
July 12, 2016, 05:22:13 AM
 #6

投资有风险,入市需谨慎啊
trissfc1998
Member
**
Offline Offline

Activity: 114
Merit: 100


View Profile
July 12, 2016, 02:14:28 PM
 #7

普及贴,真是为小白准备的。
level6
Full Member
***
Offline Offline

Activity: 163
Merit: 100



View Profile
July 13, 2016, 05:47:25 PM
 #8

好特别的帖子哦

bitcoin safe site ★★★ Win Free Bitcoins every hour!   www.freebitco.in ★★★
bitcoin safe site ★★★
bitcoin safe site ★★★
ju8589365shoufuan@163.com
Newbie
*
Offline Offline

Activity: 42
Merit: 0


View Profile
August 03, 2016, 01:08:30 PM
 #9

说话的方式简单点
czytlyx
Member
**
Offline Offline

Activity: 68
Merit: 10


View Profile
August 03, 2016, 01:10:46 PM
 #10

写的有点复杂。。。。
ju8589365shoufuan@163.com
Newbie
*
Offline Offline

Activity: 42
Merit: 0


View Profile
August 03, 2016, 02:30:52 PM
 #11

看不懂
czytjkp11
Member
**
Offline Offline

Activity: 80
Merit: 10


View Profile
August 04, 2016, 11:34:50 AM
 #12

不错,就是写的太复杂了点

czytjkp001
Newbie
*
Offline Offline

Activity: 56
Merit: 0


View Profile
August 04, 2016, 12:53:55 PM
 #13

写的不错,支持下
tz6838765xianjia@163.com
Member
**
Offline Offline

Activity: 70
Merit: 10


View Profile
August 04, 2016, 02:41:24 PM
 #14

看的我想睡觉
tz6838765xianjia@163.com
Member
**
Offline Offline

Activity: 70
Merit: 10


View Profile
August 04, 2016, 02:41:59 PM
 #15

能简单点? Cry
tz6838765xianjia@163.com
Member
**
Offline Offline

Activity: 70
Merit: 10


View Profile
August 04, 2016, 02:42:30 PM
 #16

风险个蛋蛋,放银行贬值啊
tz6838765xianjia@163.com
Member
**
Offline Offline

Activity: 70
Merit: 10


View Profile
August 04, 2016, 02:53:53 PM
 #17

跟爸爸说下看懂了啥 Cheesy
zu0858817zhizi50@163.com
Newbie
*
Offline Offline

Activity: 28
Merit: 0


View Profile
August 04, 2016, 05:11:15 PM
 #18

感谢大神
ramzifcb48
Full Member
***
Offline Offline

Activity: 140
Merit: 100


View Profile
August 05, 2016, 12:46:25 AM
 #19

感谢大神指导
yiqianmvmov1824
Member
**
Offline Offline

Activity: 104
Merit: 100


View Profile
August 05, 2016, 02:34:28 AM
 #20

总结的不错
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!