Интеграция шифрования в Календарь Google при помощи расширений FirefoxИсточник: ibm Натан Харрингтон
Сегодня Web-приложения предоставляют множество возможностей для обмена файлами, совместного доступа и работы. Хотя некоторые из этих приложений поддерживают шифрование пользовательской информации, таких программ - меньшинство. В этой статье обсуждаются средства и программный код, необходимые для поддержки базового шифрования в одном из наиболее популярных онлайновых органайзеров. В статье рассказано, как благодаря удивительной гибкости расширений Firefox и Gnu Privacy Guard можно хранить события Календаря Google зашифрованными, отображая их в виде простого текста только обладателям соответствующих ключей шифрования. Мы воспользуемся великолепным расширением Элиаса Торреса (Elias Torres) "Google Calendar Quick Add", рассмотрим выбор, изменение и вставку различных компонентов для реализации шифрования событий, без использования безопасного канала данных TLS. На рисунке 1 ниже показан пример того, как будет выглядеть приложение для оператора сервера (слева) и для Интернет-пользователя (справа) после выполнения всех инструкций в данной статье. Рисунок 1. Зашифрованный Календарь Google Предварительные требования
Любое оборудование, поддерживающее Web-технологии, появившиеся после 2002 года, будет способно работать с кодом, приведенным в данной статье. Алгоритмы шифрования активно используют процессор, поэтому, если на каждой странице вам необходимо дешифровать несколько десятков или сотен событий календаря, для комфортной работы вам понадобится быстрый процессор. Требуется браузер Firefox 1.5 или выше, а также программа GnuPG - Gnu Privacy Guard. Также пригодятся инструменты разработки расширений Firefox. В разделе Ресурсы приведены ссылки на соответствующие программы. Хотя эта статья создавалась с использованием ОС Ubuntu 7.10, все основные идеи легко переносятся на множество других операционных систем. Перед началом работы убедитесь в том, что ваша ОС поддерживает Perl, GnuPG и Firefox. В этой статье подразумевается, что вы знакомы с основами разработки расширений Firefox. Не требуется никаких специальных компиляторов или сред разработки, однако вы должны быть знакомы с процессом созданием программного обеспечения, чтобы иметь возможность диагностировать неполадки и решать проблемы с настройкой при установке программ. Для работы рекомендуется создать новый профиль Firefox. Все функции шифрования данного расширения будет обеспечивать GnuPG. Это избавляет от неэффективного использования JavaScript, одновременно обеспечивая надежное кроссплатформенное управление ключами. Вам понадобится полная установка GnuPG с возможностью выбора удобных для вас ключей шифрования. Также понадобится программа Имея в наличии рабочую среду разработки создания расширений и GnuPG для выполнения шифрования, мы модифицируем интерфейс, взяв за основу существующее расширение. Расширение Google Quick Add Элиаса Торреса представляет собой хорошую отправную точку для реализации поддержки шифрования. На этапе шифрования вводимый текст сохраняется на диске и шифруется при помощи внешней программы, после чего зашифрованный файл считывается и загружается на серверы Google. При дешифровании каждое событие записывается на диск, расшифровывается и выводится пользователю в виде дешифрованного текста. Альтернативой могло бы быть написание новых протоколов для Firefox. Хотя такой подход может обеспечить более надежный канал данных, для этого вида расширений более простым является организация взаимодействия программ в форме вывода, обработки и чтения. Прежде чем переходить к коду, приведенному в данной статье, убедитесь в том, что вы располагаете работоспособными программами Firefox, GnuPG и gpg-agent. Доработка расширения Google Calendar Quick Расширение Google Calendar Quick Add позволяет добавлять события в ваш календарь с любой страницы, используя API-интерфейс SOAP. Для записи в календарь шифрованных событий мы перехватываем передаваемую информацию и шифруем ее. Можно было бы просто вводить в Календарь Google шифрованные записи в формате ASCII, но предлагаемый подход позволяет автоматизировать этот процесс. Для начала при помощи команды Распакуйте расширение при помощи команды Листинг 1. Дерево каталогов Google Calendar Quick Add Перейдите в каталог ~/calendarEncrypt и отредактируйте файл install.rdf. Измените значения идентификатора и автора, как показано в листинге 2. Листинг 2. Изменение значений идентификатора и автора в файле install.rdf <em:id>{E31AE5B1-3E5B-4927-9B48-76C0A701F105}</em:id> на: <em:id>calendarEncrypt@devWorks_IBM.com</em:id> Также измените имя автора: <em:creator>Elias Torres</em:creator> на: <em:creator>Elias Torres с изменениями devWorks</em:creator> Отредактируйте файл chrome.manifest, чтобы изменить пакет расширения на основе jar на более удобную для разработчика структуру каталогов. Необходимые изменения показаны в листинге 3. Листинг 3. Редактирование файла chrome.manifest для изменения формата из jar в структуру каталогов Исходный chrome.manifest content quickgooglecal jar:chrome/quickgooglecal.jar!/content/ locale quickgooglecal en-US jar:chrome/quickgooglecal.jar!/locale/en-US/ skin quickgooglecal classic/1.0 jar:chrome/quickgooglecal.jar!/skin/ Измененный chrome.manifest: content quickgooglecal chrome/content/ overlay chrome://browser/content/browser.xul chrome://quickgooglecal/content/overlay.xul locale quickgooglecal en-US chrome/locale/en-US/ skin quickgooglecal classic/1.0 chrome/skin/ Теперь добавим ссылку на каталог расширения в ваш тестовый профиль Firefox. Например, если ваш профиль расположен в Войдите в Календарь Google и нажмите ctrl+, чтобы активировать расширение Google Calendar Quick Add. Убедитесь в том, что события добавляются как положено, введя событие Теперь мы можем вносить изменения в расширение Google Calendar Quick Add для поддержки шифрования и дешифрования событий. Модификация расширения Quick Add для поддержки прозрачного шифрования Для автоматизации добавления шифрованных событий в календарь в этой статье используется перехват и шифрование данных расширения Quick Add. Изменение готового расширения для поддержки перехвата показано ниже начиная с листинга 4. Отредактируйте файл Листинг 4. Переменные шифрования, извлечение даты и времени. for( var n=0; n < words.length-2; n++ ){
Код, приведенный выше, предполагает, что дата и время всегда являются двумя последними словами в тексте заголовка события. Чтобы убедиться в корректном добавлении в календарь, все последующие заголовки событий должны иметь формат "текст сообщения дата время", где дата - это "пятница/понедельник/завтра" и т.п., а время - "05:30/10:30" и т.п. После того как мы отделили текст описания события от даты и времени, нужно записать текст события на диск и зашифровать его. Добавьте в строку 77 код, приведенный ниже в листинге 5. Листинг 5. Запись на диск, вызов программы шифрования
Первая часть кода, приведенного выше в листинге 5, указывает использовать файл "/tmp/calendarEvent" для записи перехваченного текста событий на диск. Этот файл содержит данные в виде простого текста, но он будет удален и затерт после завершения шифрования. Первая часть кода в листинге 5 указывает использовать файл для рекомендуемого компонента nsIProcess. За шифрование, дешифрование и безопасное удаление отвечает программа на языке Perl /tmp/CalendarCrypt.pl , которая будет описана ниже. Когда шифрование данных будет завершено, код, приведенный ниже в листинге 6, считывает зашифрованный текст события обратно. Добавьте следующий код в строку 98 файла chrome/content/hello.xul .
Листинг 6. Чтение зашифрованного файла, создание текста события
Код в листинге 5 выполняет запись текста события в файл и запуск процесса шифрования. Код в листинге 6 выполняет чтение зашифрованного ASCII-текста из файла, добавление информации о дате и времени и возобновление работы расширения quick-add. Теперь каждое событие, добавляемое при помощи Google Calendar Quick Add, будет перехватываться, шифроваться и размещаться на серверах Google в зашифрованном виде. Изменение файла overlay.js для чтения зашифрованных сообщений После того как мы разобрались с кодом в Листинг 7. Дешифрование события, определение компонентов
Каждый раз при загрузке страницы с событием выполняется вызов функции Листинг 8. Функция onPageLoad, запись событий
span . После задания временных переменных производится обработка всех элементов span в цикле for , и если их текст зашифрован, их содержимое выгружается. В листинге 9 показан вызов программы CalendarCrypt.pl с параметром "decrypt" для дешифрования текста события.
Листинг 9. Запуск скрипта шифрования.
Листинг 10. Чтение дешифрованного текста
span расшифрованный текст вместо "BEGIN PGP..." исходного текста. Добавьте код, приведенный в листинге 11, для завершения процесса дешифрования.
Листинг 11. Стираем текст на диске, конец цикла
Изменение параметра на Завершает данный обзор программа Листинг 12. CalendarEncrypt.pl - заголовок и шифрование die "specify a mode " unless @ARGV == 1; chomp(my $userName = `whoami`); if( $mode eq "encrypt" ) После проверки параметров и задания имени пользователя по умолчанию выполняется шифрование файла Листинг 13. Обработка файла, дешифрование }elsif( $mode eq "decrypt" ) open(INFILE,"/tmp/calendarEvent.temp") or die "no in file"; while(my $line =<INFILE>) my $version = substr( $line, 23, 34 ); print OUTFILE "\n"; my $body = substr( $line, 57 ); my @parts = split " ", $body; print OUTFILE "-----END PGP MESSAGE-----\n"; close(OUTFILE); my $cmd = qq{ gpg --yes --decrypt /tmp/calendarEvent.encrypted }; В процессе загрузки, обработки или отображения событий календаря могут быть утеряны некоторые элементы исходного форматирования. В частности, удаляются префикс "-----" в сообщении "BEGIN PGP", а также переносы строки, удаляются. Функции обработки строк в листинге 13 восстанавливают потерянное форматирование перед вызовом команды дешифрования. Наконец, код в листинге 14 выполняет безопасное удаление расшифрованного текстового файла, сохраненного на диске. Листинг 14. Уничтожение расшифрованных текстовых файлов # EOF
После сохранения файла Теперь каждое событие, добавляемое при помощи Google Calendar Quick Add, будет перехватываться, шифроваться и загружаться на серверы Google в зашифрованном виде. Перезагрузите все события из каталога chrome при помощи расширения Extension Developer's Extension или перезапустите Firefox. Используйте сочетание клавиш Ctrl+; и добавьте событие с текстом "Визит к врачу завтра 16:30". Откройте Календарь Google в "обычном" режиме; вы должны увидеть событие, подобное показанному слева на рисунке 1. Чтобы просмотреть событие в расшифрованном виде, откройте ссылку Заключение, дополнительные примеры При помощи инструментов и кода, описанных в этой статье, вы можете хранить весь текст Календаря Google в зашифрованном виде. Благодаря модификации расширения Firefox Google Calendar Quick Add от Элиаса Торреса каждое добавляемое или просматриваемое событие будет прозрачно шифроваться или дешифроваться. В результате вы получаете возможность лучше контролировать свои личные данные, пользуясь при этом лучшими возможностями приложений Web 2.0. Можно добавить дополнительный уровень шифрования для изменения сохраняемого времени событий, чтобы снизить эффективность анализа трафика. Создайте собственную программу, использующую интерфейсы SOAP API Google Calendar, для обработки, шифрования и хранения всех прошлых и будущих событий календаря. Попробуйте создать расширение для прозрачного шифрования стандартного интерфейса Календаря Google, используя все возможности Ajax. |