1

我试图找出客户端应用程序使用什么算法来返回会话密钥。

当我启动连接时,服务器首先发送一个唯一的会话密钥。然后,客户端必须使用加密或散列密码进行响应,并将用户名与用户名一起发送到服务器。

客户端和服务器之间的示例网络跟踪:(用户名:serv1ce / 密码:test12)

从服务器收到的应用程序 << 52 d7 1c 3f 9f 2c 05 c9(一次会话密钥)
应用程序发送到服务器 >> 11 83 2d 7d ff 0c 51 8c 53 45 52 56 31 43 45 20

“53 45 52 56 31 43 45 20”部分是明文形式的用户名,作为字节值 (serv1ce)。

有谁知道如何使用密码“test12”和 64 位(8 字节)会话密钥“52 d7 1c 3f 9f 2c 05 c9”创建字节“11 83 2d 7d ff 0c 51 8c”?

4

1 回答 1

1

如果他们使用加密安全哈希,那么原则上从输入和输出中您应该无法发现这一点。

实际上,它们返回 8 个字节,即 64 位,这表明它们正在使用 MD5 的某些变体。如果他们遵循典型的做法,他们可能会以某种方式创建一个字符串,其中包括用户名、密码、会话密钥和秘密哈希的某种组合,然后对其进行哈希处理。(请注意,我说的是典型实践,而不是最佳实践。最佳实践是为此目的使用一些缓慢的计算方法,例如 bcrypt。)如果你找出了神奇的组合,你就有了答案。

你有两种体面的方法。最简单的是蛮力搜索。如果您搜索,md5 gpu cracking您会发现很多工具可以让您将 MD5 计算卸载到您的视频卡上。这些是蛮力搜索的理想选择,并且可以让您快速尝试上述主题的惊人数量的变化。(这种攻击的可行性就是为什么人们应该使用 bcrypt 来处理这类事情。)

另一个是你有应用程序。有多种方法可以跟踪应用程序内部实际发生的情况,因为它正在执行该计算。成功地弄清楚这一点,你就会得到答案。

于 2011-06-14T23:26:02.243 回答