-
加密和签名:
在现实生活中,如果想在某个银行存钱或者取钱,首先要开立账户,这是中心化系统的标准流程。在区块链中,我们同样需要具备这样一个账户:
公链是去中心化的,每个用户自己决定是否开户,不需要任何中心的批准。
以比特币为例,开户的过程就是创建一个公私钥对,类似于现实生活中的银行账号和密码。
一个比特币账户 =(public key, private key)
公私钥来源于非对称加密(Asymmetric encryption algorithm)其使用场景例如:
A用B的公钥(public_key_B)为信息(Msg)加密后通过网络发送给B 而B用自己的私钥(private_key_B)解密,注意:加密和解密用的都是接收方的。
在对称加密体中,一旦网络被窃听,盗用者可以使用同一个密钥解密信息众而得到文件内容。而在非对称加密中公钥通过网络发送给对方,而保存在本地,更为安全。
在以上例子中,非对称加密被用来做信息加密,其主要目的是防止信息泄露,密钥越长破解难度越大,但是运算时间也越长,性能也就越差。相同安全强度下,对称密钥长度在最短,ECC次之,RSA密钥长度则最长。
在比特币系统中,公私钥对被用来签名,例如A要给B转账,如何证明是A本人发起的交易呢:
A需要在发起转账交易时,用自己的私钥(private_key_A)对交易签名,而B使用A的公钥(public_key_A)去验证这笔交易。注意:签名用私钥,验证用公钥,都是发送方的。
在签名的过程中会使用签名算法。
加密的目的是防止信息泄露
签名的目的是防止篡改。
-
证书
-
用户生成自己的公私钥对(使用非对称加密技术)。
-
申请认证:用户将自己的公钥,以及部分信息(例如组织信息、个人信息等)发送给CA.
-
CA审核: CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法等
-
审核通过后,CA会向申请者签发认证文件-证书。
用户(申请者)的公钥
|
申请者的组织信息和个人信息
|
签发机构 CA 的信息
|
有效时间
|
证书序列号等信息的明文
|
CA的签名(签名=用私钥对证书摘要加密)
|
公私钥用于证明你是谁,信息是不是你发送的,有没有被篡改
证书则用于证明你是否拥有可以从事某项活动的“资质”,除此之外,证书可以证明“你”不是冒充的。
在上面A给B转账的例子中,假如出现一个C,他使用非法手段攻击了B的数据库,将public_key_A的内容,替换成了public_key_C的内容,这样,他就可以用private_key_C加密冒充A将信息发送给B,而由于B保存的A的公钥内容其实是C的,从而验证通过,
为了避免这个问题,A将公钥绑定了一个数字证书cert_A,cert_A里包含了公钥的信息以及A的其他信息,B保存了A的证书用以验证签名。这样C如果想要替换cert_A为自己的cert_C时,B通过读取证书发现这是另一个人的公钥。
签名的过程:
-
使用hash算法对申请的信息计算出摘要A
-
用CA的私钥对信息摘要进行加密,产生的密文即签名;
验签的过程:
在联盟链中,只有被信任的成员才被允许加入。新加入的成员需要携带被信任的证书。其他成员通过以下方式验证其证书的合法性:
- 读取证书中的相关的明文信息,采用相同的hash计算得到信息摘要B
- 用颁发者CA的公钥解密签名数据,得到摘要信息A
- 对比A和B是否一致
长安链两种证书的生成方式:
-
证书生成工具:https://docs.chainmaker.org.cn/dev/证书生成工具.html
在其配置文件chainmaker-cryptogen/config/crypto_config_template.yml提供了上述两种算法的配置项:
也同相在配置文件: chainmaker-ca-backend/src/conf/config.yaml中提供了相应的配置:
长安链支持的加密算法如下: