书接上回:【密码学】RSA的攻与防_1.0_Mitch311的博客-CSDN博客
目录
考虑一种简化场景,假设A需要发送同一条消息m给B、C和D。三位接收者的公钥分别为(N1,3)、(N2,3)和(N3,3),即公钥指数都为3,公钥模数各不相同。消息不填充,A直接用其他三人的公钥加密并发出三段密文c1,c2,c3:
c1=𝑚3 mod N1m^3 mod N1, c2=𝑚3 mod N2m^3 mod N2,c3=𝑚3 mod N3m^3 mod N3
这时E偷偷记下三段密文,标记M=m3,如果E可以恢复M,开三次方根自然就得到明文m。这里求解M的等同问题是:已知某个数分别除以三个数的余数,而且这三个数两两互素,所以E只要套用中国余数定理的解法,算出M,然后求得其立方根就得到了明文m,攻击成功。
为了避免广播攻击,我们必须使用大一些的公钥指数e,同时应用随机填充。现在通用的公钥指数e为65536 (2^16+1),可以兼顾消息加密或签名验证运算的效率和安全性。
加入身份认证,就可以有效防止中间人攻击。
比如好友通过微信向你借钱,有两种可能,要么他的微信号被盗了,要么就是他向你借钱。这个时候你可以问他一个只有你们两个知道的事情,如果他可以答的上来,那么他很有可能就是你的好友。这个例子就说明,如果双方有共享的私密信息,只有你俩知道,别人都不知道,那么就可以以此为基础,进行身份认证,确立信任关系。
但是这种方案有个缺点就是不适合公网环境,只能是双方互相了解,才行得通。对于通讯双方本来就互不认识的情况下,怎么建立信任关系呢?
比如C2C模式的电商就是采用的这个模式,电商平台作为公证人,让买家和卖家建立某种关系。TLS采用的就是这种模式来做身份认证,其中的公证人由CA担任【数字证书认证机构】。所以要采用有数字证书的密钥交换,而不是裸发公钥给客户端。