Сообщений 8    Оценка 60        Оценить  
Система Orphus

Хранение секретов

Глава из книги “Практическая криптография”

Авторы: Нильс Фергюсон
Брюс Шнайер

Источник: Практическая криптография
Материал предоставил: Издательство ''Вильямс''
Опубликовано: 18.10.2006
Версия текста: 1.0
22.1. Диск
22.2. Человеческая память
22.2.1. Солим и растягиваем
22.3. Портативное хранилище
22.4. Идентификатор безопасности
22.5. Безопасный пользовательский интерфейс
22.6. Биометрика
22.7. Однократная регистрация
22.8. Риск утраты
22.9. Совместное владение секретом
22.10. Уничтожение секретов
22.10.1. Бумага
22.10.2. Магнитное хранилище
22.10.3. Полупроводниковые записывающие устройства

В разделе 9.3 обсуждается хранение временных секретов, таких, как ключи сеанса. А где же хранить долгосрочные секреты — скажем, пароли или закрытые ключи? В контексте безопасности хранение секретов должно соответствовать двум прямо противоположным требованиям. Во-первых, секреты должны сохраняться в секрете. Во-вторых, риск полной потери секретов (т.е. невозможность найти собственноручно спрятанный секрет) должен быть минимальным.

22.1. Диск

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

Гораздо лучше, если ключи пользователя А будут храниться в его карманном компьютере (КПК), который гораздо реже одалживают другим людям и, кроме того, всегда носят с собой. (В качестве альтернативы КПК можно было бы применять мобильный телефон или наручные часы, но использование их для хранения секретов потребовало бы обновления соответствующей инфраструктуры, что выходит за рамки наших возможностей.)

Вам, вероятно, кажется, что шифрование секретов улучшило бы их безопасность. Разумеется, это так, но шифрование с помощью чего? Для шифрования секретов нужен главный ключ, который, в свою очередь, тоже должен где-то храниться. Хранение его вместе с зашифрованными секретами не принесло бы никакой пользы. Тем не менее шифрование секретных данных — действительно хороший метод сокращения их количества и размера, а потому оно широко используется в сочетании с другими методами. Например, закрытый ключ RSA может иметь несколько тысяч бит в длину. Применив к нему симметричное шифрование, мы можем значительно сократить объем пространства, необходимый для хранения этого ключа.

22.2. Человеческая память

Следующая идея — хранить ключ в памяти самого пользователя А. Мы попросим его запомнить пароль, а затем зашифруем с помощью этого пароля все остальные ключи. Зашифрованные ключи могут быть помещены в любое удобное место, например на жесткий диск. Кроме того, ключи можно разместить на Web-сервере, чтобы пользователь А загружал их на любой компьютер, с которым работает в данный момент.

Человечество славится своими никудышными способностями к запоминанию паролей. Если мы выберем очень простые пароли, то не получим никакой безопасности. Простых паролей слишком мало, чтобы они обеспечивали необходимую секретность: злоумышленник может просто их перебрать. Использование в качестве пароля, скажем, девичьей фамилии своей матери не обеспечит должной защиты; ее фамилия, скорее всего, известна многим. Впрочем, даже если это и не так, злоумышленнику будет достаточно перебрать несколько тысяч фамилий, чтобы отыскать нужную.

