对称加密和非对称加密
接下来我就给大家好好介绍下,我是如何从申请API Key学到Https协议再到加密算法的。
首先介绍Htttp,Http是一种超本文协议,它是一个在计算机世界里专门在两点之间传输文字、图片、音频等超文本数据的约定和规范。
那Https呢?比Http多了一个“S”,这个“S”指的是“Secure”,安全。所以Https就相当于在Http协议上加了安全,所以我们也可以给Https个定义。
Https协议提供了3个关键指标:
加密,Https通过对数据加密来使用户在浏览网站时,没人能够监听他和网站之间的数据交换。
数据一致性,数据在传输过程中不会被窃听者修改,用户发送的数据会完整传输到服务端,保证用户发送的是什么,服务器接受到的就是什么。
身份验证,确认“你就是你”,确认对方的真实身份。
前面我也说了,Https使用的是TLS或SSL对通信协议进行加密的,那什么是TLS/SSL呢?
对称加密
对称算法看起来好像解决了信息加密的问题,传输的加密信息只有拥有密钥的人才能解密,但是问题来了?如何保证这个密钥的传输是加密的呢?所以这就需要非对称加密了
非对称加密
一般AB相互传输数据的时候,各会有一对公钥私钥。公钥全部分发到网上,但是私钥会各自保管好。
A给B传输信息,用B的公钥对信息进行加密,这样只有B才能用自己的私钥进行解密;B再给A传输信息,用A的公钥对信息进行加密,这样也就只有A进行解密。这样也就解决了对称加密中密钥的传输如何保证机密性的问题。
TLS里有很多中对称加密的算法,目前常用的是AES和ChaCha20;
非对称加密算法的设计要比对称加密算法难很多,在TLS里只有很少的几种,最著名的就是RSA,我对这个名词都很有印象,大学课本提过。
RSA
RSA公钥加密算法是素数的一个典型应用。素数我想大家应该都知道,也就是质数,只能被1和自身整除。
RSA的安全性基于“整数分解”的数学难题,使用两个超大素数的乘积作为生成密钥的材料,想要从公钥推出私钥是非常困难的。
对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解越困难,RSA算法越可靠。
假如有人找到一种快速因数分解的算法的话,那么用RSA加密信息的可靠性就会极度下降,但现实中,只有非常短的RSA钥匙才会被强力方式攻破。到目前为止,世界上还没有任何可靠攻击RSA算法的方式。只要其钥匙的长度足够长,那么RSA加密的信息实际上是不会被攻破的。
那么RSA算法是如何用素数进行加密解密计算的呢?我附上一张推理过程的图吧,敲字有点麻烦。忽略我字不咋地哈~
其中因为C^D和M^E的值计算出来特别大,所以非对称加密解密的速度非常慢。
那么是不是可以将对称加密和非对称加密结合起来,两者相互取长补短,这样既可以高效的加密解密,又可以安全交换密钥。
以上就是我从项目中设计申请API Key延伸到加密算法的学习历程,学习过程中两个特别深的感悟:
-
大学没好好学习啊,这些好像大学课本上都提过 数学踏马的可真牛逼牛逼牛逼!(其中非对称算法里还有一个ECC,它是基于“椭圆曲线离散对数”的难题,使用特定的曲线方程和基点生成公钥和私钥。比特币也是选择ECC作为加密算法的,有一说一,小编现在是真不太看得懂,涉及到数学基础知识有点高,希望我有朝一日可以看的明白)