当前位置: 首页 > 原创新闻 > 计算机加密算法有哪些

计算机加密算法有哪些

发表于:2021-01-13 14:56 作者: mtr 阅读数(3161人)

加密算法要解决的主要是信息传输中的加密和解密问题。要假设数据传输过程是不安全的,所有信息都在被窃听的,所以发送端要把信息加密,接收方收到信息之后,要知道如何解密。


一、对称性加密

对称性密码,也叫共享密钥密码,顾名思义,这种加密方式用相同的密钥进行加密和解密。比如用一种最简单的对称加密的方法。都知道信息都可以表示成 0/1 比特序列,也知道相同的两个比特序列做异或运算的结果为 0。那么就可以生成一个长度和原始信息一样的随机比特序列作为密钥,然后用它对原始信息做异或运算,就生成了密文。反之用该密钥对密文做一次异或运算,就可以恢复原始信息。如密钥的长度和原始信息完全一致,如果原始信息很大,密钥也会一样大,而且生成大量真随机比特序列的计算开销也比较大。

当然有很多更复杂优秀的对称加密算法解决了这些问题,比如 Rijndael 算法、三重 DES 算法等等。它们从算法上是无懈可击的,也就是拥有巨大的密钥空间,基本无法暴力破解,而且加密过程相对快速。但是一切对称加密算法的软肋在于密钥的配送。加密和解密用同一个密钥,发送方必须设法把密钥发送给接收方。如果窃听者有能力窃取密文,肯定也可以窃取密钥,那么再无懈可击的算法依然不攻自破。


二、密钥交换算法

密钥一般就是一个很大的数字,算法用这个数加密、解密。问题在于信道是不安全的,所有发出的数据都会被窃取。那有没有一种办法,能够让两个人在众目睽睽之下,光明正大地交换一个秘密,把对称性密钥安全地送到接收方的手中?

Diffie-Hellman 密钥交换算法可以做到。该算法并不是把一个秘密安全地「送给」对方,而是通过一些共享的数字,双方「心中」各自「生成」了一个相同的秘密,而且双方的这个秘密,是第三方窃听者无法生成的。这个算法规则不算复杂,在此之前需要明确一个问题:并不是所有运算都有逆运算。

比如单向散列函数,给一个数字a和一个散列函数f,你可以很快计算出f(a),但是如果给你f(a)和f,推出a是一件基本做不到的事。密钥交换算法之所以看起来如此玄幻,就是利用了这种不可逆的性质。


三、非对称性加密

非对称加密的思路就是把加密密钥和解密密钥分开,公钥用于加密,私钥用于解密。只把公钥传送给对方,然后对方开始发送加密的数据,用私钥就可以解密。至于窃听者,拿到公钥和加密数据也没用,因为只有我手上的私钥才能解密。

非对称性加密的运算速度要比对称性加密慢,所以传输大量数据时,一般不会用公钥直接加密数据,而是加密对称性加密的密钥,传输给对方,然后双方使用对称性加密算法传输数据。

非对称加密算法也无法确定通信双方的身份,依然会遭到中间人攻击。比如 Hack 拦截 Bob 发出的公钥,然后冒充 Bob 的身份给 Alice 发送自己的公钥,那么不知情的 Alice 就会把私密数据用 Hack 的公钥加密,Hack 可以通过私钥解密窃取。

如果双方有一个对称加密方案,希望加密通信,而且不能让别人得到钥匙,那么可以使用 Diffie-Hellman 算法交换密钥。如果希望任何人都可以对信息加密,而只有你能够解密,那么就使用 RSA 非对称加密算法。


四、数字签名

数字签名也是利用了非对称性密钥的特性,但是和公钥加密完全颠倒过来。公布公钥,用你的私钥加密数据,然后把加密的数据公布出去,这就是数字签名。数字签名的作用本来就不是保证数据的机密性,而是证明你的身份,证明这些数据确实是由你本人发出的。

具体流程应该是:

Bob 生成公钥和私钥,然后把公钥公布出去,私钥自己保留。

