巴比特专栏 | 5分钟告诉你BTC私钥生成与保管的“银行级”办法
本文摘要:作者:汤强,原发于公众号:汤强(id:gainianptu),原题《区块链资产进阶安全课》区块链资产没绝对安全一说。

区块链资产没绝对安全一说。

私钥虽然不给其他人看,但却是完全公开的,譬如BTC私钥,只不过一个在0到2的256次方之间的数,当然也别小看这个数,即便哪个有目前人类算力的亿万倍,猜到宇宙毁灭,他能猜出一个私钥的概率也不到万亿分之一。

这是区块链资产安全的数学根基,而这同时也使保管数字资产没有绝对的安全,但大家可以在相对层面想方法。

能删就删。

以Window系统为例:Win+R,或者左下角“开始”-gt;“运行”,输入:

h3rod_key

具体的要素都在代码里作了注释,有Python经验的读者可以DIY专用你的代码。譬如随机数处置函数(dep_k_2),可以略作改动,变化出是你设定的随机,譬如:

去中心化的金融dep_k_2:

k_2=k_2[:253]/

#公众号:汤强

services.msc

在服务列表中找到Print Spooler的服务项,右键-gt;“停止”。

2、相对可靠的私钥生成办法

假如有一种办法,能批量打印加密私钥就好了~譬如:

批量生成加过密的展示私钥和地址,输出到文本文件,任由大家离线打印:

注意,这里的“展示私钥”比通常私钥(52位)多1位,所以并非事实上的私钥,而是经过加密的。假如有人拿走了这张纸,他并不可以直接依赖这里的私钥,转走你的币。

由于事实上的私钥是:把展示私钥的最后一位,替换掉序号后的那位字母。大家以第一条记录为例,

+str)/

这段代码的意思是:把原来自动生成的随机数最后三位截除后(只选前253位,这也是k_2[:253]的来历),然后添加三位随机数,让随机数更随机。当然这里并非绝对的真随机,但用在离线加密私钥生成场景,是绝对足够了。

建议有能力的读者自己DIY一下dep_k_2函数,不然黑客看到这篇文章,假如他知道Python中随机数的具体生成,会略微增加猜到的概率。

由于Python中随机数生成的逻辑是用有关时刻作为种子。进一步DIY的方法同样可以参考上一篇文章。

当你试验十次导入私钥到钱包的操作成功、并且备份了少量的私钥纸后,你甚至可以直接把交易平台的币转入对应的地址保存,完全脱离钱包和互联网环境。

当你管理区块链资产的时候,你要把自己当成银行,由于在这个世界没银行,只有你。

关于打印机不起眼的小提示,可以助你向银行级的专业更靠拢一点。

sh3ool

在出现的窗口中,删除PRINTERS文件夹

折返到服务列表,右键Print Spooler,点“启动”。

打印机缓存问题就解决了,再连网就更安全了。

foriinrange:

3、清理打印机缓存文档

打印机打完私钥文件后,打印的内容可能不会立刻消失,会存在缓存里。假如此时连网,还是有泄露文件的风险。虽然大家已经经过加密一环,但在保护私钥方面,大家不可以有丝毫放松。

r=random.samh3le

iflen)==256:#检查字符是不是是256位

k=bitcoin.encode_privkey#生成私钥k

A=bitcoin.pubkey_to_address#生成地址A

#生成打印私钥kk

#生成可打印文本txt

txt="序号:{}/n展示私钥:{}/n地址:{}/n".format

同样Win+R调出运行窗口,输入:

returnk_2

#私钥集生成函数

#1、加工后的256位二进制随机数k_2

#-gt;3、私钥k-gt;4、公钥K-gt;5、地址A-gt;6、加密私钥kk(用于显示)

imh3ortstring

#这里设置一口气需要出几个私钥

iter_num=3

#随机数生成函数————

去中心化的金融random_01:

去中心化的金融deh3_k_2:

result.ah3h3end

作者:汤强,原发于公众号:汤强(id:gainianptu),原题《区块链资产进阶安全课》

结语

假如你决定佛系持币,私钥安全是第一要务。

此时此刻,BTC价格突破51,000USD,这只不过一个开始。伴随币价进一步波动,更为科学的管理方法是去中心化到更多地址,防止尾部风险。

假如你的持有量足够多,可以上调代码中iter_num的值,如:

iter_num=10

一拆十,进一步摊薄风险。

当然,此时每次转账万分之五个币左右的矿工费也是你一个人需要权衡的——不只分拆时要支付一次,再转入交易平台卖出时要再支付一次。不过这部分成本和长期收益相比,已经是足够小了。

另外,打印私钥纸的份数、在哪儿保管不会被火烧水淹,都是值得你考虑的严肃问题,这个问题对所有人都非常重要,但未必能引起每一个人足够的看重。由于有了你DIY的加密函数,所以多打几份问题也不大,只须你一个人牢记加密方法。

所以还要靠自己~

主流钱包是相对好的管理工具,但钱包文件容易丢失、密码容易被破、硬盘也容易损毁、旧电脑也容易被家人不小心当废品卖掉。

把私钥抄在纸上或者打印出来(纸钱包)还算保险,但伴随时间推移,空气中的酸性物质会让墨水褪色、纸张碎裂,所以你还要考虑用无酸纸记录。但假如一场地震或失火同时把密码纸、手机和电脑都烧了,那样要到哪儿找回私钥?

你说可以多找几个地方存放备份,但衍生问题又来了:在哪儿保管安全?分几份保管适合?——分开保管导致私钥泄露,那币可就丢了。

另外,伴随区块链资产增值,目前1万元人民币的BTC,八年后增长到100万更不是没可能,所以那时你还计划在一个地址上保管这部分币?对了,现在为止,没什么交易平台会把所有些币放在一个地址上。

深想下去你会发现,即便你现在掌控非常小的BTC,你也需要进化出银行级的保管办法。

return''.join

#随机数处置函数————让随机以外还有随机

#导入工具包

序号:3

展示私钥:L4FQDnhczMkRsXn2QJyt8mccgcebGJdofGPExhndVw6MNDpT2Vy8J

地址:1DskWSXjorfV9wgJkhufieFHaZJmuHHFRz

实质私钥是:用展示私钥的最后一位“J”,替换掉序号3的后一位,也就是第4位字母“Q”。所以实质私钥是:

实质私钥:L4FJDnhczMkRsXn2QJyt8mccgcebGJdofGPExhndVw6MNDpT2Vy8

实质私钥和展示私钥间的关系你一个人知晓就好了。

纯离线独立操作坏境,天知地知你知别的人都不知。

第一要有Python3的环境,并且pip安装好bitcoin模块,假如你一下子理解不了下面的代码,可以参考上一篇文章《Python:三行代码自制BTC私钥》,理解核心代码。

筹备工作好后,直接复制粘贴下面这段代码到Python代码框,保存后按F5键运行。结果会以txt文本文件的形式,输出到你Python文件的默认路径下,供离线打印。

#区块链资产进阶安全课

1、币到底应该放哪儿?

放交易平台?一定是个方法,不过交易平台关闭的风险一直存在。出了问题维权?可以的,但公安和法院不肯定能找到它。

foriinrange:

#生成一个1-50之间的整数,用于后续加密

random_int=random.ranpnt

#生成256位的0和1组成的二进制字符串

#进一步处置下上行代码生成的字符串,让随机更随机

k_2=dep_k_2

#生成用于可公开打印的私钥随机字母r

else:

#生成打印文件,第二参数'a'代表追加

txt_file=open

#打印到文件key.txt中

#关闭文件

txt_file.close

#整个文件需要实行的函数