钱包是什么?

新手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团队翻译,除非另有说明,否则禁止复制、传播或抄袭经翻译文章。

Начните торговать сейчас
Зарегистрируйтесь сейчас и получите ваучер на
$100
!
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.