区块链研究实验室:比特币bip38私钥教程



我们已经看过使用BIP38来加密密钥,但是这个BIP实际上是一个文件中的两个想法。

BIP的第二部分显示了如何将密钥和地址创建委托给不受信任的对等方。 它将解决我们的一个担忧。

这个想法是为密钥生成器生成一个PassphraseCode。 使用此密码私钥,他们将能够以您的名义生成加密密钥,而无需知道密码,也不需要任何私钥。

Tip: In NBitcoin, all types prefixed by “Bitcoin” are Base58 (WIF) data.

这个PassphraseCode可以以WIF格式提供给您的密钥生成器。因此,作为想要委托创建密钥的用户,首先您将创建密码私钥。

区块链研究实验室:比特币bip38私钥教程

var passphraseCode = new BitcoinPassphraseCode("my secret", Network.Main, null);

然后,您将此密码私钥发送给第三方密钥生成器。第三方将为您生成新的加密密钥。

区块链研究实验室:比特币bip38私钥教程

EncryptedKeyResult encryptedKeyResult = passphraseCode.GenerateEncryptedSecret();

EncryptedKeyResult有很多信息:

区块链研究实验室:比特币bip38私钥教程

首先:生成的比特币地址:

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

所以我们看到第三部分通过你的操作如何生成属于你自己的密钥,而无需知道您的密码和私钥。

区块链研究实验室:比特币bip38私钥教程

但是,仍然存在一个问题:

当您生成新密钥时,您拥有的所有钱包备份将已经超时。BIP 32或分层确定性钱包(HD钱包)提出了另一种更广泛支持的解决方案。

文章声明:本文为火星财经专栏作者作品,版权归作者所有,不代表火星财经观点。

点击分享