В этом разделе детально описываются входные и выходные параметры важнейших функций безопасности, а также выполняемые этими функциями действия. Подробное рассмотрение позволяет лучше почувствовать дух спецификаций GSS-API. Кроме того, появляется возможность остановиться на некоторых сравнительно тонких моментах, которые выше были лишь упомянуты.
В описаниях интерфейсов после имени параметра следует имя его типа. Поскольку интерфейс GSS-API — обобщенный, в нем не уточняется отображение на конкретную языковую среду. Впрочем, во многих случаях трактовка типов очевидна.
В фигурных скобках после имени параметра и его типа следует разъяснение назначения параметра.
Функция GSS_Acquire_ cred предназначена для получения дескриптора удостоверения. Как правило, к ней обращаются только серверные компоненты приложений (клиентские удовлетворяются подразумеваемыми удостоверениями).
Входные параметры:
- desired_name: INTERNAL_ NAME {имя, которое должно быть вписано в удостоверение; NULL означает подразумеваемое значение, определяемое по локальным правилам}
- lifetime_req: INTEGER {запрашиваемый срок годности удостоверения, измеряемый в секундах; 0 означает подразумеваемый срок}
- desired_mechs: SET_OF_OBJECT_IDENTIFIER {набор механизмов безопасности, которые должны поддерживать данное удостоверение; пустое множество означает заявку на подразумеваемый механизм. Вероятно, каждый механизм разместит в удостоверении свою, нужную только ему информацию}
- cred_usage: INTEGER {возможные способы использования удостоверения: 0 — для инициирования и принятия контекстов, 1 — только для инициирования, 2 - только для принятия}
Выходные параметры:
- major_status: INTEGER {основной код завершения}
- minor_status: INTEGER {дополнительный код завершения}
- output_cred_handle: CREDENTIAL_HANDLE {дескриптор выданного удостоверения}
- actual_mechs: SET_OF_OBJECT_IDENTIFIER {набор предоставленных механизмов безопасности}
- lifetime_rec: INTEGER {срок годности удостоверения; для обозначения неограниченного срока имеется выделенное значение}
Возможные значения основного кода завершения:
- GSS_S_COMPLETE - запрашиваемое удостоверение успешно получено, со сроком годности (от текущего момента) lifetime_rec секунд, предназначенное для использования в соответствии со значением cred_usage, поддерживаемое набором механизмов безопасности actual_mechs. Для последующего доступа к удостоверению следует использовать дескриптор output_cred_handle.
- GSS_S_BAD_MECH — запрашивается неподдерживаемый механизм безопасности. Удостоверение не выдается (в качестве значения output_cred_handle возвращается NULL).
- GSS_S_BAD_NAMETYPE — запрашиваемое имя не удается проинтерпретировать. Удостоверение не выдается.
- GSS_S_BAD_NAME — некорректное имя. Удостоверение не выдается.
- GSS_S_FAILURE — удостоверение не удалось выдать по причинам, не специфицируемым на уровне GSS-API (например, из-за отсутствия прав на использование запрашиваемого имени).
Из соображений мобильности лучше всего заказывать подразумеваемые значения там, где это возможно. Соответствующие выходные параметры позволяют узнать, что же реально предоставлено (например, какие механизмы безопасности поддерживаются).
Функция GSS_Add_cred позволяет постепенно формировать удостоверения, пополняя их поддержкой новых механизмов безопасности, изменяя срок годности или предполагаемые способы использования.
Входные параметры:
- cred_handle: CREDENTIAL_HANDLE {дескриптор удостоверения, полученный в результате предыдущих вызовов функций GSS_Acquire_cred или GSS_add_cred; NULL означает добавление к подразумеваемому удостоверению}
- desired_name: INTERNAL_NAME {имя, которое должно быть вписано в удостоверение; NULL обозначает подразумеваемое имя}
- initiator_time_req: INTEGER {запрашиваемый срок годности удостоверения для инициации контекстов; 0 — подразумеваемый срок}
- acceptor_time_req: INTEGER {запрашиваемый срок годности удостоверения для приема контекстов; 0 - подразумеваемый срок}
- desired_mech: OBJECT_ IDENTIFIER {добавляемый механизм безопасности}
- cred_usage: INTEGER {способ использования удостоверения}
Выходные параметры:
- major_status: INTEGER
- minor_status: INTEGER
- output_cred_handle: CREDENTIAL_HANDLE
- actual_mechs: SET_OF_OBJECT_IDENTIFIER
- initiator_time_rec: INTEGER {время в секундах; специальное значение резервируется для неограниченного срока годности}
- acceptor_time_rec: INTEGER
- real_cred_usage: INTEGER {результирующий способ использования удостоверения}
Смысл выходных параметров тот же, что и для функции GSS_Acquire_cred, лишь новое значение real_cred_usage показывает, для чего можно использовать скорректированное удостоверение. Прежними остались и основные коды завершения. Добавилось только одно новое значение — GSS_S_NO_ CRED, означающее, что дескриптору cred_handle не соответствует корректное удостоверение.
Во всех вызовах функций GSS_Acquire_cred и GSS_Add_ cred, имеющих дело с одним удостоверением, значения desired_ name должны совпадать.
Функция GSS_Init_sec_ context предназначена для инициации контекста безопасности, формируемого общающимися партнерами, и для генерации токена, пересылка которого позволит удаленному партнеру выполнить свою часть работы по формированию контекста.
Входные параметры:
- claimant_cred_handle: CREDENTIAL_HANDLE {дескриптор удостоверения инициатора взаимодействия; NULL означает подразумеваемое удостоверение}
- input_context_handle: CONTEXT_HANDLE {дескриптор формируемого контекста; 0 означает, что формирование только начинается}
- targ_name: INTERNAL_NAME {имя партнера по общению}
- mech_type: OBJECT_IDENTIFIER {механизм безопасности, который должен поддерживать формируемый контекст; NULL означает подразумеваемый механизм}
- deleg_rec_flag: BOOLEAN {запрашивается ли делегирование полномочий}
- mutual_req_flag: BOOLEAN {запрашивается ли взаимная аутентификация}
- replay_det_req_flag: BOOLEAN {запрашивается ли выявление продублированных токенов}
- sequence_req_flag: BOOLEAN {запрашивается ли контроль целостности последовательности сообщений}
- anon_req_flag: BOOLEAN {запрашивается ли анонимный контекст}
- lifetime_req: INTEGER {запрашиваемый срок годности контекста в секундах; 0 означает подразумеваемый срок}
- chan_bindings: OCTET_ STRING {набор каналов, с которым связывается контекст}
- input_token: OCTET_ STRING {токен, полученный от партнера в результате предшествующих действий по формированию контекста; NULL означает, что формирование только начинается}
Выходные параметры:
- major_status: INTEGER
- minor_status: INTEGER
- output_context_handle: CONTEXT_HANDLE {дескриптор формируемого контекста}
- actual_mech_type: OBJECT_ IDENTIFIER {реальный механизм, поддерживающий формируемый контекст — значение, заведомо отличное от NULL}
- output_token: OCTET_ STRING {выходной токен, который нужно переслать партнеру, чтобы тот мог продолжить формирование контекста; NULL означает, что больше ничего пересылать не нужно}
- deleg_state: BOOLEAN {обеспечивается ли передача полномочий}
- mutual_state: BOOLEAN {обеспечивается ли взаимная аутентификация}
- replay_det_state: BOOLEAN {обеспечивается ли выявление продублированных токенов}
- sequence_state: BOOLEAN {обеспечивается ли контроль целостности последовательности сообщений}
- anon_state: BOOLEAN {обеспечивается ли анонимность контекста}
- trans_state: BOOLEAN {возможен ли экспорт контекста}
- prot_ready_state: BOOLEAN {обеспечивается ли защита сообщений, когда формирование контекста еще не завершено}
- conf_avail: BOOLEAN {обеспечивается ли шифрование сообщений}
- integ_avail: BOOLEAN {обеспечивается ли контроль целостности сообщений}
- lifetime_rec: INTEGER {срок годности контекста в секундах}
Возможные значения основного кода завершения:
- GSS_S_COMPLETE - контекст успешно инициализирован, а выходной токен содержит достаточно информации для завершения формирования контекста партнером и для начала защищенного обмена сообщениями.
- GSS_S_CONTINUE_NEEDED — сгенерированный выходной токен нужно переслать партнеру. Тот должен прислать ответ, который послужит аргументом input_token для последующего ассоциированного вызова функции GSS_Init_sec_context. Пока не будет выдан код завершения GSS_S_COMPLETE, контекст безопасности нельзя считать сформированным.
- GSS_S_DEFECTIVE_TOKEN — обнаружено нарушение целостности входного токена input_token. Формирование контекста не может быть продолжено.
- GSS_S_DEFECTIVE_CREDENTIAL — обнаружено нарушение целостности удостоверения, заданного аргументом claimant_cred_handle. Формирование контекста не может быть продолжено.
- GSS_S_BAD_SIG — входной токен input_toke содержит некорректную подпись. Формирование контекста не может быть продолжено.
- GSS_S_NO_CRED — контекст не может быть сформирован либо по причине некорректности значения claimant_cred_handle, либо из-за того, что удостоверение не предназначено для инициации контекста, либо из-за отсутствия прав на использование данного удостоверения.
- GSS_S_CREDENTIALS_EXPIRED — удостоверение просрочено. Формирование контекста не может быть продолжено.
- GSS_S_BAD_BINDINGS — обнаружено несоответствие между информацией о наборе каналов, заданной аргументом chan_bindings, и аналогичной информацией, извлеченной из входного токена input_token. Несоответствие означает, что партнеры не могут договориться о привязке контекста к каналам. Формирование контекста не может быть продолжено.
- GSS_S_NO_CONTEXT — значение параметра input_ context_handle не является корректным дескриптором контекста, в то время как оно должно быть таковым (выполняется не первый из ассоциированных вызовов GSS_ Init_sec_context). Формирование контекста не может быть продолжено.
- GSS_S_BAD_NAMETYPE — запрашиваемое имя не удается проинтерпретировать. Формирование контекста не может быть продолжено.
- GSS_S_BAD_NAME — некорректное имя. Формирование контекста не может быть продолжено.
- GSS_S_BAD_MECH — запрашивается неподдерживаемый механизм безопасности. Формирование контекста не может быть продолжено.
- GSS_S_FAILURE — формирование контекста не может быть продолжено по причинам, не специфицируемым на уровне GSS-API.
Вызов функции GSS_ Init_sec_context может привести к временной блокировке обратившегося к ней процесса, если для генерации контекста и получения выходного токена служба безопасности должна воспользоваться услугами сервера аутентификации, службы директорий или иного удаленного сервера.
Обычно для инициации контекста достаточно одного обращения к функции GSS_Init_ sec_context. Если это не так (например, из-за требования взаимной аутентификации), то для всех последующих обращений значение параметра claimant_cred_ handle должно оставаться неизменным. Это значение позволяет связать в цепочку ассоциированные вызовы GSS_Init_sec_context.
При первом обращении к GSS_Init_sec_context значение параметра input_context_handle должно равняться 0. При последующих вызовах его следует устанавливать равным output_context_handle (ассоциированные вызовы Goutput_context_handle, начиная со второго, не меняют дескриптор контекста безопасности).
Инициатор, посредством входных флагов, может запросить у службы безопасности предоставление дополнительных услуг: возможности делегирования прав доступа (флаг deleg_rec_flag), организации взаимной аутентификации (mutual_req_flag), контроля целостности последовательности сообщений (флаги replay_det_ req_flag и sequence_req_flag), сохранения инкогнито инициатора контекста (anon_req_flag). Соответствующие выходные флаги показывают, в состоянии ли служба безопасности предоставить запрашиваемые услуги. Кроме того, еще два выходных флага, integ_avail и conf_avail, показывают, поддерживается ли службой безопасности контроль целостности сообщений и их конфиденциальность (в принципе можно представить себе механизм, обеспечивающий только аутентификацию партнеров).
Отказ в поддержке некоторых запрашиваемых услуг не обязательно должен вести к отказу от формирования контекста безопасности. Мобильное приложение может принять те или иные меры (например, проинформировать пользователя о достижимом уровне защиты, взять на себя шифрование и т.п.), позволяющие продолжить работу.
Функция GSS_Accept_ sec_context предназначена для продолжения (как правило — завершения) формирования контекста безопасности. Мы будем называть это принятием контекста.
Входные параметры:
- acceptor_cred_handle: CREDENTIAL_HANDLE {дескриптор удостоверения партнера, принимающего контекст; NULL означает подразумеваемое удостоверение}
- input_context_handle: CONTEXT_HANDLE {дескриптор формируемого контекста; 0 означает, что принятие только начинается}
- chan_bindings: OCTET_ STRING {набор каналов, с которым связывается контекст}
- input_token: OCTET_ STRING {токен, полученный от партнера в результате предшествующих действий по формированию контекста}
Выходные параметры:
- major_status: INTEGER
- minor_status: INTEGER
- src_name: INTERNAL_NAME {имя инициатора формирования контекста}
- actual_mech_type: OBJECT_ IDENTIFIER {реальный механизм, поддерживающий формируемый контекст — значение, заведомо отличное от NULL}
- output_context_handle: CONTEXT_HANDLE {дескриптор формируемого контекста}
- deleg_state: BOOLEAN {обеспечивается ли передача полномочий}
- mutual_state: BOOLEAN {обеспечивается ли взаимная аутентификация}
- replay_det_state: BOOLEAN {обеспечивается ли выявление продублированных токенов}
- sequence_state: BOOLEAN {обеспечивается ли контроль целостности последовательности сообщений}
- anon_state: BOOLEAN {обеспечивается ли анонимность контекста}
- trans_state: BOOLEAN {возможен ли экспорт контекста}
- prot_ready_state: BOOLEAN {обеспечивается ли защита сообщений, когда формирование контекста еще не завершено}
- conf_avail: BOOLEAN {обеспечивается ли шифрование сообщений}
- integ_avail: BOOLEAN {обеспечивается ли контроль целостности сообщений}
- lifetime_rec: INTEGER {срок годности контекста в секундах}
- delegated_cred_handle: CREDENTIAL_HANDLE {дескриптор удостоверения, позволяющего инициировать новые контексты безопасности от имени партнера по общению и, тем самым, пользоваться его правами доступа}
- output_token: OCTET_ STRING {выходной токен, который нужно переслать партнеру, чтобы тот мог продолжить формирование контекста; NULL означает, что больше ничего пересылать не нужно}
Функция GSS_Accept_ sec_context во многом аналогична функции инициации контекста GSS_Init_sec_context. Это относится и к кодам завершения, и к возможности повторных вызовов (если для формирования контекста требуется обмен несколькими токенами), и к блокировке обратившегося процесса, и к трактовке большинства входных и выходных параметров.
Отдельного рассмотрения заслуживают выходные параметры src_name и delegated_ cred_handle. Первый из них содержит имя инициатора формирования контекста. В принципе анализ этого имени может повлиять на поведение принимающего контекст. Если обеспечивается анонимность инициатора (установлен флаг anon_state), параметр src_name получает значение NULL (имя инициатора не было включено в токен безопасности).
Если установлен флаг deleg_state, то параметр delegated_cred_handle содержит дескриптор удостоверения, выданного на имя инициатора формирования контекста. Тем самым принимающей стороне делегируются полномочия формировать новые контексты безопасности не только от своего имени, но и от имени инициатора.Делегирование полномочий полезно, когда серверу требуется выполнить некоторые действия от имени клиента (например, сервер печати должен прочитать выдаваемые файлы).
Функция GSS_GetMIC служит для обеспечения контроля целостности и подлинности источника сообщения. Сообщение и генерируемый токен безопасности являются корректными входными данными для последующего обращения к функции GSS_VerifyMIC.
Входные параметры:
- context_handle: CONTEXT_ HANDLE {дескриптор контекста, в рамках которого происходит обмен сообщениями}
- qop_req: INTEGER {запрашиваемое качество защиты; 0 обозначает подразумеваемое качество}
- message: OCTET_STRING {защищаемое сообщение}
Выходные параметры:
- major_status: INTEGER
- minor_status: INTEGER
- per_msg_token: OCTET_ STRING {генерируемый токен безопасности}
Возможные значения основного кода завершения:
- GSS_S_COMPLETE - сообщение и сгенерированный токен безопасности готовы для передачи партнеру.
- GSS_S_CONTEXT_EXPIRED — истек срок годности контекста.
- GSS_S_CREDENTIALS_ EXPIRED — контекст распознан как корректный, однако срок годности ассоциированных с ним удостоверений истек.
- GSS_S_NO_CONTEXT — не задан контекст.
- GSS_S_BAD_QOP — некорректное значение параметра qop_req.
- GSS_S_FAILURE — сообщение не может быть защищено по причинам, не специфицируемым на уровне GSS-API.
С помощью информации, содержащейся в контексте безопасности, для сообщения определяется порядковый номер и/или временной штамп, порождается электронная подпись отправителя и т.п. Сгенерированные данные включаются в токен безопасности, который следует передать вместе с исходным сообщением (последнее функцией GSS_GetMIC не изменяется).
Естественно, успешное завершение функции GSS_ GetMIC не гарантирует, что после передачи сообщения удаленному партнеру проверка, выполняемая функцией GSS_ VerifyMIC, даст положительный результат.
Функция GSS_VerifyMIC позволяет проверить целостность и подлинность источника сообщения, защищенного функцией GSS_GetMIC.
Входные параметры:
- context_handle: CONTEXT_ HANDLE {дескриптор контекста, в рамках которого происходит обмен сообщениями}
- message: OCTET_STRING {контролируемое сообщение}
- per_msg_token: OCTET_ STRING {токен безопасности, ассоциированный с сообщением}
Выходные параметры:
- qop_state: INTEGER {обеспеченное качество защиты}
- major_status: INTEGER
- minor_status: INTEGER
Возможные значения основного кода завершения:
- GSS_S_COMPLETE - проверка дала положительный результат.
- GSS_S_DEFECTIVE_TOKEN — обнаружено искажение токена безопасности.
- GSS_S_BAG_SIG — токен безопасности содержит некорректную электронную подпись.
- GSS_S_DUPLICATE_TOKEN, GSS_S_OLD_TOKEN, GSS_S_UNSEQ_TOKEN, GSS_S_GAP_TOKEN — обнаружено дублирование или нарушение последовательности сообщений.
- GSS_S_CONTEXT_EXPIRED, GSS_S_CREDENTIALS_EXPIRED, GSS_S_NO_ CONTEXT — то же, что и в случае GSS_GetMIC.
- GSS_S_FAILURE — сообщение не может быть проверено по причинам, не специфицируемым на уровне GSS-API.
С помощью информации, содержащейся в контексте безопасности, проверяется целостность и подлинность источника сообщения и ассоциированного токена безопасности (корректность значения криптографической контрольной суммы, подлинность электронной подписи, допустимость порядкового номера и временного штампа и т.п.).
Выходной параметр qop_state показывает, защита какого качества была задействована соответствующим вызовом функции GSS_GetMIC.
Функция GSS_Wrap, помимо услуг, предоставляемых вызовом GSS_GetMIC, может обеспечить шифрование сообщения. В отличие от GSS_ GetMIC, результатом работы GSS_Wrap является инкапсулированное сообщение, содержащее необходимую контрольную информацию, а не исходное сообщение с дополнительным токеном безопасности.
Входные параметры:
- context_handle: CONTEXT_ HANDLE {дескриптор контекста, в рамках которого происходит обмен сообщениями}
- conf_req_flag: BOOLEAN {нужно ли шифровать защищаемое сообщение}
- qop_req: INTEGER {запрашиваемое качество защиты; 0 обозначает подразумеваемое качество}
- input_message: OCTET_ STRING {защищаемое сообщение}
Выходные параметры:
- major_status: INTEGER
- minor_status: INTEGER
- conf_state: BOOLEAN {было ли сообщение на самом деле зашифровано}
- output_message: OCTET_ STRING {инкапсулированное сообщение}
Возможные значения основного кода завершения для функции GSS_Wrap те же, что и для GSS_GetMIC.
С помощью информации, содержащейся в контексте безопасности, сообщение защищается от искажений и, быть может, шифруется. Порождаемое выходное сообщение output_message подлежит передаче партнеру по общению.
Функция GSS_Unwrap позволяет расшифровать, проверить целостность и подлинность источника применительно к сообщению, защищенному функцией GSS_Wrap.
Связь между функциями GSS_Wrap и GSS_Unwrap аналогична той, что существует между функциями GSS_ GetMIC и GSS_VerifyMIC.
Входные параметры:
- context_handle: CONTEXT_ HANDLE {дескриптор контекста, в рамках которого происходит обмен сообщениями}
- input_message: OCTET_ STRING {контролируемое сообщение}
Выходные параметры:
- conf_state: BOOLEAN {было ли сообщение на самом деле зашифровано}
- qop_state: INTEGER {обеспеченное качество защиты}
- major_status: INTEGER
- minor_status: INTEGER
- output_message: OCTET_ STRING {расшифрованное сообщение}
Возможные значения основного кода завершения для функции GSS_Unwrap те же, что и для GSS_VerifyMIC.
С помощью информации, содержащейся в контексте безопасности, функция GSS_Unwrap расшифровывает сообщение, проверяется его целостность и подлинность источника. Расшифрованное сообщение выдается в качестве значения выходного параметра output_message.
![]() |
![]() |
![]() |
Службы безопасности, которые могут предоставить интерфейс GSS-API | Содержание | Ограничения интерфейса безопасности |
Copyright ╘ 1993-2000, Jet Infosystems |