本人,由于项目最近要加一套签名验签的机制,又没有做过,经查阅资料,做了简单的梳理,如有不合理之处,请多多指教。
下面是我梳理的一份流程图,简单说说:
简化流程图首先得简单了解公私钥是干嘛的,对称加密与非对称加密,证书又是怎么回事,以及usbKey或蓝牙Key方面的相关信息。
公私钥
百度百科:公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。
对称加密
需要对加密和解密使用相同密钥的加密算法。虽然加解密速度快,但是不安全,因为使用相同的密钥就要保障每次加密后将密钥安全的传递给解密者,无疑密钥管理成为双方的负担。
非对称加密
非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
公私钥是一对密钥对,任何一个加密之后,只能用另一个解密,公钥用于客户端加密(公开的),私钥用于服务端解密。因此,只要保证私钥安全不丢,那么传输的数据就是安全的。
CA证书
它是由权威机构颁发的,经过国际认证的,CA 也拥有一个证书(内含公钥和私钥)。证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循X.509 国际标准。
图解
了解这些后,简单说说签名验签过程。首先做key的厂商会先烧Key,不同的厂商根证书是不一样的,需要我们存储在服务端,再建用户的时候会将key的序列号跟用户绑定。客户端()先对需要做签名的数据做一次hash(算法协商),再拿key里的私钥对hash值做加密得到签名值,然后将签名原文、签名值、公钥证书一块发给服务端,服务端用已存储的根证书验证客户端公钥证书的有效性,拿公钥解密签名得到客户端送的hash值1,服务端对签名原文做相同的hash得到hash值2,比较hash值1和hash值2,验签完成。
其实验完证书有效性后,还可以对hash值做反向hash,得到明文,对比一下,验签完成。
网友评论