主页 > 怎么下载imtoken钱包最安全 > 比特币密钥和地址

比特币密钥和地址

公钥和私钥

比特币的所有权由数字密钥、比特币地址和数字签名决定。密钥成对出现,由私钥和公钥组成。公钥就像银行帐号,私钥就像控制帐户或支票签名的 PIN。

在比特币交易的支付过程中,接收者的公钥由其数字指纹表示,称为比特币地址,就像支票上的支付对象的名称(即“收款人”)一样。 ”)。通常,比特币地址由公钥生成并对应于公钥。然而,并不是所有的比特币地址都是公钥;它们还可以表示其他支付对象,例如脚本。

加密

自从公钥加密发明以来,已经发现了合适的数学函数,例如素数幂和椭圆曲线乘法。这些数学函数是不可逆的,这意味着在一个方向上很容易计算,但在相反方向上却不行。基于这些数学函数的密码学使得生成数字密钥和不可伪造的数字签名成为可能。比特币使用椭圆曲线乘法作为其公钥加密的基础。

公钥和私钥之间的数学关系,这样私钥可用于为特定消息生成签名。此签名在不泄露私钥的情况下验证公钥。

在支付比特币时,比特币的当前所有者需要在交易中提交他们的公钥和签名(每笔交易的签名不同,但由同一个私钥生成)。比特币网络中的每个人都可以通过提交的公钥和签名进行验证,并确认交易是有效的,即确认付款人拥有当时正在交易的比特币的所有权。

私钥和公钥

比特币钱包包含一系列密钥对,每个密钥对包括一个私钥和一个公钥。私钥 (k) 是一个数字,通常是随机选择的。有了私钥,我们可以使用单向加密函数椭圆曲线乘法生成公钥(K)。有了公钥 (K),我们可以使用单向加密哈希函数生成比特币地址 (A)。

单向加密

为什么要使用非对称加密(公钥/私钥)?

为什么在比特币中使用非对称加密?它不用于“加密”(制作秘密)交易。相反,非对称密码学的一个有用特性是生成数字签名的能力。私钥可以应用于交易的数字指纹以产生数字签名。此签名只能由知道私钥的人生成。但是,任何有权访问公钥和交易指纹的人都可以使用它们来验证签名。这种非对称加密技术的适用性允许任何人验证每笔交易的每一个签名,同时确保只有私钥的所有者才能产生有效的签名。

私钥

私钥只是一个随机选择的数字。对一个比特币地址中所有资金的控制取决于对应私钥的所有权和控制权。

比特币私钥只是一个数字。你可以用硬币、铅笔和纸随机生成你的私钥:掷硬币 256 次,用纸和笔记录正反面并转换为 0 和 1,随机 256 位二进制数可作为比特币钱包的私钥。这个私钥可以进一步生成公钥。

从随机数生成私钥

生成密钥的第一步也是最重要的一步是找到足够安全的熵源,即随机源。生成比特币私钥本质上与“选择 1 到 2^256 之间的数字”相同。只要选择的结果不可预测或不可重复,选择数字的确切方法并不重要。比特币软件使用操作系统底层的随机数生成器来生成 256 位的熵(随机性)。通常,操作系统随机数生成器由人工随机源初始化,这就是为什么还需要持续摇动鼠标几秒钟的原因。

更准确地说,私钥可以是 1 到 n-1 之间的任意数字,其中 n 是一个常数(n=1.158 * 10^77,略小于 2^256),并定义为比特币使用的椭圆曲线的阶数(见Elliptic Curve Cryptography Explained),要生成这样的私钥,我们随机选择一个256位的数,检查它是否小于n-1从编程的角度来看,一般是从一个密码安全的随机源中取出一长串随机字节,并使用SHA256哈希算法对其进行计算,从而得到一个256位的数字,如果运算的结果小于n-1,我们有一个合适的私钥。否则,我们用另一个随机数重复。

私钥用Base58校验和编码格式显示,这种私钥格式称为Wallet Import Format(WIF,钱包导入格式)

以下是随机生成的私钥(k),以十六进制格式表示(256位的二进制数,以64位十六进制数显示,每个十六进制数占4位):

1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

表示比特币私钥空间的大小是2^256,这是一个非常大的数字。十进制大约是10^77,可见宇宙估计只有10^80个原子。

公钥

可以通过椭圆曲线乘法从私钥计算出公钥,这是一个不可逆的过程:K = k * G。其中k为私钥,G为常数点,称为生成点,K为生成的公钥。它的逆运算,称为“求离散对数”——知道公钥K来求私钥k——是非常困难的,就像尝试k的所有可能值,即蛮力搜索。在展示如何生成公钥之前来自私钥的密钥,让我们稍微详细研究一下椭圆曲线密码学。

