Алгоритмы шифрования... WordFIX

Rambler's Top100 OZON.ru

Перейти на главную страницу

Карта сайта

Список статей

 

Разработка подсистемы защиты информации для Microsoft Office 2000

© Панасенко Сергей, 2002.

В статье "Защита информации в Microsoft Word" ("Банки и технологии" № 3/2002) были приведены результаты анализа встроенной подсистемы защиты информации популярного текстового редактора Microsoft Word 2000. Предлагаемая статья продолжает данную тему и содержит описание процесса разработки собственной подсистемы защиты информации и ее внедрения в программы пакета Microsoft Office 2000.

Итак, встроенная подсистема защиты информации Microsoft Word 2000 вполне хороша для 90% пользователей, но, на мой взгляд, недостаточна для защиты информации с повышенными требованиями к ее конфиденциальности. Рассмотрим этапы разработки альтернативной подсистемы защиты информации и ее внедрения, расширив область ее применения до нескольких наиболее популярных продуктов пакета программ Microsoft Office 2000: Microsoft Word, Microsoft Excel и Microsoft Outlook.

Постановка задачи

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

Подсистема защиты должна удовлетворять следующим характеристикам:

Структурная схема подсистемы защиты

[см. рис. 1]
Как было сказано выше, Microsoft Office имеет встроенный язык программирования VBA. Этот язык специально адаптирован для разработки какой-либо дополнительной функциональности приложений Microsoft Office – VBA содержит большую библиотеку классов, объектами которых являются различные элементы управления (например, меню и панели инструментов Microsoft Word) или фрагменты редактируемых документов (например, параграфы, слова, таблицы, да и собственно документы целиком). Однако, реализация на VBA криптографической системы целиком была бы нецелесообразна по следующим причинам:

Таким образом, VBA-код должен быть минимизирован и содержать только следующие компоненты:

Помимо криптобиблиотеки и VBA-модулей, необходимо наличие интерфейсного модуля, выполняющего следующие функции:

Функционирование подсистемы защиты

Начнем с Microsoft Outlook, где все более ясно и понятно. Наиболее логичной точкой наложения защиты, на мой взгляд, является перехват попытки пользователя отправить какое-либо письмо. Microsoft Outlook предоставляет эту возможность – в момент нажатия пользователем кнопки "Send" ("Отправить") в окне редактирования сообщения электронной почты Microsoft Outlook вызывает VBA-макрос со стандартным именем Application_ItemSend (если такой макрос существует). Такой макрос может содержать любой код VBA, в том числе и отменяющий отправку сообщения. В нашем случае задача макроса Application_ItemSend заключается в наложении защиты на сообщение, а именно, на собственно текст письма и все прикрепленные к нему файлы. Упрощенный фрагмент VBA-программы, выполняющей данные действия, может выглядеть так (строки пронумерованы для удобства комментирования):

  1. sText = Item.Body
  2. OLAddText(sText)
  3. While Item.Attachments.Count > 0
  4. sOldAttach = Item.Attachments.Item(1).DisplayName
  5. OLAddAttach(sOldAttach)
  6. Item.Attachments.Item(1).Delete
  7. Wend
  8. sNewAttach = OLCloseArchive()
  9. Item.Attachments.Add (sNewAttach)
  10. Item.Body = "This message is encrypted"

Приведенный фрагмент выполняет следующее:

Такое сообщение электронной почты можно смело отсылать адресату – никто другой его не прочитает (при условии корректного указания криптографических ключей). Организовать же расшифрование сообщения по получении так же просто – Microsoft Outlook при получении новых сообщений автоматически вызывает макрос со стандартным именем Application_NewMail, в который можно поместить код, выполняющий расшифрование и проверку ЭЦП, а также восстанавливающий первоначальный вид сообщения.
Microsoft Word и Excel также вызывают макросы со стандартными именами при наступлении определенных событий (что было кратко описано в [1], а подробно, например, в [4]). Однако, здесь можно пойти и другим путем, например, предоставив пользователю возможность самому управлять защитой электронных документов. Это возможно при внедрении дополнительной панели инструментов (см. рис. 3), содержащей кнопки зашифрования редактируемого документа и открытия зашифрованного документа. Упрощенный фрагмент макроса-обработчика нажатия на кнопку "Подписать и зашифровать" приведен ниже:

  1. ActiveDocument.Save
  2. sFileName = ActiveDocument.FullName()
  3. ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
  4. OGBCloseFile(sFileName)

Здесь все существенно проще, чем в Microsoft Outlook – после сохранения и закрытия текущего документа Microsoft Word вызывается функция интерфейсного модуля OGBCloseFile, в которую передается в качестве параметра имя файла документа. Данная функция вызывает окно, показанное на рис. 2, после чего выполняет все необходимые вызовы функций криптографической библиотеки для защиты данного документа.

Внедрение VBA-кода

