网络协议 -- HTTPS(1)密码学基础

一、对称加密算法

对称加密算法(英文:Symmetric-key algorithm)是指密码学中的一类加密算法,又称为:私钥加密、共享密钥加密。这类算法在加密和解密时使用相同的密钥(或者这2个密钥可以通过简单的规则相互推算)。
“对称加密算法”比“非对称加密算法”速度更快,但对称加密算法的主要缺点在于要求加密和解密的双方获取相同的密钥,这样只要密钥被泄漏,则密文将不再安全。

网络协议 -- HTTPS(1)密码学基础_第1张图片

【常见的对称加密算法】

  • DES: Data Encryption Standard, 数据加密标准,速度较快,适用于加密大量数据的场合。
  • 3DES: Triple DES, 是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
  • AES: Advanced Encryption Standard, 高级加密标准,是下一代的加密算法标准,速度快,安全级别高。
  • Blowfish: 一个64位分组及可变密钥长度的对称密钥分组密码算法,可用来加密64比特长度的字符串。
  • IDEA: 在DES算法的基础上发展出来的,密钥为128位。
  • RC5
  • RC6

二、非对称加密算法

“非对称加密算法”又称为“公开密钥加密”(英语:public-key cryptography)。也一种密码学算法类型,在这类加密算法中,需要一个“密钥对”,即“私钥”和“公钥”。这两个密钥是数学相关,用某个密钥对的“私钥”加密的信息,只能用该密钥对的“公钥”才能解密。同样,用“公钥”加密的信息,也只能用该密钥对的“私钥”才能解密。

“私钥”一般都是自己保留,不透露给他人;而“公钥”可以公开给他人。

“非对称加密算法”比“对称加密算法”安全性更高,不用担心加密密钥的泄漏,因为“公钥”是公开的,不存在泄漏。但“私钥”还是要保存妥当,不能泄露给他人,因为我们不需要在网络上传输“私钥”,所以“私钥”泄露的可能性会小很多。

但是“非对称加密算法”比“对称加密算法”的运算速度慢很多,一般在数据量比较少的时候采用“非对称加密算法”。

这里写图片描述

如上图,因为李四的“公钥”是公开的,所以张三要给李四发送信息,可以使用李四的“公钥”来加密信息。李四收到密文信息之后就可以使用自己的“私钥”来解密信息。因为其他人没有李四的“私钥”,所以就算密文信息被他人截获也无法解密。

【常见的非对象加密算法】

常见的非对称加密算法有:

  • RSA: 由RSA公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。
  • DSA: Digital Signature Algorithm, 数字签名算法,是一种标准的 DSS(数字签名标准)。
  • ECC: Elliptic Curves Cryptography, 椭圆曲线密码编码学。

非对称算法虽然安全,但运算速度很慢,而对称算法的速度虽快,但在管理和传输密钥方面会存在安全隐患。在实际的操作过程中,我们通常采用的方式是:采用“非对称加密算法”管理“对称加密算法”的密钥,然后用“对称加密算法”加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。

【使用OpenSSL生成RSA公私钥对】

// 生成1024位的私钥
openssl genrsa -out d:\rsa_private.pem 1024

// 生成私钥对应的公钥
openssl rsa -in d:\rsa_private.pem -pubout -out d:\ca_public.pem

git客户端安装文件中的提供的ssh-keygen.exe工具也可以用来生产非对称加密的公私钥对,使用方法可以参考《使用ssh-keygen生成公私钥》.

三、散列函数

散列函数(英文:Hash Function)是将任意长度的的输入转化为定长输出的算法。编程中对散列函数使用非常普遍,如MD5,但并不是所有的散列函数都适用于密码学。密码学的散列函数必须同时具有如下几个额外的特性:

  • 单向性:给定一个散列值,无法反向找到或者构造出生成它的消息。
  • 抗碰撞性:给定一个消息和它的散列值,无法找到具有相同散列值的不同的消息。

散列函数最常用的场合是以紧凑的方式来唯一表示大量数据,如“数字签名”中用到散列函数生成摘要信息等。

【常见的散列函数】

  • MD5:1991年对MD4的改进版本,该算法不可逆。2004年王小云等人证明了完全碰撞,在理论上说明MD5可以被完全攻破,2005年,Lenstra等人证明了现实中的碰撞,展示了两张完全不同的证书却拥有同样的MD5散列值。所以,目前MD5已经不安全了。
  • SHA-1:SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5的后继者,但因为在理论在已经证明SHA1可以被破解,但限制于计算机的计算能力所以SHA-1被破解还是很困难,所以SHA-1的安全性如今被密码学家严重质疑。
  • SHA-256:SHA-224、SHA-256、SHA-384、SHA-512一起并称为SHA-2,至今尚找出对SHA-2有效的破解方法。

如何使用C++代码生成指定数据的MD5散列值,可以参考: MD5

你可能感兴趣的:(☆,网络编程,网络协议)