提示椭圆曲线乘法是密码学家称之为“陷阱门”函数的函数:在一个方向(乘法)很容易做到,但在相反的方向(除法)不可能做到。私钥的拥有者可以轻松创建公钥,然后与世界共享,知道没有人可以从公钥函数中逆向计算私钥。这种数学技巧成为了证明比特币资金所有权的不可伪造且安全的数字签名的基础。

地址

比特币地址是一个数字和一串字母,可以与任何想给你比特币的人共享。从公钥(又是一串数字和字母)生成的比特币地址以数字“1”开头。在一笔交易中,比特币地址通常以接收者的身份出现。下面是一个比特币地址的例子:

1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy

比特币地址可以通过带有公钥的单向加密哈希算法获得。哈希算法是一种单向函数,它接受任意长度的输入以生成指纹或哈希。加密哈希函数在比特币中被广泛使用:比特币地址、脚本地址和挖矿中的工作量证明算法。用于从公钥生成比特币地址的算法是安全哈希算法 (SHA) 和 RACE 完整性原语评估消息摘要 (RIPEMD),特别是 SHA256 和 RIPEMD160。

以公钥K为输入,计算其SHA256哈希值,并用结果计算RIPEMD160哈希值,得到一个长度为160位(20字节)的数字:

A = RIPEMD160(SHA256(K))

公式中,K为公钥,A为生成的比特币地址。

通常用户看到的比特币地址是“Base58Check”编码的(参见“Base58 和 Base58Check 编码”部分),它使用 58 个字符(一种 Base58 编号系统)比特币一共多少个地址,校验和提高了可读性,避免了歧义,有效地防止了地址错误转录和输入。 Base58Check 编码也用于比特币的其他地方,例如比特币地址、私钥、加密密钥和脚本哈希,以提高可读性和正确输入。

地址

Base64 和 Base58 编码

为了更简洁方便地表示一长串数字,使用更少的符号,许多计算机系统使用大于十进制的数字和字母表示。

Base64 使用 26 个小写字母、26 个大写字母、10 个数字和两个符号(例如“+”和“/”)用于电子邮件等基于文本的媒体传输二进制数据。

Base64 通常用于对电子邮件中的附件进行编码。 Base58 是一种基于文本的二进制编码格式,用于比特币和其他加密货币。这种编码格式不仅实现了数据压缩和保持易读性,还提供了错误诊断。 Base58 是 Base64 编码格式的子集,同样使用大小写字母和 10 位数字,但舍弃了某些在某些字体中容易误读和混淆的字符。具体来说,Base58中不包含0(数字0)、O(大写字母o)、l(小写字母L)、I(大写字母i),以及Base64中的“+”和“/”这两个字符简而言之,Base58 由大小写字母和数字组成,不包括 (0, O, l, I)。

Base58Check

为了防止打印和转录错误为了安全起见,Base58Check是比特币中常用的一种Base58编码格式,比特币有一个内置的编码来检查错误。校验和是添加到被编码数据末尾的额外 4 个字节。校验和是从编码数据的哈希值中得到的,因此可以用来检测和避免转录和输入中的错误。使用Base58check编码时,解码软件会计算数据的校验和,加上编码自带的校验和。为了比较。如果两者不匹配,则说明有错误,则Base58Check数据无效。错误的比特币地址不会被钱包软件视为有效地址,否则会导致资金损失。

为了将数据(数字)转换成Base58Check格式,首先我们需要给数据加上一个叫做“版本字节”的前缀,这个前缀是用来标识编码数据的类型。例如比特币地址前缀为0(十六进制为0x00),编码私钥时前缀为128(十六进制为0x80)。表4-1列出了一些常见的前缀的版本。

接下来,我们计算“双哈希”校验和,这意味着对前一个结果(前缀和数据)运行两次 SHA256 哈希算法:

校验和 = SHA256(SHA256(前缀+数据))

在生成的 32 字节长散列(两个散列)中,我们只取前 4 个字节。这 4 个字节用作错误校验码或校验和。校验和添加在数据之后。

结果由三部分组成:前缀、数据和校验和。此结果使用前面描述的 Base58 字母编码。下图描述了Base58Check编码的过程。

base58ckeck

Base58Check 编码的比特币地址为 1 ,Base58Check 编码的私钥 WIF 以 5 开头。表 4-1 显示了一些版本前缀及其对应的 Base58 格式。

图片

加密的私钥(BIP0038)

