RSA加解密及签名学习笔记

  最近换了工作,由于新公司是做个人和企业征信业务的,所以对数据的隐私性看的非常重要,所有涉及隐私的数据一律都要进行加密进行传输。
  那么问题来了,对我要做的工作,就是要实现我们接口自动化,免不了要接触加密-签名-解密-验签等一系列过程。这时候就觉得大学真的白学密码学了。。。

  不过好在,重新捡起来也很快,那我就把最近的学习结果整理一下,方便后续温故知新。

 RSA是一种非对称的加密算法,可以用于解决数据在传输过程中的完整性和私密性。即签名和加解密。
 RSA主要涉及的概念有:公钥、私钥,签名、验签。
  
以下是我个人的一些理解。

必知必念的几个概念

  • 公钥:公开透明
  • 私钥:私密不公开
  • 签名:防假冒抵赖
  • 加密:防信息泄露
  • 关系:公钥和私钥是成对存在,可以互相用来加解密

原理图

来自:shu_lin
RSA加解密及签名学习笔记

示例说明:

假如有,A、B、C三个人,其公钥私钥对分别为[A1,A2],[B1,B2],[C1,C2],即下标1为私钥,下标2为公钥。

利用公钥私钥的自身特点,上述描述中可知A、B、C三人分别掌握的信息为:
A知晓A1,A2,B2,C2;
B知晓A2,B1,B2,C2;
C知晓A2,B2,C1,C2。

利用公钥和私钥可以互相加解密,可知:
A:
A1加密,仅限A2可以用来解密,由于A1仅限A知道,故该项操作仅限A能进行,并且由于A2公开,故大家都可以用A2来解密A1加密后的数据,因此如果A2能解密,那么该数据一定是A1加密的,即是A操作的。 ==> (通信签名:防抵赖假冒)

A2加密,仅限A1可以用来解密,由于A1仅限A知道,故该操作是自己给自己加密,然后仅限自己解密,用作一般的加密,非通信加密。

B2加密,仅限B1可以用来解密,由于B1仅限B知道,故该操作可以用来A发给B的通信数据加密。 ==> (通信加密:防信息泄露)

C2加密,仅限C1可以用来解密,由于C1仅限C知道,故该操作可以用来A发给C的通信数据加密。 ==> (通信加密:防信息泄露)

B:
A2加密,仅限A1可以用来解密,由于A1仅限A知道,故该操作可以用来B发给A的通信数据加密。 ==> (通信加密:防信息泄露)

B1加密,仅限B2可以用来解密,由于B1仅限B知道,故该项操作仅限B能进行,并且由于B2公开,故大家都可以用B2来解密B1加密后的数据,因此如果B2能解密,那么该数据一定是B1加密的,即是B操作的。 ==> (通信签名:防抵赖假冒)

B2加密,仅限B1可以用来解密,由于B1仅限C知道,故该操作是自己给自己加密,然后仅限自己解密,用作一般的加密,非通信加密。

C2加密,仅限C1可以用来解密,由于C1仅限C知道,故该操作可以用来A发给C的通信数据加密。 ==> (通信加密:防信息泄露)

C:
A2加密,仅限A1可以用来解密,由于A1仅限A知道,故该操作可以用来B发给A的通信数据加密。 ==> (通信加密:防信息泄露)

B2加密,仅限B1可以用来解密,由于B1仅限B知道,故该操作可以用来A发给B的通信数据加密。 ==> (通信加密:防信息泄露)

C1加密,仅限C2可以用来解密,由于C1仅限C知道,故该项操作仅限C能进行,并且由于C2公开,故大家都可以用C2来解密C1加密后的数据,因此如果C2能解密,那么该数据一定是C1加密的,即是C操作的。 ==> (通信签名:防抵赖假冒)

C2加密,仅限C1可以用来解密,由于C1仅限C知道,故该操作是自己给自己加密,然后仅限自己解密,用作一般的加密,非通信加密。

ABC:
如果A作为广播者,需要播报广播信息,那么为了防信息抵赖和假冒,A需要用A1给广播信息签名,作为接收方的B和C可以通过A2来验证收到的广播是否为A发出。(签名

如果A作为注册中心,需要为所有用户支持保密及注册服务,那么所有用户为了防止信息泄露,需要将注册信息用A2加密后发送给A,保证该信息仅限注册中心用A1解密后查看。(通信加密

如果A作为注册中心,需要为所有用户支持保密、身份验证及注册服务,那么作为用户B需要对发送数据先用自身私钥B1签名,然后用A2加密,最后发送给A,保证A能在A1解密数据后再用B2验证用户B的身份。(通信签名加密

因此,在数据通信过程中:

1.用私钥加密后,仅限可以用对应公钥解密,可以用来签名,防数据抵赖假冒,因有且仅有的一个私钥拥有者即为签名方。

2.用公钥加密后,仅限可以用对应私钥解密,可以给该私钥拥有者发送数据,用作通信数据加密,这样即使别人窃取了通信数据,因为无私钥,不能解密查看通信数据。