之前听吴军的《谷歌方法论》讲科技界跟工业界应当在边界内行事-------明确自己所处行业的边界、明确自己所处的各生活关系的界限并在边界处设防,才可规避可预见的风险和意外。对于软件开发者来说也要明确,任何计算机技术也是有边界极限的,我们要认识到其边界极限在哪里,才能更快地看清楚问题的本质。
密码技术
对于密码技术而言,首先我们要认识到密码技术的边界极限在哪里。密码只是信息安全的一部分,它的目的很明确就是为了解决信息安全问题。不同的密码技术算法解决不同的信息安全问题,但没有一种技术能解决所有信息安全问题。
信息安全有四类特性:
- 机密性:为了防止信息被窃听,对应的密码技术有对称密码和非对称密码。
- 完整性:为了防止信息被篡改,对应的密码技术有单向散列函数、消息认证码、数字签名。
- 认证:为了防止攻击者伪装成真正的发送者,对应的密码技术有消息认证码和数字签名。
- 不可否认性:为了防止发送者事后否认自己没有做过,对应的密码技术为数字签名。
为了尽可能的解决不同的信息安全特性,我们可能需要组合使用多种密码技术。信息安全面临的威胁点和所对应的密码技术之间的关系可用下图来表示:
以上主要从类别分类包括6种密码技术:对称密码、非对称密码、单向散列函数、消息认证码、数字签名、伪随机数生成器。如果看具体的算法,那就包括 AES、RSA、MD5、SHA1、SHA256、HMAC 等。有些人还将 BASE64 也理解为一种加解密的密码技术,但BASE64 只是一种编码方式,和 ASCII 和 UTF-8 编码的本质上一样,主要用途就是将不可打印的二进制数据编码为可打印的字符串,因为它不解决信息安全四个特性中的任何一种。大家都知道高性能和高安全是很难兼顾,鱼和熊掌不可兼得,我们能做的是尽力根据自己的业务找到平衡点。下面分别介绍一下这些技术和他们对应的具体算法。
对称密码
也称为共享密钥密码、私钥密码,是指用相同的密钥加密和解密时的方