ARD 中的身份验证过程

发布于 2024-11-28 00:07:19 字数 473 浏览 0 评论 0原文

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

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

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

I am working on a third party client for Apple Remote Desktop. But I am stuck on its authentication process.

From Remote Desktop manual:
Authentication to Apple Remote Desktop clients uses an
authentication method which is based on a Diffie-Hellman Key
agreement protocol that creates a shared 128-bit key. This shared
key is used to encrypt both the name and password using the Advanced
Encryption Standard (AES). The Diffie-Hellman Key agreement protocol
used in ARD 2 is very similar to the Diffie-Hellman Key agreement
protocol used in personal file sharing, with both of them using a
512-bit prime for the shared key calculation. With Remote Desktop 2,
keystrokes and mouse events are encrypted when you control Mac OS X
client computers. This information is encrypted using the Advanced
Encryption Standard (AES) with the 128-bit shared key that was
derived during authentication.

Does anyone know where I can find a bit more technical information about the Authentication process in ARD? Such as which AES mode it uses and what initialization vector. Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

帅哥哥的热头脑 2024-12-05 00:07:19

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

  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 版本,您可能会发现有用参考。

I ran into this exact problem recently. I couldn't find any detailed information beyond the high-level overview you mention, but I was able to figure out the technique based on my study of this C code from the gtk-vnc open source project. Basically, the steps are as follows:

  1. Read the authentication material from the socket. A two-byte generator value, a two-byte key length value, the prime modulus (keyLength bytes), and the peer's generated public key (keyLength bytes).
  2. Generate your own Diffie-Hellman public-private key pair.
  3. Perform Diffie-Hellman key agreement, using the generator (g), prime (p), and the peer's public key. The output will be a shared secret known to both you and the peer.
  4. Perform an MD5 hash of the shared secret. This 128-bit (16-byte) value will be used as the AES key.
  5. Pack the username and password into a 128-byte plaintext "credentials" structure: { username[64], password[64] }. Null-terminate each. Fill the unused bytes with random characters so that the encryption output is less predictable.
  6. Encrypt the plaintext credentials with the 128-bit MD5 hash from step 4, using the AES 128-bit symmetric cipher in electronic codebook (ECB) mode. Use no further padding for this block cipher.
  7. Write the ciphertext from step 6 to the stream. Write your generated DH public key to the stream.
  8. Check for authentication pass/fail as usual.

I don't have an Objective C implementation to share, but I have implemented this Java version which you may find useful to reference.

北城半夏 2024-12-05 00:07:19

不确定是否有人还需要这个,但是 这是一个 Objective C 实现< /a> 的 ARD 身份验证过程是我几个月前拼凑而成并于几天前在 Github 上发布的。

它大致基于 David 的(谢谢!)Java 实现,但使用 OpenSSL 的加密函数进行 MD5 散列和 AES 128 加密步骤。

还有 TinyVNC 库也实现了 ARD 身份验证,但使用 Crypto++ 库来实现加密功能。

Not sure if anyone still needs this, but here's a Objective C implementation of the ARD authentication process that I cobbled together a few months back and released on Github a few days ago.

It's based loosely on David's (thanks!) Java implementation but uses OpenSSL's encryption functions for the MD5 hashing and AES 128 encryption steps.

There's also the TinyVNC library that also implements ARD authentication, but using the Crypto++ library for encryption functions instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文