密码学基础知识
对称加密算法(私钥加密算法)
对称加密:使用同一密钥进行加密和解密。意思就是你对一段内容加密时用的密钥,和对加密后的密文用的密钥是同一个密钥,这就叫做是对称加密。
使用的是私钥密码加密。
优势:加解密速度快,密文是紧凑的,安全。
对称加密的加密解密流程如下图:
但是对称加密有一个问题,就是我们使用了我们的私钥对明文进行了加密,但是我们的这个私钥怎么给对方呢?通过网络传输我们确实是可以把我们的私钥信息传递给对方,但是这种方式不安全,因为黑客是可以通过网络获取到你传输的密钥的。
著名对称加密算法
DES 3DES: DES算法的密钥长度一共有56位,3DES算法是把密钥的长度放大三倍即168,DES算法存在很大的延迟性,不能够用于无线/语音视频加密
AES: AES算法使用了128位,192位或256位的长度的密钥,3DES的替代加密技术,软硬件运行效率高,可用于无线/语音视频加密
RC系列(RC2,RC4,RC5): RC2加密算法,密钥长度可变,RC2的运算速度比DES快,软件实现的RC2比DES快三倍,RC2是否比DES安全取决于其所使用的密钥长度
IDEA: IDEA国际数据加密算法,分组长度为64位,密钥长度为128位
CAST
Blowfish: 密钥长度可变,安全性可以通过改变密钥长度进行调整,适用于密钥不经常改变的加密,不适用于需要经常变换密钥的情况
DES算法框架图:
非对称加密算法(公钥加密算法)
公钥加密比私钥加密出现的晚,私钥加密使用同一个密钥来加密和解密信息,公钥加密使用两个密钥,一个密钥用于加密信息,另一个密钥用于解密信息。
非对称加密算法中公钥用来加密,私钥用来解密。
非对称加密算法的工作流程如下图:
**非对称加密算法特点:**私钥需要安全保存(不通过网络传送),公钥公开,加密速度慢,密文非紧凑,可以与对称加密相结合。
常见的非对称加密算法:
RSA: 密钥长度在512~4096bit之间,安全性基于大素数因子分解的困难性。RSA比用软件实现的DES慢100倍,RSA的主要功能有加密,数字签名和密钥交换(加密散列,密钥)
发送方先用接收方的公钥进行加密,然后把密文传输给接收方,最后接收方再使用自己的私钥进行解密。
DSA:
ECC:比特币的加密算法用的就是这个。
公钥加密算法的三种用途:
加密/解密
数字签名:发送方用自己的私钥签署报文,接收方用对方的公钥验证对方的签名
密钥交换:双方协商会话密钥
数字签名
首先什么事数字签名,数字签名的流程是什么?如下图:
首先,发送方把明文加密成密文,然后会把明文中的一段摘要加密成密文摘要,接着发送方会把密文和原文的摘要密文全部都发给接收方,而原文的摘要密文其实也就是发送方的签名。但是在我们通过网络传输的过程中,我们的密文和签名可能会被黑客篡改,那么我们怎么判断有没有被篡改呢?接收方接收到密文之后,解密密文成明文,然后通过哈希得到明文摘要。接着接收方再解密摘要密文,又会解析成一个明文摘要。最后比较一下这两个明文摘要
是否相同,如果相同则通过。
其实总的来说,就是接收方需要看一下密文里面的签名和发送方发来的签名是否是同一个签名,如果是同一个签名,那么这份数据就是安全未被篡改过的,否则的话,这份数据在网络传输的时候已经被篡改过了。
数字证书和CA
首先提出一个问题,你怎么能确定你加密时使用的公钥就是接收方的公钥呢?如下图:
可以用数字证书证明。
数字证书(Digital Certificate,类似身份证的作用),CA(Certificate Authority,电子商务认证授权机构)。
我们要证明的公钥加上CA权威机构的私钥可以生成一个数字证书,这个数字证书里面包含的信息有姓名,地址,组织,所有者公钥,证书有效期,认证机构数据签名。如下图:
数字证书的具体样式如下图:
商户API证书
商户API证书,是商户申请的,包含商户的商户号,公司名称,公钥信息。
商户API证书其实也就是CA权威机构发布的一个可以表示商户的信息的证书。
商户API证书就好比我们人的身份证一样,是由公安机构发布的,上面有我们公民信息的证书。
商户API私钥
商户申请商户API证书时,会生成一个商户私钥,并保存在本地证书文件夹的文件apliclient_key.pem中。私钥也可以通过工具从商户的p12证书中导出。请妥善保管好你的商户私钥文件,不要把私钥文件暴露在公共场合,如上传到Github,写在客户端代码等。
微信支付平台证书
微信支付平台证书是指由微信支付负责申请的,包含微信支付平台标识,公钥信息的证书。商户可以使用平台证书中的公钥进行验签。
通过证书序列号声明所使用的证书
某些情况下,将需要更新密钥对和证书。为了保证更换过程中不影响API的使用,请求和应答的HTTP头部中包括证书序列号,以声明签名或者加密所用的密钥对和证书。
- 商户签名使用商户私钥,证书序列号包含在请求HTTP头部的Authorization的serial_no
- 微信支付签名使用微信支付平台私钥,证书序列号包含在应答HTTP头部的Wechatpay-Serial
- 商户上送敏感信息时使用微信支付平台公钥加密,证书序列号包含在请求HTTP头部的Wechatpay-Serial
API v3密钥
为了保证安全性,微信支付在回调通知和平台证书下载接口中,对关键信息进行了AES-256-GCM加密。API v3密钥是加密时使用的对称密钥。
|