![]() |
Храние паролей и алгоритмы шифрования в MS Office Outlook
Храние паролей и алгоритмы шифрования в MS Office Outlook
Введение Изначально, в данной статье планировалось рассказать о забавной коллизии паролей в PST файлах Outlook. Но в последствии она была немного расширена, чтобы показать, наряду с недостатками, достоинства программы по сравнению со своими ближайшими конкурентами, рассказать о применяемых методах хранения персональной информации. К тому же, на примере Outlook удобно проследить хронологию развития криптологической мысли, которую в общих чертах можно перенести и на развитие всей линейки операционной системы Windows в целом. Пароли PST файлов Итак, начнем с того, что .PST файл в Microsoft Office Outlook представляет собой файловое хранилище данных на локальном компьютере, в котором в упорядоченном виде хранятся контакты, заметки, почтовые сообщения и другие элементы. Файл .PST может использоваться в качестве стандартного расположения для доставки почтовых сообщений. Его также можно использовать для упорядочения и резервного копирования данных. Чтобы защитить содержимое .PST файла, а также ограничить доступ к нему посторонних лиц, можно установить пароль длиной до 15 знаков. В этом случае принято считать, что без знания оригинального пароля открыть .PST файл невозможно. Посмотрим, действительно ли это так. http://www.rus.passcape.com/images/ol_pst2.png Диалог ввода пароля PST Пароль на доступ к .PST не запоминается и не хранится в явном виде. Вместо этого вычисляется его хэш значение, которое и сохраняется в самом .PST файле либо, если установлена опция 'Сохранить пароль в списке паролей', в реестре Windows с использованием дополнительного шифрования. Самое интересное заключается в том, что алгоритм подсчета хэша пароля представляет собой не алгоритм хэширования, а простой подсчет контрольной суммы CRC32. CRC32 - алгоритм проверки целостности данных, но уж никак не хэширования. Microsoft по неизвестной причине решила использовать именно его вместо более стойких, например, SHA. Доставшись по наследству от старых версий Outlook, MS долгое время не меняет этот алгоритм, руководствуясь, по всей видимости, соображениями совместимости. Хотя, с другой стороны, непонятно, почему это не было сделано с выходом Outlook 2003 (формат .PST Outlook 2003 имеет 64 битную внутреннюю адресацию, поддержку Unicode и несовместим с предыдущими версиями). Таким образом, хэш пароля представляет собой 32 бита его контрольной суммы. Давайте рассмотрим подробнее механизм работы CRC32: Код:
DWORD CPstReader::Crc32( LPBYTE pPassword )Удивительная вещь эти коллизии. Часто наблюдается обратная зависимость: чем сложнее пароль, тем проще найденная для него коллизия. Возьмем пример из той же документации Outlook, отрывок которой не случайно был выбран в качестве предисловия для этой статьи. Нашему "надежному" паролю Y6dh!et5 запросто можно найти замену - более простую комбинацию всего из 5 символов - JlSfw. Еще одно любопытное наблюдение. Если контрольная сумма, хранимая в .PST равна нулю, то считается, что пароль не задан. Но если мы знаем, что встречаются пароли с одинаковыми контрольными суммами, то можно предположить, что существуют и такие, контрольная сумма которых тоже равна нулю. Они и вправду есть. Вот только часть большого списка: 1Rj78C, 5J8j84, ArTniW. Crc32("1Rj78C")=0, Crc32("5J8j84")=0, Crc32("ArTniW")=0. Задав один из таких паролей, мы в результате получим незащищенный .PST файл, и при следующем доступе к нему Outlook пароль не запросит. Не верите? Попробуйте сами. Экспериментальным путем было выяснено, что при использовании метода прямого перебора, для подбора пароля к хэшу Outlook понадобится в среднем не более минуты. Однако криптоанализ CRC32 показал, что данный алгоритм является полностью обратимым для коротких паролей (до 4 символов) и частично обратимым для всех остальных. Это означает, что можно практически сразу найти оригинальный пароль или его аналог, который будет неотличим для Outlook. Было доказано, что для нахождения коллизии (пароля, контрольная сумма которого будет такая же, как и у оригинального) потребуется не более 7 печатных символов. Шифрование PST файлов Если посмотреть опции PST файлов (см. рисунок ниже), то можно заметить, что Outlook кроме всего прочего позволяет еще шифровать содержимое. В этом случае, контрольная сумма пароля не лежит в открытом виде в .PST файле, а дополнительно кодируется с помощью одного из алгоритмов шифрования. Давайте рассмотрим эти алгоритмы. При создании нового .PST, Outlook предлагает на выбор 3 типа файла: 1. шифрование отсутствует 2. шифрование со сжатием 3. стойкое шифрование http://www.rus.passcape.com/images/ol_pst1.png Если шифрование PST файла отсутствует, то все данные пользователя: контакты, письма, пароли и т.д., будут лежать в открытом, доступном другим пользователям виде. И их можно будет просмотреть, например, из текстового редактора.Создание нового хранилища Алгоритм шифрования со сжатием создан таким образом, что каждому кодируемому символу соответствует другой, взятый из специальной таблицы. Вот этот алгоритм: Код:
BOOL CPstReader::Decrypt1( LPBYTE buf, int iSize )Стойкое шифрование тоже является разновидностью первого алгоритма замены. Но в отличие от предыдущего, обеспечивает более сильное шифрование. Другое отличие состоит в том, что зашифрованный этим алгоритмом PST файл впоследствии не удастся сделать таким компактным, как в первом случае. Код:
BOOL CPstReader::Decrypt2( LPBYTE buf, int iSize, DWORD id )Техника хранения паролей учетных записей почты После прочтения данной статьи, у вас может сложиться немного ложное мнение о том, что MS Outlook использует очень слабые и ненадежные алгоритмы шифрования паролей. Однако это не совсем так. Истина, как говорится, познается в сравнении. К тому же, мы проанализировали только шифрование в PST. Давайте теперь рассмотрим и сравним механизмы шифрования паролей учетных записей почты Outlook и других популярных программ. Большинство популярных почтовых клиентов попросту не заботятся о безопасности хранимых паролей пользователей. Например, Eudora, TheBat! или старые версии Netscape, используют для шифрования архаичный алгоритм BASE64 или его производные. IncrediMail просто накладывает XOR гамму на исходный пароль (язык не поворачивается назвать это шифрованием), старые версии браузера Opera вообще не шифровали почтовые пароли, а хранили их открытым текстом. Получше обстоит дело с новыми версиями популярных почтовиков, таких как Thunderbird, Opera M2, Outlook Express. Все они используют надежные, проверенные временем алгоритмы с использованием мастеринг ключей. В основном это связка из MD5 + RC4, или SHA + 3DES, либо их возможные варианты. Thunderbird, Opera M2, Outlook Express хранят мастер ключи и ключи шифрования вместе с зашифрованными паролями, что позволяет без труда (ну или почти без труда) выполнить их обратное преобразование. Что касается Outlook, то тут наблюдается очень прелюбопытнейшая картина. Всю хронологию развития техники хранения паролей к почтовым ящикам в программе Outlook можно условно разделить на четыре периода: - доисторический период - каменный век - средние века - период научно технического прогресса А теперь подробнее. Доисторический период - период первого становления на ноги. Говорят, первые версии программы умели шифровать хранимые в реестре пароли по алгоритму BASE64. Что уже само по себе являлось достижением для того времени. Для расшифровки таких паролей достаточно было одного калькулятора или пары-тройки извилин. Каменный век - Outlook 9x - время первых экспериментов. Появляется новый алгоритм, который, при шифровании паролей, использовал ключ шифрования и уникальный идентификатор записи. Ноу-хау того времени. Данные, зашифрованные по этому алгоритму, невозможно было расшифровать без знания ключа и идентификатора записи. Многие современные почтовые клиенты не могут похвастаться наличием таких алгоритмов в своем арсенале и по сей день. Однако общая идея нового типа шифрования омрачалась одним существенным недостатком - ключ шифрования и идентификатор записи хранились в реестре вместе с зашифрованными данными. Средние века - Outlook 2000 - первые стандарты. Пароли к почтовым аккаунтам теперь хранятся в защищенном хранилище (Protected Storage) Windows. Вот вкратце алгоритм расшифровки паролей в защищенном хранилище: 1. Создается key1 для расшифровки мастер ключа, используя SHA(Salt) + SHA(SID) + SHA(Salt). Salt - глобальная константа. SID - идентификатор пользователя. 2. Создается key2 для расшифровки мастер ключа, используя SHA(MKSalt) + SHA(key1). MKSalt - двоичные данные, уникальные для каждого мастер ключа, хранимые вместе с ним. key1 - 20 байт данных, полученных на предыдущем шаге. 3. С помощью алгоритма DES и key2 расшифровывается мастер ключ. 4. Полученный мастер ключ принимает участие в расшифровке ключа шифрования записи. Ключ шифрования записи хранится вместе с самой записью и различен для каждой записи. Он состоит из 16 байт, половина из которых используются непосредственно для расшифровки, а вторая половина для проверки валидности. 5. И уже этим расшифрованным ключом записи можно расшифровывать непосредственно саму запись (пароли и др. сенситивную информацию). Очень неплохо и стильно придумано! Основные достоинства данного алгоритма:
Период научно технического прогресса - Outlook 2003 - впереди планеты всей. Новая версия популярного почтового клиента использует новый алгоритм шифрования, который является продолжением и логическим развитием предыдущего. Этот алгоритм основан на одной важной детали - привязки к паролю пользователя. Не будем в данной статье подробно описывать механизм его работы, ибо это займет не одну страницу. Скажем лишь, что это всем известный DPAPI. Для расшифровки паролей, зашифрованных при помощи DPAPI, необходимо знать как минимум три вещи: 1. Мастер ключ пользователя 2. SID пользователя 3. Пароль пользователя Вкратце основные достоинства нового алгоритма:
Заключение Как видим, с выходом каждой новой версии этой популярной почтовой программы Microsoft придумывает что-то новое и неизведанное доселе. Так что может иной раз и не стоит бросать камни в чужой огород? Как ни странно, но очередная версия Outlook 2007 не привнесла ничего кардинально нового в принципы шифрования персональных данных пользователя. Очевидно, все программисты были заняты разработкой и доводкой Windows Vista. В частности, например, созданием таких страшных вещей как BitLocker или CardSpace. Но об этом в другой раз... (с) 2006 Passcape Software |
| Время: 00:57 |