HD钱包原理

随着去中心化交易所的崛起,以及各类Dapp的涌现,钱包在未来很可能取代交易所,成为数字资产保存、使用的最大入口。因此,理解钱包的使用原理是相当重要的,这直接关系到持币者的切身利益。 目前市场上的手机钱包app按私钥保存的不同表现形式,大致可以分为两种:一种是纯私钥保存,另一种则是种子保存(助记词保存)。 纯私钥保存很好理解,我们都知道公钥和私钥是由非对称加密技术形成的一对钥匙,私钥可以对公钥上的交易进行签名,继而证明自己拥有这个公钥的控制权。因此,早期的钱包以及目前大部分的公链钱包都是支持私钥导入的。 那么种子保存(助记词保存)又是什么呢?在说明这个问题之前要先澄清一个很大部分人对助记词的误区。很多人曾经认为(包括年轻的情报员),助记词是钱包公司创建的一种保存私钥的方式,比如你在进入一个新安装的钱包app之前,钱包会提示你记录下一串词语,并告诉你记录下这串词语就等于掌握了这个钱包中的比特币私钥和以太坊私钥。 实际上这个说法是有歧义的,这种说法让多数人认为,助记词是由这个钱包中的私钥经过一串加密技术转化而成。但是实际上,助记词并非由私钥推演而来,相反的,私钥是由助记词推演而来,助记词则由种子推演而来。 在介绍种子、助记词、私钥三者关系之前,要先讲述BIP协议。 BIP协议的全称是Bitcoin Improve Protical,意即比特币提升协议,它是一个用来提升比特币使用实用性的一种协议。 在BIP协议中,BIP32、BIP39、BIP44是对比特币私钥管理的使用性提高所做的协议,更确切地说,是HD钱包技术的的底层协议。 比特币社区十分倡导Principle Of Avoiding Reuse,即用过的比特币地址就不要再用了,这样有助于交易隐私的保护和地址的安全性。毕竟,如果一个地址有太多的交易记录,而这个地址又和某个人有大量的联系时,相当于这个人的大量交易记录公之于众。而频繁换地址的另一好处,就是提升安全性,要知道量子技术也难以对一个未知的地址发起计算攻击。由此也可以认识到,UTXO的可变交易输出是对比特币安全性提升的一大保证。 但是如果仅仅使用老旧的私钥管理技术,就意味着使用者必须在钱包中预设非常多的比特币地址,这些地址都是各自随机生成的,使用者在一个地址转账时,为了保证Principle Of Avoiding Reuse,在每一次转账后,都将交易输出指向另一个地址。 这种操作手法有一个最大的麻烦,那就是私钥的管理和保存。要知道,要做到保证的足量的交易的话,地址数量需要达到上百上千个,这对普通交易者明显是非常不友好的。这种用来保存无任何联系的地址的钱包叫做非确定性钱包。 因此,BIP32中提出了提出了一套确定性钱包的解决方案协议,即HD钱包协议。HD钱包的全称是Hierarchical Deterministic Wallet,译为树状确定性钱包。顾名思义,在HD钱包中管理的地址之间是有关系的,地址的生成如同树种-树干-树枝的关系。 怎么理解呢? 在BIP32中,规定了一个种子是如何形成的,以及这个种子如何生成一系列的私钥。只要掌握了这串种子,就等于控制了根据这个种子生成的私钥。 随机生成一个种子做示范:【233232995d0e556517d11125ec3e7d1fff8eeae0c36fd9fd91e05832a71451a502e572aa3b118a21a312f9e8c777e2f66e6d83be002dd9ea5bbc9914d7be1d99】,根据这串种子可以衍生出一系列的私钥,例如【KxV8YyTQ6Agkbtc83kGrEUuH54GxsdqtSKjV8wgP5tBzPPCbbCz7】、【KxSoFoyzY1ZMqZUbg2KeCf2aHPGaSKNS2Zd9f3PPenh65sNEc917】、【L3toyntWFZWqfpuZNr1tMYP8z1v8jGCsAfdikwkoQhsdE3WmFcYc】… 只要掌握了种子,就掌握了这些私钥和这些私钥所控制的比特币。种子和私钥的关系就如同树种-树干-树枝的关系,可见HD钱包的命名是形象生动的。 掌握种子显然比掌握成百上千的私钥要方便的多,但显然128位的字符并不好记。于是比特币开发社区在BIP39提出了助记词方案。BIP39中所提出的解决方案是,随机生成数位的助记词,通过这些单词和单词的顺序就能得到种子。 BIP39具体的解决方案是,定义一个包含2048个单词的单词表(参考链接:https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt),生成一串随机序列后,对这串随机序列做一定的算法演变,得到一个新的序列,将序列分割成好几个部分后,将每个部分与单词表上的一个单词做对应,就得到了助记词。而助记词再通过密钥生成函数PBKDF2就能生成种子。 至此,助记词——种子——私钥的生成过程就完成了。BIP32和BIP39方案使得普通数字货币持有者只要记住一串助记词,就能管理无数个地址。 当然,BIP协议不仅仅适用于比特币,在BIP44中还提出了支持多币种的解决方案,即用一个助记词和种子就能管理包括比特币在内的多种数字货币,例如以太坊也支持BIP44。但需要说明的是,HD钱包的一系列协议还是天然最适合比特币,而不太适用于别的数字货币。原因就在于比特币的UTXO特性,而包括以太坊、EOS在内的其他公链都是账户体系。账户体系意味着,余额会存留在旧的账户,倘若转移到新账户,就需要额外一笔手续费。 文末,再补充个脑钱包的知识。脑钱包虽然感觉上去和助记词差不多,都是通过一串单词短语来记住一个一串字符,但脑钱包生成的是一串私钥,不是种子,并且脑钱包的的短语生成不是随机性的,而是很大程度上依赖于人类的语言逻辑。 比如你将一句“今天晚上7点钟,又能看币圈邦德的文章了也。”输入脑钱包生成器,就能得到一串私钥【12ZRkBHjfubmotwyfkzff78AScEkXnhDhb】,但是如前面所说,“今天晚上7点钟,又能看币圈邦德的文章了也。”这句话的逻辑性太强,逻辑与随机是冲突的事情,只有随机才能保证安全性。

