以太坊keystore文件解析

  • 通过以太坊客户端(geth或mist)生成以太坊账户,会在“~/.ethereum/keystore下产生对应于账户的文件,
    该文件保存了账户相关的信息,如私钥和地址。”

    参考

    https://medium.com/@julien.maffre/what-is-an-ethereum-keystore-file-86c8c5917b97

    文件名

    文件名形式: UTC–<created_date_time>–<地址>
    如:UTC–2018-07-23T02-30-23.717223803Z–1062024529684b1890b2fa5964334d8db7da2512

    文件结构

    {

    "address":"1062024529684b1890b2fa5964334d8db7da2512"
    "crypto" : {
        "cipher" : "aes-128-ctr",
        "cipherparams" : {
            "iv" : "83dbcc02d8ccb40e466191a123791e0e"
        },
        "ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c",
        "kdf" : "scrypt",
        "kdfparams" : {
            "dklen" : 32,
            "n" : 262144,
            "r" : 1,
            "p" : 8,
            "salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19"
        },
        "mac" : "2103ac29920d71da29f15d75b4a16dbe95cfd7ff8faea1056c33131d846e3097"
    },
    "id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6",
    "version" : 3
    

    }

    由用户输入的通行证得到派生key

    Key Derivation Function,用户输入的passphrase通过key derivation function得到decryption key,

    密钥生成

    密钥是由客户端产生的,不受用户的控制,keystore中保存的”ciphertext”字段是密钥的密文,密文
    由密钥通过”cipher”指定的算法和decryption key生成,其中参数是”cipherparams”。

    mac的作用

    以上说的是生成密钥密文的过程。当用户需要得到密钥的时候,通过同样步骤得到decryption key,
    然后取decryption的一部分和ciphertxt连接,再hash,将结果与mac对比,相同则代表用户输入的
    通行证是对的。之后再用decryption与ciphertext通过cipher算法解密出私钥明文(对称加密)。