传输过中如何保证 数据既能不被篡改,又能不被窃取

发布时间 2023-09-24 12:31:24作者: zhangyukun

公加私解,私加公解

公钥加密私钥解密,只能保证数据不会篡改,但是可以被窃取

私钥加密公钥解密,只能保证数据不会窃取,但是可能被整个替换

签名和信封

数据取摘要,然后私钥加密这种做法可以加快速度,保证数据不被篡改,这种方式叫做签名

数据取摘要,然后公钥加密这种方式可以加快速度,保证数据不被窃取,这种方式叫做信封

例举一个既能保证数据不被窃取又能保证数据不被篡改的加密过程

如果要保证数据既不被窃取又不被修改,我们两者都需要

假设 A 发送数据 给B ,AB 的 分别持有一对公私钥。为了加快加密速度我们可以用对称加密des,des密钥key。

我们看下面的三段结构公式,用简单的逗号分割

A私钥(B公钥加密(key)).B公钥加密(key).des{key,data}

第三段:对称密钥key加密数据data得到的密文,这时候key应该想办法告诉B

第二段:可以不能被窃取,所以用B的公钥加密key,形成第二段,但是存在一个风险,第二段和第3段被整个替换。

第一段:为了保证第2段不会替换,所以我们对第二段用A的私钥加密,这样第二段的内容可以通多第一段来检查。如果第二段很长我们可以考虑取摘要后在加密。

B收到数据后验签和解密的过程

用A公钥对第一段解密和第二段内容(或者第二段的摘要)做对比,如果相等,那么验签通过,说明数据没有被篡改过。这个验签过程不止B能做,任意用户都能做。只要验签能通过,那么这数据一定是A发出来,不可能是别人伪造的(因为需要A的私钥才能生成第一段的签名)。

用B的私钥对第二段的内容做解密,得到des密钥key,这个过程只有B能做,因为必须要B的私钥才能解密第二段的内容。

后面是用key解密第三段的密文了。

思考:

第一段其实是为了保证第二段和第三段不被整个替换(有A公钥的用户完全可以生成任意key,然后生成加密数据),所以第一段可以对第段二签名,或者三段签名,或者直接是对整个二三段签名,效果是一样的。从数据量考虑,第二段最小,不用取摘要数据量也很小,可以考虑直接加密生成第一段。