钱包是什么?

新手10/1/2024, 6:10:09 PM
在这篇文章中,我们将介绍钱包是什么、钱包的制作方式,以及它们如何利用椭圆曲线密码学来生成和保护私钥与公钥对、推导种子短语,并进行安全的区块链交互。

钱包是用户管理区块链账户、安全存储资产和签署交易以更新区块链状态的重要工具。在这篇文章中,我们将探讨钱包的定义、制作过程,以及它们如何运用椭圆曲线密码学来生成和保护私钥与公钥对、推导种子短语,并确保安全的区块链交互。

钱包究竟是什么?

钱包是一个应用程序,允许你查看和与自己的区块链账户进行互动;这些账户可以让你提交交易,执行例如发送代币或与智能合约互动等操作。区块链上的每个账户由一对加密密钥组成,这对密钥是相互关联的。在区块链中,这种账户通常被称为外部拥有账户(EOA),由公钥和私钥构成:

  • 公钥:就是你的钱包地址。可以与任何人分享,其他人(或智能合约)可以通过这个地址向你发送加密货币。
  • 私钥:是你用来签署消息或交易的“签名密钥”。任何人只要拥有私钥,就能完全控制钱包里的资金。

这对密钥有一个重要的特性,叫做陷门函数;这意味着:

  • 如果你有私钥,那么推导出公钥非常简单(A→B)。

钱包的用途是什么?

钱包用于通过其私钥签署消息或交易,并将其发送到区块链上。

它们能够让我们知道钱包同意了哪些消息或交易,因为交易发送者的公钥可以从交易签名中提取。这对于防止虚假或恶意交易被区块链接受非常重要。

举个例子,Jarrod可以提交一个交易,声称Abril给他发送了5个以太坊,即使Abril从未同意这笔交易。然而,由于区块链会验证每个交易的签名,它会迅速拒绝这个交易,因为从签名中提取的地址与交易的“发送者”(即Abril)不符。

像以太坊这样的区块链使用ECDSA(椭圆曲线数字签名算法)来验证从交易签名中提取的公钥是否与发送交易的人公钥一致。

钱包是如何创建的?

创建钱包的第一步是生成一对公钥和私钥。不过,这对密钥必须遵循一些规则,才能在区块链上正常运作。

  1. 私钥由64个十六进制字符(范围从0到F)构成。
  2. 公钥则是通过椭圆曲线密码学(ECC)从私钥生成的。
  3. 随后,公钥会被分割、哈希处理并格式化,最终形成一个42个字符的地址。

这个三步流程是区块链上账户生成的核心。

接下来,我们将详细介绍如何利用椭圆曲线和私钥推导出公钥。但在此之前,我们会回答你可能对钱包的其他问题,比如:

  • 我怎么确保我的私钥是随机生成的?
  • 如果我和别人获得了相同的私钥怎么办?
  • 种子短语在这个过程中有什么作用?
  • 如何从一个种子短语生成多个密钥对?

什么是种子短语?

虽然可以生成一个随机的64个十六进制值,但通常私钥是根据源自比特币的特定标准来生成的。这些标准允许用户记住一个种子短语,这是一组由12到24个单词组成的短语,可以用来创建任意数量的新账户。

这样,用户只需记住一组单词,就能访问所有账户,每个账户都有自己独立的公钥和私钥对。通过特定的密钥派生函数(KDF),可以从单个种子短语生成任意数量的新私钥。

接下来,我们将介绍种子短语是如何通过随机熵生成的,以及如何从种子短语派生私钥,最后再讨论如何从私钥派生公钥。

种子短语的工作原理

当你首次安装钱包应用时,通常会要求你写下并安全存储一个种子短语,通常是12或24个单词的组合。你可以在这里看到一个可能的英语单词列表,长度为2048个单词(我们稍后会再提到这个数字)。

什么是 BIP-39?

存储助记种子短语的概念是在2013年通过BIP(比特币改进提案)提出的,称为BIP-39。该提案提供了一种标准化的方法来生成随机熵,并将其转化为一系列易于记忆的单词。

种子短语是如何生成的?

首先,我们需要确保种子短语是随机生成的,因为我们不希望其他人意外访问我们的钱包和资金。

为了实现这一点,使用CSPRNG(密码学安全伪随机数生成器)生成一个随机数,你可以在浏览器中完成这个过程:

这个随机数被称为熵。熵用于生成构成种子短语的单词集。在我们的例子中,128位熵对应12个单词,但也可以使用其他长度,例如:

  • 15 个字:160 位
  • 18 个字:192 位
  • 21 个字:224 位
  • 24 个字:256 位

那么,我们如何利用这些位来生成种子短语呢?位和单词之间的关系是什么?首先,会为熵创建一个校验和,并将其附加到128位熵上;这个校验和是熵的4位哈希,用于确保其完整性。因此,我们现在拥有128位的熵加上4位的校验和,总共132位。接下来,这132位会被转换为二进制,具体来说,它们会被分成11位的块。

现在我们拥有一组12个二进制数字,每个数字都是11位长。提示:我们有12个数字,而我们的种子短语将包含12个单词!

回想一下,我们的单词列表中有2048个单词,这个数字的选择是因为2048等于2的11次方,意味着可以用11位生成2048种不同的二进制数。

接下来,我们只需将这些二进制数字转换为单词列表中的单词。这是通过将二进制数用作索引来查找单词来完成的。换句话说,如果二进制数是10,我们就会使用列表中的第9个单词(因为索引从0开始),例如:

  • 000000111(在二进制中是7)对应列表中的第8个单词,即“abstract”! 😉
  • 11111111111(在二进制中是2047)则是列表中的最后一个单词(第2048个),即“zoo”。

这个过程会重复12次,每次对应一个11位的数字,从而形成一个包含12个单词的种子短语。

通过生成随机的熵值,将其分割成二进制块,并使用这些二进制值作为索引来查找单词列表中的单词,我们最终得到了一个随机的种子短语。

有人能猜到我的种子短语吗?

你可能会问:“如果只有2048个可能的单词,难道不会有人猜到我的种子短语吗?”技术上是可能的,但这真的……非常不可能。你问有多不可能?

想象一下,如果我们忽略随机生成128位的步骤,而只是手动选择12个单词。每次选择一个单词时,我们都是在2048个单词中进行选择。

所以,其他人要想猜到这12个单词的顺序,他们需要在2048个选项中每次都正确猜到,这样的概率是1/2048,连续12次。这时你可能会想:“这听起来并不难……”,对吗?*但让我们来分析一下:

  • 第一个词: 2048 个选择
  • 第二个词: 2048 个选择
  • 以此类推,最多12个: 2048 个选择

这就是2048 x 2048 x 2048 …… 12次,或者2048的12次方。这是一个极其庞大的数字,大约是5 septillion,或者5 quadrillion billions。这个数字对我们来说难以想象,但我们可以尝试一下…… \

假设你现在开始猜测,使用一台每秒可以猜测1万亿个种子短语的超级计算机。这台机器将需要159万亿年才能猜出一个种子短语。或者(根据你的观点),大约是宇宙当前年龄的11,000倍。

24个单词的种子短语是否比12个更安全?

一些钱包选择128位(12个单词),但现代钱包通常要求用户记住24个单词的种子短语!这同样是一个极其庞大的数字。

如何从种子短语生成私钥

现在我们有了一个12个单词的种子短语,那么它是如何用于创建账户的私钥的呢?为此,我们需要将种子短语转换为一个可以用于生成钱包的二进制种子。这个过程包括以下几个步骤:

  1. 用户可以选择提供一个额外的密码。
  2. 一个名为PBKDF2(基于密码的密钥派生函数)的算法会接受以下输入:种子短语,以及字符串“mnemonic”和可选密码的组合。

这个过程(称为密钥派生函数)会使用另一个算法HMAC-SHA512作为伪随机函数,输出一个64字节的哈希值,称为二进制种子。

生成的64字节哈希值可以用来创建账户,其逻辑源自其他比特币标准,特别是BIP-32和可选的BIP-32扩展BIP-44。