预防老后“肌力衰弱” 哈佛研究:吃这个就有效

人一上了年纪,除了生病,最怕的就是摔跤跌倒。美国哈佛大学研究显示,摄取富含黄酮醇的蔬果,例如苹果、黑莓、洋葱等,能够大幅减缓肌力减退等“老年衰弱症”病徵的程度,类黄酮化合物之中又以槲皮素效果最佳。 这项研究是由美国哈佛大学希伯来安养中心医学院进行。英国《独立报》报导,研究显示,在苹果、黑莓等食物发现的一种名为槲皮素(quercetin)的黄类黄酮化合物,也许就是预防老后衰弱的最重要关键因素。研究成果已刊载于《美国临床营养学期刊》(American Journal of Clinical Nutrition)。 研究团队观察1701名均龄58.4岁人士饮食与老年衰弱程度之间关係,追踪12年期间有13.2%的受试者出现衰弱症。分析发现,每天摄取的黄酮醇每增加10毫克,衰老机率就可减低20%。吃一颗中等大小的苹果,就能摄取10毫克黄酮醇。 “老年衰弱症”(frailty)的特徵通常会有肌力下降、疲劳。英国65岁以上人士约1成有此症,到了85岁以上年龄层,比例大幅增加为25%至50%。现行针对衰弱症的膳食建议主要聚焦于蛋白质摄取,不过,哈佛这项研究指出,许多其他食物也有助降低衰弱问题。 “一天一苹果,医师远离我”这句话可不是讲假的。美国哈佛大学研究指出,每天吃一颗苹果,可让老后出现衰弱症的机率降低20%。(示意图/Shutterstock)研究报告指,“一天一苹果,医师远离我”这句老话的确没错,后半句也许还可以换成“衰弱远离我”。虽说类黄酮化合物摄取总量与衰弱症之间尚无显著关联,但摄取较多的黄酮醇与降低衰弱症发生率之间的确有关,尤其又以槲皮素的关联表现最强。这代表类黄酮化合物之中可能有特定的子分类最具潜力,能够化身为因应预防衰弱症的膳食对策。 研究人员指出,下一步应当著重于从饮食层面著手,利用黄酮醇货槲皮素治疗衰老症。 英国《太阳报》进一步列出8种富含槲皮素的食物,其中7种是蔬果植物:柑橘类水果、苹果、莓类、洋葱、荷兰芹(parsley)、鼠尾草(sage)、茶、红酒。

