【发布时间】:2015-11-21 14:42:38
【问题描述】:
我的场景(简化):
为清楚起见添加: App1 是一个带有自定义 URI 的 HTML 页面。 App2 是一个基于 C# 控制台的程序
我有一个将启动另一个应用程序的应用程序。
所以我们有 App1 和 App2。
App2 无法与 App1 通信,App1 只能使用管道命令启动 App2。
我想从 App1 向 App2 发送某种身份验证字符串或哈希,App2 检查并同意它是否正确,如果正确,它将继续自行启动。
我目前脑海中的方法如下:
有一个 GUID 类型的字符串,例如{25892e17-80f6-415f-9c65-7395632f0223} 这两个程序都知道。它在 sha256 中进行散列并发送。
App2 检查哈希。并根据结果决定做什么。
根据我的阅读,SHA256 只有在他们有一个彩虹表(由字典制成)并在上面进行检查时才能及时破解。但是我肯定像上面这样的 GUID 类型字符串不会出现在所说的字典中,所以会使其足够安全吗?
这种情况下的赌注方法是什么?
【问题讨论】:
-
黑客可以从您的实际程序中获取 GUID。签名可能是唯一的选择。
-
如果我用专用程序混淆代码怎么办?
-
我必须同意 VoidStar 的观点,不仅因为 GUID 不够机密,还因为如果恶意程序以某种方式访问了该通信(尽管不太可能),则无法防止重放攻击。在我看来,最好的计划是给 Program1 一个公共加密密钥,给 Program2 一个匹配的私钥。让 Program1 发送其带有时间戳的通信,所有时间戳均已加密。当 Program2 收到此通信时,它可以确信这是来自 Program1 的当前通信。
-
您可以在两个程序之间放置一个共享密钥,该密钥将成为加密消息的一部分,以增加可信度。但主要的是,攻击者在这两个程序之间看到的任何传递都无法帮助它在以后建立自己的通信。
-
谢谢,我将研究这种方法
标签: c# security authentication encryption hash