应用密码学:原理、分析与Python实现
上QQ阅读APP看书,第一时间看更新

1.2.4 对称/非对称加密

本书将会讨论对称密码学(Symmetric Cryptography)和非对称密码学(Asymmetric Cryptography),非对称密码学也称公开密钥密码学(Public-Key Cryptography),简称公钥密码学。

在古典密码学中,收发双方都是秘密地选择密钥,密钥绝不能被公开。然后根据选择的密码算法,规定加密和解密过程,并且加密过程和解密过程是相同的。因此如果攻击者知道了密钥和加密算法,就容易解密信息,从而泄露信息。因为加密和解密过程是相同的,所以被称为对称加密算法。

对称加密算法有以下几个特点。

加密和解密使用的是同一个密钥。

加密和解密的速度比较快。

密钥交换的渠道不安全,容易被攻击。可能会产生为了保护密钥不被泄露,而用密码系统加密密钥的无解事件。

为了安全,可能需要长密钥来保护信息,这对密钥的管理者提出了非常高的要求,密钥管理起来非常困难。因此在网络通信中,较少使用对称加密算法。

对称加密算法就好比Alice和Bob都有一串相同的钥匙。Alice把信息放在一个保险柜里,然后锁上。如果Bob想要知道这个信息,就需要用钥匙打开这个保险柜。但是让Alice和Bob拥有一串相同的钥匙就比较麻烦。当面交换和确认固然是个好办法,但是次数多了就很麻烦。放在保险柜里给对方?但没有钥匙就无法打开保险柜。而且用户一旦不止两个人,需要使用的钥匙对就多了,钥匙分配起来就比较麻烦。并且还有一点,就是拿Bob的钥匙开保险柜的人,不能确定就是Bob本人,也有可能是Eve拿他的钥匙开的,这没办法验证。

当然,利用计算机可以在一定程度上克服这些困难,诸如DES和AES就是对称密码学的巅峰之作。

为了解决上述难题,人们发明了非对称密码学。非对称密码学使得安全性得到了巨大提高。它将密钥一分为二,拆分成了公钥(Public Key)和私钥(Private Key)两组密钥。顾名思义,公钥可以被任何人知道,私钥则不能被泄露,只有接收方Bob知道。任何人都可以使用公钥加密信息,但只有拥有私钥的Bob才能解密信息。这就是非对称加密。比如, Alice向银行请求公钥,银行将公钥发送给Alice,Alice使用公钥对信息加密,那么只有私钥的持有人——银行(Bob)才能对Alice的信息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,这就解决了密钥交换的问题,因此安全性大大提高。

对称加密算法和公钥加密算法所要求的密钥长度完全不同。对攻击方来说,他极有可能通过穷举找出密钥,因此攻击方肯定对密钥空间的大小感兴趣。大多数密码系统的密钥空间大小是固定的。部分对称算法(如AES)会根据用户需求来提供相应的模式,每种模式会对应不同的密钥长度。而公钥加密算法(如RSA)也可以根据需求,提供不同的密钥长度。目前,对于一个只拥有64位密钥长度的密码系统,如果靠穷举攻击,在现代计算机的帮助下,几天即可破解。而对于拥有128位密钥长度的密码系统,只靠穷举攻击,则需要几十年的时间。破解一个256位密钥的加密算法,则需要成千上万年。