区块链研究实验室:比特币bip38私钥教程
我们已经看过使用BIP38来加密密钥,但是这个BIP实际上是一个文件中的两个想法。
BIP的第二部分显示了如何将密钥和地址创建委托给不受信任的对等方。 它将解决我们的一个担忧。
这个想法是为密钥生成器生成一个PassphraseCode。 使用此密码私钥,他们将能够以您的名义生成加密密钥,而无需知道密码,也不需要任何私钥。
Tip: In NBitcoin, all types prefixed by “Bitcoin” are Base58 (WIF) data.
这个PassphraseCode可以以WIF格式提供给您的密钥生成器。因此,作为想要委托创建密钥的用户,首先您将创建密码私钥。
var passphraseCode = new BitcoinPassphraseCode("my secret", Network.Main, null);
然后,您将此密码私钥发送给第三方密钥生成器。第三方将为您生成新的加密密钥。
EncryptedKeyResult encryptedKeyResult = passphraseCode.GenerateEncryptedSecret();
EncryptedKeyResult有很多信息:
首先:生成的比特币地址:
var generatedAddress = encryptedKeyResult.GeneratedAddress; // 14KZsAVLwafhttaykXxCZt95HqadPXuz73
EncryptedKey本身(就像我们在前面的Key Encryption课程中看到的那样)
var encryptedKey = encryptedKeyResult.EncryptedKey; // 6PnWtBokjVKMjuSQit1h1Ph6rLMSFz2n4u3bjPJH1JMcp1WHqVSfr5ebNS
以及最后但并非最不重要的确认码,以便第三方可以证明生成的密钥和地址对应于您的密码。
var confirmationCode = encryptedKeyResult.ConfirmationCode; // cfrm38VUcrdt2zf1dCgf4e8gPNJJxnhJSdxYg6STRAEs7QuAuLJmT5W7uNqj88hzh9bBnU9GFkN
作为所有者,一旦您收到此信息,您需要检查密钥生成器是否使用ConfirmationCode.Check()作弊,然后使用您的密码获取您的私钥:
Console.WriteLine(confirmationCode.Check("my secret", generatedAddress)); // True
var bitcoinPrivateKey = encryptedKey.GetSecret("my secret");
Console.WriteLine(bitcoinPrivateKey.GetAddress() == generatedAddress); // True
Console.WriteLine(bitcoinPrivateKey); // KzzHhrkr39a7upeqHzYNNeJuaf1SVDBpxdFDuMvFKbFhcBytDF1R
所以我们看到第三部分通过你的操作如何生成属于你自己的密钥,而无需知道您的密码和私钥。
但是,仍然存在一个问题:
当您生成新密钥时,您拥有的所有钱包备份将已经超时。BIP 32或分层确定性钱包(HD钱包)提出了另一种更广泛支持的解决方案。
文章声明:本文为火星财经专栏作者作品,版权归作者所有,不代表火星财经观点。