Продолжаем знакомиться с темой «Криптография». Начало -
здесь.
Общее правило: всё, что защищено паролем, защищено плохо.
Юмор заключается в том, что почти всё, что в нашем цифровом мире хоть как-то защищено, в конечном итоге защищено именно паролем. Но это я немножко забежал вперёд, чтобы нагнать драматизма.
Тема аутентификации бесконечна и многообразна как сама Вселенная. Давайте попробуем по порядку разобраться, что это такое, как организуется и когда возникает.
Допустим, есть некий ресурс, к которому желает получить доступ некий субъект. Ресурсом может быть всё что угодно - и файл в компьютере, и база данных, и какой-либо другой сервер, и личная записная книжка (бумажная), и квартира, и сейф с деньгами, и даже холодильник с едой. Сразу стоит отметить, что субъект - это совсем не обязательно конкретное двуногое существо без перьев. Субъектом, в зависимости от ситуации, может быть:
- Само собой, конкретное двуногое существо без перьев. В этом случае уместно говорить о том, что человеку предоставляется персональный доступ к ресурсу.
- Техническая система. Файл, лежащий на диске, может прочитать не только человек (глазами с монитора), но и, например, вирус (не повезло). Или антивирус (всё хорошо). Просто будем иметь в виду, что технические системы активно взаимодействуют друг с другом, и происходит это обычно безо всякого участия человека.
- Ролевой доступ.
- «Любой, кто (или что) обладает определённым свойством». Например, знает секретный пароль. Или имеет конкретный отпечаток пальца. Или документ с печатью.
Если внимательно присмотреться к этим вариантам, то становится очевидно, что они очень интересным образом взаимно переплетаются. Например, мы зашифровали файл и отправили его конкретному человеку. Нам нужно, чтобы только он смог его прочитать. Это у нас вариант №1, то есть персональный доступ. Но беда в том, что человек не может в уме провернуть расшифровывающий алгоритм, и он прибегает к услугам компьютера. Файл расшифровывает компьютер, то есть техническая система, а это уже вариант №2. Да и доступ-то не совсем персональный потому что как-то так само собой получилось, что шифровку сможет прочитать любой, у кого есть необходимый для дешифрования секретный ключ. А это вариант №4.
С электронной подписью (в более общем случае - с любым выполнением авторизованного действия с цифровыми данными) - та же история. Действие по-любому выполняется технической системой, которая, при этом, будучи не полностью подконтрольной пользователю, наделяется его полномочиями. А ответственность, конечно же, при этом всё же оказывается на самом пользователе.
Реальность такова, что понятие действующего субъекта размывается, притом иногда весьма драматическим образом. Мы видим изображение на экране, щёлкаем мышью, нажимаем кнопки на клавиатуре, и думаем, что это именно мы таким образом выполняем авторизованное действие над видимыми нам объектами. А на самом-то деле то, что мы видим - это всего лишь показанное нам представление данных, и действие, вполне вероятно, выполняется совершенно неведомым нам серверным ПО, повинующимся командам, полученным от весьма смутно нами осознаваемого клиентского ПО. Притом, что характерно, ситуация симметричная: точно так же, как мы не можем быть до конца уверены в своём понимании всего того, что происходит при нажатии кнопок, так и техническая система не может быть до конца уверена, что за клавиатурой именно тот пользователь, которому разрешён доступ, а не выведавший пароль злоумышленник.
И, конечно же, совсем не удачно то, что в цифровом мире единственное, что может являться ключом - это информация. А информация, как известно, обладает свойством сверхтекучести.
Можно выделить две основных принципиально отличающихся друг от друга ситуации, при которых используются пароли:
- Опознавание субъекта.
- Пароль как кусок данных, необходимый для правильного срабатывания алгоритма.
В первом случае пароль нужен системе для того, чтобы вычислить один бит информации - «да, это действительно тот пользователь, кем он представился» или «нет, это не он». Когда в основе авторизованного доступа лежит именно этот принцип, защита информации работает исключительно до тех пор, пока противник не получил доступ к «сырым данным» (например, выкрутил из компьютера жёсткий диск и подключил его к другому компьютеру).
Второй вариант намного интереснее. Для понимания скажу, что он, например, используется, когда мы защищаем паролем zip-архив. Данные в запароленном архиве хранятся в зашифрованном виде, а в качестве ключа шифрования/дешифрования (применяется симметричный алгоритм) используется хеш-функция пароля (лучше, конечно, не просто хеш, а что-нибудь потяжелее типа
PBKDF2). Таким образом, в системе нигде не хранится ни сам пароль, ни даже его хеш-функция. Впрочем, взломать запароленный архив всё же можно методом перебора паролей, но если пароль выбран длинный и сложный, процесс может затянуться на тысячелетия.
Думаю, излишним будет говорить, что в криптоанархистских системах простое опознавание субъекта - штука совсем не пригодная ни для чего. Нужно изначально исходить из того, что противник может завладеть «сырыми данными», где бы они ни находились.
Опознавание субъекта по паролю много где разумно и много где применимо - в корпоративной сети, на сайте доставки пиццы, в твиттере (с оговорками). Но доверять свою жизнь и благополучие своих близких системе, в которой авторизация работает на принципе опознавания, не стоит ни в коем случае. Скайп работает на этом принципе. Любая система онлайн-общения, предполагающая коллективный доступ к материалам (вконтакт, фэйсбук, ЖЖ, форумы, чаты, тот же твиттер) - тоже. Выводы делайте сами. Аутентификация пользователя операционной системы (любой, вне зависимости от варианта - локальная или доменная, паролем или даже токеном) - тоже основана на принципе опознания. Это плохо, но паниковать не стоит. Это просто надо знать и помнить.
Кстати сказать, любая биометрическая идентификация всегда работает только по принципу опознавания. По-другому не бывает.
Дополнительный аргумент против опознавания заключается в том, что в хардкорной криптоанархии, чаще всего, нужно свято блюсти анонимность. А это вступает в фундаментальное неустранимое противоречие с самим принципом опознавания пользователя: если пользователь не должен быть опознаваемым, то о какой системе опознавания может идти речь?
То, что мы забраковали принцип опознавания субъекта, сразу оставляет за бортом рассмотрение подавляющего большинства того, что наработано индустрией по теме «аутентификация»: и Kerberos, и OpenID, и многое, многое другое.
Нет хозяина
У настоящей криптоанархистской системы взаимодействия должна быть ещё одна маленькая особенность, которую также ни в коем случае нельзя упускать из виду. У неё нет и не может быть хозяина. До сих пор я об этом не говорил, но в процессе предоставления авторизованного доступа к чему бы то ни было, участвуют две роли. Есть не только пользователь, которому предоставляется (или не предоставляется) ресурс, но и хозяин ресурса. Если брать криптоанархистскую систему в целом, во всей её полноте, то у неё нет хозяина. Следовательно, авторизованный доступ к этой системе (как к единому целому) невозможен.
Криптоанархистская сеть - это не информационная система, в которую человек логинится, а взаимоувязанное горизонтальными связями сообщество частных информационных «огородиков». Некоторые из этих «огородиков», конечно, могут быть больше похожи на обширные латифундии, но единой централизованной системы предоставления доступа к владениям всех участников быть не может. Каждый крестьянин, сколь бы он ни был чахлым и ничтожным, на своих личных владениях - единственное лицо, решающее, кого и с какими полномочиями пускать, а кого оставить за порогом.
Аутентификация технических средств
Когда нужно сделать так, чтобы техническая система получала авторизованный доступ к ресурсу, то использовать для этой цели пароль - можно, но не нужно. Техническое средство само внутри себя может отрабатывать криптографические операции (в отличие от человека, который обычно не столь силён в арифметике). Использование заведомо более слабой парольной аутентификации имеет смысл, только когда на то есть веские причины.
Аутентификация пин-кодом
Казалось бы, пин-код - это какой-то совсем убогий недопароль (всего несколько цифр, курам на смех), но на самом деле всё хитрее и при грамотной реализации получается вполне приемлемая надёжность. Хитрость в том, что пин-код должен обрабатываться там, куда враг пробраться не может. Например, внутри специализированного чипа. И этот самый обработчик пин-кода может быть максимально вредным: например, после двукратного неправильного ввода может предложить попробовать ещё раз через неделю. А после трёхкратного - совсем сказать «до свиданья». Преимущество пин-кода - в том, что его легко запомнить и можно быстро вводить (что не скажешь про по-настоящему надёжные пароли). Недостаток - в том, что для того, чтобы реализовать эту технологию, нужна специальная стойкая к вскрытию «железка».
На всякий случай ещё раз напомню центральную мысль, которую следует осознать и запомнить: в криптоанархистской системе пароль можно вводить с единственной целью - получить его хеш, и этот хеш использовать как секретный ключ шифрования. Ничего другого с паролем или полученным из него хешем делать нельзя.
Можно сформулировать простое эмпирическое правило: если система просит на входе не только пароль, но и имя пользователя, скорее всего она работает по принципу опознавания, и поэтому настоящая шифропанковская секретность в ней уже не обеспечена. Если для входа нужен только пароль, велика вероятность, что хотя бы в этом плане сделано то, что нужно. Возможны, конечно, разные варианты, но все они очень нетипичны.
Продолжение следует.