Аутентификация аддонов и файлов - PullRequest
0 голосов
/ 27 декабря 2010

Если вы когда-либо играли в оригинальный стартовый корабль и выбирали официальную карту, созданную Blizzard, вы заметили бы небольшую иконку «Blizz» рядом с картой, чтобы сообщить вам, что она была официальной и не сделана сторонней организацией.

Я хочу внедрить аналогичную систему в моем приложении, чтобы дополнения и файлы можно было аутентифицировать, чтобы сообщить пользователю, пришли они от меня или от кого-то другого.

Я очень мало знаю о безопасности и буду признателен за любую помощь в этом вопросе.

Ответы [ 2 ]

3 голосов
/ 27 декабря 2010

Криптография с открытым ключом . Клиентское приложение имеет копию открытого ключа подписи официального автора и проверяет подпись, примененную к надстройке / файлу, сделанную с помощью закрытого ключа автора.

0 голосов
/ 11 января 2011

Ответ Mac абсолютно правильный.Чтобы быть более конкретным, процесс обычно будет выглядеть следующим образом:

Подписание:

  1. Хеш (например, SHA-1) создается из содержимого.
  2. Затем хэш подписывается с использованием закрытого ключа, что приводит к подписи (например, с использованием алгоритма DSA или RSA).
  3. Подпись включена в содержимое.Если содержимое изменяется, подпись становится недействительной.

Проверка:

  1. Клиент вычисляет хеш из содержимого.
  2. Подпись расшифровывается с помощьюизвестный открытый ключ автора (т. е. вас).
  3. Если хэш внутри подписи совпадает с вычисленным хешем из # 1, тогда все в порядке.В противном случае содержимое было изменено / не действительно от автора (то есть от вас).

Некоторые соображения:

  1. Вам необходимо использовать размер ключа, достаточно большой, чтобы сдерживатьперебор.
  2. Эти алгоритмы требуют источника случайных данных - как при генерации ключей, так и при подписании, например.Если это нарушается, то частный ключ часто можно раскрыть тривиально.
  3. «Шифрование хеша с открытым ключом» - упрощенное объяснение.Например, с RSA - хеш должен быть дополнен другими данными.При проверке необходимо также проверять заполнение.В противном случае подписи могут быть легко подделаны.(См. Разгром OpenSSL несколько лет назад).

Стандартный совет - использовать проверенную, готовую к использованию библиотеку криптографии, написанную теми, у кого больше опыта.Вы должны быть в состоянии предоставить библиотеке пару ключей, данные, которые нужно подписать / проверить и сказать «подписать / проверить это» с минимальным задействованным кодом.Если вы беспокоитесь о деталях заполнения или чего-то подобного - вы, вероятно, делаете это неправильно.См .: Пространство имен System.Security.Cryptography в Microsoft .NET (очень простое в использовании) или Microsoft CryptoAPI, если вы выполняете стандартное программирование на Windows C / C ++.Существуют и другие кроссплатформенные библиотеки: выберите то, что хорошо работает на вашей платформе.

...