0%

签名是用于消息的认证,保证该条消息不被伪造。本文主要讨论RSA签名、DSA、ECDSA 和 Schnorr 签名算法。

RSA签名

安全性建立在大数分解问题

公钥:E、N
私钥:D、N
签名:签名 = 消息^D mod N
验证:消息’ = 签名^E mod N ,如果消息’==消息则验证成功

阅读全文 »

非对称加密有两个密钥:公钥和私钥,公钥用来加密数据,私钥用于解密

他们都源于一个公共原理:单向函数

单向函数的定义:

函数 f() 是一个单向函数,当且仅当:

  1. y = f(x) 计算比较容易
  2. x = f’ (y) 计算是不可行的(需要的时间太长)
阅读全文 »

在加解密技术中根据密钥的类型一般可以分为对称加密和非对称加密,本系列文章将对这两种类型涉及到的加解密算法展开分析,其他的密码技术如散列算法、密钥协商、签名等,也在讨论范围之内。

  • 将现实世界的东西映射为比特序列的操作为编码
  • 将表示明文的比特序列转换为表示密码的比特序列为加密
阅读全文 »

本文讨论的对称加密算法主要包括 DES、3DES、AES

DES

明文:64 bit
密文:64 bit
密钥:56/64 bit(每 7 位插入一个校验位的时候为 64 bit)
其设计思想充分体现了香农提出的混淆和扩散原则

阅读全文 »

参考 bip32bip44

  • 定义了种子生成树状密钥对的算法与规则
  • 定义了5层路径规则,可兼容多账号多币种

一、密钥扩展算法

1. 概念

  • private extended key :

    (k , c) k为私钥,c为chaincode

  • public extended key :

    (K , c) K为公钥,c为chaincode

  • Child key derivation functions:

    CKD(extended key , index)
    normal child keys 范围: 0-2^31-1
    hardened child keys 范围: 2^31 - 2^32-1

阅读全文 »

参考 bip39

  • 定义了助记词的生成规则
  • 定义了由助记词导出种子的规则
  • 定义了助记词 wordlist,目前包含7种语言,每种 2048个单词
  • 助记词到种子的推导是单向的

一、助记词的生成

  1. 产生一个随机数作为熵 entropy,长度为 128-256 bits,必须为 32 bits 的整数倍
  2. 然后在 entropy 尾部 append 校验位,校验位即entropy 的 sha256 的前几位,位数如下:
阅读全文 »

分层确定性钱包,可以从一个种子派生出一系列密钥对用于生成地址,便于钱包的备份与管理

助记词、种子、公钥、地址之间的关系如下:

  • 助记词与种子公钥与地址之间只能单向推导

seed-addr-rlt.png

主要涉及到的bip协议:

  1. bip32 hd 钱包核心提案,定义分层概念和算法

  2. bip39 定义助记词生成规则和导出种子规则

  3. bip44 定义 5 层路径规则

  4. bip45 定义多签地址生成规则

阅读全文 »

参考:btcd

  • btcd实现了基于http的和websocket的json-rpc,支持http Basic authentication。
  • websocket通道 支持所有的请求类型,http通道不支持通知类(notify)的请求
  • http/websocket是传输协议,json是序列化协议。
阅读全文 »

参考:btcd

  • btcd提供了一个内存池mempool,用于存储还未被矿工打包的交易。
  • utxo和block index存储于leveldb中,而不是本文讨论的mempool
  • 被插入之前要进行一系列的正确性验证(通过mabeAcceptTransaction)。
  • 如果是orphan tx(即在main chain和mempool里找不到input的所属交易tx)会暂时插入到orphans pool(通过ProcessTransaction)。
  • 当新的block连接到主链时,会把block中的tx从mempool中移除,相应的也会转移orphans pool中依赖此block的tx到mempool中(通过MabeAcceptTransaction)
  • 当block从主链脱离时,会重新处理block里的tx(通过MabeAcceptTransaction)
阅读全文 »