PDF signatures

The PDF format supports two types of user signatures: Certification signatures in addition to signing the document also select which changes to the document shall be allowed after signing; approval signatures merely sign. Usually the author of a document signs Read more…

加密中不同文件格式的区别

SSL SSL – Secure Sockets Layer,现在应该叫”TLS”,但由于习惯问题,我们还是叫”SSL”比较多.http协议默认情况下是不加密内容的,这样就很可能在内容传播的时候被别人监听到,对于安全性要求较高的场合,必须要加密,https就是带加密的http协议,而https的加密是基于SSL的,它执行的是一个比较下层的加密,也就是说,在加密前,你的服务器程序在干嘛,加密后也一样在干嘛,不用动,这个加密对用户和开发者来说都是透明的.[维基百科] OpenSSL – 简单地说,OpenSSL是SSL的一个实现,SSL只是一种规范.理论上来说,SSL这种规范是安全的,目前的技术水平很难破解,但SSL的实现就可能有些漏洞,如著名的”心脏出血”.OpenSSL还提供了一大堆强大的工具软件,强大到90%我们都用不到. 证书标准 X.509 – 这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准. 编码格式 同样的X.509证书,可能有不同的编码格式,目前有以下两种编码格式. PEM – Privacy Enhanced Mail,打开看文本格式,以”—–BEGIN…”开头, “—–END…”结尾,内容是BASE64编码.查看PEM格式证书的信息: openssl x509 -in certificate.pem -text -nooutApache和*NIX服务器偏向于使用这种编码格式. DER – Distinguished Encoding Rules,打开看是二进制格式,不可读.查看DER格式证书的信息: openssl x509 -in certificate.der -inform der -text -nooutJava和Windows服务器偏向于使用这种编码格式. 相关的文件扩展名 这是比较误导人的地方,虽然我们已经知道有PEM和DER这两种编码格式,但文件扩展名并不一定就叫”PEM”或者”DER”,常见的扩展名除了PEM和DER还有以下这些,它们除了编码格式可能不同之外,内容也有差别,但大多数都能相互转换编码格式. CRT – CRT应该是certificate的三个字母,其实还是证书的意思,常见于*NIX系统,有可能是PEM编码,也有可能是DER编码,大多数应该是PEM编码,相信你已经知道怎么辨别. CER – 还是certificate,还是证书,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码. KEY – Read more…

数字签名,数字证书,加密

加密、数字签名和数字证书

1. 什么是加密 加密就是对明文数据按某种特殊算法进行处理,使其成为不可读的一段代码,通常称为“密文“, 密文通过”密钥“解密后还原出原来的明文,通过这样的途径可以达到保护数据不被非法人窃取、阅读的目的。 定义简单吧?那来看个题,考虑以下哪些属于加密方法: 这几种都是日常开发中常用的数据编码技术,但是只有 AES、RSA、SM4 才能算是加密方法。 为什么呢?一个区分的简单方法就是看编码后的数据是否还能还原,能还原的是加密。 MD5 实际上是对数据进行有损压缩,无论数据有多长,1KB、1Mb 还是 1G,都会生成固定 128 位的散列值,并且 MD5 理论上是不可能对编码后的数据进行还原的,即不可逆。 MD5 因为其具有不可逆性、单向恒定性(相同的数据多次计算值不变)被广泛应用于文件完整性验证、口令加密以及接下来会讲到的数字签名中。 至于 BASE64 是否算做加密方法,仁者见仁。在这里不下结论,因为 BASE64 编码不需要密钥,且编码后的字符串任何人都可以解码出原串,所以一般不认为是加密方法。BASE64 常用来做转码,把二进制字节序列转化为 ASCII 字符序列。 2. 加密算法的分类 加密算法按照加解密使用的密钥是否相同,可分为: 1. 对称加密 对称加密是指加密和解密时使用同一个密钥。 2. 非对称加密 非对称加密是指加密和解密使用不同的密钥,这两个密钥分别叫做「公钥」、「私钥」。 公钥是可以公开给所有人的,而私钥需要自己保密的。 公钥加密的数据只能用私钥解密: 同理,私钥“加密”的数据只能用公钥“解密”: 大家注意到没,我对 私钥“加密” 这里打了引号,为什么呢? 因为私钥不是用来加密的,准确的说法应该是 「私钥签名,公钥验签」。 Read more…