我正在读安德烈亚斯的“精通比特币”一书第五章,以及这本细线和比普-32。以下是我对这两个程序的一些理解:
k:私钥// K:公钥// i索引// c链码// H HMAC散列结果// Hleft哈希结果的前32位。椭圆曲线的// n阶数。椭圆曲线的// G起点
Normal密钥派生
案例1: parPrivkey -> childPrivkey (并由此而来,childPubkey)
H = HMAC(cpar, Kpar || ichild)
=> kchild = (kpar + Hleft) mod n
=> Kchild = G*kchild = G*[ (kpar + Hleft) mod n)]案例2: parPubkey -> childPubkey
H = HMAC(cpar, Kpar || ichild)
=> Kchild = G*Hleft + KparHardened密钥派生`
案例3: parPrivkey -> childPrivkey (并来自该childPubkey)
H = HMAC(cpar, kpar || ichild)
=> kchild = (kpar + Hleft) mod n
=> Kchild = G*kchild = G*[ (kpar + Hleft) mod n]考虑到这三种方法,我有点困惑:
kchild = (kpar + Hleft) mod n乘以G就可以得到第二种情况。然而,由于最后有一个因子mod n,所以我无法判断案例1的Kchild是否与例2的D17有关。如果没有,那么生成公钥而不能使用发送给它的资金又有什么意义呢?key和text,那么在这种情况下“关键”是什么?如果没有“键”,那么为什么不使用SHA-512哈希函数呢?先谢谢你。
发布于 2022-03-06 10:41:00
尽管如此,由于在最后有一个因子,我不能告诉例1的Kchild是否会与例2的关联。
是的,案例1中的子私钥是在案例2中导出的公钥的秘密密钥。n是生成点G的顺序,因此它不会影响密钥的正确性。
由于HMAC函数接受两个输入,这是键和文本,什么是“键”在这种情况下?如果没有“键”,那么为什么不使用SHA-512哈希函数呢?
在种子的特定情况下,关键是“比特币种子”,并用作一种域分离--一种专门用于此目的的唯一字符串。
在BIP 32中HMAC的其他用途中,关键是“链码”,而文本/数据就像您在问题中写的那样。这个链码确保子键不仅是从父键派生出来的,而且还使用一些额外的熵,这些熵必须知道才能导出子键。所以你可以选择给出链码,如果你想让人们能够得到子密钥,或保密,使他们不能。
https://crypto.stackexchange.com/questions/98972
复制相似问题