最近一直在学习区块链的基础知识,想了想决定将2个任务(学区块链和写作)相融合。写区块链相关的文字,既可以让自己梳理出思路不清的地方,可以让战友们帮忙检验自己没说明白的地方。
最近的小感悟
了解自己的恐惧
我真的是才发现原来每个人都有自己的压力和自己的焦虑。我也在梁宁老师的课中,深刻的理解了什么叫做焦虑。
“焦虑来自对恐惧的想象。因为是想象的,所以无从逃避,所以是一种持续的恐惧,就会内化为焦虑。”
恐惧是自己的认知边界,想要想要打破恐惧,唯一能够依靠的人是自己。打破自己的边界,提升自己的操作系统。(后天的知识技能道理逻辑都只是一个一个的APP,而内在的愉悦、恐惧才是操作系统)只有了解自己的恐惧,直面ta,才能在某一天能够打破ta。
英语的学习方法
学到新的学习英语的方法,听完一遍英文原文,之后按照先听一句话,停下来,用自己听到的信息来复述这句话。每句话都按照这个顺序重复。我在第一次实验之后,就深深的感觉到自己的英语语法真的有问题,是最需要补习的地方。
区块链知识
BTC的价值流动、挖矿奖励
chain 链 -> block 区块 -> transaction 交易 -> input & output 输入和输出
什么是UTXO? UTXO为什么要被销毁?
UTXO: unspent transaction output
为什么用UTXO,而不直接给每个账户标明一个数字来指明它还有多少余额
节省空间
保护隐私
复习:创建地址的流程
私钥很重要,公钥和地址可以公开。
如果想要知道一个账户现在的比特币余额,钱包需要对所有UTXO用for遍历求和:如下图
碎片的身份号 = 交易的身份号 + 序列号
每个交易都要有碎片的打碎、合并UTXO。主要是由于一个交易内的每个输入和输出中的额度不一定完全匹配导致打碎或者合并。比如一个输入的额度大于输出的额度,则需要把输入的额度打碎,给几个输出。如果一个输入的额度小于输出的额度,则需要合并,几个输入到一个输出。
HD:只需要保存一个随机数 n,就可以用它生成一系列的私钥,或者说是副私钥。
随机数 n
f(n,0)
f(n,1)
f(n,2)
f(n,3)
《精通比特币二》第五章 5.1.3
创建HD钱包:
digest 摘要
SHA256 是个 one-way function(单方向的函数)。在理论上,它的一个输出有很多可能的输入,导致了不明确性,逆向运算需要巨大的算力,所以几乎不可能破解。
它可以把任意字符串变成一个 32 字节的字符串,只要源字符串有任何变化,得到的结果就会不同。
1)比较两个字符串是否相同(下载大文件后检查是否完整下载)
2)非对称加密(证明某信息的存在,但不泄露该信息本身)
特点:
理论上,一个输出对应很多输入,导致不明确性。
逆向计算所需的算力巨大。
所以暂时看来是安全的。
对称加密和非对称加密
symmetric encryption 对称加密:加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。
asymmetric key encryption 非对称加密: 使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。公钥和私钥是非对称加密的产物。
digest和加解密,虽然都属于密码学范畴,但是本身没有谁包含谁的关系,二者的用途不同。degest是通过hash算法的特性(单向,抗碰撞,高灵敏度,易压缩和易验证)用于信息完整性检测,并不是在加密。而加密解密则是保证网络信息的安全,通过信息加密,即使被截获,黑客也无法破解,但是扰码后的信息是可以恢复到原始信息的,只不过是黑客没有恢复的秘钥,这点和digest的Hash就不同,Hash是无法恢复出原始信息的,只能正向验证摘要的一致性。而数字签名和加解密正好是反向的,对于非对称加密,加密是通过公钥加密,私钥解密;而对于数字签名,则是反过来,私钥加密,公钥解密。有时摘要和加密解密会联合使用,发送方有时会先将原始信息进行digest(Hash)计算(保证数据完整性),然后再对摘要信息通过私钥进行数字签名(保证信息安全传输)。接收方则首先需要使用公钥进行解密恢复出摘要信息(说明信息是安全的),再使用同样的digest(Hash)对原始数据进行摘要计算,对比两个摘要是否一致,是为了保证数据的完整性和正确性。
ECC
包括:加密、解密、签名(signing)、验证(verifying)
RSA 是 ECC 之前使用最广泛的公钥、私钥系统,但 < 1000bit 的 RSA 已经被破解了。现在官方建议私钥长度 > 2048。许多程序员甚至会用 4096 bit 的。
如果比特币系统采用 RSA,需要的存储空间会大很多。所以比特币采用了ECC。其实比特币用了各种优化,以占用更小的空间。
signing 签名:证明你拥有这个私钥,但无需泄露你的私钥。你用私钥给一个文件签名,只能用公钥解开。