Внедрить VBA-модуль также намного проще в Microsoft Outlook. При каждом запуске Microsoft Outlook автоматически открывает VBA-проект ThisOutlookSession, находящийся в файле VBAProject.otm. Поэтому для внедрения нужного VBA-кода достаточно заменить данный файл (который изначально содержит пустой проект) своим. Это легко сделать как вручную, так и каким-либо инсталлятором при необходимости распространения подсистемы защиты.
С Microsoft Word и Excel несколько сложнее. Применительно к Microsoft Word можно поступить так же, как и с Outlook – заменить своим стандартный шаблон документов Normal.dot. Но это существенно хуже по той причине, что многие пользователи сохраняют в этом шаблоне свои индивидуальные настройки, которые при замене будут попросту потеряны.
К счастью, программы пакета Microsoft Office поддерживают механизм Automation, с помощью которого можно добраться до их функциональности и управлять ими из своей программы (в данном случае – из программы инсталляции подсистемы защиты). В поставку Microsoft Office входят библиотеки классов, аналогичных классам VBA. Для использования механизма Automation необходимо создать объект нужного класса (например, для манипуляций с Microsoft Word создается объект класса _Application, который инкапсулирует функциональность Microsoft Word), после чего с помощью функций-членов класса выполнять все требуемые действия, например, следующим образом (упрощенный фрагмент на С++):

  1. _Application auWord;
  2. auWord.CreateDispatch( "Word.Application" ) )
  3. auWord.SetVisible( TRUE );
  4. auWord.Activate();
  5. LPDISPATCH lpDocuments = auWord.GetDocuments();
  6. Documents auDocuments( lpDocuments );
  7. COleVariant varSetup( "Setup.doc" );
  8. LPDISPATCH lpSetupDoc = auDocuments.Open( &varSetup );
  9. _Document auSetupDoc( lpSetupDoc );
  10. CString strSetupDoc = auSetupDoc.GetFullName();
  11. LPDISPATCH lpNormal = auWord.GetNormalTemplate();
  12. Template auNormal( lpNormal );
  13. CString strNormal = auNormal.GetFullName();
  14. auWord.OrganizerCopy( strSetupDoc, strNormal, "SecurityMacros", wdOrganizerObjectProjectItems );
  15. auWord.Run( "Normal.SecurityMacros.WordInstall" );
  16. auWord.Quit();

Приведенный код выполняет следующие действия:

Из приведенных выше примеров кода видно, что использование Automation все же несколько сложнее, чем применение VBA. Поэтому собственно создание элементов ползовательского интерфейса проще выполнить из VBA-макроса, активизируемого через Automation, как показано выше. Приведу пример создания панели управления с одной кнопкой "Подписать и зашифровать" (здесь и выше приведены примеры кода разработанного автором данной статьи комплекса "Защищенный офис" для Microsoft Office 2000):

  1. Set cbOG = CommandBars.Add("Crypton Word 1.0", msoBarTop)
  2. Set butOG = cbOG.Controls.Add(msoControlButton)
  3. butOG.Caption = "Подписать и зашифровать"
  4. butOG.OnAction = "OGClose"
  5. butOG.Style = msoButtonCaption
  6. butOG.Visible = True
  7. cbOG.Visible = True
  8. NormalTemplate.Save

В строке 1 приведенного фрагмента добавляется новая панель инструментов, которая выводится на экран в строке 7. Предварительно создается кнопка "Подписать и зашифровать" (строки 3-6), в строке 4 ей назначается макрос-обработчик нажатия (который, в числе прочих, был скопирован в Normal.dot с помощью Automation). Аналогично создаются и остальные кнопки, показанные на рис. 3. Завершающий шаг – сохранение шаблона Normal.dot с новой панелью инструментов (строка 8).
Аналогичным образом выполняется инсталляция VBA-модуля в Microsoft Excel. Разница лишь в том, что вместо копирования макросов в Normal.dot, на компьютер целиком копируется xls-файл, содержащий VBA-модуль, после чего кнопки дополнительной панели инструментов связываются с макросами в этом файле.

Заключение

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

  1. Панасенко С. Защита информации в Microsoft Word. // Банки и технологии. – 2002 - № 3 – с. 56-60.
  2. Домашев А.В., Грунтович М.М., Попов В.О., Правиков Д.И., Щербаков А.Ю., Прокофьев И.В. Программирование алгоритмов защиты информации. – Москва – Нолидж, 2002 – 416 с.
  3. Романец Ю.В., Тимофеев П.А., Шаньгин В.Ф. Защита информации в компьютерных системах и сетях. 2-е издание – Москва – Радио и связь, 2001 – 376 с.
  4. Харт-Девис Г. Word 2000: Руководство разработчика. // Пер. с англ.: Киев, БХВ, 2000.

Названия рисунков:

1. Модули подсистемы защиты.
2. Диалоговое окно выбора параметров защиты документа Microsoft Word / Excel.
3. Дополнительная панель инструментов подсистемы защиты в Microsoft Word.