2011-08-04 41 views
4

我正在爲Apple Remote Desktop創建第三方客戶端。但我堅持認證過程。ARD中的身份驗證過程

從遠程桌面手冊: 認證蘋果遠程桌面客戶端使用的是基於創建一個共享的128位密鑰的Diffie-Hellman密鑰 協商協議的 身份驗證方法。共享密鑰 用於使用高級加密標準(AES)加密名稱和密碼。在ARD 2中使用的Diffie-Hellman密鑰協議協議 非常類似於在個人文件共享中使用的Diffie-Hellman密鑰協議 協議,它們都使用512位素數來共享密鑰計算。使用遠程桌面2時,當您控制Mac OS X 客戶端計算機時,會加密 擊鍵和鼠標事件。此信息使用高級 加密標準(AES)加密,其中128位共享密鑰在驗證期間導出爲 。

有誰知道在哪裏可以找到更多有關ARD認證過程的技術信息?比如它使用哪種AES模式以及什麼初始化向量。謝謝

+0

我在生成密文和dh公鑰時遇到了麻煩。對於ARD認證過程是否有Objective-C代碼?我正嘗試在iOS上爲家庭影院創建僅輸入ARD客戶端。 –

+0

你是否能夠得到這個工作。我試圖自己弄清楚這一點,但我不知道如何用Objective C做到這一點。你有任何可以共享的代碼嗎?謝謝 –

回答

4

最近我遇到了這個確切的問題。除了您提到的高級概述之外,我找不到任何詳細信息,但是我可以根據我對gtk-vnc開源項目的this C code的研究來找出技術。基本上,步驟如下:

  1. 從套接字讀取認證資料。一個兩字節的生成器值,一個兩字節的密鑰長度值,主模數(keyLength字節)和對等生成的公鑰(keyLength字節)。
  2. 生成您自己的Diffie-Hellman公鑰 - 私鑰對。
  3. 使用生成器(g),素數(p)和對等體的公鑰執行Diffie-Hellman密鑰協定。輸出將是你和對方都知道的共享祕密。
  4. 執行共享密鑰的MD5哈希。這個128位(16字節)的值將被用作AES密鑰。
  5. 將用戶名和密碼打包成一個128字節的明文「credentials」結構:{ username[64], password[64] }。空終止每個。使用隨機字符填充未使用的字節,以便加密輸出不易預測。
  6. 使用電子碼本(ECB)模式下的AES 128位對稱密碼,使用來自步驟4的128位MD5散列對明文憑據進行加密。此分組密碼不再使用填充。
  7. 將步驟6中的密文寫入流中。將生成的DH公鑰寫入流中。
  8. 像往常一樣檢查驗證通過/失敗。

我沒有一個目標C實現來共享,但我有implemented this Java version,你可能會發現有用的引用。

+0

大衛西蒙斯,感謝你的這些偉大的信息! – wilson

1

不知道是否有人仍然需要這個,但here's a Objective C implementation ARD認證過程,我幾個月前拼湊在一起,幾天前發佈在Github上。

它基於David的(謝謝!)Java實現,但是使用OpenSSL的加密函數進行MD5哈希和AES 128加密步驟。

還有一個TinyVNC庫也實現ARD認證,但是使用Crypto ++庫代替加密函數。