密钥工具venakey

概述

Venachain与Ethereum一致都使用了基于secp256k1椭圆曲线的加解密、签名验签方案。

  • 私钥: 用户(或节点)自己保存,用于签名交易(或消息)

  • 公钥: 由私钥计算而来,公开出去作为身份验证

  • 地址: 对公钥取哈希后,取哈希值的后20个字节

  • 签名: 用户(或节点)使用自己的私钥,对交易(或消息)进行运算得到的固定长度的字节流

Venachain中用到公私钥的地方主要有以下两处:

  • 节点间消息通信,使用节点私钥为消息签名

  • 发送交易时,使用用户私钥为交易签名

Venachain提供了密钥工具venakey,用于产生密钥对。

注解

如果是手动编译Venachain项目的,该工具位于 Venachain/release/linux/bin 目录下。如果是下载release包的,那么该工具位于 linux/bin 目录下。

创建密钥对

./venakey genkeypair
Address   :  0xec5b67d6CC4b18cdEA2A7ddEBFe6E38305F38387
PrivateKey:  3307251f43c4259a861a74eeed666595d961f03c0820f54252d7e711619c8593
PublicKey :  a89421260aa2ec3eee9b148556850517b51b042272f5a536938a81acd9f152856dc200911f43f9a1d65567e31875d8de639a8b168c819ff0a3b5cb0a4d056e9f

该命令会创建一组新的密钥对,其中私钥是用户自己保存的,地址及公钥可以公开。

创建密钥文件

./venakey generate

Passphrase:
Repeat passphrase:
Address: 0x8B5d3Af7bF4d309D4C83Ed30936f78FBB1AcAA18

该命令用于根据输入的密码创建密钥文件(keyfile.json),密钥文件可以用来签名消息。

keyfile.json文件的内容如下所示:

{
    "address":"8b5d3af7bf4d309d4c83ed30936f78fbb1acaa18",
    "crypto":{
        "cipher":"aes-128-ctr","ciphertext":"39e7bb77b7a6fc06ecbb884eecdd0f1fdcf48bd9ecd11aa5a904816bb1922160",
        "cipherparams":{"iv":"4215fdb9202669687cfdb06806aabfe2"},
        "kdf":"scrypt",
        "kdfparams":{
            "dklen":32,
            "n":262144,
            "p":1,
            "r":8,
            "salt":"a9490c104f46548d3a180ab339ad673c7eacb5092d446aba24621a7c25765852"
        },
        "mac":"487b560d5cabc067a8becfcf0a8279a9b3b293dbaf74989040011e7c40b30b92"
    },
    "id":"56ccd2ab-1a98-49c8-8173-6a805ac96948",
    "version":3
}

查看密钥文件信息

Usgae:
    venakey inspect <keyfile>

## 示例
./venakey inspect keyfile.json  --private
Result:
Passphrase:
Address:        0x8B5d3Af7bF4d309D4C83Ed30936f78FBB1AcAA18
Public key:     04f7acbc87ddf0da6edbd3ac86f81ebac69992cd4b40897855322c5c4ed029cacd5e1b9ef5b78d66576de68041689702fe5a893cae5f46def58e25738efa2ff801
Private key:    e01cbcdbf2bea366eac27ec1214cd84fe718a77bee15a30102ef88f297b15cff

签名消息

Usage:
    venakey signmessage <keyfile> <message/file>

# 示例
./venakey signmessage keyfile.json message
Passphrase:
Signature: cf394180f0ae2e507470e904eeba1cbcc8882c2b73ea9e712fcd897a5d195d292df076171dfb03e1913226de5060e5e7548ecc3091157f8d5b8b62def6c6d9d600

验证签名

Usage:
    venakey verifymessage <address> <signature> <message/file>

# 示例
./venakey verifymessage \
 0x8B5d3Af7bF4d309D4C83Ed30936f78FBB1AcAA18 \
 cf394180f0ae2e507470e904eeba1cbcc8882c2b73ea9e712fcd897a5d195d292df076171dfb03e1913226de5060e5e7548ecc3091157f8d5b8b62def6c6d9d600 \
 message
Signature verification successful!
Recovered public key: 04f7acbc87ddf0da6edbd3ac86f81ebac69992cd4b40897855322c5c4ed029cacd5e1b9ef5b78d66576de68041689702fe5a893cae5f46def58e25738efa2ff801
Recovered address: 0x8B5d3Af7bF4d309D4C83Ed30936f78FBB1AcAA18

注解

上述命令的地址和签名需要改成你自己的对应的地址和签名,message内容可以改成你需要签名的内容,但是需要保持签名和验签的message内容一致。