主页 > imtoken钱包app安卓版 > 比特币开发指南——钱包钱包

比特币开发指南——钱包钱包

imtoken钱包app安卓版 2023-03-25 07:21:56

比特币钱包的本质是一个私钥收集器。 这些私钥存储在一个文件中,甚至可以打印在一张纸上。

钱包Wallets

比特币钱包的本质是一个私钥收集器。 这些私钥存储在一个文件中,甚至可以打印在一张纸上。

PriateKeyFormats 私钥格式

私钥用于从特定地址解锁 satoshis。 在比特币技术体系中,私钥的标准格式是介于以下值之间的256位数字:

0x1and0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141,显示几乎整个2256-1区间区间。 该范围由比特币技术系统使用的加密标准 secp256k1ECDSA 指定。

WalletImportFormat (WIF) 导入钱包格式

为了避免复制私钥时出错,可以使用导入钱包的格式。 WIF 使用 base58Check 对私钥进行编码,大大降低了误复制的可能性,就像标准的比特币地址一样。

1.私钥。

2.主网增加0x80字节,测试网增加0xef。

用手机可以下载比特币钱包吗_ios可以用的比特币钱包_可以存比特币的钱包

3. 对扩展密钥执行 sha–256 散列。

4. 对前面的结果再执行一次 sha-256 散列。

5.第二个哈希值的前四个字节作为校验值

6. 将第 5 点中获得的校验值添加到第 2 点中提到的扩展密钥中。

7. 使用Base58Checkencoding方法将字符串转换成Base58编码的字符串。

使用 Base58 解码功能很容易使过程可逆并删除填充。

MiniPriateKeyFormat 迷你私钥格式

迷你私钥格式是一种使用 30 个字符对私钥进行编码的方法,可以轻松地将私钥嵌入到狭小的物理空间中,例如物理比特币令牌和防刮二维码。

1. 迷你私钥的第一个字符是“S”。

ios可以用的比特币钱包_用手机可以下载比特币钱包吗_可以存比特币的钱包

2. 为确保迷你私钥格式正确,请先在私钥上添加一个问号。

3. 计算 SHA256 散列。 如果产生的第一个字节是“00”,则这是良构的。 使用此机制可避免键入失败。 在生成格式正确的迷你私钥之前,在暴力过程中使用随机数。

4、为了获得完整的私钥,用户只需要一个SHA256散列的原始迷你私钥。 这个过程是单向的:从派生密钥计算迷你私钥是很棘手的。

由于它在视觉上与“l”相似,许多实现不允许迷你私钥使用字符“1”。

.

资源:用于创建和兑换这些密钥的常用工具是 Casascius 实用程序。

HierarchicalDeterministicKeyCreation 创建一个分层确定的密钥

层级确定的密钥创建和传输协议(HD协议)大大简化了钱包备份可以存比特币的钱包,不需要使用同一个钱包的多个程序之间的重复通信,并允许创建可以独立操作的子账户,即使子账户是破解后母账号仍可监控或控制子账号的能力,账号可分为“完全访问”或“受限访问”。 不受信任的用户或程序可以被允许接收或监控付款,但不能花费比特币。

HD协议使用ECDSA协议的公钥创建函数point()将一个较大的整数(即私钥)转换为图点(即公钥):

ios可以用的比特币钱包_可以存比特币的钱包_用手机可以下载比特币钱包吗

点(priate_key)==public_key

根据 point() 函数的工作方式,可以通过将现有父公钥与从任意整数创建的公钥组合来创建子公钥。 如果将整数 i 与原始(父)私钥相加,point() 创建的子公钥相同,然后发现剩余的和除以所有比特币软件使用的常数 G(译者注:本节翻译不好)

点((parent_priate_key+i)%G)==parent_public_key+point(i)

当基于相同的整数序列时,两个或多个独立的程序可以从父公钥-私钥对创建一系列唯一的子密钥,即使它们不再通信也是如此。 此外,用于接收付款的公钥可以在不访问私钥的情况下分发,从而允许在可能不安全的公共 WEB 服务器上分发公钥。

