一、各种概念、技术和用途
主要概念:加密解密算法、消息摘要、数字签名、数字证书
1、加密解密算法
- 对称加密算法:DES、TripleDES/3DES、AES|RC4、RC5|
- 非对称加密算法:DSA、RSA、ECC
2、消息摘要
- 消息摘要算法包含MD、SHA和MAC共3大系列,常用于验证数据的完整性,是数字签名算法的核心算法;
- MAC算法是综合了MD和SHA算法;主要包括HmacMD5、HmacSHA1、HmacSHA256、HmacSHA384、HmacSHA512
- MAC算法结合了MD5和SHA算法的优势,并加入密钥的支持,是一种更为安全的消息摘要算法。
- 消息摘要算法,只能防止数据被纂改,但是无法防抵赖;
3、数字签名
- 数字签名算法是非对称加密算法和消息摘要算法的结合体。
- 数字签名算法在实际运用时,通常是先使用消息摘要算法对原始消息做摘要处理,然后再使用私钥对摘要值做签名处理;
- 签名算法受私钥控制,且有签名者保密;
- 验证算法受公钥控制,且对外公开。
- 签名者任何时候都无法否认自己曾经签发的数字签名;
- 信息接收者能够验证和确认收到的数字签名,任何人无法伪造信息发送者的数字签名;
- 数字签名算法,如:SHA1WithRSA、SHA256WithRSA
4、数字证书
- 密钥很可能会以二进制方式存储于文件中,由程序来读取。
- X509EncodedKeySpec用于构建公钥规范;PKCS8EncodedKeySpec用于构建私钥规范;需要通过这两个类将密钥文件中的字节数组读出转换为密钥对象;
- 把密钥库看做私钥相关操作的入口,数字证书则是公钥相关操作的入口;
- 通常用Base64来对密钥文件进行编码,方便阅读
- 数字证书,主要是用来证明公钥就是某个机构的;以HTTPS为例,目前很多网站会给我们公钥,我们加密我们的数据之后,将数据发给他们。如果我们拿到的公钥是非法机构的话,那么非法机构就可以获取我们的信息;因此,给我们公钥相当于给了我们一把锁,但是我们不知道持有钥匙的是好人还是坏人;但是如果这把锁是CA给的,那我们就信任持有开锁钥匙的一定是个好人,如果我们被骗了,那就找CA的麻烦;
5、Base64
在计算机的世界里,密钥就是一段二进制的数据。二进制形式虽然安全性很高,但是却大大降低了它的可读性。
通常是使用Base64编码对密钥文件做一下编码,增加可读性;
二、各种疑问
Q1:数据完整性机制,譬如SHA和MD5,跟防纂改的数字签名有什么关系?
消息摘要===>防纂改
数字签名===>防纂改 + 防伪造防抵赖
Q2:用Hmac来做防纂改,和直接用MD5或者SHA来做防纂改,有什么区别?
Hmac使用起来复杂一点,因为需要密钥,但更安全一点;
因为现在各种彩虹表,已经使得MD5或者SHA变得可以反解了~
Q3:数字签名和加密解密的区别?
数字签名是对已有的数据做签名,生成1个额外的签名出来;但是加密算法,是把明文变成密文了;
在网络上传输,如果只有数字签名,表现就是请求体里面加了1个签名的字段,但是请求的其他参数还是明文发送的;
但是如果是加密的话,就是对所有的请求参数都加密,请求就变成密文传输了。
加密解密:私钥加密,公钥解密。
数字签名:私钥签名,公钥验签。
Q3.1:为什么不能用公钥加密,私钥解密?
相对于”私钥加密,公钥解密“的实现,RSA提供了另外一种方式”公钥加密,私钥解密“
但是,用公钥加密数据的方式是否可取呢?
公钥是通过甲方发送给乙方的,其在传递过程中很有可能被截获,也就是说窃听者很有可能获得公钥;
如果窃听者获得了公钥,向甲方发送数据,甲方是无法辨别消息的真伪的;
因此,虽然可以使用公钥对数据加密,但这种方式还是会存在一定的安全隐患;
如果要建立更安全的加密消息传递协议,就需要甲乙两房构建两套非对称加密算法密钥;
仅遵循”私钥加密,公钥解密“的方式进行加密消息传递。
参考资料
《Java加密与解密的艺术》
网友评论