А теперь поговорим об обновлениях программ и о лазейках. Все программы, работающие на всех компьютерах, которые вы считаете вполне надежными, на самом деле, как бы это помягче выразиться, полная дрянь. Потому что люди несовершенны, им свойственно ошибаться, вот почему в каждой книге есть опечатки. Разница в том, что в случае с книгой вы даже с опечатками можете догадаться, о чем именно хотел рассказать писатель, тогда как мелкие ошибки в компьютерных программах ведут к сбоям, потере данных и, разумеется, к риску того, что другие программисты – назовем их хакерами – могут проникнуть в программу, захватить управление вашим компьютером и погубить вас.
Потому мы и говорим, что «безопасность – это не продукт, а процесс». Это значит, что мы всегда будем обнаруживать баги в ваших компьютерах, а обнаружив, постараемся их исправить. Вот почему каждый ваш компьютер постоянно требует установить обновления – именно таким способом его создатели ставят заплатки на проблемные места.
Но криптография – штука серьезная. Если программист хорошо знает свое дело и не насажал ошибок, сообщения, зашифрованные его программой, будут сопротивляться попыткам грубого взлома до самого конца пространства-времени (см. выше). И если правительство хочет добраться до чьих-либо секретов, ему приходится искать другие способы. Зачем растрачивать ресурсы и время, пытаясь пробиться в математически неуязвимую дверь? У правительства есть много других методов.
Например, они могут послать человека, который проникнет к вам в дом и установит крохотную, не больше булавочной головки, видеокамеру в таком месте, откуда хорошо виден ваш экран. Или дождутся, пока вы оставите свой ноутбук без присмотра в гостиничном номере, и пошлют другого человека, который вскроет никуда не годные (наверняка!) дверные замки и пролезет в ваш компьютер с помощью перепрошитых USB‐устройств, или установит клавиатурный перехватчик, или сделает еще что-нибудь. Но все эти механические методы отдают стариной, им не хватает истинной элегантности цифрового взлома.
И это возвращает нас к теме «безопасность – это процесс». Чтобы программа была защищенной, она должна регулярно получать обновления от своих создателей, потому что они постоянно находят какие-то ошибки и будут находить их всегда, поэтому безопасность – это процесс, а не продукт.
А если заставить компанию выпустить обновление, которое вместо исправления ошибок, наоборот, внедрит какой-нибудь баг? Компании не любят так поступать, но есть и другие способы – например, подкупить сотрудника низшего уровня. Или пусть главный прокурор надавит на главу компании, и тот под угрозой тюрьмы поручит своим шестеркам написать шпионскую программу и под видом обновления внедрить ее в компьютер к нужному человеку. Задача облегчается тем, что параноики, обеспокоенные слежкой со стороны правительства, обычно усерднее других устанавливают обновления безопасности.
Тут-то в дело и вступает бинарная прозрачность. Даже если компания хочет под видом обновлений безопасности пропихнуть шпионскую программу, она вряд ли станет рассылать ее всем своим пользователям, в первую очередь потому, что чем шире вещь распространяется, тем больше вероятность, что кто-то заметит подмену и забьет тревогу. Лучший способ поставить целенаправленную лазейку – отправить ее целенаправленно: конкретному пользователю, в конкретный город, в регион или даже в страну, но в идеале не всем ее жителям, а выборочно, потому что среди этих «всех» может найтись скучающий, упертый студент-выпускник, который в поисках темы для дипломной работы распотрошит любое попавшееся ему обновление от любой компании.
А это наводит нас на хороший способ обнаружения червоточин: надо сравнить полученное вами обновление безопасности с обновлениями, которые получили все остальные. Вот она, бинарная прозрачность: программы, снабженные соответствующими модулями, будут автоматически вычислять контрольную сумму каждого прилетевшего обновления и отсылать ее на проверочные сервера, желательно сопроводив контрольными суммами программы до и после установки обновления. Иногда программа имеет различные версии для разных языков, поэтому английская заплатка отличается от китайской – ведь сообщения об ошибках поступают на разных языках. Но если два китайских пользователя получают разные заплатки, это наводит на подозрения.