В торым ключевым элементом безопасности, вслед за конфиденциальностью, является целостность (или достоверность) данных, свидетельствующая о том, что информация не изменилась при передаче. В материальном мире вы каждый день полагаетесь на несколько механизмов обеспечения целостности: запечатанные конверты, голограммы на купюрах и т. д. Но при этом вам нужен контекст: вы верите в достоверность выписанных вам лекарств, поскольку они похожи на настоящие, и продал вам их человек, внешне напоминающий фармацевта. В киберпространстве фактор контекста теряет свою надежность, а для обеспечения целостности требуются некоторые инструменты.
Безопасность данных обычно ассоциируют с конфиденциальностью. Поскольку секреты есть у всех, конфиденциальность, как правило, имеет повышенный приоритет. Но оправданно ли это?
Возьмем, к примеру, ваш банковский счет. Сколько бы денег на нем ни было, вам, наверное, не хочется раскрывать свой баланс всем подряд. Если на счету солидная сумма, вас начнут донимать рекламой предметов роскоши, а если нет – предложениями взять кредит, и в любом случае ваш образ жизни начнут обсуждать за вашей спиной. Желание хранить в тайне баланс на банковском счете вполне разумно.
Но что если бы вам пришлось выбирать между сохранением баланса в секрете и гарантией того, что он правильный? Надеюсь, вы никогда не столкнетесь с таким нелепым выбором, но представьте на секунду, что это случилось. Завышенный баланс можно было бы только приветствовать, но смирились бы вы с балансом, который ниже реального?
Даже по сравнению со словами на бумаге данные в компьютерах склонны к случайным повреждениям. Это может произойти в любой момент. Данные могут непреднамеренно измениться во время их записи или чтения из памяти устройства. Они могут быть повреждены при обработке каким-то приложением или при передаче по сети, особенно беспроводной. Изменения могут произойти даже во время хранения, когда их никто не трогает.
Но, разумеется, еще большее беспокойство вызывает намеренная модификация. Данные очень легко отредактировать. Всего за несколько секунд несанкционированного доступа «цифровой вандал» может посеять хаос в таблице годовых доходов компании или изменить концовку в свежем романе писателя. Осторожное добавление ноля к вашему банковскому балансу может обеспечить вам безоблачное финансовое будущее, но если так же осторожно удалить ноль, ваше благосостояние может потерпеть крах.
Целостность данных – это гарантия того, что они не поменялись с момента их санкционированного создания. Важно понимать, что этот механизм не защищает данные от повреждения: он лишь позволяет с большой долей вероятности определить, были ли они модифицированы тем или иным образом. Механизм обеспечения целостности данных – прежде всего способ предупреждения, как канарейка, падающая замертво со своей жердочки в викторианской угольной шахте.
В силу некоторых нюансов концепция целостности данных не настолько очевидна, как конфиденциальность. В силу тех же особенностей для ее обеспечения разработан целый ряд механизмов безопасности.
Один нюанс состоит в серьезности предполагаемой угрозы: некоторые механизмы распознают только случайные изменения, но не намеренные.
Еще один нюанс заключается в вопросе, распространяется ли целостность данных на их источник, то есть на тех, кто эти данные создал. Такие гарантии кажутся очевидными и неотъемлемыми во многих повседневных ситуациях. Например, при переводе денег вы ожидаете, что получатель будет уверен в том, что этот перевод сделали вы. Здесь гарантируется, что данные не менялись с момента, когда их санкционированным образом создал идентифицируемый источник, а не кто угодно. Это более жесткое понятие целостности данных иногда называют проверкой происхождения.
Третий нюанс касается сторон, которым эти данные должны быть доступны. Во многих ситуациях вроде обмена файлами между двумя людьми возможность проверить целостность данных нужна только получателю. Однако при подписании цифровых контрактов крайне важно, чтобы целостность данных можно было продемонстрировать третьей стороне – например, судье, который в будущем может улаживать потенциальный конфликт.
Давайте рассмотрим несколько механизмов, обеспечивающих разную степень целостности данных.
Стоит отметить, что целостность данных заключается в проверке неизменности информации, но не ее корректности.
Разницу можно проиллюстрировать на примере такого явления, как фейковые новости, когда дезинформация преподносится как факт. Журналисту несложно сфабриковать такую статью и выпустить ее в дикий мир электронных СМИ. Киберпространство – вполне подходящее место для таких фокусов, так как нехватка физического контекста, окружающего новостную статью в Интернете, затрудняет проверку ее правдивости. Фейковая новость может быть ложной, но если читатель получит ее в том виде, в котором она была написана журналистом, можно будет утверждать, что целостность данных сохранена. Механизм целостности данных позволяет читателям определить, вносились ли в статью какие-то изменения с момента ее создания, и в этом смысле, несмотря на свою неправдивость, фейковые новости могут считаться достоверными. Иными словами, читатели получают гарантию того, что статья является такой же ложной, как и в тот день, когда ее написали.
Эта путаница между правдивостью и корректностью возникает из-за отличий между понятиями целостности и честности. Под честностью обычно понимают «правдивость и сильные моральные качества», чего обычно не хватает в мире фейковых новостей. Честность и моральность – это качества, которые легче оценить человеку, чем компьютеру, следовательно, что криптографические механизмы обеспечения целостности данных для этого малопригодны. С другой стороны, под целостностью мы понимаем «состояние неделимости». Именно это понятие я здесь рассматриваю. С помощью криптографии можно определить, остаются ли данные цельными и неделимыми с момента их создания. Это, как ни странно, означает, что криптографию можно использовать для защиты от фейковых новостей, но не для их предотвращения.
Чтобы подтвердить цельность и неделимость данных, нам нужен одобренный источник «истины» о том, в каком состоянии должны находиться эти данные. Являются они целостными или нет? Где следует искать ответ на этот вопрос?
Самый очевидный вариант состоит в использовании определенного источника, которому можно довериться при оценке целостности. Если ваш друг что-то говорит, и вы ему доверяете, будет логично предположить, что вы верите в правдивость его слов. Еще один распространенный подход заключается в доверии какого-то рода вышестоящей инстанции. Если вы не уверены, правильно ли пишете какое-то слово, вы можете обратиться к авторитетному источнику, такому как орфографический словарь.
В реальности вопросы доверия зачастую менее очевидны. Например, при загрузке программного обеспечения из Интернета на соответствующем веб-сайте нередко можно увидеть так называемый MD5-хеш. Это значение позволяет вам убедиться в том, что загруженное вами ПО идентично тому, которое предоставлено на сайте. Этот механизм проверки подлинности работает, только если вы «доверяете» веб-сайту – и не только благим намерениям его авторов, но и их умению обеспечить кибербезопасность, исключить возможность взлома. Веб-сайт предлагает себя в качестве центра доверия, который гарантирует целостность: «доверять или не доверять – выбор за вами».
Большинство криптографических механизмов для поддержки целостности данных зависят от определенных источников истины. Эти источники, как правило, привязаны к ключам. Чуть позже я объясню, как это работает, на примере нескольких таких инструментов. Но для определения корректности данных можно сверяться не с отдельным источником, а с всеобщим мнением о нем.
В 2016 году относительно скромный футбольный клуб «Лестер Сити» выиграл английскую Премьер-лигу, чем немало удивил и экспертов, и почти всех, кто мало-мальски интересуется спортом. Но как мы можем быть уверены в том, что это действительно произошло, если мы не присутствовали на стадионе, когда игрокам «Лестер Сити» вручали кубок? Стоит ли считать это правдой только потому, что об этом написали в газете или показали по телевизору? Или потому, что об этом рассказал приятель? Может, стоит обратиться непосредственно в английскую Премьер-лигу и потребовать письменного подтверждения? Большинство людей верит в то, что «Лестер Сити» стал чемпионом, потому что об этом твердят все вокруг. Для оценки правдивости этой информации мы полагаемся не на конкретный источник, а на тот факт, что все доступные нам источники с ней согласны. «Лестер Сити» выиграл, потому что так считает весь мир.
По ряду причин в наши дни наблюдается рост интереса к механизмам обеспечения целостности, которые используют более глобальные ориентиры. Это касается, помимо прочего, таких технологий как Bitcoin (об этом чуть позже), которые обеспечивают целостность цифровой валюты, не прибегая к услугам какого-то одного надежного банка.
Чтобы проверить корректность информации, можно попробовать найти ее подтверждение. Для определения правдивости показаний в суде обычно стараются получить информацию из разных источников, сверить и установить, какие ее аспекты не вызывают сомнений. Для определения корректности экспериментальных результатов ученые проводят эксперименты заново. В идеале, чтобы сформировать мнение о целостности любых данных, мы оцениваем свидетельства, полученные из разных источников, каждому из которых мы доверяем в той или иной степени.
Однако во многих ситуациях мы не можем позволить себе роскошь поиска вспомогательных свидетельств. Когда наш браузер уже взаимодействует с интернет-магазином, нам не к кому обратиться за оценкой целостности и достоверности данных, которыми они обмениваются. Решение о том, доверять этим данным или нет, нужно принимать немедленно, исходя из текущего сеанса взаимодействия, причем эффективно и без задержек.
Задумайтесь на секунду, как вы подходите к этой проблеме в материальном мире. Возьмем в качестве важной письменной информации, целостность которой должна быть гарантирована, графу об образовании соискателя на какую-то должность. В исключительных обстоятельствах потенциальный работодатель может лично позвонить преподавателям кандидата, чтобы подтвердить достоверность сведений из анкеты, но обычно такой способ проверки неэффективен.
Вместо этого обычно смотрят, есть ли в документах соискателя официальная печать, реальное назначение которой – косвенно продемонстрировать, что достоверность информации, изложенной на этом листе бумаги, подтверждается автором печати. Сама печать не занимает много места и несет в себе намного меньше информации, чем документ, но вместе с тем она выступает гарантией правдивости всего документа. Работодателю достаточно проверить только саму печать, и, удовлетворившись результатом этой проверки, он может исходить из того, что вся остальная информация в документе тоже, скорее всего, верна.
Существует много других ситуаций, в которых крошечный, поддающийся проверке фрагмент информации выступает гарантией целостности и достоверности более крупного объема данных. Пожалуй, самым распространенным средством подтверждения подлинности является подпись от руки. Интересно, что подписи используются в нескольких разных контекстах безопасности, но чаще всего с их помощью гарантируют корректность документа. Подписывая письмо или договор, вы тем самым подтверждаете свою удовлетворенность достоверностью изложенной там информации. Любой, кто ссылается на подписанный документ, предполагает, что вы как подписант были согласны с его содержимым в момент подписания.
Печати и подписи от руки можно считать компактными знаками одобрения достоверности письменного документа. Однако их эффективность зависит от материальности того, что они подтверждают. Недобросовестный кандидат может попытаться подделать сведения о своей академической успеваемости в надежде, что потенциальный работодатель не обратит на это внимания. Точно так же мошенник может подписать письмо и позже изменить его содержание. К сожалению, для борьбы с такими подделками пока не придумали ничего, кроме обременительных правовых процедур, таких как хранение копий договоров в офисе юриста.
Но основная проблема компактных гарантий целостности, таких как печати и подписи, состоит в их статичности: они не меняются с момента проставления. Печать на документе остается без изменений независимо от того, был ли он изменен мошенником. После подписания письма его могут исправить сколько угодно раз. Действительно, в материальном мире сложно себе представить, что к этой проблеме можно было бы подойти иначе. Это одна из причин, почему контекст играет такую важную роль в обеспечении достоверности в повседневной жизни.
Цифровой мир дает возможность выработать намного лучшее решение. Информация в нем представлена в виде чисел. И, поскольку числа можно комбинировать и вычислять, мы можем сделать то, что в материальном мире невообразимо: разработать средства обеспечения целостности, которые, помимо компактности и простоты проверки, зависят от самих данных. Иными словами, мы можем поставить на документ цифровую печать, которая перестанет быть действительной при внесении в этот документ любых изменений. Взамен на физическую и контекстную целостность киберпространство предлагает механизмы, сложность и утонченность которых недоступна в материальном мире.
Давайте начнем с простого механизма обеспечения целостности данных, рассчитанного на информацию, состоящую из чисел. Международный стандартный номер книги (International Standard Book Number, ISBN) – это общепризнанное средство однозначной идентификации изданных книг (вы можете найти его на обложке этого издания). Например, однозначно достойная прочтения книга Dachshunds for Dummies Ив Адамсон (John Wiley, 2007) имеет ISBN 978–0-470–22968-2. Ее можно точно идентифицировать по этому номеру. Если кто-то решит написать книгу с тем же названием, у нее будет другой ISBN. Этот механизм особенно полезен для библиотекарей и книготорговцев, которые благодаря ему могут быть уверены, что имеют дело с нужным изданием.
Тем не менее нам намного легче выговорить или набрать на клавиатуре название книги, чем нечто вроде «978–0-470–22968-2». Если вы допустите ошибку в слове dachshund, большинство компьютерных систем проверки орфографии автоматически ее исправят. С опечаткой в номере 978–0-470–22968-2 вам вряд ли так повезет. В связи с этим в каждый номер ISBN встроена проверка целостности, чтобы с достаточно высокой вероятностью выявить ошибки и опечатки. Первые двенадцать цифр составляют уникальный серийный номер, а для проверки их корректности используется последняя, контрольная цифра. Она вычисляется простым способом: цифры в позициях 1, 3, 5, 7, 9 и 11 прибавляются к сумме цифр в позициях 2, 4, 6, 8, 10 и 12, умноженной на 3; затем последняя цифра полученного результата вычитается из 10. То, что получилось, становится тринадцатой цифрой в ISBN. В нашем примере (9 + 8 + 4 + 0 + 2 + 6 = 29) прибавляется к 3 × (7 + 0 + 7 + 2 + 9 + 8 = 33), а из результата (128) берется последняя цифра (8) и вычитается из 10. Получается 2.
Тринадцатая цифра может автоматически вычисляться каждый раз, когда ISBN вводится в компьютер. Если в какой-либо из первых двенадцати цифр произошла ошибка, результат вычисления с высокой степенью вероятности не совпадет с последней цифрой в ISBN. Если вместо четвертой цифры в нашем примере (0) случайно ввели 1 (в результате чего получился номер 978–1–47–968-2), вычисление контрольной цифры вернет 9. Поскольку тринадцатая цифра должна быть равна 2, это свидетельствует об ошибке. Есть риск, что контрольная цифра все равно будет вычислена правильно (например, если в нашем номере ISBN было сделано две опечатки, 978–1-470–22968-9), и что ошибка останется незамеченной, но в большинстве случаев несоответствие удается выявить.
Необходимо понимать, что номер ISBN не рассчитан на борьбу с намеренными ошибками. У этого механизма не предусмотрено никакой защиты на случай, если библиотекарь-манипулятор сознательно решит внести в ISBN какие-то изменения. Предположим, что он поменял в нашем примере двенадцатую цифру ISBN с 8 на 7. Если это единственное изменение, номер 978–0-470–22967-2 будет помечен как некорректный ввиду несовпадения контрольной цифры. Однако определить, какой должна быть тринадцатая цифра, может кто угодно, так что нашему злому библиотекарю достаточно подобрать подходящее значение для номера 978–0-470–22967. 29 плюс 3 × 32 равно 125; берем последнюю цифру (5) и получаем 10 – 5 = 5. Таким образом, чтобы избежать разоблачения, библиотекарь должен поменять контрольную цифру на 5. В результате получится корректный номер ISBN 978–0-470–22967-5, который по случайному стечению обстоятельств принадлежит родственному изданию Chihuahuas for Dummies (поэтому даже не надейтесь, что такая ужасная манипуляция останется незамеченной).
Как мы все знаем, библиотекари обычно не злые. ISBN обеспечен очень скромным механизмом проверки целостности исключительно для предотвращения случайных ошибок. Тем не менее мы полагаемся на номера, по смыслу близкие к ISBN, во многих аспектах нашей жизни, и наличие в них простой проверки целостности лучше, чем ничего. Контрольные цифры, которые вычисляются аналогичным образом, присутствуют в номерах кредитных карт, номерах социального страхования и системе нумерации европейских локомотивов.
Контрольная цифра, интегрированная в ISBN, – крайне простой предохранитель. Однако подобные механизмы проверки целостности имеют нечто общее с более строгими криптографическими средствами, о которых стоит упомянуть.
Важнее всего то, что контрольные цифры, в отличие от печатей на физических документах, служат компактной гарантией защиты информации, поскольку они из нее вычисляются. У каждого отдельного элемента данных, такого как книжный номер, может быть только одна правильная контрольная цифра. Но, поскольку потенциальных контрольных цифр всего десять, намного меньше, чем самих книг, мы имеем дело с множеством номеров ISBN с одинаковыми контрольными цифрами, и ничего не можем с этим сделать. Это нельзя назвать проблемой как таковой, но из-за этого мы можем не обнаружить некорректный ISBN, так как контрольная цифра неправильного номера может быть вычислена по всем правилам. Риск такого совпадения можно было бы снизить за счет проведения дополнительной проверки, но за это пришлось бы заплатить ухудшением эффективности (в данном случае номер ISBN пришлось бы сделать длиннее). Криптографические механизмы обеспечения целостности тоже иногда допускают подобный компромисс между эффективностью и безопасностью.
Следует подчеркнуть, контрольные цифры не гарантируют обнаружение ошибок; они лишь позволяют их обнаруживать с предсказуемой вероятностью. Возникновение этих ошибок они тоже не предотвращают (на самом деле ни один механизм, основанный исключительно на вычислении данных, на это не способен), да и исправлять их не способны. Все это в той же степени относится и к криптографическим механизмам обеспечения целостности.
К сожалению, одно из ключевых свойств контрольных цифр крайне нежелательно для более строгих криптографических механизмов. Контрольная цифра в ISBN вычисляется путем простого сложения и умножения первых двенадцати цифр, поэтому предсказать, как изменение основной части ISBN отразится на значении контрольной цифры, довольно легко. Это означает, что мы можем предсказать контрольную цифру при изменении одного из элементов ISBN или сложении двух ISBN вместе, и тем более определить, контрольные цифры каких номеров ISBN совпадут.
Тем не менее книготорговцев и библиотекарей не заботит предсказуемость контрольных цифр, и никому и в голову не придет складывать разные номера социального страхования. В этих примерах контрольные цифры работают достаточно хорошо.
Контрольные цифры для проверки целостности – это инструмент с ограниченными возможностями. Если вам нужно что-то более серьезное, и вы готовы заплатить за это повышенной сложностью реализации и снижением производительности, вам стоит воспользоваться криптографической хеш-функцией.
Хеш-функция принимает данные любой длины и возвращает для них короткую проверку целостности – собственно хеш, – не задействуя никакие ключи, что немного необычно для криптографического инструмента. Хеш, как и контрольная цифра, намного меньше самих данных, из которых его вычисляют. Если нам, к примеру, нужно определить, изменился ли файл за время передачи по сети, можно предварительно вычислить его хеш и послать его получателю вместе с файлом. Чтобы убедиться в целостности пришедшего файла, получатель вычисляет его хеш, сравнивает с присланным, и если они совпадают, может заключить, что файл в пути не изменился.
Чем хеш отличается от контрольной цифры, так это способом получения. Если контрольная цифра выводится из данных предельно просто, то хеш вычисляется с помощью криптографического алгоритма. Вспомните, как я ранее сравнивал криптографические алгоритмы с миксерами. Эта аналогия хорошо подходит для шифрования, поскольку соответствующий алгоритм смешивает набор ингредиентов без изменения их общей массы, иными словами, зашифрованный текст является рандомизированной версией исходного, но имеет (примерно) ту же длину. Функция хеширования тоже смешивает исходные данные, но ее вывод намного меньше ввода. Она больше похожа на соковыжималку: ингредиенты измельчаются, но то, что из нее выходит, по объему намного меньше того, что мы в нее положили.
Основное преимущество хеша перед контрольными цифрами в том, что криптографический процесс, применяемый для его вычисления, скрывает связь между ним и исходными данными. В отличие от контрольной цифры, при любом изменении в данных хеш меняется непредсказуемо. Даже если поменять в файле один бит информации, итоговый хеш не будет иметь никакой видимой связи с хешем оригинального файла. Кроме того, найти два файла, у которых совпадал бы хеш, чрезвычайно сложно, чего нельзя сказать о контрольных цифрах.
Возможно, это прозвучит неожиданно, но хеш-функции – один из полезнейших когда-либо придуманных криптографических инструментов. В отличие от алгоритмов шифрования, они мало что могут сами по себе, но в качестве вспомогательного средства для более сложных криптографических операций они незаменимы. Собственно, именно поэтому их нередко называют «швейцарским армейским ножом» мира криптографии.
Начнем с того, что их можно применять как связующее звено между разными элементами данных. Поскольку хеши, в сущности, непредсказуемы, с помощью хеш-функций можно генерировать случайные числа. Ввиду способности сжимать данные хеш-функции хороши как основа других криптографических механизмов, например, цифровых подписей, повышая их эффективность. Еще один способ их использования – защита паролей. Система криптовалюты Bitcoin тоже основана на разностороннем применении хешей, следовательно, хеш-функции способствуют развитию экономики неконтролируемой части глобальной сети (Dark Web).
О каждом из трех последних сценариев мы поговорим чуть позже.
К сожалению, хеш-функция сама по себе не обеспечивает целостность в ситуации, когда злоумышленник может намеренно изменить данные. Библиотекарь вряд ли извлечет какую-то выгоду из манипуляции контрольными цифрами ISBN, но нельзя сказать того же о злоумышленнике, который наблюдает за отправкой файла и его хеша через Интернет. Если он захочет изменить файл и остаться незамеченным, ему достаточно после внесения изменений вычислить и отправить новый хеш: когда адресат получит модифицированный файл, хеш успешно пройдет проверку. Это объясняется тем, что хеш данных, как и контрольную цифру в номере ISBN, может вычислить любой.
С этой проблемой можно бороться двумя путями. Во-первых, можно передать хеш получателю средствами, которыми злоумышленник неспособен манипулировать. Например, можно послать другу файл по электронной почте, а хеш продиктовать по телефону: поскольку хеш достаточно короткий, это достаточно легко. Дальше остается только сверить хеш полученного файла с тем, который вы сообщили.
Но зачастую использовать те или иные средства защиты хеша невозможно или как минимум неудобно. В таких случаях концепцию хеш-функций необходимо адаптировать так, чтобы хеш данных не мог вычислить кто угодно. К счастью, этого можно добиться довольно очевидным способом. Как вы помните, хеш-функция – это криптографический алгоритм, который просто сжимает данные в хеш меньшего размера без использования ключа. Таким образом, чтобы ограничить круг тех, кто может вычислить хеш, в процесс его вычисления достаточно как-то интегрировать ключ.
Итак, следующим этапом улучшения нашего механизма обеспечения целостности становится хеш-функция с ключом. Представьте, что вы согласовали со своим другом секретный криптографический ключ. Вы добавили его в файл и вычислили хеш из того, что получилось. Затем вы отправили другу файл без ключа, но с хешем. Он добавил в файл ваш согласованный ключ и вычислил хеш заново. Если этот хеш совпал с присланным, ваш друг может быть уверен в том, что файл не изменялся.
Такая комбинация должна защитить файл от намеренных изменений. Злоумышленник может перехватить файл во время передачи и внести в него любые изменения. Но после этого ему не удастся вычислить корректный хеш. Ему известно содержимое измененного файла, но у него нет ключа, поэтому хеш их сочетания останется неизвестным. В результате любые изменения, внесенные в файл, будут обнаружены.
Это, в сущности, превосходная идея. Но по многим техническим причинам, которыми я не стану вас утомлять, она не слишком практична. В реальности используются специальные хеш-функции, которые встраивают секретный ключ более сложным образом, чем прямое добавление к данным. Их обычно называют имитовставками (или кодами аутентификации сообщений – англ. message authentication codes или MAC). Один из популярнейших алгоритмов MAC называется HMAC и основан непосредственно на хеш-функции («H» от слова «hash»). Существуют и другие; например, CMAC основан на блочном шифре («C» от слова «cipher»).
Имитовставки – это один из важнейших криптографических механизмов для защиты повседневной деятельности в киберпространстве. Их полезность объясняется тем, что наличие ключа позволяет не только защититься от злоумышленников, которые намеренно манипулируют данными, но и повысить уровень обеспечения целостности, что делает возможной проверку подлинности происхождения данных, с которой вы познакомились ранее. Если мы успешно проверяем имитовставку полученного файла, ключ подтверждает его источник. Тот, кто вычислил имитовставку, должен обладать ключом, и получатель знает, что помимо него этот ключ известен только отправителю. Следовательно, файл не мог прийти ни от кого другого.
Вне всякого сомнения, вы неоднократно использовали имитовставки, сами того не осознавая. Они обеспечивают проверку происхождения (и, следовательно, целостность) банковских транзакций, операций с платежными картами, взаимодействий по Wi-Fi, безопасных веб-соединений и многого другого. Симметричное шифрование данных без применения имитовставок встречается нечасто. Конфиденциальность и проверка происхождения идут рука об руку настолько часто, что для блочных шифров был предложен целый ряд режимов работы с аутентификацией шифрования, которые позволяют одновременно зашифровать данные и вычислить их имитовставку. Эти режимы становятся все популярней, и в будущем их, вероятно, будут предлагать по умолчанию.
Если говорить о надежном средстве обеспечения целостности данных в виде проверки происхождения, имитовставки кажутся идеальным вариантом. Они способны обнаружить малейшие изменения, случайные или намеренные; с их помощью можно определить источник данных; они широко применяются во многих важнейших областях прикладной криптографии. Что может быть лучше?
Имитовставка дает получателю гарантию того, что файл не изменялся. Для большинства реальных задач этой гарантии должно быть достаточно. И все же это не самое надежное средство проверки происхождения данных. Чтобы понять, почему, задайтесь следующим вопросом: может ли кто угодно, используя имитовставку, удостовериться в том, что файл пришел от заданного отправителя и не был модифицирован?
Рассмотрим применение имитовставки для защиты цифрового договора, отправленного по Интернету. Получатель может быть уверен в том, что договор пришел от определенного отправителя. Но что если позже у отправителя и получателя возникнет спор относительно договора? Если они пригласят для урегулирования конфликта третью сторону, получатель может предоставить имитовставку в качестве доказательства того, что отправитель послал этот договор и тем самым согласился с его условиями. В то же время отправитель может все отрицать, заявив, что получатель сам создал договор и соответствующую имитовставку без его участия. Эта проблема возникает из-за симметричности возможностей отправителя и получателя. Третья сторона, конечно же, может установить, что файл пришел от владельца имитовставки. Но от кого именно? Кто создал имитовставку – получатель или отправитель? Ее мог вычислить любой из них, так как ключ имеется у обоих.
Этот пример демонстрирует, что при проверке происхождения данных с помощью симметричной криптографии неизбежно возникают проблемы. В нашем случае симметричный ключ используется совместно отправителем и получателем, поэтому то, что может сделать один, под силу и другому. Следовательно, получатель может подтвердить, что файл прошел от отправителя, но никто другой не может быть в этом уверен, и имитовставка здесь не поможет.
Таким образом, имитовставки – это отличный криптографический механизм для проверки происхождения данных, если только вам не нужно продемонстрировать подлинность происхождения кому-то другому. Если же такая необходимость возникает, в процесс использования ключей при вычислении имитовставок нужно привнести какую-то асимметричность, чтобы их мог создавать кто-то один. Впрочем, вы уже наслышаны о асимметричных ключах, не так ли?
У большинства физических механизмов обеспечения целостности есть одно свойство, которого недостает контрольным цифрам, хеш-функциям и имитовставкам. Официальная печать на документе или подпись на договоре, возможно, и не помешает внести изменения в их содержание, но оба эти средства служат неоспоримым доказательством авторства. Печать на справке об успеваемости надежно связывает ее с выдавшим ее учреждением. Подпись на договоре фактически говорит о том, что «здесь был подписант». Для сравнения: хеш может вычислить кто угодно, и любой обладатель симметричного ключа может создать имитовставку.
Возможность связать проверку целостности с уникальным источником иногда называют неподдельностью, поскольку автор проверки не может отрицать, что он ее инициировал. Неподдельность – это обеспечение целостности данных высшего сорта; она необходима в двух случаях: когда злоумышленник способен манипулировать данными, и когда происхождение данных нужно доказать третьей стороне. Это строгие требования, обуславливающие необходимость мощного криптографического инструмента.
Неподдельность требует наличия криптографического механизма, выполняющего проверку целостности, результат которой уникальным образом связан с ее инициатором. Если вдуматься, то это почти полная противоположность навесному замку. Как вы помните, навесной замок может закрыть кто угодно, но для его открытия необходим ключ. Нам же нужен своего рода «антизамок», который позволяет инициировать проверку целостности только владельцу ключа, но в подлинности ее результатов может убедиться кто угодно.
Может ли пригодиться знание того, как устроены цифровые навесные замки при создании цифровых антизамков? К счастью, да. Концепцию цифровых навесных замков, основанную на асимметричном шифровании, можно адаптировать для разработки криптографических механизмов обеспечения неподдельности. Этот механизм привязывает данные к уникальному источнику подобно тому, как это делает подпись, поставленная от руки, поэтому он называется цифровой подписью.
Принцип работы цифровой подписи представляет собой методы асимметричного шифрования наоборот: роли открытого и закрытого ключей меняются на противоположные. При асимметричном шифровании отправитель шифрует свои данные с помощью общедоступного открытого ключа, принадлежащего получателю, который, в свою очередь, расшифровывает их, используя закрытый ключ; следует подчеркнуть, что получатель – единственный, кто имеет доступ к этому закрытому ключу. Чтобы создать цифровую подпись, отправитель шифрует данные с помощью закрытого ключа, а его открытый ключ используется получателем для их расшифровки и проверки их целостности. Цифровую подпись может проверить кто угодно, так как для этого достаточно открытого ключа отправителя, который тайны не составляет. По крайней мере так это выглядит в теории.
На практике не все так просто. В частности, большинство алгоритмов асимметричного шифрования могут работать в обратном направлении только после небольшой модификации. Но важнее всего, пожалуй, то, что цифровые подписи – это проверка целостности, не предназначенная для обеспечения конфиденциальности. Поскольку данные не являются секретными, логично предположить, что тот, кому нужно проверить подпись, имеет доступ и к самим данным. Соответственно, результат проверки целостности должен передаваться вместе с исходными данными, так же, как подпись служит дополнением к документу. Если бы для создания подписи данные просто «шифровались», она представляла бы собой шифротекст того же размера, что и сами данные, что сделало бы ее громоздкой и неэффективной по сравнению с компактными контрольными цифрами, хеш-функциями и имитовставками.
Ключевой момент здесь в том, что для создания цифровой подписи необязательно «шифровать» (или, если выражаться точнее, подписывать) все данные. Достаточно подписать их компактное представление – что-то небольшое, но зависящее от каждого бита данных. Внимательные читатели должны помнить, что у нас для этого есть замечательный инструмент! Обычно для создания цифровой подписи из данных сначала «выжимают» хеш, и уже его подписывают с помощью закрытого ключа отправителя. Любой желающий проверить цифровую подпись может сначала вычислить хеш данных, а затем сравнить его с результатом «расшифровки» (назовем это проверкой подлинности) подписи. Если они совпадают, то проверяющий узнает несколько фактов.
Рассмотрим их по очереди.
Первое: уверенность в целостности данных. Если кто-то модифицировал файл, хеш будет отличаться. Злоумышленник, скорее всего, будет способен вычислить этот хеш, но создать на его основе новую цифровую подпись не сможет, не имея доступа к закрытому ключу изначального отправителя.
Второе: уверенность в происхождении данных. Цифровую подпись можно «расшифровать» с помощью открытого ключа отправителя в корректный хеш только в том случае, если для ее создания использовался соответствующий закрытый ключ.
Третье: неподдельность. Цифровую подпись может проверить любой, поскольку для этого достаточно открытого ключа отправителя. Важно, что отправитель не может отрицать факт подписания, так как только ему известен закрытый ключ, соответствующий открытому ключу, с помощью которого проверена подпись.
Гейм, сет и матч.
Цифровые подписи – это первосортный механизм обеспечения целостности; ничто не может соперничать с ними по уровню устойчивости. Но за качественные вещи приходится платить. Надеюсь, вы уже заметили, что цифровым подписям свойственны те же недостатки, что и асимметричному шифрованию. Во-первых, у нас возникает проблема с определением подлинности открытых ключей (в данном случае – открытых проверочных ключей). Во-вторых, вычисление цифровых подписей работает медленнее, чем другие механизмы обеспечения целостности данных, так как по принципу своей работы оно похоже на асимметричное шифрование.
Если вам не нужен высочайший уровень целостности, который обеспечивают цифровые подписи, их лучше не использовать. Как я уже отмечал, для большинства повседневных криптографических задач достаточно имитовставок. Можно сказать, что цифровые подписи имеют такое же отношение к целостности, как асимметричное шифрование к конфиденциальности. Оба эти механизма обычно требуются в открытых окружениях одного рода. Например, самые безопасные системы электронной почты позволяют шифровать письма с помощью гибридных методов и/или подписывать их. А в домашней беспроводной сети используются симметричное шифрование и имитовставки, поскольку это закрытое окружение, в котором легко обмениваться ключами.
Как ни странно, одно из важнейших направлений использования цифровых подписей состоит в борьбе с их главным недостатком! Цифровые подписи – важный элемент самого распространенного метода проверки открытых ключей, которые применяются как в асимметричном шифровании, так и в самих цифровых подписях. Впрочем, и об этом подробнее поговорим позже.
Термин цифровая подпись создает в нашем воображении образ некой футуристической кибер-руки, которая подписывает цифровые данные. Это подталкивает нас к тому, чтобы считать их эквивалентом подписей, которые ставятся от руки на бумажных документах, только в киберпространстве. Заманчивая, но коварная аналогия. Цифровые подписи действительно имеют некое сходство с обычными, но, несмотря на это, являются чем-то совершенно иным. Называть их механизмами неподдельности было бы точнее, но как же скучно это звучало бы!
Цифровые подписи во многих отношениях превосходят обычные. Их главное преимущество, несомненно, в том, что они вычисляются непосредственно на основе исходных данных. Если данные как угодно меняются, цифровая подпись меняется вместе с ними. Следовательно, каждая версия документа имеет свою уникальную подпись. Конечно, когда мы расписываемся, чтобы подтвердить курьерскую доставку, мы выводим нашу подпись не так старательно, как при оформлении паспорта, но в целом эти отличия несущественны.
Еще одно ценное свойство цифровых подписей состоит в том, что их можно воссоздать с абсолютной точностью. Если снова подписать те же данные с помощью того же ключа, получится та же цифровая подпись. Потенциально это может даже служить доказательством в суде. Подписи, поставленные от руки, такой точностью не обладают, и порой для подтверждения соответствия двух подписей не обойтись без специалиста.
Однако у цифровых подписей есть и недостатки. Самым важным, пожалуй, можно назвать их зависимость от криптографической инфраструктуры, что означает необходимость хороших методов управления ключами и надежных технологий. Если у этой потенциально недешевой инфраструктуры обнаружится слабая сторона, цифровые подписи потеряют свою эффективность. Например, если кому-то удастся похитить ваш ключ, этот вор сможет создавать цифровые подписи, по всем внешним признакам неотличимые от ваших. Обычные подписи, которые ставятся от руки, не нуждаются в такой инфраструктуре и являются переносимыми в прямом смысле этого слова.
Пришло время еще раз задуматься над тем, на кого или на что мы полагаемся при определении целостности данных. Корректны ли данные, что может помочь с ответом? Мы можем подтвердить хеш MD5 загруженного файла, сверив его с тем, который опубликован на сайте. Эта проверка работает, если мы доверяем сайту. Мы можем проверить имитовставку для полученного файла, вычислив ее локально. Это тоже работает, если исходить из того, что отправитель обладает единственной копией ключа, использованного для вычисления имитовставки. Мы можем проверить цифровую подпись в электронном письме, применив к ней соответствующий проверочный ключ. Но для этого мы должны быть уверены, что открытый проверочный ключ действительно принадлежит отправителю письма.
Во всех этих примерах требуется доверие к конкретным процессам. Эффективность хеша MD5 требует уверенности в реализации сайта и управлении им. Имитовставка требует уверенности в распространении и секретности соответствующих ключей. Цифровая подпись требует уверенности в секретности закрытых ключей и подлинности открытых. Что делать, если нам недостает такого рода доверия?
Один из вариантов, который я описал ранее, говоря о годе славы «Лестер Сити», – довериться всеобщему мнению. Если все говорят, что информация корректная, мы можем ей доверять. Но этот подход требует определенной осторожности, поскольку во многом зависит от того, кто эти «все».
Граждане Северной Кореи, к примеру, находятся в условиях строгого контроля за информацией. У них очень мало контактов с внешним миром, а их возможность свободно обмениваться информацией друг с другом подавляется за счет надзора за прессой, слежки и ограничений на передвижение. Кроме того, они обязаны слушать ежедневные радиопередачи правящего режима. В результате всех этих мер они без тени сомнения верят во многие вещи, которые большинство из нас правдой не посчитает, поскольку «общественный договор» северокорейского социума представляет собой результат жесткого контроля за информацией со стороны их политического руководства.
То, что передается по северокорейскому радио, может не всегда соответствовать фактам, но, поскольку правительство контролирует распространение информации в пределах государственных границ, политические заявления, которые слышат граждане Северной Кореи, подлинны в том смысле, что до людей доходит та информация, которая для них предназначена. Тот факт, что все слышат одно и то же, и большинство граждан этому верит, укрепляет уверенность в достоверности услышанного. Но, как мы отмечали при обсуждении фейковых новостей, правда – это совсем другое дело.
Но и более демократичные, нежели Северная Корея, общества не всегда находятся в удачном положении для оценки корректности той или иной информации. Как известно, традиционные СМИ, социальные сети и поисковые системы создают так называемые пузыри фильтров, когда получение одних и тех же сведений из разных источников влияет на картину мира пользователя. Несложно поверить в достоверность какой-то информации, если «все» считают ее правдивой, или, по крайней мере, так выглядит. Однако в этих примерах понятие «все» зачастую ограничено так, что пользователь этого не видит или не понимает. Читатели отдельно взятой газеты часто придерживаются одних и тех же политических взглядов; социальные сети самоизбирательны, поскольку большинство людей выбирают себе в друзья тех, с кем имеют общие интересы; поисковые системы основаны на алгоритмах, зависящих от предыдущих действий пользователя (что он искал, какие веб-страницы посещал и т. д.). В этих случаях за понятием «все» может скрываться всего несколько человек, которые, вероятно, не отражают мнения всего общества.
Еще один интересный пример – Википедия. То, что вы прочитали на Википедии, должно быть правдой, верно? Некоторые насмехаются над самой идеей того, что кто-то может доверять этому сайту, считать его истиной в последней инстанции. Следует понимать, что практически кто угодно может создать или отредактировать страницу на Википедии. Информация в ней со временем изменяется, и для этого разработан процесс, в рамках которого пользователи читают, оспаривают и исправляют статьи. Таким образом можно утверждать, что страница на Википедии в конечном счете отражает «общепринятый» взгляд на вещи. Но слабость этого аргумента в том, что некоторые статьи активно изучаются, а в другие редко кто заглядывает, так что понятия «все» и «общепринятый» могут кардинально разниться в зависимости от конкретной страницы. Так что и качество информации, представленной на Википедии, существенно варьируется.
Предполагаемая мудрость толпы, как мы уже знаем, имеет свои нюансы. Правдивость информации во многом зависит от того, о какой толпе идет речь. Тем не менее в условиях отсутствия единого центра доверия, на который можно было бы положиться при оценке достоверности, идея использования глобального ориентира выглядит крайне убедительной. Кто-то сомневается, что Париж – столица Франции?
«Всеобщий» энтузиазм касательно той или иной информации не всегда означает, что ее правдивость будет признана глобально. И ждать месяцы и годы, пока укрепится представление о достоверности каких-то сведений, как в случае со статьями на Википедии, мы обычно тоже не можем. Как же применить эту концепцию глобального ориентира для обеспечения достоверности повседневной информации, такой как, к примеру, количество биткоинов в вашем кошельке? Где найти толпу, мудрости которой всегда можно доверять?
Сколько денег на вашем банковском счету? Не нужно отвечать! Просто подумайте о том, как вы определяете корректность этой суммы (будь она положительная или отрицательная). Откуда вы на самом деле знаете, какой у вас баланс? Нравится вам это или нет, ответ на этот вопрос сводится к необходимости доверять своему банку. Именно банк – авторитетный источник вашего баланса. Вы можете не соглашаться с деталями, но говоря откровенно, если вы ему не доверяете, вам стоит перевести свои деньги куда-то еще.
Однако для некоторых типов информации может не существовать единого авторитетного и одновременно доверенного источника. Или же мы не хотим, чтобы такой центр доверия существовал. Возьмем, к примеру, систему цифровой валюты Bitcoin. Ее основное назначение – имитировать ту свободу действий, которую мы предполагаем для наличных денег, в том числе отсутствие необходимости взаимодействий с банком и относительная анонимность производимых транзакций. Цифровые деньги могут быть обеспечены единым центральным банком, но в таком случае этому банку должны доверять все пользователи. Альтернативное решение, которое применяется в Bitcoin, – имитировать роль банка, не прибегая к его услугам.
Для чего нужен банк, если уж на то пошло? В том, что касается валютных операций, его важнейшая роль – служить доверенной стороной, наблюдающей за вашими входящими и исходящими транзакциями, неоспоримым источником истины касательно достоверности баланса на вашем счету. Банку непросто заслужить такое доверие; для получения достаточного авторитета необходимо много работать. Он должен заниматься разными взаимосвязанными видами деятельности, включая продвижение своего бренда, соблюдение финансовых норм, проведение финансового аудита, работу с персоналом и использование многочисленных физических и цифровых средств безопасности (банки – заядлые пользователи криптографии). Все это в совокупности защищает финансовую информацию, надзор за которой доверен банку. Эту информацию можно считать своего рода централизованной бухгалтерской книгой, содержащей сведения о финансовых операциях всех клиентов, перед которыми банк ответственен.
Если мы не хотим, чтобы банк надзирал за нашими транзакциями, кто будет этим заниматься? Ответ прост: «все». Идея распределенной бухгалтерской книги в том, чтобы устранить необходимость официальной централизованной версии всех финансовых транзакций (на самом деле это в равной степени относится к любой другой области, но пока что давайте ограничимся банками) и заменить ее полностью открытым журналом, копия которого есть у каждого пользователя. Иными словами, вам не нужен банк, потому что эту роль играете вы сами и все, у кого есть деньги.
На первый взгляд идея может показаться шокирующей. Каждый пользователь Bitcoin хранит собственную копию журнала со всеми транзакциями, которая отражает реальное состояние финансов в системе. Распределенный журнал в теории выглядит заманчиво, но трудность его практической реализации очевидна. Жизнеспособность этой концепции полностью зависит от того, все ли согласны с содержанием журнала.
Естественно, мы не можем рассчитывать на то, что каждый пользователь Bitcoin будет каждую ночь садиться за стол (с большим бокалом вина) и проверять достоверность каждой транзакции, чтобы установить, куда делся тот или иной биткоин. К счастью, компьютеры лучше справляются с подобного рода задачами. Однако разработка и администрирование согласованной, но в то же время распределенной версии журнала Bitcoin остается непростой задачей. И для ее решения используется оригинальный подход, почти полностью основанный на криптографии.
Для реализации распределенного журнала в Bitcoin используется концепция блокчейна. Стоит подчеркнуть, что распределенный журнал может и не быть основан на блокчейне, хотя из-за большой популярности системы Bitcoin, в которой одно зависит от другого, эти два понятия зачастую считают синонимами.
Пользователи Bitcoin объединены в одноименную сеть. Каждый из них может иметь столько «счетов», сколько пожелает. У каждого счета есть адрес – открытый криптографический ключ, с помощью которого можно проверять достоверность цифровых подписей. Следует отметить, что эти адреса, несмотря на уникальность, не предназначены для явной идентификации их владельца: это обеспечивает анонимность. Транзакция в Bitcoin представляет собой заявление (криптографически подписанное закрытым ключом плательщика) о том, что определенное количество биткоинов должно быть переведено с адреса плательщика на адрес получателя.
Каждый раз, когда в Bitcoin проводится транзакция, сведения о ней становятся доступны всем участникам сети. Таким образом Bitcoin в целом можно считать стопкой свидетельств о транзакциях, которые летают по сети туда-сюда. Учитывая появление новых транзакций раз в несколько секунд, всей этой информацией нужно достаточно четко управлять, чтобы каждый пользователь был согласен с происходящим.
Блок – это набор транзакций в Bitcoin (примерный эквивалент платежей, проведенных за десять минут). Каждый раз, когда формируется и одобряется новый блок, он «приклеивается» к предыдущим блокам, формируя постоянно растущую цепочку. Этот расширяющийся набор блоков, привязанных друг к другу, и составляет журнал Bitcoin. Поскольку все блоки состоят из данных, для их соединения требуется цифровой «клей». Возможно, вы помните, что соединение данных между собой – один из множества способов применения швейцарского ножа от криптографии – хеш-функции.
Если бы все пользователи в сети Bitcoin постоянно формировали новые блоки и пытались одновременно присоединить их к блокчейну, получился бы настоящий хаос. Откуда может взяться единая согласованная версия блокчейна? У этой задачи есть хитрое решение: сделать процесс формирования блоков достаточно сложным, но не невозможным. Как результат, новые блоки создаются медленней, примерно раз в десять минут. Это достаточно быстрый темп для того, чтобы новые транзакции оказывались в журнале без существенной задержки, но достаточно медленный, чтобы новые блоки успевали распространяться по сети Bitcoin, и большинство пользователей имели возможность их одобрить, прежде чем появится следующий блок.
Процесс создания нового блока, лежащий в основе Bitcoin, называется майнингом (от англ. mining – добыча полезных ископаемых). Вам не показалось: термин и должен намекать, что это требует существенных усилий. Задача майнинга – собрать ожидающие своей очереди транзакции, которых еще нет в блоках текущего блокчейна, проверить, правильный ли у них формат, и связать их вместе при помощи криптографии. В рамках этого процесса майнер должен прикрепить к началу нового блока некие данные – заголовок. Этот заголовок содержит сведения о том, какой блок, по мнению майнера, находится в данный момент в конце блокчейна (к нему должен быть присоединен этот новый блок), и криптографическую «сводку» обо всех транзакциях в новом блоке. Но у заголовка есть еще один элемент, который и делает майнинг новых блоков таким сложным.
Как вы помните, хеш-функции представляют собой криптографические «соковыжималки», которые сжимают входные данные в небольшое число (хеш). Если захешировать какие-то данные, любое изменение в них будет приводить к получению новых хешей без какой-либо видимой связи между ними. Иными словами, хеш выглядит так, будто он сгенерирован случайным образом. Поэтому, если вы хотите подобрать данные с определенным хешем, вам остается только хешировать разные значения, пока не повезет.
Именно с этой проблемой сталкивается майнер биткоинов. Он должен включить в заголовок блока случайно сгенерированное число, которое наделяет хеш всего заголовка определенным свойством. Как только майнер собрал достаточное количество транзакций, чтобы сформировать блок, он приступает к перебору случайных чисел в надежде на то, что одно из них приведет к получению нового блока с правильным хешем. Это несколько суматошный процесс, так как сформировать новый блок пытаются майнеры со всей сети, соперничающие между собой. Тот, кто сделает это первым, «выиграет». Но какова награда?
Никто в здравом уме не стал бы тратить существенные ресурсы на создание новых блоков просто ради забавы. В процессе майнинга приходится перебирать миллионы и миллионы нечетных случайных чисел. Вариантов так много, что успешному майнеру биткоинов необходимы очень серьезные вычислительные мощности. Поэтому тот, кому удается создать новый блок, получает финансовую награду, конечно же, в биткоинах.
Как только новый блок сформирован, об этом уведомляются все пользователи сети Bitcoin, каждый из которых добавляет этот блок в свою локальную версию блокчейна (ту, которую они в настоящий момент считают корректной). Любой пользователь может проверить достоверность этого нового блока и убедиться в том, что его версия блокчейна – та же, что и у всех остальных. Но они могут быть уверены только в достаточной степени, поскольку существует вероятность, что два разных пользователя примерно в одно и то же время сгенерировали два разных блока. В таком случае возникают две разные версии блокчейна, на конце которых находятся разные блоки.
Эта проблема неизбежная, но разрешимая. После нахождения следующего блока одна из этих версий блокчейна расширяется дальше. Всякий раз, когда пользователь Bitcoin сталкивается с разными возможными версиями блокчейна, он выбирает ту, которая длиннее. На практике большинство транзакций в течение получаса с момента их проведения почти наверняка оказываются в общепринятой версии блокчейна (любые отличия могут найтись только в самом конце блокчейна, и их урегулирование происходит довольно быстро).
Bitcoin – это волшебный криптографический механизм. Счет привязан к криптографическому ключу, транзакции являются заявлениями с цифровыми подписями, формирование новых блоков требует решения криптографической задачи, а сам блокчейн собран воедино с помощью хеш-функций. Вот почему Bitcoin наряду с сотнями аналогичных систем цифровых денег, существующих сегодня, часто называют криптовалютой. Но причина, по которой мы обсуждаем здесь эту технологию, заключается в том, что блокчейн Bitcoin представляет собой в первую очередь механизм безопасности для обеспечения целостности данных, в данном случае целостности транзакций.
Блокчейн Bitcoin не лишен недостатков. Например, то, сколько вычислительных ресурсов и энергии уходит на формирование новых блоков, вызывает серьезные опасения относительно экологической устойчивости Bitcoin. Время от времени затраты на майнинг превышают ценность сгенерированной валюты. Но, как уже отмечалось, для реализации распределенного журнала необязательно использовать блокчейн так, как это делает Bitcoin.
Распределенные журналы не ограничиваются цифровой валютой, область их применения гораздо шире. Их можно (по крайней мере, теоретически) использовать для защиты любых данных, которые не являются конфиденциальными, но требуют абсолютной целостности: прежде всего это любые учетные данные, включая юридические договоры, документацию о цепочках поставок и правительственные реестры.
Как мы уже видели, явное преимущество распределенных журналов состоит в том, что для обеспечения целостности данных они не требуют единого центра доверия. Но это не означает, что в блокчейн или любой другой распределенный журнал нужно переносить все подряд. Архитектура распределенных журналов существенно отличается от традиционного подхода, когда для обеспечения целостности данные помещаются в защищенное централизованное хранилище. Распределенные журналы защищают данные совсем не так, как это обычно делается в настоящий момент. Это потрясающая концепция, но, если не считать Bitcoin, эффективность ее применения в качестве механизма обеспечения целостности данных еще предстоит доказать.
Сложно переоценить то, насколько важна целостность данных в нашей повседневной жизни. В материальном мире она зачастую обеспечивается опосредованно. Но в киберпространстве, где информацией относительно легко манипулировать, целенаправленное обеспечение целостности данных превыше всего.
Механизмы, обеспечивающие целостность данных, неспособны защитить их от внесения изменений, но могут предупредить нас об этих изменениях. Выбор механизма зависит от того, что в вашем представлении может пойти не так. Дружественное окружение вроде системы каталогизации книг в публичной библиотеке нуждается самое большее в легковесных средствах. Враждебные среды, начиная с собственно Интернета, требуют строгих механизмов обеспечения целостности, таких как имитовставки и цифровые подписи. Если у вас нет единого места, которому вы могли бы довериться в вопросе целостности данных, можно даже подумать о развертывании распределенного журнала.
Механизмы обеспечения целостности данных на самом деле работают. Поэтому если выбрать действительно подходящий, преступникам, как правило, не удается модифицировать сумму вашего банковского перевода, отредактировать электронное письмо от вашего провайдера или удалить предыдущие транзакции в блокчейне Bitcoin. А не удается им это потому, что у них попросту нет возможности это сделать, по крайней мере так, чтобы этого никто не заметил.
Однако эти механизмы могут лишь гарантировать, что данные не менялись с момента их создания… владельцем ключа, на котором основана имитовставка или подпись, или обладателем закрытого ключа, связанного с адресом Bitcoin, – кем бы он ни был.
Серьезные киберпреступники не тратят время на попытки манипулировать данными, целостность которых защищена. Куда более эффективная стратегия состоит в том, чтобы выдать себя за кого-то другого. Если вас ввели в заблуждение относительно личности того, с кем вы общаетесь в киберпространстве, целостность любых данных, которые вы получаете, не слишком велика: примерно как польза биткоина, когда вам нужно подбросить монету.