密钥交换(从对称加密到量子加密)
密钥(secret key),顾名思义,加解密所使用的“钥匙”,我喜欢把任意的功能叫做“函数”,密钥其实就是函数对应的“参数”。
Encrypt(sKey);//加密
Decrypt(sKey);//解密
这种做法加密和解密都用同一个密钥,叫做“对称加密”,这种方式有个问题:密钥一旦泄漏,则功能必然崩塌,加密毫无意义。
为了解决这个问题,推出非对称加密,密钥有两个,一个是私钥(private key),另一个是公钥(public key),这个加密算法的一个基础是由互质的两个数(p,q)的乘积构成的一个大数N,这个N可以对外开放,目前的计算能力,几乎不可能实现N的因数分解,所以非对称加密暂时是安全的。
非对称加密相比于对称加密,性能要低一些,所以一般的做法是:在通信的双方间,用RSA加密算法,传播一个双方确认的对称加密算法,最终采用对称加密算法实现加解密,具体可以看一下Diffie-Hellman密钥交换。
量子计算发展起来后,可以很容易的实现因数分解,所以非对称加密算法便不再安全。根据量子力学的特点,产生了一种新的密钥交换方式,量子密钥分发协议,BB84协议。主要原理是一个传统位可以用光子的两种方式表达,这样窃听者便不知道具体是哪一种。最终通信的两者把采用相同测量基的位保留下来,便形成最终的密钥。