什么是 BIP-32?

BIP-32引入了分层确定性(HD)钱包的概念,允许从一个种子派生出多个钱包,并且这些钱包还可以进一步派生出更多钱包,从而形成一个“树状”结构。

什么是 BIP-44?

BIP-44提供了一种标准化的方法,通过实现特定的派生路径,从一个二进制种子创建钱包结构的层次,结构格式为:m / purpose’ / coin_type’ / account’ / change / address_index:

  • purpose:标识所使用的BIP标准;对于BIP-44,它的值是44’。
  • coin_type:指定加密货币类型;例如,0’代表比特币,60’代表以太坊。
  • account:用于区分不同的用户账户。
  • change:指示地址类型:0表示接收地址,1表示找零地址。
  • address_index:为同一账户和找零类型下的每个地址提供唯一的索引。

并非所有的钱包都使用BIP-44,但它是标准化如何从二进制种子派生账户的常见方法。

如何从二进制种子生成私钥?

正如之前提到的,私钥由64个十六进制字符构成,即32字节。而我们刚刚通过PBKDF2过程生成了一个64字节的二进制种子。那么,如何利用这个64字节的哈希值来创建私钥呢?

首先,将哈希值分成两部分,每部分32字节

  1. 第一部分是主私钥。这是二进制种子的直接1对1映射(它是通过你的种子短语生成的),并与钱包相关联。主私钥可以用于生成子私钥。
  2. 第二部分是链代码。链代码的作用是确保:如果某个子密钥被泄露,主密钥仍然保持安全。子密钥可以被一致地生成,并且每个子密钥都是唯一的。

现在我们了解了私钥的结构、它们的随机生成方式,以及如何从一个种子短语派生出多个密钥。接下来,让我们看看如何从私钥派生出公钥。

公私钥的工作原理

通过椭圆曲线密码学(ECC),我们可以根据给定的私钥计算出公钥。虽然存在多种椭圆曲线,但比特币和以太坊使用的都是称为secp256k1的曲线。

该曲线的规范定义了一个基点G,作为我们生成其他曲面点的起点。从这个起始点开始,我们以特定的方式“在曲线上移动”若干次(具体次数由私钥决定)。当我们停止这一过程时,最终到达的曲面点就是我们的公钥。

我们在曲线上“移动”的方式称为标量乘法。在椭圆曲线中,标量是指用来缩放曲线某一点的数字。我们将基点G与标量数字结合,通过“拉伸”该点来获得曲线上的新点。

我们应用于基点的标量数字就是我们的私钥;简单来说,我们从基点G开始,通过标量乘法将其与私钥相乘,从而得出公钥。

实际上,由于该曲线是在素数域ℤp上定义的,因此它的表现形式更像是一堆分散的点……但依然保持椭圆曲线的特性。

在这个标量乘法过程结束时(在曲线上“跳跃”<私钥>次),我们将到达曲线上的一个新点,这个点就是我们的公钥。你可以想象这个过程大致是这样的:

公钥在区块链上的作用?

公钥顾名思义,可以公开分享给任何人。它们的主要用途包括:

  • 查看在区块链上提交交易的用户
  • 接收来自其他钱包的资金,例如以太币(ETH)
  • 验证某个私钥是否签署了特定消息

总结

钱包是使用椭圆曲线密码学的区块链中不可或缺的组成部分,使用户能够从其账户提交交易并签署消息。

不过,一些区块链(如Abstract)也支持一种称为智能合约账户的新型钱包,这种钱包提供了更多功能,并增强了安全性、恢复机制等。

