浅谈加密,签名,验签的理解
1 常用的加密算法
对称加密算法:加密和解密使用相同的密钥,典型的有AES\DES\RC5\IDEA(分组加密)\RC4(序列加密);
非对称密码算法:又称为公钥加密算法,是指加密和解密使用不同的密钥(公开的公钥用于加密,私有的私钥用于解密)。比如A发送,B接收,A想确保消息只有B看到,需要B生成一对公私钥,并拿到B的公钥.于是A用这个公钥加密消息,B收到密文后用自己的与之匹配的私钥解密即可.反过来也可以用私钥加密公钥解密.也就是说对于给定的公钥有且只有与之匹配的私钥可以解密,对于给定的私钥,有且只有与之匹配的公钥可以解密.典型的算法有RSA,DSA,DH;
单向散列算法:散列变换是指把文件内容通过某种公开的算法,变成固定长度的值(散列值),这个过程可以使用密钥也可以不使用.这种散列变换是不可逆的,也就是说不能从散列值变成原文.因此,散列变换通常用于验证原文是否被篡改.典型的算法有:MD5,SHA,MAC,CRC等.
2)密文传输,使用对称加密
加解密使用同一密钥,如果密钥被黑客C截取,则可以利用密钥伪造消息发送给B,也可以伪造消息发送给A,不安全
3)密文传输,使用非对称加密
非对称加密,加解密使用不同密钥,如A发消息给B,则需要B生成一对公私钥,B将公钥发送给A,A用公钥加密报文然后将密文发送给B,B使用私钥解密得到原始报文.此过程中因为只有B有私钥,所以即使公钥在传递过程中被C截获了,也由于没有私钥而无法解密.但存在的问题是C可以利用公钥伪造消息发送给B.
4)密文传输,使用非对称加密,签名验签
非对称加密,使用B的公钥加密的报文只有B的私钥才能解密,反过来使用B的密钥加密,也只有B的公钥可以解密,那么一段密文可以用B的公钥解密,那么这段消息一定是B发出来的.签名就是利用这个原理,A在发消息给B之前也会生成一对公私钥,并将公钥发送给B,发消息的时候先将报文使用A的公钥加密得到密文,然后在用B自己的私钥加密消息摘要得到签名,最后将密文和签名一起发送给B,B拿到消息后先用A的公钥解密签名确认是A发过来的消息,再用B自己的私钥解密密文得到原始报文.此过程中存在的问题是,如果消息摘要跟消息无一定关系,则黑客C截取到消息后,截取消息中的A签名,然后利用截取到的B公钥伪造密文拼接起来发送B,这样也是存在安全隐患的.所以通常情况下,消息摘要是用公钥加密后的密文再用单项散列算法散列得到的,这样就可以防止消息被篡改了.
那么完整的流程如下: