Какой есть способ защиты от нарушителей в группе распределенных вычислений?
Привет вам всем.
Исходные данные: имеется большая сеть из людей, добровольно предоставляющих свои вычислительные мощности в обмен на награду за каждую решенную подзадачу. В сеть загружается общая большая задача, разделяется на подзадачи и эти подзадачи малой сложности распределяются между узлами.
Проблема: как уберечься от недобросовестных пользователей, которые будут решать задачи неправильно и посылать некорректные ответы? Нужна близкая к 100% вероятность того, что в систему не пройдёт неправильный ответ.
Что я только ни думал! Каким алгоритмом можно решить эту проблему?
Лично у меня пока есть только вариант загрузки в озу пользователя зашифрованной программы (чтобы ее код нельзя было изменить во время выполнения), которая бы следила за тем, что он по-настоящему не обманывает и просчитывает задачу. Насколько это осуществимо и можно ли так достичь близкой к 100% защиты?
Задания чаще всего предусматривают обработку графики. Пользователи используют только gpu, никаких cpu. Подзадачи простые и просчитываются обычно за 20-30 мс.
Подписывайте запросы своим открытым ключом, который содержится в программе.
Если подпись невалидна - задача не выполнена.
Давайте задачу трём клиентам и проверяйте, чтобы результат совпадал у всех трёх.
Любое нарушение (невалидный ключ или хотя бы одно несовпадение) - снимайте задачу с этих трёх и отдавайте другим трём, не сообщая ничего на клиент (что были ошибки и т.д.).
Очень печально терять в три раза мощность распределенного облака. Неужели нет другого пути? В каком направлении можно двигаться?
Мы можем позволить себе потерять вплоть до 50% от общих чистых мощностей, но больше очень вряд ли.
Допустим, что одному узлу пришла задача на обработку 1 кадра 3d-графики. Его gpu справилось за 16 мс. Он отправляет этот кадр в ответ. Можно ли тут проверить алгоритмически правильность работы его gpu? Я не очень разбираюсь в этом, поэтому спрашиваю.