Процесс аутентификации в ARD - PullRequest
4 голосов
/ 04 августа 2011

Я работаю над сторонним клиентом для Apple Remote Desktop. Но я застрял в процессе аутентификации.

Из руководства по удаленному рабочему столу: Аутентификация клиентов Apple Remote Desktop использует метод аутентификации, основанный на ключе Диффи-Хеллмана протокол соглашения, который создает общий 128-битный ключ. Этот общий ключ используется для шифрования как имени, так и пароля с помощью Advanced Стандарт шифрования (AES). Протокол соглашения о ключе Диффи-Хеллмана используется в ARD 2 очень похоже на соглашение о ключе Диффи-Хеллмана протокол, используемый в личном обмене файлами, причем оба они используют 512-битное простое число для вычисления общего ключа. С помощью удаленного рабочего стола 2, нажатия клавиш и события мыши шифруются при управлении Mac OS X клиентские компьютеры. Эта информация зашифрована с использованием Advanced Стандарт шифрования (AES) с 128-битным общим ключом, который был выводится во время аутентификации.

Кто-нибудь знает, где я могу найти немного больше технической информации о процессе аутентификации в ARD? Например, какой режим AES он использует и какой вектор инициализации. Спасибо

Ответы [ 2 ]

4 голосов
/ 20 сентября 2011

Недавно я столкнулся с этой проблемой. Я не смог найти никакой подробной информации, кроме упомянутого вами высокоуровневого обзора, но мне удалось выяснить методику, основываясь на моем исследовании этого кода C из проекта с открытым исходным кодом gtk-vnc. В основном, шаги следующие:

  1. Считайте аутентификационный материал из розетки. Двухбайтовое значение генератора, двухбайтовое значение длины ключа, простой модуль (keyLength bytes) и сгенерированный открытый ключ партнера (keyLength bytes).
  2. Создайте собственную пару открытого и закрытого ключей Диффи-Хеллмана.
  3. Выполните согласование ключа Диффи-Хеллмана, используя генератор (g), простое число (p) и открытый ключ партнера. Вывод будет общим секретом, известным как вам, так и коллеге.
  4. Выполнить MD5-хэш общего секрета. Это 128-битное (16-байтовое) значение будет использоваться в качестве ключа AES.
  5. Упакуйте имя пользователя и пароль в 128-байтовую текстовую структуру «credentials»: { username[64], password[64] }. Нуль-терминировать каждый. Заполните неиспользуемые байты случайными символами, чтобы вывод шифрования был менее предсказуемым.
  6. Зашифруйте учетные данные в виде открытого текста с помощью 128-битного хеша MD5, начиная с шага 4, используя 128-битный симметричный шифр AES в режиме электронной кодовой книги (ECB). Не используйте дополнительные отступы для этого блочного шифра.
  7. Записать зашифрованный текст из шага 6 в поток. Напишите ваш сгенерированный открытый ключ DH в поток.
  8. Проверка подлинности прошла / не прошла как обычно.

У меня нет реализации Objective C, но я реализовал эту версию Java , на которую вы можете найти ссылку.

1 голос
/ 28 января 2014

Не уверен, что кому-то это все еще нужно, но вот реализация Objective C процесса аутентификации ARD, который я собрал несколько месяцев назад и выпустил на Github несколько дней назад.

Он основан на реализации Java (спасибо!) Дэвида, но использует функции шифрования OpenSSL для хэширования MD5 и AES 128.

Существует также библиотека TinyVNC , в которой также реализована аутентификация ARD, но вместо этого используется библиотека Crypto ++ для функций шифрования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...