ARD 中的身份验证过程

wil*_*son 4 macos cocoa remote-desktop objective-c

我正在开发 Apple 远程桌面的第三方客户端。但我被困在它的身份验证过程中。

来自远程桌面手册:Apple 远程桌面客户端的身份验证使用基于 Diffie-Hellman 密钥协议的身份验证方法,该协议创建共享 128 位密钥。此共享密钥用于使用高级加密标准 (AES) 对名称和密码进行加密。ARD 2 中使用的 Diffie-Hellman 密钥协商协议与个人文件共享中使用的 Diffie-Hellman 密钥协商协议非常相似,两者都使用 512 位素数进行共享密钥计算。使用远程桌面 2,当您控制 Mac OS X 客户端计算机时,击键和鼠标事件都会被加密。此信息使用高级加密标准 (AES) 以及身份验证期间派生的 128 位共享密钥进行加密。

有谁知道我在哪里可以找到有关 ARD 中身份验证过程的更多技术信息?比如它使用哪种AES模式以及什么初始化向量。谢谢

Dav*_*ons 5

我最近遇到了这个问题。除了您提到的高级概述之外,我找不到任何详细信息,但根据我对gtk-vnc 开源项目中的C 代码的研究,我能够找出该技术。基本上,步骤如下:

  1. 从套接字读取认证材料。一个两字节的生成器值、一个两字节的密钥长度值、素数模数(keyLength 字节)和对等方生成的公钥(keyLength 字节)。
  2. 生成您自己的 Diffie-Hellman 公钥-私钥对。
  3. 使用生成器 (g)、素数 (p) 和对等方的公钥执行 Diffie-Hellman 密钥协商。输出将是您和对等方都知道的共享秘密。
  4. 执行共享密钥的 MD5 哈希。此 128 位(16 字节)值将用作 AES 密钥。
  5. 将用户名和密码打包成 128 字节的明文“凭据”结构:{ username[64], password[64] }。每个都以空终止。用随机字符填充未使用的字节,以便加密输出更难以预测。
  6. 在电子密码本 (ECB) 模式下使用 AES 128 位对称密码,通过步骤 4 中的 128 位 MD5 哈希对明文凭证进行加密。此分组密码不再使用任何填充。
  7. 将步骤 6 中的密文写入流中。将生成的 DH 公钥写入流中。
  8. 照常检查身份验证是否通过/失败。

我没有可分享的 Objective C 实现,但我已经实现了这个 Java 版本,您可能会发现它对参考有用。