Это старая редакция страницы Разработки / Движок / Gnu P G за 08/03/2007 19:01.
Общая спецификация интеграции GnuPG [ЧЕРНОВИК]
Задачи
Задачами, решаемыми интеграцией GnuPG, являются:
- Валидация загружаемого пользователем (в свой профиль) открытого ключа на корректность с последующим внесением отпечатка в базу данных.
- Защита приватной связь между пользователями сайта.
- Защита отправляемого пользователю восстановленного пароля.
Возможность аутентификации на сайте с помощью протокола запрос-ответ (подписание пользователем строки запроса, сгенерированной сервером) не определяется в числе задач, поскольку, хотя и скрывает пароль от наблюдателя на канале связи, сама по себе не в силах предотвратить несанкционированный доступ к учетной записи пользователя с помощью перехваченных cookie и иными путями. Решение же данной проблемы — SSL — вообще делает подобную схему избыточной, поскольку защищает как реквизиты авторизованной сессии (cookie/SID) при работе с сайтом, так и реквизиты пользователя (логин/пароль) в момент аутентификации.
Тем не менее, список задач остается открыт для дополнений.
Функции
Для решения означенных задач требуется реализовать следующий набор функций (достаточность и необходимость всех функций из списка подлежит обсуждению).
Загрузка/валидация ключа
UploadPK(keyASCII)
Импортирует загруженный ключ на локальную связку. Единственный аргумент, keyASCII, представляет собой загруженный пользователем блок открытого ключа, передаваемый в GnuPG через STDIN с параметром --import. Сама функция не анализирует ключ, а полагается на статус-код GnuPG, чтобы в случае ошибки (например, поврежденный блок ключа) сообщить через интерфейс пользователю. В случае успеха дополнительно вызывается CheckPK(keyID) с целью определения пригодности ключа для зашифрования.
RecievePK(keyID[, ksURL])
Импортирует ключ с сервера ключей на локальную связку. Передает GnuPG указанный пользователем (в профиле) ID ключа в параметре командной строки --recv-keys. Опциональный аргумент ksURL позволяет пользователю задать URL сервера ключей, вместо дефолтного subkeys.pgp.net. Как и в предыдущем случае после успешного импорта вызывается CheckPK(keyID).
Вопросы: следует ли перед исполнением команды с параметром --recv-keys исполнить ее с --search-keys и, если сервер вернет более одно ключа, остановить программу и выдать предупрждение (к примеру, чтобы пользователь скорректировал запрос и указал keyID в 16-значном формате)? Альтернативным способом снятия двусмысленности может быть такой: показать пользователю результаты поиска и предложить выбрать принадлежащий ему ключ.