私钥必须保密。私钥的保密性要求是在实践中很难实现,因为这个要求与安全对象同样重要的可用性相矛盾。当您需要存储备份以避免丢失您的私钥时,您会发现很难维护您的私钥的隐私。

使用密码加密持有私钥的钱包可能更安全,但该钱包也需要备份。例如,有时用户需要将密钥从一个钱包转移到另一个钱包,因为他们想要升级或重新安装他们的钱包软件。私钥备份可能还需要存储在纸上(请参阅下面的“纸钱包”部分)或外部存储介质,例如 U 盘。但是如果备份文件被盗或丢失怎么办?这些相互矛盾的安全目标导致了 BIP0038 的引入,这是一种可移植、方便且被许多不同钱包和比特币客户端理解的加密私钥标准(有关 BIP-38 的详细信息,请参见附录)。

BIP0038 提出了一个通用标准,用于使用密码加密私钥并使用 Base58Check 对加密后的私钥进行编码,以便加密后的私钥可以安全地存储在备份媒体上,在传输之间安全地存储在钱包中,将密钥安全地保存在任何可能暴露的情况。该加密标准使用由 NIST 制定的 AES,广泛用于商业和军事应用中的数据加密。

BIP0038的加密方案是:输入一个比特币私钥,通常用WIF编码,带有base58chek字符串的前缀“5”。此外,BIP0038 加密方案需要长密码作为密码,通常由多个单词或复杂的字母数字字符串组成。 BIP0038加密方案的结果是经过base58check编码的加密私钥,前缀为6P。如果您看到一个以 6P 开头的密钥,则表示该密钥已加密,需要密码才能将密钥转换(解码)回可在任何钱包中使用的 WIF 格式的私钥(前缀为 5)@ >. 现在很多钱包应用程序都可以识别 BIP0038 加密的私钥,并且会要求用户提供密码来解码和导入密钥。第三方应用程序,例如非常好的基于浏览器的位地址,可以用来解码BIP00038 的密钥。

使用 BIP0038 加密的密钥最常见的用例是纸质钱包 - 私钥在一张纸上的备份。只要用户选择一个强密码,用 BIP0038 加密的私钥就是纸钱包非常安全,是离线存储比特币的好方法(也称为“冷存储”)。

BIP0038 加密私钥示例

图片

P2SH(支付脚本哈希)

众所周知,传统的比特币地址以数字1开头,由公钥派生,公钥由私钥派生。虽然任何人都可以将比特币发送到以 1 开头的地址,但比特币只能在通过相应的私钥签名和公钥哈希后才能使用。 .

以数字 3 开头的比特币地址是 P2SH 地址,有时被错误地称为多重签名或多重签名地址。他们将比特币交易的受益人指定为哈希脚本,而不是公钥所有者。此功能由 BIP0016 于 2012 年 1 月引入,现在已被广泛采用,因为 BIP0016 提供了向地址本身添加功能的机会。与将资金发送到基于 1 的传统比特币地址的 P2PKH 交易不同,资金被发送到以 3 开头的地址需要的不仅仅是公钥的哈希和作为所有者证明的私钥签名。这些要求是在创建地址时在脚本中指定的,并且地址的所有输入都将受到这些要求的限制。

从交易脚本创建 P2SH 地址,该脚本定义了谁可以使用交易输出。编码 P2SH 地址涉及使用创建比特币地址时使用的双重哈希函数,并且只能应用于脚本而不是公钥:

脚本哈希 = RIPEMD160(SHA256(脚本0))

简单的理解就是转账的接收方不是公钥地址,而是一个脚本,脚本的输入必须是几个指定的交易发起者,一个简单的例子就是多重签名。

Prompt P2SH 不一定是多重签名交易。虽然 P2SH 地址通常用于多重签名,但也可能编码其他类型的交易脚本。

多重签名地址

目前,P2SH 功能最常见的实现是多重签名地址脚本。顾名思义,底层脚本需要多个签名来证明所有权,然后才能使用资金。比特币多重签名功能旨在要求总共 N 个密钥中的 M 个签名(也称为“阈值”),称为 M-N 多重签名,其中 M 等于或小于 N。例如,Bob,the第 1 章提到的咖啡店老板,使用需要 1-2 个签名的多重签名地址,一个属于他的密钥和一个属于他的同伴的密钥,以确保其中一方可以签名并锁定一笔金额进入这个地址输出。这类似于传统银行的“联名账户”比特币一共多少个地址,任何一方都可以注册单独消费。或者像 Bob 聘请的网页设计师 Gopesh 那样创建一个网站,该网站可能需要为其业务提供 2-3 多重签名地址,以确保除非至少有两个业务合作伙伴签署已签署的交易,否则无法付款。

本文原文-键和地址