PBKDF2在比特币中的实现是怎样的?

问题描述 投票:0回答:1

我试图通过用 C++ 编写自己的代码来了解比特币的工作原理。目前我正在努力正确实现 PBKDF2 功能。我尝试了很多信息来源,例如:

  1. Golang 中的 PBKDF2
  2. NIST 第 7 页
  3. Ian 很棒的工具
  4. 另一个工具
  5. 很棒的指南

还有很多其他的。其中一些作为代码源,一些用于检查计算结果。

从5开始,我明白PBKDF2的SALT参数必须是“助记符”字符串。根据 1. 和 2. 我必须将 SALT 与整数 1 的 4 字节表示连接起来(比特币不需要 2, 3, ... )。这是真的吗?我是否必须将 SALT 与“0001”连接起来作为最简单的 SALT 输入,或者“助记符”就足够了???助记词串的正确填充是多少?单词之间是否需要留空格?据我所知,HMAC-SHA512 消息填充以 SALT(128 字节块)开头,后跟助记符句子。 我相信我已经尝试了参数和计算方法的每种组合(绝望:))。而且我也相信有某种技巧。到目前为止,我几乎在所说的明显算法的每个部分都看到了技巧。

请帮忙。

c++ pbkdf2
1个回答
0
投票

您必须使用助记词系列来创建比特币钱包。该短语是 BIP 39 定义的过程的一部分,它概述了如何将这些单词转换为二进制种子。该种子是制作一种称为“分层确定性(HD)钱包”的比特币钱包的起点。从助记词到种子的转换使人们更容易与比特币钱包的复杂安全功能进行交互。 这个过程中“盐”的使用尤为重要。根据 BIP 39,盐以“助记符”一词开头,并且可以包含额外的密码。助记词和任何附加密码均以特定方式(

UTF-8 NFKD 编码

)进行处理,以确保一致性。此步骤对于安全性至关重要,即使在使用不同的密码使用确切的助记词短语时,也有助于生成唯一的种子。 以符合预期格式的方式对添加到“助记符”盐中的任何数字进行编码,称为“big-endian”。这意味着数字中最重要的部分排在第一位。数字“1”不应该只是附加为“0001”;它必须被处理成特定的四字节大端格式。这不仅仅是一个技术细节,这很重要,因为这里的任何错误都会导致完全不同的种子,从而使钱包无法使用。

设置用于创建比特币钱包的盐时,从“助记符”开始,以正确的格式添加任何数字并确保正确的编码。根据助记词,这可以确保每个比特币钱包都是安全且独特的。

© www.soinside.com 2019 - 2024. All rights reserved.