1,摘要
在创建TEE硬件隐私合约链(标准合约链)的时候,配套已经创建了一个证书对和2个公私钥对,对应了这1个账号(duncanwang)。不理解辉哥说什么的参考《蚂蚁区块链第4课 如何创建TEE硬件隐私合约链?》文章的描述。
但是,智能合约运行中,一般会涉及账户切换等操作,那就需要创建新的账户的需求了。
参考本文指导,辉哥完成了需要的4个新账户的创建,包括ella,ouyang,dingheng,daming账号。
2,本地创建公私钥对
2.1 蚂蚁BAAS的账户理解
大部分人理解以太坊的账户体系,一个以太坊地址包括一个公钥,一个私钥(加密过的),是固定的。但是在蚂蚁BAAS系统中,并不存在地址ADDRESS这个概念。它使用identity来表示账户体系,一个identity有2对公私钥对,其中一个是恢复公私钥对,想得挺周到的,双重防丢失。
2.2 本地运行密钥生成工具
蚂蚁BaaS 平台提供 Java 版本的本地密钥服务。辉哥在WINDOWS环境下操作测试完成。
准备 Java 运行环境,1.7 版本或以上。下载密钥生成工具(点击此处 下载)。运行命令java -jar baas-crypto-tool-1.0.0.jar --server.port=8080
启动密钥服务。
2.2 生成公私钥对
启动密钥服务之后,在浏览器中访问 http://localhost:8080/api/crypto/generateUserKey?algo=ec&isPkcs8=true&password=${password} 生成userkey.zip
文件包。解压该 .zip 包后得到user.key
和pub.txt
。其中,user.key
为用户私钥(加密过的),pub.txt
中的内容为用户公钥。
注意:
目前生产公私钥对的密码要求比较严,必须包含大小写,数字和特殊字符,否则会有出错报警。例如{“errorMsg”:"must contains number,a-z,A-Z and *^&"} ,辉哥改为例如http://localhost:8080/api/crypto/generateTlsKey?algo=rsa&isPkcs8=true&password=Juban以上告警才消失。
蚂蚁专家孙善禄说,后面生成密码限制改为要求宽松一点。
可以执行该命令两次,生成两个公私钥对,一个用做账户的公私钥对,另一个用做恢复该账户的公私钥对。
辉哥本地生成了2组公私钥对。
问:如何得到解密后的私钥你呢?
答:
在非WINDOWS环境下,例如UBUNTU环境下,采用第二步,第三步方法获得解密后的私钥。
//第一步:生成java sdk 可用的 user key文件openssl ecparam -name secp256k1 -genkey | openssl pkcs8 -topk8 -v1 pbeWithSHA1And3-KeyTripleDES-CBC -passout pass:123abc -out user.key//第二步:生成DER格式的key文件,临时使用openssl ec -passin pass:123abc -in user.key -outform DER -out user.der//第三步:得到公钥的16进制结果,去baas创建账户时候使用cat user.der | xxd -p -c 1000 | sed 's/3074010420/Private Key: /' | sed 's/a00706052b8104000aa14403420004/\'$'\nPublic Key: /'
3,创建新账号
在区块链创新大赛 > 赶紧去开发 > 管理 > 账户管理 页面,
点击“添加账号”按钮,其中的公钥对就是刚才生产的2个pub.txt文件里面的密码。
注意:
(1)直接复制过来即可,不要加0x关键字哦;
(2)不同账号的公钥/恢复公钥可以重复;
所以辉哥一口气用相同的公钥/恢复公钥把所有需要的账号ella, ouyang, dingheng,daming全部创建好了。
4,如何生成账号的identity标识
蚂蚁区块链的identity类似于以太坊系统的ADDRESS,是链上唯一的表示,其是根据账号名称做sh256算法产生的。
例如,在站长工具网站/tools/hash.aspx中输入账号名字duncanwang,获得其identity为0x4983bcbaf60b9c90dc9d9a0b38a8931aad9a444acaa2adcbc61c5e3e218c49e1
根据上面方法,得到以下角色的identity为
管理者 - test002 identity:
0xd6b1f9e8a0da740fa04245a41b78eba7be9214cf96e7f6594899706e64050d20
管理者 - ella identity:
0xfb2cb45b6b443241e38145b6445a6e0ebee0410d19e71d9fd0adf5fc382d49e5
操作员 - duncanwang identity:
0x4983bcbaf60b9c90dc9d9a0b38a8931aad9a444acaa2adcbc61c5e3e218c49e1
观察员 - ouyang identity:
0xe26ef3b9bb0244244935f0176e2e4b5b623be3634276ee897810a380ae8c1314
市民 - dingheng identity:
0xccaa69e5e5583f2e34885450669c518a6febcdec9040a4d0a2d41cd9f8f8ca40
5,如何生成解密的私钥信息?
在第2章中获得的user.key的私钥为加密后的私钥,不能用于CLOUD IDE切换账号时的私钥,需要转换为32字节的解密私钥才可以使用。
总的来说,在Ubuntu等linux环境下完成第2步,第3步就可以获得32字节的解密后私钥了。
//第一步:生成java sdk 可用的 user key文件openssl ecparam -name secp256k1 -genkey | openssl pkcs8 -topk8 -v1 pbeWithSHA1And3-KeyTripleDES-CBC -passout pass:123abc -out user.key//第二步:生成DER格式的key文件,临时使用openssl ec -passin pass:123abc -in user.key -outform DER -out user.der//第三步:得到公钥的16进制结果,去baas创建账户时候使用cat user.der | xxd -p -c 1000 | sed 's/3074010420/Private Key: /' | sed 's/a00706052b8104000aa14403420004/\'$'\nPublic Key: /'
用此方法,可以获得dunwang,ell等账号的解密私钥。
(1)dunwang
使用duncanwang_client.key文件,出来的私钥被辉哥篡改防泄漏。
openssl ec -passin pass:jusanban -in duncanwang-user.key -outform DER -out duncanwang-user.dercat duncanwang-user.der | xxd -p -c 1000 | sed 's/3074010420/Private Key: /' | sed 's/a00706052b8104000aa14403420004/\'$'\nPublic Key: /'Private Key: 46f9c8c5037a92aefd811b350a42dc63591fb772ea2c104b89ccb48e1784c76cPublic Key: 90fbc786b3b51f78e2934e50ef58e26687f4125d7969de0d4aeeb2d4c2b607a3d58eacaaf75166ff15e6b62391d42a952c45574a3b1a617db3bd3edd549f5383
(2) ella/ouyang/dingheng
使用ella-user.key文件,出来的私钥被辉哥篡改防泄漏。
openssl ec -passin pass:Jusanban_ -in ella-user.key -outform DER -out ella-user.dercat ella-user.der | xxd -p -c 1000 | sed 's/3074010420/Private Key: /' | sed 's/a00706052b8104000aa14403420004/\'$'\nPublic Key: /'Private Key: 2ac3bd8673454a6de00fc8915b5f2676084d2e6c74d3a0fdf34b5e63ead6e019Public Key: 245139b08877a8bd128939ba397d63f229456d4a2cdd9ec9572d62ddc3b2955d8ba88974d8cef3309740f65c4a44bb80f9278e59ab01455f851ea734c84b27e8
6,参考
(1)合约链:本地生成证书请求和公私钥对
/docs/2/73764