用私钥加密数据作为签名,然后将数据附带着签名一同发布出去。

Alice 收到数据和签名,需要检查此份数据是否是 Bob 所发出,于是用 Bob 之前发出的公钥尝试解密签名,将收到的数据和签名解密后的结果作对比,如果完全相同,说明数据没被篡改,且确实由 Bob 发出。

为什么 Alice 这么肯定呢,毕竟数据和签名是两部分,都可以被掉包?原因如下:

如果有人修改了数据,那么 Alice 解密签名之后,对比发现二者不一致,察觉出异常。

如果有人替换了签名,那么 Alice 用 Bob 的公钥只能解出一串乱码,显然和数据不一致。

有人企图修改数据,然后将修改之后的数据制成签名,使得 Alice 的对比无法发现不一致;但是一旦解开签名,就不可能再重新生成 Bob 的签名了,因为没有 Bob 的私钥。

数字签名就是验证对方身份的一种方式,但是前提是对方的身份必须是真。这似乎陷入一个死循环,要想确定对方的身份,必须有一个信任的源头,否则的话,再多的流程也只是在转移问题,而不是真正解决问题。


五、公钥证书

证书其实就是公钥 + 签名,由第三方认证机构颁发。引入可信任的第三方,是终结信任循环的一种可行方案。

证书认证的流程大致如下:

1、Bob 去可信任的认证机构证实本人真实身份,并提供自己的公钥。

2、Alice 想跟 Bob 通信,首先向认证机构请求 Bob 的公钥,认证机构会把一张证书(Bob 的公钥以及机构对其公钥的签名)发送给 Alice。

3、Alice 检查签名,确定该公钥确实由这家认证机构发送,中途未被篡改。

4、Alice 通过这个公钥加密数据,开始和 Bob 通信。


认证流程

Bob 向机构提供公钥的过程中,需要提供很多个人信息进行身份验证,比较严格。获得了 Bob 的可信公钥,Alice 和 Bob 之间的通信基于加密算法的保护,是完全无懈可击的。现在的网站大都使用 HTTPS 协议,就是在 HTTP 协议和 TCP 协议之间加了一个 SSL/TLS 安全层。在浏览器和网站服务器完成 TCP 握手后,SSL 协议层也会进行 SSL 握手交换安全参数,其中就包含该网站的证书,以便浏览器验证站点身份。SSL 安全层验证完成之后,上层的 HTTP 协议内容都会被加密,保证数据的安全传输。


六、总结

对称性加密算法使用同一个密钥加密和解密,难以破解,加密速度较快,但是存在密钥配送问题。

Diffie-Hellman 密钥交换算法可以让双方「心有灵犀」,一定程度上解决密钥配送问题,但是无法验证通信方的身份,所以可能受到中间人攻击。

非对称性加密算法生成一对密钥,把加密和解密的工作分开了。

RSA 算法作为经典的非对称加密算法,有两种用途:如果用于加密,可以把公钥发布出去用于加密,只有自己的私钥可以解密,保证了数据的机密性;如果用于数字签名,把公钥发布出去后,用私钥加密数据作为签名,以证明该数据由私钥持有者所发送。但是无论那种用法,涉及公钥的发布,都无法避免中间人攻击。

公钥证书就是公钥 + 签名,由可信任的第三方认证机构颁发。由于正规浏览器都预装了可信的认证机构的公钥,所以可以有效防止中间人攻击。

HTTPS 协议中的 SSL/TLS 安全层会组合使用以上几种加密方式,所以说不要安装非正规的浏览器,不要安装未知来源的证书。

密码技术只是安全的一部分,即便是通过正规机构认证的 HTTPS 站点,也不意味着可信任,只能说明其数据传输是安全的。技术永远不可能真正保护你,最重要的还是得提高个人的安全防范意识,谢谢观看。

大家都在学

Wireshark数据抓包分析之UDP协议

基于栈溢出的攻击分析

DoraBox之SSRF及XXE