日期:2014-05-17  浏览次数:20872 次

面试时遇到的问题,我实在想不出来,求教
面试时,面试官问我,现在有A B C 三个人,A想将一个箱子交给B,让B安全的获得箱子中的物品,但是A只能通过非安全信道将箱子传递给B,在这个非安全信道上,C可以做任何事情,如拦截 修改 替换。问A该如何做,才能保证只有B才能拿到箱子里的物品而C不能!面试官告诉我把这个看做一个实际的问题,讲讲如何解决(这个问题是他在知道我学习过密码学之后才问的)。

我想过加密,但是加密需要解决密钥协商的问题,经典的diff-hellman密钥协商协议不能抵抗中间人攻击,但是如果加上身份认证,又没有可信第三方,我还想到了零知识证明和信息隐藏,但是貌似都不能解决问题,因为A和B一开始进行的所有交互都会被C窃听到,而且C可以随意篡改这些内容。

面试官提示我,这是一个经典的信息安全问题,然后要交互不只一次。

我就又想到了两军问题,就是两只白军其中任意一只单独去进攻山谷里的蓝军都会被蓝军击败,两只白军必须同时进攻才能战胜蓝军,问题是两只白军唯一能够通信的方式就是穿过山谷,问有什么办法可以确保两只白军同时进攻。这个问题和面试官问的不完全相同,但是又有那么点相似。但是这个经典问题不是无解的吗?(虽然后来我从其他文献中得知使用量子密码学的方法可以解决)。

虽然那个面试官让我放开了想,我后面还想到是不是双因子鉴别,用指纹啊什么之类的。但是都还是回到一个问题,这些信息一开始如何安全的交给对方,最终又回到一个密钥协商的问题。

这个问题困扰我很久了,我密码学学得水,希望能够有知道的同志点拨一下!谢谢!

------解决方案--------------------
用非对称密钥。

B将公钥发给A,
A用公钥加密一段DES密钥,得到R1,
A用DES密钥加密BOX物件,得到R2,
A将R1,R2发给B,
B用私钥解密R1得到DES密钥,在用DES密钥加解密R2得到BOX原件
OK。

C即使有公钥,R1,R2 也无法恢复BOX原件。中间采用DES加密为了求快。