姬長信(Redy)

Diffie-Hellman在Silverlight中


我正在尝试设计一种安全方案,用于加密Silverlight客户端和我创建的php Web服务之间的应用程序级别数据.由于我正在使用公共网站,因此我从服务中提取的信息是公开的,但是我提交给Web服务的信息不是公开的.该网站还有一个后端可用于管理,因此,从Web服务推入和拉到Silverlight管理后端的所有应用程序数据自然也必须进行加密.

Silverlight不支持非对称加密,该加密适用于公共网站.对称加密仅在后端起作用,因为用户未登录公共网站,因此无法导出基于密码的密钥.对称加密仍然很棒,但是我无法安全地将私钥保存在Silverlight客户端中.因为它要么必须是硬编码的,要么是从某种配置文件中读取的.这些都不被认为是安全的.所以…计划B

然后,我最后的选择是实现Diffie-Hellman算法,该算法通过密钥协商支持对称加密.但是,Diffie-Hellman容易受到中间人攻击.换句话说,不能保证任何一方都能确定彼此的身份,从而使得在接收方不了解的情况下截获和更改通信成为可能.因此,建议使用私有共享密钥来加密密钥协议握手,以便确认任何一方的身份.

这使我回到最初的问题,导致我需要使用Diffie-Hellman,如何在Silverlight客户端中使用私钥而不在代码或xml文件中对其进行硬编码.

我对此一无所有…对此有任何答案吗?

编辑:

请记住,这是有关我自己推出的自定义PHP Web服务的.

我发现可以在Silverlight中使用的RSA实现.用它来加密Silverlight客户端和PHP Web服务之间的DiffieHellman密钥协议的握手似乎很安全,然后再用它来加密已同意的对称密钥(它本身是由密钥结果生成的)通过散列进行交换).

在此之后,我几乎可以保证到Web服务的所有通信都不会被拦截,修改然后再传输(MITM).但是我相信仍然有可能.从技术上讲,攻击者可以假冒silverlight客户端并将消息发送到Web服务(假设他们发现了URL).

由于攻击者不知道我的自定义Web服务的“秘密api”,因此提供了未经授权的访问的安全性,因此他们无法与其通信.

破解此漏洞的唯一方法是使用攻击者可能怀疑有效的任何字符串来强行使用Web服务,以尝试从Web服务获取响应.我认为您不能强行使用可变长度的字符串.听起来不切实际.

有人看到这种方法有问题吗?