通信安全:哈希、加密、证书、签名、密钥协商、ECDH、TLS、DTLS

通信风险

  1. 窃听风险(eavesdropping):第三方可以获知通信内容 。
  2. 篡改风险(tampering):第三方可以修改通信内容 。
  3. 冒充风险(pretending):第三方可以冒充他人身份参与通信 。
风险防范
  1. 信息加密传输,第三方无法窃听 。
  2. 增加校验机制,一旦被篡改,通信双方会立刻发现 。
  3. 配备身份证书,防止身份被冒充 。
?哈希(Hash)哈希也叫散列,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值,也叫摘要(Digest) 。
通信安全:哈希、加密、证书、签名、密钥协商、ECDH、TLS、DTLS

文章插图
哈希是一种压缩映射,通常不可逆
这种转换是一种压缩映射 。也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值,但如果输出的位数足够,不同输入散列成相同输出的概率非常非常小 。
简单的说,散列就是一种将任意长度的消息压缩到某一固定长度的消息摘要的过程 。
散列是不可逆的,也就是无法通过输出还原输入,此特性常被用于密码保存 。
SHA-512、MD5等都是著名的散列函数,MD5生成的散列码是128位,甚至MD5就是哈希的同名词,你可以通过网站:https://passwordsgenerator.net/sha512-hash-generator/ 在线计算哈希 。
散列有什么用?
  1. 散列可用于保存密码,明文保存密码是危险的 。通常我们把密码哈希加密之后保存,这样即使泄漏了密码,因为是散列后的值,也没有办法推导出密码明文(字典攻击难以破解) 。验证的时候,只需要对密码(明文)做同样的散列,对比散列后的输出和保存的密码散列值,就可以验证同一性 。
  2. 可用于验证下载文件的完整性以及防篡改,比如网站提供安装包的时候,通常也同时提供md5值,这样用户下载之后,可以重算安装包的md5值,如果一致,则证明下载到本地的安装包跟网站提供的安装包是一致的,网络传输过程中没有出错 。
加密加密就是把明文变成密文的过程,解密就是反方向把密文变成明文 。
比如著名的凯撒密码,就是把每个字对应到另一个,这样的话,只要有密码本,就能对照完成加解密 。比如最简单的,对于英文26个字母,每个字母右移3个,abc变成def,这也是一种加密,当然这种加密很简单,很容易被破译 。
而诸如AES(高级加密标准)、3DES(三重数据加密算法)则被公认为很难破解,不过山东大学女教授王小云很厉害,破解了MD5和SHA-1,迫使加密标准升级,最终当上了院士 。
对称加密
对称加密就是加解密的密钥是一样的,优点是快,这也是传统的加密方式,像AES、3DES都是对称加密 。
非对称加密
非对称加密用于加解密的密钥不一样,有2个密钥,公钥和私钥,公钥可以公开,私钥妥善保管 。RSA、ECC(椭圆曲线加密算法)、DH(密钥交换算法)这些都是非对称加密 。
非对称加密很慢,有多慢?相比对称加密慢1000倍,因为慢,所以它常用于密钥协商(Handshake),协商出会话密钥后,再用对称密钥加密通信数据 。
1976年,Whitfield Diffie和Martin Hellman首次提出了非对称加密的概念,该算法被称为Diffie-Hellman密钥交换 。然后在1978年,麻省理工学院的Ron Rivest,Adi Shamir和Leonard Adleman发表了RSA 算法 。这些都可以被视为非对称加密的基础 。
非对称加密也称为公钥基础结构,又称PKI 。非对称加密的提出是密码学上的一次革命,影响深远 。
非对称加密算法用私钥加密,用公钥解密,或者用公钥加密,用私钥解密 。
证书证书就是为了证明我是我,比如你要访问中国银行网站,但中行官网如何证明它是中行官网呢?答案就是数字证书 。
CA是数字证书中心,服务器需要找CA做认证,让CA给自己颁布数字证书,数字证书内一般包含服务的一些信息、以及服务器的公钥,通过CA的私钥加密后,产生的数字证书,因为CA的权威性,且它的公钥天下皆知,所以,如果你能用CA的公钥解开证书,那便可证明该证书一定是CA颁发的,要不然它不会有CA的私钥,也便没法产生可用CA公钥解密的证书 。
所以,由此可见,数字证书用到了非对称加密 。
数字签名日常生活中也有签名,每个人的笔迹是不一样的,你刷卡消费后在账单签上大名,服务员校验过之后保存下来,你哪天赖账,便可以有签名为证,因为别人写的字跟你的笔迹终有差别 。
那数字签名是什么呢?比如a发一封email,接收方怎么证明这封信是a写的?


推荐阅读