RSA非对称加密介绍

非对称加密算法可能是世界上最重要的算法,它是当今电子商务等领域的基石。简而言之,非对称加密就是指加密公钥和解密密钥是不同的,而且加密公钥和解密密钥是成对出现。非对称加密又叫公钥加密,也就是说成对的密钥,其中一个是对外公开的,所有人都可以获得,人们称之为公钥;而与之相对应的称为私钥,只有这对密钥的生成者才能拥有。

公钥私钥具有以下重要特性:

对于一个私钥,有且只有一个与之对应的公钥。公钥公开给任何人,私钥通常是只有生成者拥有。公/私钥通常是1024位或者2048位,越长安全系数越高,但是解密越困难。尽管拿到了公钥,如果没有私钥,要想解密那几乎是不可能的,至少现在在世界上还没有人公开出来说成功解密的。

非对称加密算法如此强大可靠,却有一个弊端,就是加解密比较耗时。因此,在实际使用中,往往与对称加密和摘要算法结合使用。对称加密很好理解,本篇文章不细读对称加密。我们再来看一下摘要算法。

RSA非对称加密典型用法

  • 防止中间人***:将明文通过接收人的公钥加密,传输给接收人,因为只有接收人拥有对应的私钥,别人不可能拥有或者不可能通过公钥推算出私钥,所以传输过程中无法被中间人截获。只有拥有私钥的接收人才能解密得到原文。此用法通常用于交换对称密钥。比如,在登录时在客户端生成随机密钥,然后使用公钥加密传输到服务端,服务端使用私钥解密得到随机密钥,此密钥就用于后续的AES加密/解密使用。

  • 身份验证和防止篡改:通常会将所有的参数按照某种规则拼接并排序,然后使用某种算法加密生成摘要,然后在服务端使用同样的规则生成摘要,比较两个摘要以确定身份和是否被篡改过。

摘要算法

上面提到摘要算法,摘要算法是指可以将任意长度的文本,通过一个算法,得到一个固定长度的文本。这里文本不一定只是文本,可以是字节数据。所以摘要算法可以将很长的内容变成一个固定长度的东西。

摘要算法具有以下重要特性:

  • 只要源内容不同,计算得到的结果,必然不同。

  • 无法通过摘要算法可逆拿到源内容

典型的摘要算法有大名鼎鼎的MD5SHA。摘要算法主要用于比对信息源是否一致,因为只要源内容发生变化,得到的摘要必然不同;而且通常结果要比源短很多,所以称为“摘要信息”。

数字签名

理解了非对称加密和摘要算法,来看一下数字签名,实际上数字签名就是两者结合。现在假设我们需要传输好几个参数,如何确定接口中所传输的参数值是否被篡改过?这时候数字签名就可以解决这个问题了。

常用的解决办法:将参数按照指定的规则拼接(拼接规则要与服务端协商统一),然后排序(保证服务端的顺序与客户端的一致),然后通过摘要算法如MD5得到摘要信息,再通过AES加密摘要信息,服务端按照同样的规则,生成摘要,然后比对是否一致。

温馨提示:专业叫数字签名,实际工作中大家都叫加盐防篡改。

CA签发证书

实际上,数字证书就是通过数字签名实现的数字化的证书。在一般的证书组成部分中还加入了其他的信息,比如证书有效期,公司组织名称等,过了有效期需要重新签发。

跟现实生活中的签发机构一样,数字证书的签发机构也有若干,并有不同的用处。比如苹果公司就可以签发跟苹果公司有关的证书,而跟web访问有关的证书则是由几家全世界公认的机构进行签发。这些签发机构称为CACertificate Authority)。

对于被签发人,通常都是企业或开发者。对于需要搭建基于SSL的网站,那么需要从几家国际公认的CA去申请证书;对如需要开发iOS的应用程序,需要从苹果公司获得相关的证书。这些申请通常是企业或者开发者个人提交给CA的。当然申请所需要的材料、资质和费用都各不相同,是由这些CA制定的,比如苹果要求$99或者$299的费用。

web应用相关的SSL证书的验证方通常是浏览器;iOS各种证书的验证方是iOS设备。我们之所以必须从CA处申请证书,就是因为CA已经将整个验证过程规定好了。