我们日常说的密码
如果有人问你,密码的作用是什么?大多数人也许会说,我每天登陆账号时候所使用的就是密码。 这里所说的密码,其实具体指的是“口令”即“password”。要求你输入只有你自己知道的一串字符,确认登陆的人不是别人,而是你自己。原理:你的用户ID和对应的口令密码,已经事先设置并存储在后台,每当你需要进行登陆身份认证的时候,输入口令密码将其与后台的用户名与口令进行比较,如果一致,则通过并反馈登陆成功。
密码学对密码的定义
在密码学的领域,密码是指“用于加密或解密的算法”。对于密码的使用,实际上是一种算法的运用,通过某种加密算法,可以将人或机器可识别的数据信息(明文),通过密码算法,变为无法识别的信息(这个过程即为加密,加密后的信息则为密文),而这种加密是可逆的,因此知晓密码的人,通过相同的算法,可以将密文转化为明文(解密),进而解读信息的内容。
参考一下百度对密码的定义 “密码是一种用来混淆的技术,使用者希望将正常的(可识别的)信息转变为无法识别的信息。”
密码学家的工具箱
密码学自公元前约440年出现至今,经历了长远的发展:从最初通过对算法和密钥保密来确保信息的私密性,到公开加密算法而依赖数学问题的复杂性和计算资源的有限性来达到同一目的,围绕密码学已发展出一套完整的密码学“工具箱”。其作用已不仅仅是关注于通信信息的保密性,而是对于信息在不同阶段的保密性、完整性、不可否认性、可追溯性都提供了密码学的解决方案。这些在信息化高速发展的现代社会,已然成为构建安全信息系统的基石。
针对目前信息安全所面临的各类威胁,常用的密码技术工具箱包含:对称密码、公钥密码、单向散列函数、消息认证码以及数字签名5种密码技术:
1.对称密码加密可以保障信息的机密性。
举一个简单的例子,一把锁,两把相同的钥匙,就是对称密码;即:使用相同的密钥来加密和解密。没有密钥的其他人是无法解读信息的真正内容是什么的。常见的两个对称加密标准有DES、AES、SM4。
对称密码无法解决的问题:如何将密码安全的给消息接收方?带外发送当然没问题,但是绝大多数都是需要通过网络在线上传递,但如果我们能安全的传送密钥,为什么不直接安全的传送消息呢?
2.公钥密码除了保障信息的机密性,还可以用来解决密钥的配送问题。
公钥密码总是成对出现,一把自己保管,一把公开,分别称为私钥和公钥。公钥密码具有的特性是:用公钥加密只能用私钥解密,用私钥加密只能用公钥解密。常见的公钥密码算法有RSA、ECC、SM2。
公钥密码无法解决的问题:无法解决中间人伪装的问题。如果通信从开始就被中间人进行劫持,以中间人以自己的公私钥代替双方的公钥,此时通信双方是无法感觉到通信是被监控的。
3.密码散列函数可以保障的信息完整性,用来校验要传递的信息是否被篡改过。
散列函数的名称很多,除了单向散列函数,也被称为消息摘要、哈希函数、杂凑函数。
其结果的名称也有几种:散列值、消息摘要、指纹。
比如通常在下载文件的时候,官方的网站上都会列出来其MD5或者SHA1的值来校验。
单向散列函数的特性包括:
1)任意长度的输入,都产生固定长度的输出;
2)计算速度快;
3)消息不同,散列值不同;
4)不可逆,从计算结果无法还原原消息。
一个有意思的说法是:密码散列函数是完整性的压缩。 比如我们要确认一个1G的文件是否被篡改,导致完整性遭到破坏,我们需要将这个文档与真正的文档进行对比,文档越大对比将消耗的资源会越多!想想散列函数的特性:计算速度快、任一微小的修改将导致散列值不同。我们仅仅对比两个文件的散列值,效果是一致的!(注意:散列函数并不是加密。)
4.消息认证码(Message Authentication Code)
记得公钥密码不能解决的问题吗,中间人攻击。问题的核心是需要证明,消息的发送者和接收者都能够有手段证明消息是由对方发送,而不是其他第三个人。
可以简单的这样理解:消息认证码是一种与加入了密钥加密后的单向散列函数。由于密钥是只有通信双方才知道的,那么就可以认为通过MAC得到的hash可以保障信息的完整性以及同时提供认证的能力。
举个例子,Alice 银行打算提交一个汇款给Bob银行:
1)发送者A与接收者B事先共享密钥;
2)发送者A根据汇款请求消息计算MAC值(使用共享密钥);
3)发送者A将汇款请求消息和MAC值两者发送给接收者B;
4)接收者B根据接收到的汇款请求消息计算MAC值(使用共享密钥);
5)B将自己计算的MAC值与A处接收到的MAC值对比;
6)若一致,则可确认请求确实来自A(认证成功);若不一致,则可以判断消息不是来自A(认证失败)
消息验证码无法解决的问题:
1)向第三方证明:由于A和B均知道共享密钥,因此无法向第三方证明消息确实来自A,因为也可能是B或者其他知道密钥的人;
2)防止否认:由于A和B均知道共享密钥,当需要的时候,无法判断到底是A还是B发送的消息,他们可能同时指责是对方发送了消息。
这两条在业务当中都十分重要,因此将采用数字签名来解决第三方证明和防止否认的问题。
5.数字签名
MAC无法防止否认的原因,在于通信双方使用了同一个密钥来生成MAC,你说是他生成的,他说是你生成的。如果采用工具箱里的第2种工具——公钥密码,来代替共享密钥,就可以解决这个问题。
数字签名对签名密钥和验证密钥进行了区分,验证密钥无法生成签名;此外签名密钥只能由签名人持有,而验证密钥则可以由任何想要验证签名的人持有。这个签名密钥和验证密钥和上面我们提到的公钥密码中的公钥和私钥非常类似吧。
实际上,二者对于公钥密码的运用是“反向的”:
数字证书在PKI体系、SSL/TLS当中被广泛运用,利用了其认证、防止否认的特性进行身份验证和不可否认的功能,也通过和对称加密算法的组合实现传输加密。
本文参考了《图解密码技术》一书对于密码的介绍,在于拓展读者对于密码的认知。