私钥→公钥

  1. 椭圆曲线
    1. 满足椭圆曲线公式的,二维平面的点的集合
      1. 按x轴上下对称

      Untitled

    2. 加法操作Untitled
      1. R = P + Q
        1. 作P和Q两点的连线,与椭圆曲线的第三个交点为-R,再按x轴取对称点,即为R
        2. 当P和Q为同一个点的时候,则作该点与椭圆曲线的切线,与椭圆曲线的第二个交点为-R,再按x轴取对称点,即为R
        3. 椭圆曲线是有限域(Field):相加后的点仍在集合中,即交点-R一定存在
    3. 生成点$G$,乘法操作:$K = k * G$Untitled
      1. 通过提前算好$2^nG$来加速计算过程
      2. 已知$K$和$G$的情况下,无法算出$k$
    4. $k$是私钥,$K$是公钥。正着好算,反着几乎算不出来Untitled

公钥→地址

  1. Hash并截短一下公钥:节省存储空间且减少地址碰撞

Bitcoin

Bitcoin

Ethereum

Ethereum

签名

Untitled

  1. 目的
    1. 证明拥有地址的私钥且不暴露私钥
    2. 证明私钥持有者同意了交易内容
  2. 签名的Message:唯一的交易
  3. 签名算法
    1. ECDSA:最基础,不支持签名聚合,多签的时候必须依次验证
    2. Schnorr(Bitcoin Taproot):支持聚合签名,但有一些不足,主要是signer要进行交互
    3. BLS(Filecoin、ETH2):支持聚合签名,解决signer交互问题

助记词

  1. BIP-39
    1. 如何用助记词生成seedUntitled
  2. BIP-32
    1. HD Wallet(Hierarchical Deterministic Wallet,分层确定性钱包)
      1. 如何从一个seed,生成多层的私钥
      2. 没有seed的情况下,私钥之间互相不能推导

    Untitled

  3. BIP-44
    1. 约定path的使用规范,即HD Wallet中私钥的选取规范Untitled

      Untitled

    2. SLIP-0044:不同链的path约定,新链需要注册
  4. 小结
    1. 助记词是随机生成的,根据助记词可以获得大量的私钥,然后按照约定的规则选取其中的部分私钥使用,在保证安全性的前提下简化了整个多链多地址钱包的保管和恢复
    2. 对于符合以上标准的钱包,助记词是互通的,即可以通过助记词恢复出所有钱包内的地址和对应的私钥

https://biquanlibai.notion.site/3f9c19c11fa14992b3c9731e015aef73

 

BIP 44 默认的导入规范如下:

m / purpose’ / coin_type’ / account’ / change’ / address_index’ /

其中各字母代表的含义如下:

  • m —— 代表公链
  • purpose —— 一般为「44」,代表遵循 BIP44 方案,但 BTC 隔离见证地址为「49」
  • coin_type —— 代表币种类型,其中 0 为 BTC,1 为 BTC 测试网,2 为 LTC,60 为 ETH 等
  • account —— 代表此币种的账户索引,从 0 开始
  • change —— 数值 0 用于外部链,1 用于内部链。一个用于创建接收地址,另一个用来创造找零地址
  • address_index —— 地址索引,从 0 开始

为了方便用户更好地在各个钱包里管理自己的资产,目前市面上主流的钱包导入路径都是一致的,但也有个别钱包的默认导入路径有所不同,这就导致用户通过同一组助记词导入出来的钱包地址不一样,造成了资产「归零」的错觉。比如 imToken 默认的 BTC 钱包导入路径为隔离见证地址,而如果你之前使用的是 BTC 普通地址,在导入后,一个大大的数字 0 就会显示在你的资产首页上(莫慌,你可以通过切换地址类型切换回 BTC 普通地址,看到自己的资产)。

所以保险起见,我们在备份助记词的同时,最好记下当前钱包的导入路径是什么,方便我们在切换钱包软件导入钱包时,能够准确地找到之前的钱包地址。同时,我们在创建钱包的时候,不要随便切换默认的导入路径,如果你要修改路径,那么请一定要记住导入路径的规范,以免造成资产丢失的风险。