Целостность распределенных данных

Технологии поддержания целостности данных часто связаны с ограничениями доступа, использованием шифрования и сертификатов (электронная подпись). Предполагается, что злоумышленник просто не может корректным образом изменить данные, если не завладеет соответствующими ключами. Иначе говоря, несанкционированное вмешательство либо вообще невозможно, либо оставляет легко обнаружимый след. Например, отличие текущей hash-суммы исполняемого модуля с такой же суммой, записанной при авторизованном запуске, может говорить о вмешательстве в систему — это обычный механизм антивирусной защиты. В древности в качестве такой суммы использовался размер файла — потом придумали хитрые алгоритмы.

Частный случай той же методики — связывание различных записей в распределенные структуры, при котором вмешательство в одном узле нарушает связи с другими узлами, что может быть легко обнаружено. Например, как в алгоритмах типа блокчейн.

При мало-мальски трезвом размышлении становится понятно, что все это паллиативы, способы затруднить работу вредителям — но никоим образом не устранить саму возможность вмешательства. С одной стороны, те же технические средства, которые позволяют внедрить сложные методы контроля, повышают эффективность программ взлома, и злоумышленник вполне способен обеспечить соблюдение формальных критериев целостности (как раньше научились сохранять подделывать даты создания и модификации, или адреса электронной почты). С другой стороны, в распределенных системах проверка целостности неизбежно распределена во времени; если система большая, времена задержки становятся вполне осязаемыми — и внутри таких "мертвых" интервалов легко размещаются сколь угодно сложные преступления. Это, так сказать, квантовое шифрование наизнанку. Достаточно долей миллисекунды, чтобы перебросить деньги на счет злоумышленника; потом испорченную цепочку обнаружат и заблокируют — но дело уже сделано, и что толку после драки кулаками махать?

Главная уязвимость компьютерных систем — пользователи. Передача паролей коллегам и знакомым — обычное дело. Копирование ключей электронной подписи — на каждом шагу. Неужели генеральный директор будет сам лезть в бухгалтерскую программу и подписывать финансовые документы личным ключом? Да никогда! Это делает рядовой бухгалтер, которому передают и контейнеры ключей, и все остальное. А значит — доступ может поиметь и кто угодно еще.

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

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

Одно и то же может по-разному выглядеть в разных средах. Простая пересылка файла по электронной почте способна нарушить его формальную целостность. Информация о файле в юниксах отличается от параметров того же файла под Windows или в качестве документа какой-нибудь базы данных. Здесь нет и не может быть единства: методы "защиты" быстро мутируют, и уследить за всеми нововведениями просто нереально.

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

Наконец, сложные технологии поддержания целостности сами по себе становятся критической уязвимостью там, где действия злоумышленников направлены на разрушение системы как таковой (предполагая, что кто-то заплатит за это больше, чем можно выкачать из взломанной сети). Испорченные (и выведенные из оборота) элементы накапливаются, и в какой-то момент внутренние связи оказываются совершенно неработоспособными — их просто недостаточно для формальных проверок. Иногда целое восстанавливают с грехом пополам — иногда проще выкинуть все и начать с нуля (или от состояния на момент создания полной резервной копии — а в сложной распределенной системе такие копии вряд ли возможны). Атаки DDoS — старинная боль. Еще в XIX веке перед войной спецслужбы вбрасывали на рынок страны-противника море фальшивых банкнот и ценных бумаг, чтобы подорвать экономику и облегчить военную часть операции. То же ожидает и рынок криптовалют. Хотя, между прочим, криптовалюты — лишь разновидность финансовых пирамид, и самое что ни на есть мошенничество. Вор у вора ворует.

Но допустим, что перед нами вполне разумная задача: организовать массовую работу с данными таким образом, чтобы никакие (случайные или умышленные) флуктуации не влияли на доступность и согласованность. Такова была утопическая мечта изобретателей Интернета — но в условиях рыночной конкуренции идея быстро превратилась в свою противоположность, стремление защитить всех от всех. Быть может проблема вообще неразрешима? Если думать о корысти — пожалуй, так. А мы будем думать о вечном — и строить на века.

Что требуется? Две взаимно дополнительные вещи: избыточность и самовосстановление. Проблема эффективности (как при проектировании RAID-массивов) здесь не стоит. Важнее соблюсти единство информационного поля.