声明:

  1. 本文转载自[https://abs.xyz/blog],原文标题《What is a Wallet?(钱包是什么?)》,著作权归属原作者 [ Jarrod Watts ],如对转载有异议,请联系Gate Learn团队,团队会根据相关流程尽速处理。

  2. 免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。

  3. 文章其他语言版本由Gate Learn团队翻译,除非另有说明,否则禁止复制、传播或抄袭经翻译文章。

钱包是什么?

新手10/1/2024, 6:10:09 PM
在这篇文章中,我们将介绍钱包是什么、钱包的制作方式,以及它们如何利用椭圆曲线密码学来生成和保护私钥与公钥对、推导种子短语,并进行安全的区块链交互。

钱包是用户管理区块链账户、安全存储资产和签署交易以更新区块链状态的重要工具。在这篇文章中,我们将探讨钱包的定义、制作过程,以及它们如何运用椭圆曲线密码学来生成和保护私钥与公钥对、推导种子短语,并确保安全的区块链交互。

钱包究竟是什么?

钱包是一个应用程序,允许你查看和与自己的区块链账户进行互动;这些账户可以让你提交交易,执行例如发送代币或与智能合约互动等操作。区块链上的每个账户由一对加密密钥组成,这对密钥是相互关联的。在区块链中,这种账户通常被称为外部拥有账户(EOA),由公钥和私钥构成:

  • 公钥:就是你的钱包地址。可以与任何人分享,其他人(或智能合约)可以通过这个地址向你发送加密货币。
  • 私钥:是你用来签署消息或交易的“签名密钥”。任何人只要拥有私钥,就能完全控制钱包里的资金。

这对密钥有一个重要的特性,叫做陷门函数;这意味着:

  • 如果你有私钥,那么推导出公钥非常简单(A→B)。

钱包的用途是什么?

钱包用于通过其私钥签署消息或交易,并将其发送到区块链上。

它们能够让我们知道钱包同意了哪些消息或交易,因为交易发送者的公钥可以从交易签名中提取。这对于防止虚假或恶意交易被区块链接受非常重要。

举个例子,Jarrod可以提交一个交易,声称Abril给他发送了5个以太坊,即使Abril从未同意这笔交易。然而,由于区块链会验证每个交易的签名,它会迅速拒绝这个交易,因为从签名中提取的地址与交易的“发送者”(即Abril)不符。

像以太坊这样的区块链使用ECDSA(椭圆曲线数字签名算法)来验证从交易签名中提取的公钥是否与发送交易的人公钥一致。

钱包是如何创建的?

创建钱包的第一步是生成一对公钥和私钥。不过,这对密钥必须遵循一些规则,才能在区块链上正常运作。

  1. 私钥由64个十六进制字符(范围从0到F)构成。
  2. 公钥则是通过椭圆曲线密码学(ECC)从私钥生成的。
  3. 随后,公钥会被分割、哈希处理并格式化,最终形成一个42个字符的地址。

这个三步流程是区块链上账户生成的核心。

接下来,我们将详细介绍如何利用椭圆曲线和私钥推导出公钥。但在此之前,我们会回答你可能对钱包的其他问题,比如:

  • 我怎么确保我的私钥是随机生成的?
  • 如果我和别人获得了相同的私钥怎么办?
  • 种子短语在这个过程中有什么作用?
  • 如何从一个种子短语生成多个密钥对?

什么是种子短语?

虽然可以生成一个随机的64个十六进制值,但通常私钥是根据源自比特币的特定标准来生成的。这些标准允许用户记住一个种子短语,这是一组由12到24个单词组成的短语,可以用来创建任意数量的新账户。

这样,用户只需记住一组单词,就能访问所有账户,每个账户都有自己独立的公钥和私钥对。通过特定的密钥派生函数(KDF),可以从单个种子短语生成任意数量的新私钥。

接下来,我们将介绍种子短语是如何通过随机熵生成的,以及如何从种子短语派生私钥,最后再讨论如何从私钥派生公钥。

种子短语的工作原理

当你首次安装钱包应用时,通常会要求你写下并安全存储一个种子短语,通常是12或24个单词的组合。你可以在这里看到一个可能的英语单词列表,长度为2048个单词(我们稍后会再提到这个数字)。

什么是 BIP-39?

存储助记种子短语的概念是在2013年通过BIP(比特币改进提案)提出的,称为BIP-39。该提案提供了一种标准化的方法来生成随机熵,并将其转化为一系列易于记忆的单词。

种子短语是如何生成的?

首先,我们需要确保种子短语是随机生成的,因为我们不希望其他人意外访问我们的钱包和资金。

为了实现这一点,使用CSPRNG(密码学安全伪随机数生成器)生成一个随机数,你可以在浏览器中完成这个过程:

这个随机数被称为熵。熵用于生成构成种子短语的单词集。在我们的例子中,128位熵对应12个单词,但也可以使用其他长度,例如:

  • 15 个字:160 位
  • 18 个字:192 位
  • 21 个字:224 位
  • 24 个字:256 位

那么,我们如何利用这些位来生成种子短语呢?位和单词之间的关系是什么?首先,会为熵创建一个校验和,并将其附加到128位熵上;这个校验和是熵的4位哈希,用于确保其完整性。因此,我们现在拥有128位的熵加上4位的校验和,总共132位。接下来,这132位会被转换为二进制,具体来说,它们会被分成11位的块。

现在我们拥有一组12个二进制数字,每个数字都是11位长。提示:我们有12个数字,而我们的种子短语将包含12个单词!

回想一下,我们的单词列表中有2048个单词,这个数字的选择是因为2048等于2的11次方,意味着可以用11位生成2048种不同的二进制数。

接下来,我们只需将这些二进制数字转换为单词列表中的单词。这是通过将二进制数用作索引来查找单词来完成的。换句话说,如果二进制数是10,我们就会使用列表中的第9个单词(因为索引从0开始),例如:

  • 000000111(在二进制中是7)对应列表中的第8个单词,即“abstract”! 😉
  • 11111111111(在二进制中是2047)则是列表中的最后一个单词(第2048个),即“zoo”。

这个过程会重复12次,每次对应一个11位的数字,从而形成一个包含12个单词的种子短语。

通过生成随机的熵值,将其分割成二进制块,并使用这些二进制值作为索引来查找单词列表中的单词,我们最终得到了一个随机的种子短语。

有人能猜到我的种子短语吗?

你可能会问:“如果只有2048个可能的单词,难道不会有人猜到我的种子短语吗?”技术上是可能的,但这真的……非常不可能。你问有多不可能?

想象一下,如果我们忽略随机生成128位的步骤,而只是手动选择12个单词。每次选择一个单词时,我们都是在2048个单词中进行选择。

所以,其他人要想猜到这12个单词的顺序,他们需要在2048个选项中每次都正确猜到,这样的概率是1/2048,连续12次。这时你可能会想:“这听起来并不难……”,对吗?*但让我们来分析一下:

  • 第一个词: 2048 个选择
  • 第二个词: 2048 个选择
  • 以此类推,最多12个: 2048 个选择

这就是2048 x 2048 x 2048 …… 12次,或者2048的12次方。这是一个极其庞大的数字,大约是5 septillion,或者5 quadrillion billions。这个数字对我们来说难以想象,但我们可以尝试一下…… \

假设你现在开始猜测,使用一台每秒可以猜测1万亿个种子短语的超级计算机。这台机器将需要159万亿年才能猜出一个种子短语。或者(根据你的观点),大约是宇宙当前年龄的11,000倍。

24个单词的种子短语是否比12个更安全?

一些钱包选择128位(12个单词),但现代钱包通常要求用户记住24个单词的种子短语!这同样是一个极其庞大的数字。

如何从种子短语生成私钥

现在我们有了一个12个单词的种子短语,那么它是如何用于创建账户的私钥的呢?为此,我们需要将种子短语转换为一个可以用于生成钱包的二进制种子。这个过程包括以下几个步骤:

  1. 用户可以选择提供一个额外的密码。
  2. 一个名为PBKDF2(基于密码的密钥派生函数)的算法会接受以下输入:种子短语,以及字符串“mnemonic”和可选密码的组合。

这个过程(称为密钥派生函数)会使用另一个算法HMAC-SHA512作为伪随机函数,输出一个64字节的哈希值,称为二进制种子。

生成的64字节哈希值可以用来创建账户,其逻辑源自其他比特币标准,特别是BIP-32和可选的BIP-32扩展BIP-44。

什么是 BIP-32?

BIP-32引入了分层确定性(HD)钱包的概念,允许从一个种子派生出多个钱包,并且这些钱包还可以进一步派生出更多钱包,从而形成一个“树状”结构。

什么是 BIP-44?

BIP-44提供了一种标准化的方法,通过实现特定的派生路径,从一个二进制种子创建钱包结构的层次,结构格式为:m / purpose’ / coin_type’ / account’ / change / address_index:

  • purpose:标识所使用的BIP标准;对于BIP-44,它的值是44’。
  • coin_type:指定加密货币类型;例如,0’代表比特币,60’代表以太坊。
  • account:用于区分不同的用户账户。
  • change:指示地址类型:0表示接收地址,1表示找零地址。
  • address_index:为同一账户和找零类型下的每个地址提供唯一的索引。

并非所有的钱包都使用BIP-44,但它是标准化如何从二进制种子派生账户的常见方法。

如何从二进制种子生成私钥?

正如之前提到的,私钥由64个十六进制字符构成,即32字节。而我们刚刚通过PBKDF2过程生成了一个64字节的二进制种子。那么,如何利用这个64字节的哈希值来创建私钥呢?

首先,将哈希值分成两部分,每部分32字节

  1. 第一部分是主私钥。这是二进制种子的直接1对1映射(它是通过你的种子短语生成的),并与钱包相关联。主私钥可以用于生成子私钥。
  2. 第二部分是链代码。链代码的作用是确保:如果某个子密钥被泄露,主密钥仍然保持安全。子密钥可以被一致地生成,并且每个子密钥都是唯一的。

现在我们了解了私钥的结构、它们的随机生成方式,以及如何从一个种子短语派生出多个密钥。接下来,让我们看看如何从私钥派生出公钥。

公私钥的工作原理

通过椭圆曲线密码学(ECC),我们可以根据给定的私钥计算出公钥。虽然存在多种椭圆曲线,但比特币和以太坊使用的都是称为secp256k1的曲线。

该曲线的规范定义了一个基点G,作为我们生成其他曲面点的起点。从这个起始点开始,我们以特定的方式“在曲线上移动”若干次(具体次数由私钥决定)。当我们停止这一过程时,最终到达的曲面点就是我们的公钥。

我们在曲线上“移动”的方式称为标量乘法。在椭圆曲线中,标量是指用来缩放曲线某一点的数字。我们将基点G与标量数字结合,通过“拉伸”该点来获得曲线上的新点。

我们应用于基点的标量数字就是我们的私钥;简单来说,我们从基点G开始,通过标量乘法将其与私钥相乘,从而得出公钥。

实际上,由于该曲线是在素数域ℤp上定义的,因此它的表现形式更像是一堆分散的点……但依然保持椭圆曲线的特性。

在这个标量乘法过程结束时(在曲线上“跳跃”<私钥>次),我们将到达曲线上的一个新点,这个点就是我们的公钥。你可以想象这个过程大致是这样的:

公钥在区块链上的作用?

公钥顾名思义,可以公开分享给任何人。它们的主要用途包括:

  • 查看在区块链上提交交易的用户
  • 接收来自其他钱包的资金,例如以太币(ETH)
  • 验证某个私钥是否签署了特定消息

总结

钱包是使用椭圆曲线密码学的区块链中不可或缺的组成部分,使用户能够从其账户提交交易并签署消息。

不过,一些区块链(如Abstract)也支持一种称为智能合约账户的新型钱包,这种钱包提供了更多功能,并增强了安全性、恢复机制等。

声明:

  1. 本文转载自[https://abs.xyz/blog],原文标题《What is a Wallet?(钱包是什么?)》,著作权归属原作者 [ Jarrod Watts ],如对转载有异议,请联系Gate Learn团队,团队会根据相关流程尽速处理。

  2. 免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。

  3. 文章其他语言版本由Gate Learn团队翻译,除非另有说明,否则禁止复制、传播或抄袭经翻译文章。

Lancez-vous
Inscrivez-vous et obtenez un bon de
100$
!