2011-08-04 10 views
4

Apple Remote Desktopのサードパーティ製クライアントで作業しています。しかし、私はその認証プロセスに固執しています。リモートデスクトップマニュアルからARDの認証プロセス

:Apple Remote Desktopのクライアントへ 認証が共有128ビットの鍵を作成したDiffie-Hellman鍵 合意プロトコルに基づいています 認証方法を使用しています。この共有された キーは、高度な 暗号化規格(AES)を使用して名前とパスワードの両方を暗号化するために使用されます。 ARD 2で使用したDiffie-Hellman鍵合意プロトコル は、両者が共有鍵計算のため 512ビットの素数を使用して、個人的なファイル共有で使用されるのDiffie-Hellman鍵合意 プロトコルと非常によく似ています。リモートデスクトップ2では、 キーストロークとマウスイベントは、Mac OS X クライアントコンピュータを制御するときに暗号化されます。この情報は、 暗号化標準(AES)の128ビット共有キー( )を使用して暗号化されています。

誰でもARDの認証プロセスに関する技術的な情報をどこで見つけることができますか?どのAESモードを使用し、どの初期化ベクトルを使用するかなど。ありがとう

+0

暗号文とdh公開鍵の生成に問題があります。 ARD認証プロセスの目的コードはありますか?私はiOS上のホームシアター用の入力専用ARDクライアントを作成しようとしています。 –

+0

これを動作させることができましたか?私はこれを自分自身で理解しようとしていますが、Objective Cでこれを行う方法を理解できません。共有できるコードはありますか?ありがとう –

答えて

4

私は最近この正確な問題に遭遇しました。あなたが言及したハイレベルの概要を超えた詳細な情報は見つかりませんでしたが、私はgtk-vncオープンソースプロジェクトのthis C codeの私の研究に基づいてこの技術を理解することができました。基本的には、次のようになります。

  1. ソケットから認証資料を読みます。 2バイトのジェネレータ値、2バイトのキー長値、プライムモジュラス(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の実装はありませんが、私はimplemented this Java versionを参考にしてください。

+0

デビッドシモンズ、これらの素晴らしい情報に感謝します! – wilson

1

まだ誰かがまだこれを必要としているのかどうかはわかりませんが、ARD認証プロセスのhere's a Objective C implementationを2,3ヶ月前に一緒に詰め替え、Githubで数日前にリリースしました。

これはDavidの(感謝!)Javaの実装には根底に基づいていますが、MD5ハッシュやAES 128暗号化の手順にはOpenSSLの暗号化機能が使用されています。

また、TinyVNCライブラリにはARD認証も実装されていますが、代わりにCrypto ++ライブラリを暗号化機能に使用しています。