# Keystore 安全性说明

# Keystore 文件

keystore 文件是您独有的、用于签署交易的私钥加密文件,允许您以加密的方式存储密钥。

这种方式兼具 安全性(一个攻击者需要账户 keystore 文件和您的密码才能盗取您的资产)和 易用性(您只需要 keystore 文件和密码就能使用资产)。

WARNING

如果您丢失了私钥,意味着您失去了签署交易的能力,同时意味着您的资产被永久的锁定在了您的账户里。

所以,请务必保管好您的私钥以及 keystore 文件!不要向他人透露您的私钥和 keystore 文件密码!

keystore 文件格式:

{
   "account_address" : "T800002276a7d58218ac4978733e5cca927a7d86cb7c87",
   "address" : "2276a7d58218ac4978733e5cca927a7d86cb7c87",
   "crypto" : {
      "cipher" : "aes-128-ctr",
      "cipherparams" : {
         "iv" : "09dade6d3ce2741794e49d65f8dd65a4"
      },
      "ciphertext" : "a45fd491c32ad271039883ed4084e18c57e12cd2c21af1522fe94ba8313634a3",
      "kdf" : "scrypt",
      "kdfparams" : {
         "dklen" : 32,
         "n" : 262144,
         "p" : 1,
         "r" : 8,
         "salt" : "9ed2bcb3349392765fec47bb20776cdb69e0e3a4d19d26da65f9371f83cfc2b5"
      },
      "mac" : "da83cf03746166c877bf319d6371c7f54d518c48c99b1782fdad56e343b812f6"
   },
   "hint" : "",
   "id" : "568498c9-889b-a26d-fa01-bc9a67ffc472",
   "key_type" : "owner",
   "public_key" : "9b473e552fd05ed2e39d4d3af18367cc98859d50a3eb93805e4706b6b86310c83a2c4e847b662266330cef4cfb7c595ad655ab6a18d86708fe7bc00b589a3a68",
   "version" : 3
}

# 生成 keystore 文件的方法

  1. 生成原始私钥,并对原始数据进行 16 进制编码。

  2. 生成 32 字节的 salt

    CryptoPP::AutoSeededRandomPool::GenerateBlock
    
  3. 生成 AES 的 32 字节加密 key。

    其中:kdf 算法采用 scrypt,hash 算法采用 SHA3-256,再加上密码,生成加密 key。

  4. 生成 AES 的 16 字节的 iv

    CryptoPP::AutoSeededRandomPool::GenerateBlock
    
  5. 生成密文。加密算法采用 AES128,加密模式采用 CTR_Mode。

  6. 计算 32 字节 mac(message authentication code 消息认证码),将 aes_key 后 16 字节同加密后的密文(ciphertext)拼接,然后对拼接数据进行 hash(SHA3-256)计算。

  7. 将上述相关数据写入文件。