首页 > 其他分享 >比特币入门 ① - 私钥、公钥、地址

比特币入门 ① - 私钥、公钥、地址

时间:2023-01-09 12:33:38浏览次数:60  
标签:公钥 私钥 前缀 比特 地址 格式

比特币入门 ① - 私钥、公钥、地址

相关资源

豆瓣:精通区块链编程

私钥、公钥、地址

概述

一个比特币钱包中包含一系列的密钥对,每个密钥对包括一个私钥和一个公钥。

  • 私钥(k)是一个数字,通常是随机选出的。
  • 有了私钥,我们就可以使用椭圆曲线乘法这个单向加密函数产生一个公钥(K)。
  • 有了公钥(K),我们就可以使用一个单向加密哈希函数生成比特币地址(A)。

前置知识

椭圆曲线乘法

比特币使用椭圆曲线乘法(secp256k1)作为其密码学的基础,其使用的是一个特定的椭圆曲线和一组数学常数。

类似下图,但实际上该曲线被定义在一个素数阶的有限域内,而不是定义在实数范围。

  • 无穷远点:一个特殊的点,大致对应于 0 在加法中的作用。

  • 加法:

    • 给定椭圆曲线上的两个点 P1 和 P2,则椭圆曲线上必定有第三点 P3 = P1 + P2。几何图形中,该第三点 P3 可以在 P1 和 P2 之间画一条线来确定。这条直线恰好与椭圆曲线上的一点相交。此点记为 P3'=(x,y)。然后,在 x 轴做映射获得 P3=(x,-y)。
    • 如果直线 P1P2 完全垂直时,P3 = “无穷远点”。
    • 加法遵守结合律,这意味着(A+B)C = A(B+C)。
  • 乘法:给定椭圆曲线上的点 P,如果 k 是整数,则 k * P = P + P + P + …+ P(k 次)。注意,k 有时被混淆而称为“指数”。

Base58Check 编码

  • Base58 编码:由不包括(0,O,l,I)的大小写字母和数字组成。
  • Base58Check 编码:一种 Base58 格式的、有版本的、经过校验的格式,可以明确的对比特币数据编码的编码格式。
  • “版本字节”前缀:为了方便地识别编码的数据类型,先对数据添加一个前缀。
数据类型 版本前缀 (16 进制) Base58 格式
Bitcoin Address 0x00 1
Pay-to-Script-Hash Address 0x05 3
Bitcoin Testnet Address 0x6F m or n
Private Key WIF 0x80 5, K or L
BIP38 Encrypted Private Key 0x0142 6P
BIP32 Extended Public Key 0x0488B21E xpub
  • 检验和:对之前的前缀 + 数据运行两次 SHA256,将散列值的前 4 个字节作为校验和添加到数据之后。

私钥

本质上为一个 256bit 的数字,需要由足够安全的熵源,即随机性来源生成。

  • 格式

    • 非压缩格式:K 或 L 前缀,表示“用于生成非压缩格式公钥的私钥”。
    • 压缩格式:5 前缀,表示“用于生成压缩格式公钥的私钥”。在“非压缩格式”私钥加了后缀 0x01,用于区分。

公钥

通过椭圆曲线算法可以从私钥计算得到公钥,这是不可逆转的过程:K = k * G 。其中 k 是私钥,G 是被称为生成点的常数点,而 K 是所得公钥。

其中所有比特币用户的生成点 G 是相同的,一个私钥 k 乘以 G 必将得到相同的公钥 K。

  • 格式

  • 非压缩格式:0x04 前缀,紧接着两个 256bit 数字,表示 x 坐标和 y 坐标。

  • 压缩格式:0x02 或 0x03 前缀,紧接一个 128bit 数字,表示 x 坐标。已知 x 坐标后,可解方程得出 y 坐标。如果 y 是偶数,则使用 0x02 作为前缀;如果 y 是奇数,则使用 0x03 作为前缀。

    • 注意:在实数域的 y 坐标为正负,而在素数 p 阶的有限域上 y 坐标为奇偶。
  • 带来的问题:两种公钥格式会导致生成的地址将完全不同。当钱包软件导入私钥时尤其重要,因为新钱包需要扫描区块链并找到所有与这些被导入私钥生成的地址相关的交易。因此私钥也有相应的格式区分,用于表示该生成哪种格式的公钥及相应地址。

地址

A = RIPEMD160(SHA256(K)),公式中 K 是公钥,A 是生成的比特币地址。

地址通常还要经过Base58Check编码。

本文由博客一文多发平台 OpenWrite 发布!

标签:公钥,私钥,前缀,比特,地址,格式
From: https://www.cnblogs.com/LMessi/p/17036683.html

相关文章

  • 公钥私钥
    对称加密 用同一个密钥进行加密和解密公钥和私钥 非对称加密算法(用一对密钥,A加密,B解密) 加密和解密的密码不一样,一个是公钥,一个是私钥 公钥和私钥成对出现 公开的密......
  • 技术汇总:第十七章:支付宝对接公钥,私钥
    支付宝对接公钥,私钥:https://docs.open.alipay.com/291/106103/截图这里的是公钥。密钥是您自己生成上传的,生成的是应用私钥和应用公钥。应用公钥上传到开放平台截图位置,......
  • [加密]公钥/私钥/数字签名理解
    公钥,私钥和数字签名一、公钥加密 假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。我有一个文件,不能让......
  • ssh 公钥登录
    ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home,~./ssh,和~/.ssh/authorized_keys的权利第一步:在本地机......
  • gogetssl申请的域名证书私钥文件丢了,可以重新申请个吗?
    因为gogetssl是不保存我们使用浏览器生成的KEY文件的,CSR文件倒是可以有办法再找到也就是说CertificateSigningRequest(CSR)可以想想办法,但是YourPrivateServerKey文......
  • R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达
    全文下载链接:http://tecdat.cn/?p=25880 最近我们被客户要求撰写关于泊松过程的研究报告,包括一些图形和统计输出。本文描述了一个模型,该模型解释了交易的聚集到达,并展示......
  • openssl jni nginx证书私钥有效性校验
     1、安装opensslwgethttps://www.openssl.org/source/openssl-1.1.1b.tar.gz./config--prefix=/usr/local/openssl --shared--shared为添加动态库,生成libssl.so,默......
  • 杂谈#105 用户付费的8种情况,SBF被捕了,港股首发比特币期货ETF
    用户付费的8种情况,SBF被捕了,港股首发比特币期货ETF以下内容来自群聊整理,仅供参考。增加群价值有什么建议?1.副业交流2.文化娱乐(旅行、书籍、深度解......
  • 【LeeCode】338. 比特位计数
    【题目描述】给你一个整数 ​​n​​ ,对于 ​​0<=i<=n​​ 中的每个 ​​i​​ ,计算其二进制表示中 ​​1​​​​ 的个数 ,返回一个长度为 ​​​n+1​​......
  • 支付宝 上传应用公钥并获取支付宝公钥(新版接入)
    支付宝支付新版接入方式:开通企业支付宝帐号》开通四个产品(APP支付电脑网站支付手机网站支付)>>再开通开放平台(选择自研开发者)>>在开放平台中创建应用>>添加需要的功能>>......