В бухгалтерских книгах издавна существует система двойной записи: дебет — кредит. Это прототип того, что нам требуется. Если, допустим, одна запись исчезла — ее легко восстановить по оставшейся. Однако, если записи в паре вдруг стали различны, — какую из них считать правильной? С формальной точки зрения они совершенно равноправны. Но если у нас не двойная запись, а многократное повторение одного и того же в разных вариантах — проблемы нет: локальные разрушения устраняются, исходя из критерия согласованности копий. И не нужно формальное удостоверение подлинности — мы решаем по смыслу, а не по форме. Документ считается подлинным не потому, что он кем-то там подписан, а потому, что он используется на практике именно в таком виде, а не в каком-то еще. Ясно, что особые "законодательные" органы здесь уже не обязательны: всякий может предложить свой вариант документа — а общество на практике определит его жизнеспособность. В конце концов, разные варианты могут сосуществовать как местные традиции; так сама идея документа изменяется: это уже не единичный текст, а иерархия текстов. Но так ли уж драматично нововведение? Испокон веков законодательные акты (и религиозные тексты) копировались множеством переписчиков (или мнемоников, как в античной Индии) — без этого иначе донести их до массового пользователя невозможно. Сегодня любой законодательный акт существует не только в виде нескольких завизированных экземпляров на разных языках (с указанием, какой из них считать правильным в случае разночтений) — но и во множестве печатных изданий, в электронных копиях, в базах данных и т. д. Поскольку практические решения принимаются, исходя из копий, факт существования "оригиналов" к делу, в общем-то, и не относится. Если же говорить о неофициальных текстах, традиция их вольной трактовки — еще древнее. Не надо мне про авторство. Народ вправе выбрасывать лишнее и добавлять отсутствующее — так литература превращается в фольклор. Что есть каноническая версия анекдота? Какой миф правильнее? Всегда ли вариация хуже темы? Какой из домов одной серии каноничнее? И не все ли равно, в какой день начинается следующий год?

Иерархические распределенные системы хранения данных абсолютно устойчивы. Их строение отражает строение человеческой культуры — и уничтожить их можно только вместе с человечеством.

На практике выборка данных выглядит примерно так: мы сравниваем полученное из разных источников и выбираем наиболее подходящее для наших задач. В принципе, статистику предпочтений несложно где-то сохранить в качестве еще одного документа — и использовать для реорганизации сети в целом; однако таких статистик может быть много, и все они лишь частично выражают объективно сложившиеся связи вещей. "Клиент" иерархической распределенной базы данных будет автоматически подстраиваться под интересы владельца и предлагать варианты, исходя из его собственного опыта, а не желаний (и бюджетов) возможных поставщиков. Это прямо противоположно тому, как Web-сайты навязывают пользователям рекламу, — при всем схожести основного механизма.

Например, я скачиваю с разных сайтов заинтересовавшую меня книгу, музыку, видеозапись, или программу. Из разных вариантов я выбираю что-то для себя, или комбинирую разные версии, — и открываю доступ к (части) моей коллекции всем желающим. Отличие от обычной торрент-сети — в универсальности "каталога", так что любой "документ" становится автоматически доступен публике сразу же после опубликования, и не надо регистрировать источник в разного рода трекерах, подстраиваясь под их требования. Это как бы синтез торрент-сети и поисковика. Пусть практика определит, чья коллекция лучше отвечает духу места и времени.

Ясно, что небольшие вариации могут со временем привести к перестройке иерархии, изменению "стандартов" и "законов". При желании, можно организовать массовую кампанию за то или иной новшество, сознательно внедряя в сеть соответствующие мутации. И какой-нибудь идиот способен заставить этим заниматься вредительскую (или рекламную) программу. Но если каждый берет из сети лишь то, что ему действительно нужно, это не изменит объективной структуры предпочтений, которая зависит только от потребителя, а не от поставщика. Дурные флуктуации сами собой сходят на нет. Полезные — закрепляются и задают новые направления развития. Да, какое-то время можно морочить людям головы — но действительность в конце концов все расставит по местам.

Система "авторизации" и удостоверения "подлинности" — попытка заморозить какую-то из исторически сложившихся структур раз и навек. В развивающемся мире такая целостность не может быть устойчивой. Как бы ни запрещали пиратские сети, как бы ни перекрывали им кислород, всегда найдется способ обхода блокировок — точно так же, как любые деньги можно подделать, а любой закон обойти. И сама общественно-экономическая система, нуждающаяся в искусственных ограничениях и законах, в промывании мозгов, в секретах и хакерах, в борьбе партий и корпораций, — неизбежно уступит место новому миру, где все для всех, где нет собственности как таковой, и глупо задаваться вопросом, что кому принадлежит.


[Компьютеры] [Наука] [Унизм]