Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Подтверждения размера свободного дискового пространства
 
Требуется найти способ подтверждения размера свободного дискового пространства заявленного удалённым узлом.
Считается что узел заведомо недобросовестный и может завысить цифру.
Проверка должна занимать несоизмеримо меньше времени чем займёт закачка узлу того-же объёма данных.

Пока нашёл примерно такой метод:
Назовём того, кто проверяет удалённый узел контроллером.
1. Контроллер вычисляет псевдослучайную последовательность (ПСП) с помощью регистра сдвига с линейной обратной связью (РСЛОС).
Делит её на лету на куски, скажем по 512К, и вычисляет хеши от них с некоторой солью. Сохраняет вычисленные хеши и соль.
2. Контроллер передает узлу размер РСЛОС, функцию обратной связи и размер куска
3. Узел вычисляет ПСП на основании переданной ему информации и сохраняет её на диск.
4. Через время, достаточное для вычисления и сохранения ПСП, контроллер передаёт узлу соль и просит его вычислить хеши.
5. Узел вычисляет хеши и передаёт их контроллеру для сверки.

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

6. Если ответ пришёл контроллеру позже назначенного времени, то считается что произошла попытка обмана.
Каждый хеш который не сошёлся приводит к вычитанию из подтверждённого размера диска размера куска (512К).

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

Волнуют меня на данный момент 3 вопроса:
1. Не изобретаю ли я велосипед?
2. Какие ещё подводные камни я не учёл?
3. Можно ли использовать функции обратной связи разной сложности для контроллера и узла (например используя разные начальные последовательности)? Естественно результат должен быть один. Тогда можно было бы не сильно нагружая контроллер минимизировать способность узла добавлять себе ложный размер.
Страницы: 1
Читают тему