Использование электронных сертификатов для авторизации по доверенности в ОС Linux | Прикладная дискретная математика. Приложение. 2014. № 7.

Использование электронных сертификатов для авторизации по доверенности в ОС Linux

Предлагается решение для делегирования некоторого набора прав от одного пользователя (доверителя) операционной системы другому (доверенному лицу) на определённый промежуток времени. Для этого предложено использовать «доверенности» - объекты, содержащие в себе такие поля, как идентификатор доверителя, идентификатор доверенного лица, время действия доверенности, а также набор прав, делегируемых доверенному лицу доверителем. Доверенность должна содержать также цифровую подпись на закрытом ключе доверителя под всеми вышеперечисленными полями. Предложенное решение реализовано для операционной системы Linux с помощью криптографического инструмента OpenSSL и подключаемых модулей аутентификации (PAM). В качестве доверенностей здесь выступают цифровые сертификаты стандарта X.509 v3, а делегируемые полномочия указываются по определённому формату в поле «Расширения» этих сертификатов. Сам функционал авторизации по доверенности реализован в виде модуля PAM.

Using digital certificates for authorization by proxy in os Linux.pdf В операционных системах привилегии пользователя можно задавать, используя группы, в которые он входит. Пусть некоторый пользователь (доверитель) хочет передать некоторые свои права другому пользователю (доверенному лицу), который изначально этими правами не обладает. Такая схема полезна в случае, когда доверителю приходится отсутствовать по той или иной причине и он хочет передать свои полномочия своему доверенному лицу. Самое очевидное решение: доверитель может добавить доверенное лицо в некоторую группу, которая обладает этими правами. При таком подходе возникают следующие проблемы: 1) Право переводить пользователя из группы в группу есть, как правило, далеко не у каждого. 2) Пусть право переводить пользователей из группы в группу у доверителя есть. Допустим, доверитель будет отсутствовать в течение месяца, но эти права необходимо делегировать на неделю. Следующие три недели доверенное лицо будет находиться в привилегированной группе, не имея в этом потребности. Таким образом, возникает задача построения системы делегирования некоторого набора прав доступа, которыми обладает некий пользователь-доверитель (не обязательно «привилегированный» в системе), другому пользователю - доверенному лицу, который ими изначально может не обладать, на некоторый (определённый пользователем-доверителем) промежуток времени. При этом, очевидно, должны выполняться следующие требования: 1) любой пользователь системы может быть доверителем для любого другого пользователя; 2) пользователь может делегировать только права, принадлежащие ему, и никакие другие; 3) только доверенное лицо может авторизоваться на делегируемые ему права; 4) доверитель может определять промежуток времени, в течение которого доверенное лицо наделяется делегируемыми ему правами. Дадим формальное описание решения, удовлетворяющее перечисленным требованиям. Пусть - U = {u1, u2,... , un} - множество пользователей, и каждый пользователь Uj Е U имеет пару (xUi, yUi) -закрытый/открытый ключ. Очевидно, должно выполняться условие x^ = Xu,, y^ = уи, для всех i = j; - G = {g1, g2,..., g^} - множество групп; - P = {p1,... , pm} -множество всех возможных прав доступа к объектам; - T = {0,1, 2,...} -множество целых неотрицательных чисел (время); - PA : G ^ 2P - функция, задающая соответствие прав доступа для конкретной группы; - UA : U ^ 2g - функция, задающая множество групп, на которые может быть авторизован пользователь; - PROXY - множество доверенностей, объектов вида proxy^ (g, tstart, tend) = (B, Sig^ (B)), где B = (Uj,Uj ,g,tstart,tend); Е U; g С UA(Uj); tstart,tend Е T; SigXu(B) -цифровая подпись B на закрытом ключе пользователя Uj. Другими словами, это сертификат, который подтверждает факт делегирования на промежуток времени [tstart, tend] некоторого набора групп g от пользователя Uj, который изначально им обладает, пользователю Uj, который им изначально может и не обладать. Определим условия корректности доверенности proxy«:j (g, tstart, tend) Е PROXY для пользователя Е U, предъявляющего данную доверенность, в момент времени tcurrent: 1) tcurrent Е [tstart, tend] -условие актуальности доверенности; 2) g С UA(uj) -условие обладания доверителя делегируемыми правами; 3) k = j - условие предъявления доверенности доверенным лицом; 4) V(proxy«j (g,t start,tend)) - true условие корректности подписи. Здесь V : PROXY ^ {true, false} - функция проверки цифровой подписи. Доверенность, удовлетворяющую условиям 1-4, далее будем называть корректной, в противном случае - некорректной. Используем следующее обозначение: пусть A - некоторое непустое множество, тогда A0 = A U {0}. Определим функцию assign : U х PROXY0 х T ^ (2G) , которая осуществляет авторизацию на делегированные группы при предъявлении корректной доверенности: I 0, если z = 0 или z некорректная; assign(uj , z, tcurrent) = \ ад,., . I g, если z = proxy«j(g, tstart, tend) и z корректная. JUi •>G\ Функция groups : U х PROXY0 х T ^ (2G) осуществляет авторизацию пользователей в системе. Определим её следующим образом: grOUps(Uj, z, tcurrent) = UA(Uj) U assign(uj ,z, tcurrent). Таким образом, если пользователь авторизуется без доверенности или авторизуется с некорректной доверенностью, то он получает ровно те права, которые дают ему группы, в которых он изначально состоит (посредством функции UA). Однако при предъявлении корректной доверенности он может авторизоваться на некий набор групп, которым он изначально не обладал, но который делегировал ему пользователь-доверитель. Требования 1-4 выполняются благодаря использованию доверенностей, в которых явно указаны доверенное лицо, доверитель, определён срок действия, и все эти поля подписаны на закрытом ключе доверителя. В реализации данного решения для операционной системы Linux в качестве доверенностей используются сертификаты X.509 версии 3 [1]. Сертификаты данного стандарта содержат следующие ключевые поля: - имя эмитента (кто выдал сертификат); - имя субъекта (кому выдан сертификат); - период действия; - расширения; - подпись сертификата (с указанием алгоритма хэширования и подписи). Поле «Расширения» представляет собой набор троек (OID, сгШсаШу^7ад, Уа/ue), где OID (Object Identifier) используется для именования расширения; сгШса/йу^7ад - флаг критичности; Уа/ue - значение расширения. Расширения предоставляют возможность внедрения в сертификат произвольной информации до его создания. Таким образом, сертификаты стандарта X.509 v3 могут использоваться в качестве доверенностей. Для этого в поле «Имя эмитента» необходимо указать имя пользователя-доверителя, в поле «Имя субъекта» - имя доверенного лица, в поле «Расширения» -набор делегируемых прав в системе. Доверителю необходимо также указать период действия доверенности в поле «Период действия» и подписать сертификат на своём закрытом ключе. Создание доверенностей осуществляется при помощи криптографического инструмента OpenSSL [2]. Функция аззгдп, авторизующая пользователя на делегированные группы (при предъявлении корректной доверенности), реализована в виде модуля PAM [3] - элемента ядра Linux.

Ключевые слова

электронные сертификаты, X.509, Linux, PAM, OpenSSL, electronic certificates, X.509, Linux, PAM, OpenSSL, authorization by proxy

Авторы

ФИООрганизацияДополнительноE-mail
Рыжков Виктор ИгоревичТомский государственный университетстудентvic.ryzhkov@gmail.com
Всего: 1

Ссылки

https://www.ietf.org/rfc/rfc5280.txt - RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile.
http://www.openssl.org/ - OpenSSL: The Open Source toolkit for SSL/TLS.
http://www.linux-pam.org/ - A Linux-PAM page.
 Использование электронных сертификатов для авторизации по доверенности в ОС Linux | Прикладная дискретная математика. Приложение. 2014. № 7.

Использование электронных сертификатов для авторизации по доверенности в ОС Linux | Прикладная дискретная математика. Приложение. 2014. № 7.