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