通过重复子密钥生成操作,子公钥也可以创建自己的公钥(孙子公钥):

点((child_priate_key+i)%G)==child_public_key+点(i)

无论是否生成子公钥,一个可预测的整数值序列并不比对所有交易使用单个公钥更好可以存比特币的钱包,尤其是当知道一个子公钥可以从同一个子公钥中找到所有交易时父公钥生成的公钥。 实际上,基于随机种子生成的整数序列,这种方式生成的子公钥是相互不可见的,除非知道种子。

HD 协议使用根来创建子密钥、孙密钥和其他不可链接的确定性生成的整数值的层次结构。 每个子密钥还从父密钥获得一个确定性生成的种子,称为链码,即使链码被破坏,也允许主链码继续使用,例如基于网络的公钥分发项目是被黑并且不影响这个系统。

point((parent_priate_key+lefthand_hash_output)%G)==child_public_key

可以存比特币的钱包_ios可以用的比特币钱包_用手机可以下载比特币钱包吗

点(child_priate_key)==parent_public_key+point(lefthand_hash_output)

如前所述,使用 HD 协议生成公钥需要 4 个输入值:

父私钥和父公钥是常规压缩的 256 位 ECDSA 非对称密钥对。

父链代码看起来像随机的 256 位数据。

·索引值是由程序设定的32位整数。

在上图所示的范例中,父链码、父公钥和索引值被馈送到单向加密哈希算法 (HMAC-SHA512) 中,以生成 512 位确定性生成但看似随机的数据。 哈希输出的右侧 256 位用作新的子链代码。 哈希输出的左 256 位用作整数值。 输入父私钥或父公钥分别创建子私钥和子公钥:

point((parent_priate_key+lefthand_hash_output)%G)==child_public_key

点(child_priate_key)==parent_public_key+point(lefthand_hash_output)

指定不同的索引值将从同一个父键创建不同的不可链接子键。 重复此过程将导致子密钥使用子链码来创建不可链接的孙密钥。

用手机可以下载比特币钱包吗_可以存比特币的钱包_ios可以用的比特币钱包

因为创建子密钥需要密钥和链代码,所以密钥和链代码一起称为扩展密钥。 其扩展私钥与其对应的扩展公钥相同的链代码。 (顶级父级)主私钥和主链码来自随机数据,如下所示。

从 128、256 或 512 位的随机数据创建根种子。 为了创建具有相应设置的派生密钥,只需要备份根种子的128位,就可以让每个密钥被具有特定设置的特定钱包程序使用。

(警告:在撰写本文时,基于 HD 协议的钱包程序并不完全兼容,因此为了获得指定的基础种子,用户必须使用相同的钱包软件及其相应的设置。)

对根种子进行哈希处理后生成看似随机的512位数据,从根种子生成主私钥和主链码(即主扩展私钥)。 使用函数 point() 从主私钥创建主公钥,连同主链代码、主扩展公钥。 主扩展键在功能上等同于其他扩展键; 区别在于它在层次结构顶部的位置。

HardenedKeys 强化键

加固的扩展键解决了普通扩展键带来的潜在问题。 攻击者如果得到一个正常的父链码和父公钥,就可以通过暴力破解找到所有的派生链码。 如果攻击者同时获得子私钥、孙子私钥和派生私钥,则可以使用链码和对应的私钥生成所有扩展私钥。

也许更糟糕的是,攻击者可以反向推导正常的子私钥,从子私钥中减去父链代码以恢复父公钥,如上图所示的子和父。 这意味着获得扩展公钥和派生私钥的人可以从公钥和所有派生密钥中恢复。

为此,扩展链码的公钥应该比标准公钥更安全。 用户应该避免导出青少年非扩展专用密钥以阻止明显不可信的环境。 (根本无法翻译)

经过一些权衡之后,加固密钥的方式按照通常的方式修复。

如上节所述,常用的推导公式结合索引值、父代码、父公钥创建子链码和整数值,整数与父代私钥组合生成子私钥。

可以存比特币的钱包_用手机可以下载比特币钱包吗_ios可以用的比特币钱包