2016-12-04 9 views
1

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

Я подумал о следующей процедуре:

С моей стороны:

  • Hash загрузка с помощью SHA512
  • шифровать хэш с помощью закрытого RSA ключа
  • Сделать зашифрованного хэш общественности наряду с объявлением новой версии

Обновление на клиенте п выполняет следующие функции:

  • Скачать файл (Дух)
  • дешифровать хэш из нового анонса обновления с помощью жёстко прописанного открытого ключа, соответствующего моего частного один
  • Сравните расшифрованный хэш с реальными один из Загруженный файл

Есть ли недостатки в этом рабочем процессе, предполагая, что я изначально могу предоставить неизмененную версию обновления с открытым ключом внутри клиента?

ответ

0

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

У вас есть правильная идея с использованием криптографии с открытым ключом. Это то, что я хотел бы предложить:

Либо купить сертификат подписи кода через ЦС (полезно, если вы также должны соответствовать требованиям Windows SmartScreen), либо создать пару с открытым частным ключом самостоятельно. Если вы самоподписываетесь, отправляйте открытый ключ вместе с программой. Подпишите любой новый установщик, используя закрытый ключ. При обновлении обновите обновления, чтобы проверить подпись, используя открытый ключ, перед распаковкой новой версии. Если ваше приложение основано на Windows, вы можете использовать WinVerifyTrust для проверки.

В качестве альтернативы, решение, которое вы предлагаете, уже реализовано через PGP signing, который уже прошел десятилетия проверки безопасности. Вы просто опубликуете .sig с новой версией, и программа обновления проверит это. Он также был решен с использованием digital signatures, который может быть реализован просто через OpenSSL.

 Смежные вопросы

  • Нет связанных вопросов^_^