Хороший пароль должен быть непредсказуем. Другими словами, он должен содержать большое количество энтропии. Обычные слова не обладают достаточной энтропией. Английский язык насчитывает около полумиллиона слов (и это включая все длинные и непонятные слова, внесенные в полный словарь языка), поэтому применение в качестве пароля одного слова из словаря обеспечит не более 19 бит энтропии. Оценки количества энтропии на один символ текста, написанного на английском языке, несколько отличаются, но в среднем составляют примерно 1,5(2 бит на один символ.

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

ПРИМЕЧАНИЕ

Для математиков: это пароли, выбранные с помощью вероятностного распределения, обладающего энтропией в 128 бит.

Исходя из оптимистической оценки в 2 бита энтропии на символ, для получения 128 бит энтропии нужны пароли в 64 символа длиной. Это неприемлемо. Пользователи просто откажутся запоминать пароли такого размера.

Что, если мы пойдем на компромисс и согласимся с энтропией 64 бит? Это уже минимально допустимый уровень безопасности. Если на каждый символ пароля приходится по 2 бита энтропии, нужно, чтобы пароль содержал по крайней мере 32 символа. Даже подобное послабление окажется непосильной задачей для среднестатистического пользователя. Не забывайте — на практике длина большинства паролей составляет лишь 6(8 символов.

Для решения этой проблемы пароли можно было бы назначать автоматически. Впрочем, вы когда-нибудь пытались работать с системой, которая радостно сообщает, что ваш пароль выглядит как “7193275827429946905186”? Или, скажем, “aoekjk3ncmakwe”? Обычный человек просто не в состоянии запомнить подобные вещи, поэтому данный ход не пройдет. (На практике пользователь, как правило, записывает свой пароль на бумажке, но об этом речь идет в следующем разделе.)

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

В качестве пароля пользователь А мог бы применять какую-нибудь фразу наподобие: “Розовые занавески порхают над океанами”. Это совершенно бессмысленная фраза, но запомнить ее нетрудно. Кроме того, данная фраза состоит из 38 символов, поэтому содержит примерно 57(76 бит энтропии. Если же пользователь А расширит эту фразу примерно до следующей: “Занавески в розовый горошек порхают над морями любви”, он получит 52 символа, которые могут применяться в качестве вполне неплохого ключа с энтропией 78(104 бит. Набрать на клавиатуре такую фразу можно всего за несколько секунд, что, разумеется, гораздо быстрее, нежели набирать строку случайных чисел. Мы исходим из факта, что запомнить идентификационную фразу намного проще, чем случайные числа. Большинство мнемонических приемов основаны на идее преобразования случайных данных в нечто похожее на наши идентификационные фразы.

Некоторые пользователи не слишком любят стучать пальцами по клавиатуре, поэтому выбирают свои пароли по-другому. Возьмем, например, поистине замечательное слово “Длспус,иносивсссцмбпсн?”. Оно выглядит полнейшей абракадаброй, если не знать, что это первые буквы слов некоторого вполне осмысленного предложения. В данном случае мы воспользовались цитатой из шекспировского “Гамлета”: “Достойно ль смиряться под ударами судьбы, иль надо оказать сопротивленье и в смертной схватке с целым морем бед покончить с ними?” Разумеется, на практике использовать цитаты из классической литературы не следует. Литературные тексты слишком доступны злоумышленнику, а сколько подходящих фраз может содержаться в книгах, стоящих на полке у пользователя А? Поэтому пользователю А следует придумать что-нибудь оригинальное, чего никто не мог бы разгадать.

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

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

22.2.1. Солим и растягиваем

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

Первый прием состоит в том, чтобы добавить соли (salt). “Соль” — это случайное число, которое хранится вместе с данными, зашифрованными с помощью пароля. Если это возможно, используйте 256-битовую соль.

Следующий шаг — это растягивание (stretching) пароля. По своей сути растягивание представляет собой очень длинный процесс вычисления. Пусть p — это пароль, а s — соль. Используя любую криптографически сильную функцию хэширования h, можно вычислить следующее:

X0 := 0,

Xi := h(Xi-1 || p || s) для i = 1, . . . , r,

K := Xr.

Полученное значение K применяется в качестве ключа для фактического шифрования данных. Параметр r — это количество итераций данного алгоритма, которое должно быть настолько большим, насколько это практически возможно. (Думаем, нам не нужно лишний раз подчеркивать, что значения Xi и K должны быть 256 бит длиной.)

Рассмотрим описанный процесс с точки зрения злоумышленника. Зная соль s и некоторые данные, зашифрованные с помощью ключа K, мы пытаемся найти K, перебирая различные пароли. Для этого мы выберем некоторый пароль p, вычислим соответствующее значение K, расшифруем данные и посмотрим, имеет ли смысл полученный открытый текст. Если расшифрованный текст окажется бессмысленным, выбранный пароль p должен быть неправильным. Чтобы проверить одно значение p, необходимо выполнить r различных операций хэширования. Чем больше значение r, тем больше работы придется проделать злоумышленнику.

В нормальных ситуациях растягивание пароля должно выполняться при каждом использовании последнего. Напомним, что это происходит в тот момент, когда пользователь только что ввел пароль. Обычно ввод пароля занимает несколько секунд, поэтому вполне допустимо потратить на его обработку, скажем, еще 200 мс. Вот наше правило выбора r: значение r должно быть таким, чтобы вычисление K(s, p) занимало от 200 до 1000 мс на оборудовании пользователя. С течением времени компьютеры работают все быстрее и быстрее, поэтому r должно постепенно увеличиваться. В идеале приемлемое значение r следует определять экспериментальным путем, когда пользователь впервые выбирает пароль, и хранить r вместе с s. (Обязательно убедитесь, что значение r не слишком мало и не слишком велико.)

Какой выигрыш мы получили? Если r = 220 (это чуть больше миллиона), тогда злоумышленнику для проверки каждого варианта пароля придется проделать по 220 операции хэширования. Перебор 260 паролей требует выполнения 280 операций хэширования, поэтому использование r = 220 эквивалентно увеличению размера пароля на 20 бит. Чем больше значение r, тем больший выигрыш в размере пароля мы получаем.

Теперь посмотрим на эту ситуацию с другой стороны. Параметр r не дает злоумышленнику извлечь пользу из появления высокоскоростных компьютеров, поскольку с увеличением мощности компьютеров возрастает и значение r. Это нечто наподобие компенсатора закона Мура (Moore’s law), но только в долгосрочной перспективе. Через 10 лет злоумышленник может воспользоваться технологией следующего десятилетия, чтобы взломать пароли, с которыми мы работаем сегодня. Поэтому нам все еще нужно обеспечивать приличный уровень безопасности и использовать пароли, которые содержат большое количество энтропии.

Это, между прочим, еще один аргумент в пользу применения протокола согласования ключей с прямой безопасностью. Каким бы ни было наше приложение, вполне вероятно, что закрытые ключи пользователя А будут защищены паролем. Через 10 лет у злоумышленника появится возможность определить пароль пользователя А. Но если ключ, зашифрованный с помощью пароля, применялся только для запуска протокола согласования ключей с прямой безопасностью, тогда, даже взломав ключ, злоумышленник не узнает ничего ценного. К тому времени ключ пользователя А больше не будет действительным (он давным-давно устареет), а знание его старого закрытого ключа никак не поможет раскрыть ключи сеанса, которые применялись 10 лет назад.

Наличие соли мешает злоумышленнику сэкономить свои усилия, когда он пытается одновременно взломать большое количество паролей. Предположим, что у системы есть миллион пользователей. Каждый из них хранит на диске файл со своими ключами, зашифрованный с помощью растянутого пароля соответствующего пользователя. Если бы мы не использовали соль, злоумышленник мог бы атаковать систему следующим образом: взять пароль p, вычислить растянутый ключ K и попытаться расшифровать каждый из этих файлов с помощью K. Для каждого пароля значение функции растягивания нужно подсчитать только один раз, а полученный ключ может быть использован злоумышленником, чтобы попытаться расшифровать сразу миллион файлов.

Добавляя к функции растягивания соль, мы делаем описанную ситуацию невозможной. Все значения соли — случайные числа, поэтому каждый пользователь будет применять свою соль. Теперь злоумышленнику придется подсчитывать значение функции растягивания не для каждого пароля, а для каждой комбинации “пароль(файл”. Это потребует от него намного больше усилий, а для пользователей системы расходы окажутся незначительными.

Какого размера должно быть значение соли? Мы не будем отвлекаться на подробный анализ этого вопроса. Возможно, вам хватит и 128-битового значения (если система не допускает проведения атак, в основе которых лежит парадокс задачи о днях рождения), но зачем экономить на таких мелочах? В наше время биты очень дешевы, и использование 256-битового значения соли удовлетворит любые потребности.

Кстати, будьте очень внимательны, используя соль и растягивание. Однажды нам попалась система, в которой были замечательно реализованы оба этих приема. Затем, однако, какому-то программисту пришло в голову улучшить пользовательский интерфейс, предоставляя более быстрый ответ относительно того, правилен ли введенный пользователем пароль. Для этого программист сохранял контрольную сумму каждого пароля, что свело на нет всю процедуру применения соли и растягивания. Если время отклика системы оказывается недопустимо медленным, вы можете немного уменьшить значение r, но убедитесь, что злоумышленник сможет проверить правильность пароля, только выполнив по меньшей мере r операций хэширования.

22.3. Портативное хранилище

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

Как разработчику, вам не придется предпринимать каких-либо действий для реализации данного метода хранения. Пользователи всегда будут записывать пароли на клочках бумаги, какие бы правила вы ни установили и как бы ни настроили систему паролей.

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

22.4. Идентификатор безопасности

Более удачное (и более дорогостоящее) решение — это использование устройства, названного идентификатором безопасности (secure token). Это маленький компьютер, который пользователь может носить с собой. Внешний вид идентификатора безопасности может варьироваться в широких пределах — от смарт-карты (которая выглядит в точности как кредитная карта) до приборов iButton, USB-устройств или карт формата PCMCIA. Главными особенностями такого устройства являются наличие энергонезависимой памяти (т.е. памяти, которая сохраняет свои данные после выключения компьютера) и центрального процессора.

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

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

ПРИМЕЧАНИЕ

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

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

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

Вы можете попробовать решить эту проблему путем обучения. Среди любимых средств воздействия на сознание пользователей можно назвать видеопрезентации “Корпоративная безопасность в офисе”, отвратительные и совсем не смешные плакаты “Возьмите свои смарт-карты с собой на обед”, а также лекции на тему “Если я еще когда-нибудь увижу смарт-карту вставленной в компьютер, хозяин которого ушел покурить, он прослушает эту лекцию еще 50 раз”. Впрочем, существуют и другие пути решения этой проблемы. Сделайте так, чтобы идентификатор безопасности был ключом не только к секретным данным, но и к дверям офиса. Теперь пользователь будет вынужден брать идентификатор с собой, чтобы попасть обратно в офис. Настройте автомат, продающий кофе, таким образом, чтобы он выдавал стаканчик с кофе только при наличии идентификатора безопасности. Это не позволит пользователям оставлять идентификаторы подключенными к компьютеру на время своего отсутствия. Иногда безопасность системы полностью обеспечивается подобными примитивными мерами, но они оказываются гораздо эффективнее многочисленных плакатов, правил и призывов.

22.5. Безопасный пользовательский интерфейс

Несмотря на бесспорные достоинства, идентификатор безопасности имеет один существенный недостаток. Пароль, который используется для доступа к содержимому идентификатора, должен вводиться в компьютер или другое аналогичное устройство. Это не составит проблемы, если мы полностью доверяем своему компьютеру, однако, как известно, компьютеры не настолько хорошо защищены, чтобы можно было на них надеяться. Действительно, смысл хранения секретных ключей за пределами компьютера состоит именно в том, что мы не совсем ему доверяем. Можно достичь более высокого уровня безопасности, если сам идентификатор будет оснащен встроенным безопасным пользовательским интерфейсом. Теперь пароль (или, скорее всего, PIN-код) можно вводить прямо в идентификатор безопасности, не полагаясь на внешнее устройство.

Наличие у идентификатора безопасности собственной клавиатуры защитит PIN-код от взлома. Разумеется, после введения PIN-кода компьютер все равно узнает ключ и может делать с этим ключом все, что ему вздумается. Таким образом, мы все еще ограничены безопасностью компьютера в целом.

Чтобы предотвратить подобные проблемы, необходимо внедрить криптографические процессы, выполняемые при участии секретного ключа, в сам идентификатор безопасности. Это требует применения в идентификаторе специализированного кода, благодаря чему тот быстро превращается в полноценный компьютер. На сей раз, однако, это будет доверенный компьютер, который пользователь может носить с собой. Доверенный компьютер может реализовать компоненты каждого приложения, критические для безопасности, на самом идентификаторе безопасности. В подобной ситуации для идентификатора безопасности важно наличие дисплея, чтобы пользователь видел, какие действия он авторизует, вводя свой PIN-код. В типичной ситуации пользователь управляет приложением с помощью мыши и клавиатуры основного компьютера. Когда, например, пользователь должен авторизовать банковский платеж, компьютер отправляет соответствующие данные идентификатору безопасности. Последний отображает на своем дисплее сумму платежа и другие параметры транзакции, а пользователь авторизует платеж, введя свой PIN-код. Затем идентификатор подписывает параметры транзакции, а основной компьютер завершает ее выполнение.

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

Описанная ситуация может служить хорошим примером конфликта между функциональностью и безопасностью. Для пользователей важно иметь возможность загружать программы и запускать их, когда они пожелают. Кроме того, им хотелось бы доверять своему компьютеру ценную информацию. Учитывая текущее положение дел в обеспечении безопасности операционных систем, мы просто не в состоянии совместить в одном и том же устройстве гибкость, которую предоставляет возможность загрузки программ, и уровень безопасности, который требуется системе. А если придется делать выбор между безопасностью и возможностью загрузки программы, которая отображает на экране танцующих свинок, пользователи, вне всяких сомнений, выберут последнее.

22.6. Биометрика

Те, кто интересуется последними веяниями моды, могут добавить к своему арсеналу средств безопасности еще и биометрику. В идентификатор безопасности можно встроить что-нибудь наподобие сканера отпечатков пальцев или сетчатки глаза. В настоящее время биометрические устройства еще не получили широкого распространения. Сканеры отпечатков пальцев стоят не так уж и дорого, но безопасность, которую они обеспечивают, крайне сомнительна. В 2002 году криптограф Цутому Мацумото (Tsutomu Matsumoto) со своими тремя учениками показал, как обмануть все имеющиеся в продаже сканеры отпечатков пальцев, используя только подручные материалы [63]. Оказалось, что с созданием искусственного пальца по свежему отпечатку (как те, которые мы оставляем на гладкой поверхности) справится любой сообразительный старшеклассник.

В действительности нас шокировало не то, что устройства считывания отпечатков пальцев можно обмануть, а то, как это просто. Что еще хуже, производители биометрических устройств постоянно рассказывали о том, какую высокую безопасность обеспечивает биометрическая идентификация. Они никогда не говорили, как легко подделать отпечатки пальцев. И вдруг на сцене появляется математик (даже не эксперт по биометрике!), который одним взмахом руки развенчивает все устоявшиеся мифы. У нас есть два предположения: либо производители биометрических устройств знали об этом и бесстыдно обманывали нас, либо они не знали об этом, а значит, совершенно некомпетентны в своей области. Нам нужно действительно хорошо подумать о том, насколько безопасны остальные биометрические системы.

Тем не менее, даже несмотря на то что сканеры отпечатков пальцев легко обмануть, они все еще могут сослужить хорошую службу. Предположим, у нас есть идентификатор безопасности с небольшим дисплеем, небольшой клавиатурой и сканером отпечатков пальцев. Чтобы добраться к ключу, необходимо получить физический доступ к идентификатору безопасности, узнать PIN-код и подделать отпечаток пальца. Все это требует от злоумышленника намного больших усилий, чем любое из предыдущих решений. Это, пожалуй, самая лучшая из практических схем хранения ключей, которую можно реализовать на данный момент. С другой стороны, подобный идентификатор безопасности будет стоить недешево, поэтому использовать его смогут далеко не все.

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

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

22.7. Однократная регистрация

Как уже не раз отмечалось, среднестатистическому пользователю приходится запоминать слишком много паролей. В связи с этим особую привлекательность приобретает идея однократной регистрации (single sign-on — SSO). Она состоит в том, чтобы предоставить пользователю один главный пароль, который, в свою очередь, будет использоваться для расшифровки всех остальных паролей, применяемых пользователем в различных приложениях.

Для реализации этой схемы все приложения должны уметь взаимодействовать с системой однократной регистрации. Каждый раз, когда приложению нужен пароль, оно должно запрашивать его не у пользователя, а у системы однократной регистрации. Однако на практике это не срабатывает. Данный процесс еще не стандартизирован, а пока этого не случится, он не будет происходить автоматически. Только подумайте, сколько различных приложений придется подвергнуть изменениям, чтобы они автоматически получали свои пароли у системы однократной регистрации.

Более простая идея состоит в том, чтобы создать небольшую программу, которая будет хранить пароли в текстовом файле. Пользователь А вводит свой главный пароль, а затем использует привычные операции копирования и вставки, чтобы скопировать пароль из системы однократной регистрации в нужное приложение. Брюс однажды представил широкой общественности свою программу под названием Password Safe, которая занималась именно этим. К сожалению, данная программа не более, чем цифровая версия клочка бумаги, на котором пользователь А записывает свои пароли. Разумеется, она очень полезна и определенно лучше клочка бумаги, если мы всегда используем один и тот же компьютер. Тем не менее она никак не является тем самым глобальным решением, которым должна была бы стать идея однократной регистрации.

22.8. Риск утраты

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

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

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

22.9. Совместное владение секретом

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

Существует одно криптографическое решение, которое может применяться для хранения секретных ключей. Оно называется совместным владением секретом (secret sharing), что не совсем корректно, поскольку означает, что ваш секрет известен еще нескольким людям. Это не так. Идея состоит в том, чтобы разбить секрет на несколько различных частей. Это можно сделать таким образом, чтобы для восстановления секрета требовалось собрать вместе, скажем, три из пяти частей. Затем каждая часть секрета передается одному из руководителей компании. Вся хитрость такого приема заключается в том, что любые вместе взятые два человека не знают о секретном ключе абсолютно ничего.

С академической точки зрения системы совместного владения секретом выглядят крайне привлекательно. Каждую часть секрета можно хранить с помощью описанных ранее методов. Правило “k из n” сочетает в себе высокую безопасность (для восстановления ключа нужны, как минимум, k людей) с высокой надежностью (n – k астей секрета могут быть утеряны без каких-либо негативных последствий). Существуют и более изощренные схемы совместного владения секретом, которые подчиняются более сложным правилам доступа, например: “пользователь А и пользователь Б или пользователь А, и пользователь В, и пользователь Г”.

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

Директор компании также не слишком подходит для хранения части ключа, поскольку, как правило, постоянно находится в отъезде. Когда вы это, наконец, осознаете, круг подходящих лиц сузится до двух-трех старших IT-менеджеров. Они могли бы использовать схему совместного владения секретом, но высокая стоимость и сложность этого решения делает его малопривлекательным.

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

Мы не будем рассматривать функционирование схем совместного владения секретом в деталях, поскольку, во-первых, для этого нужна довольно серьезная математическая основа, а во-вторых, схемы совместного владения секретом применяются крайне редко.

22.10. Уничтожение секретов

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

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

22.10.1. Бумага

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

22.10.2. Магнитное хранилище

Магнитные носители с большим трудом поддаются очистке. Между тем посвященная этому вопросу литература удивительно малочисленна. Лучшая работа, которая нам известна, — это статья Питера Гутманна [38], хотя ее технические аспекты, вероятно, уже устарели.

Магнитные носители хранят свои данные в маленьких магнитных доменах. Направление намагниченности домена указывает на то, какие данные в нем закодированы. Когда данные подвергаются перезаписи, направление намагниченности домена изменяется в соответствии с новыми данными. Существует, однако, несколько механизмов, которые препятствуют полной потере старых данных. Головка чтения/записи, которая пытается перезаписать данные, никогда не выравнивается в точности по старым данным, поэтому некоторые части старых данных остаются нетронутыми. Таким образом, перезапись носителя не приводит к полному уничтожению старых данных. Для большей наглядности это можно сравнить с перекрашиванием стены. Если мы покроем ее одним слоем краски, через него кое-где будет просвечивать старая краска. Вдобавок ко всему магнитные домены способны “убегать” от головки чтения/записи к краю дорожки или, наоборот, вглубь магнитного вещества, где могут задержаться на длительное время. В большинстве случаев перезаписанные данные нельзя восстановить с помощью обычной головки чтения/записи, но злоумышленник может украсть диск и воспользоваться специальным оборудованием, которое позволит ему частично или даже полностью восстановить старую информацию.

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

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

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

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

22.10.3. Полупроводниковые записывающие устройства

Аналогичные проблемы возникают и при очистке энергонезависимой памяти, такой, как EPROM, EEPROM и флэш-память. Перезаписывание старых данных не удаляет все их следы. Определенную роль в этом играют и механизмы удерживания данных (см. раздел 9.3.4). Единственным практическим решением данной проблемы является многократное перезаписывание секретной информации с помощью случайных данных, но оно ни в коей мере не обеспечивает идеальной защиты. Когда полупроводниковое записывающее устройство становится ненужным, оно должно быть уничтожено.


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 8    Оценка 60        Оценить