在不泄露密钥的情况下从 Flash 客户端验证文件的真实性

Posted

技术标签:

【中文标题】在不泄露密钥的情况下从 Flash 客户端验证文件的真实性【英文标题】:Verify file authenticity from Flash client without revealing key 【发布时间】:2014-01-28 00:29:54 【问题描述】:

我正在构建一个在网络上运行的 Flash 应用程序,用户可以在其中访问并结合我的服务(使用 Python 构建)创建自己的内容。具体来说:用户发送了一些数据;在服务器上执行一些转换;然后将完成的内容发送回用户,由客户端应用呈现。

我希望能够防止客户端呈现虚假内容,我可以通过将密钥散列与服务器生成的主要内容一起传递来做到这一点。然后,客户端将使用相同的密钥再次对内容进行哈希处理,并确认哈希/签名匹配。如果存在不匹配,则可以认为内容是不真实的。

我遇到的问题是将密钥保存在 SWF 中是不安全的。我考虑了多种混淆密钥的方法,但我了解到,如果攻击者想要它,他们可以很容易地得到它。一旦攻击者拥有了这一点,他们就可以开始创建自己的内容,在不知不觉中被客户端接受。

是否有另一种方法可以在客户端验证文件的签名,而不暴露用于创建该签名的方法?

【问题讨论】:

听起来像是security.stackexchange.com的问题。 啊,谢谢你的建议。由于这两个站点之间似乎存在一些重叠,因此我将把它留得更久一些,如果我在这里没有看到答案,我会将其移至信息安全部门。 【参考方案1】:

是否有另一种方法可以在客户端验证文件的签名,而不暴露用于创建该签名的方法?

公钥加密。你在客户端只有一个公钥,需要服务器端的私钥生成签名供其验证。

您要阻止的攻击是什么?如果您担心无辜用户和您的服务器之间的中间人攻击,明智的选择是 TLS (HTTPS)。这是一个预先准备好的、已知良好的实现,包括公钥加密。这比滚动自己的加密货币要好得多,这很容易出错。

【讨论】:

感谢您的回复;这就是我要找的。我认为它往往被描述为以相反的方式使用(加密密钥是公开的)这一事实导致我跳过它作为一个选项。为了回答您的问题,我希望防止的是另一方“离线”创建可以作为合法销售的非法内容。由于渲染组件将存在并且容易被重新利用,因此使内容难以欺骗似乎是保护它的最佳方法。当然,渲染器仍然容易被反编译。

以上是关于在不泄露密钥的情况下从 Flash 客户端验证文件的真实性的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用表单的情况下从 Rails 应用程序发布到外部 url

我可以在不显式调用 headObject 的情况下从 S3 对象流中获取 Content-Type 吗?

我能否在不依赖客户从 PayPal 中单击“返回站点”的情况下从 PayPal Standard 获得订单确认?

如何在不影响 phpMyAdmin 的情况下从 mysql 中巧妙地删除 pma 表

共享密钥时使用 Java 客户端的 SFTP [重复]

如何在不打开的情况下从 CSV 文件中检索数据