前言

一直对 密码学 对称非对称加密 公钥私钥 HTTPS 数字证书 hash算法hash表 等涉及密码学概念很模糊,随着遇到的问题越来越多,我知道以后是绕不过这些问题的,正好我的个人博客网站遇到了SSL认证的问题,所以索性花点时间,把这方面的知识点整理一下,搞清楚大多数名词的定义和它们之间的关系。

两大加密体系

对称密钥密码体系和非对称加密体系

加密体系 特点 常见的密钥加密算法
对称密钥加密体系 symmetric key encryption scheme (单钥加密) 加密和解密双方只有一个共同的私钥 DES (Data Entryption Standard)
非对称密钥加密体系 asymmetric key encryption scheme (双钥加密) 有两把钥匙:公钥和私钥。 RSA ( Rivest-Shamir-Adleman ) 两个算法都产生于20世纪70年代

非对称密钥加密体系,公钥与私钥详解

参考资料:

asymmetric key encryption scheme

两大功能:

认证 Authentication

the public key verifies that a holder of the paired private key sent the message

加密 Encryption

only the paired private key holder can decrypt the message encrypted with the public key

重点:

  • 私钥是私有的,只属于个人,公钥可以由私钥管理者授权给他人
  • 不存在两个一模一样的钥匙对,也很难甚至不可能通过公钥推出私钥
  • Either one of the two keys can encrypt data, and the other key can decrypt that data.
  • 为了保护公钥 ,第三方认证机构运用而生,其主要负责对公钥和用户身份进行加密,生成 数字证书

其他概念理解

信息指纹,hash,hash表

参考:

信息指纹,顾名思义,就是一段信息的ID,与身份证号类似,信息指纹具有如下几个性质:

  1. 信息指纹是一串 定长 的数字
  2. 信息指纹由 hash算法 产生,例如 MD5SHA-1
  3. 信息指纹具有 不可逆性
  4. 信息指纹无冲突

hash算法

哈希(Hash)是一种数据编码方式,常见的hash算法有 MD5SHA-1。hash算法将大尺寸的数据(如一句话,一张图片,一段音乐、一个视频等)浓缩到一个定长的数字中,从而方便地实现数据匹配·查找的功能。

hash算法也是密码学的基础,其最重要的两个特性是:不可逆无冲突

不可逆:已知 x 的 hash 值 hash(x), 无法通过 hash(x) 逆向求出 x

无冲突:不存在 两个不同的值 x , y 使得hash(x) == hash(y)

hash算法的应用

  1. 隐私保护

    周鸿伟说他的360浏览器采用了 hash 算法,能够在保护用户隐私的前提下,识别恶意网址,其是就是检测到了恶意网址,然后将网址hash一下,上传到服务器中,标记这个hash值是一个恶意网址,而避免了用户的浏览记录被泄露。

  2. 数据快速匹配和查找

    能够将大文件hash成一个定长的字符串,实现文件的快速匹配索引。

hash 与 MD5,SHA-1 的关系

MD5 和 SHA-1 是最常见的两种 hash 算法。

山东大学的 王小云 教授证明了 MD5 和 SHA-1 两个 hash 算法 存在漏洞。

hash 与 加密 的区别

哈希(Hash)是将目标文本转换成具有 定长 的、不可逆杂凑字符串(或叫做 消息摘要 ),而加密(Encrypt)是将目标文本转换成具有 不定长 的、可逆密文

hash 与 加密 的选择

如果被保护数据仅仅用作 比较验证,在以后不需要还原成明文形式,则使用哈希;如果被保护数据在以后需要被还原成明文,则需要使用加密。

数字证书

参考资料:

wiki

数字证书用到了 非对称加密 中 Authentication 的功能,其对用户的数据起到了认证作用。

In a public key signature system, a person can combine a message with a private key to create a short digital signature on the message. Anyone with the corresponding public key can combine a message, a putative digital signature on it, and the known public key to verify whether the signature was valid, i.e. made by the owner of the corresponding private key. Changing the message, even replacing a single letter, will cause verification to fail. In a secure signature system, it is computationally infeasible for anyone who does not know the private key to deduce it from the public key or any number of signatures, or to find a valid signature on any message for which a signature has not hitherto been seen. Thus the authenticity of a message can be demonstrated by the signature, provided the owner of the private key keeps the private key secret.