加签验签的实际意义是什么?真的能保证安全传输么?
加签是为了防止传输内容被篡改,那么想改内容第一步肯定是解密拿到报文明文后进行修改。
以下是某帖子写的不加签的风险:
中间人 Actor 截取了 C 的公钥,他把自己的公钥发给了 A 公司,A 误以为这就是 C 公司的公钥。A 在发起转账时,用 Actor 的公钥,对请求报文加密,加密报文到在传输过程,Actor 又截取了,这时候,他用自己的私钥解密,然后修改了报文(给自己转一个亿),再用 C 的公钥加密,发给 C 公司,C 公司收到报文后,继续用自己的私钥解密。最后是不是 A 公司的转账账户损失了一个亿呢~
以及加签是如何解决的:
假设 Actor 截取到 A 的公钥后,随后也截取了到 A 发往 C 的报文。他截取到报文后,第一件想做的事肯定是修改报文内容。但是如果单单修改原始报文是不可以的,因为发过去 C 公司肯定验签不过啦。但是呢,数字签名似乎解不开,因为消息摘要算法(hash 算法)无法逆向解开的,只起验证的作用呢….
如果将签名内容直接换成修改后的报文生成的签名呢?常用的生成签名的 hash 算法只有那么几种,不考虑极端情况是不是可以试出来生成签名的算法呢?
另外这个问题更好的解决办法似乎是用两套公钥和私钥,公钥发给对方,私钥自己留着,就不存在传输被截取的风险了吧,如果不能解密,就更不能修改,那么加签验签是不是就很鸡肋了?
百度出来的东西大部分都是一个原创一堆 copy,只能来论坛求助了,有看到的大牛,给解答下,谢谢~
推荐文章: