Project blogs
Авторизация пользователей в сети
Сегодня я бы хотел сказать пару слов про защиту информации в сети Диптауна. Я постараюсь на пальцах пояснить, как работает система авторизации пользователей в сети, и если среди читателей найдутся специалисты в области безопасности - буду весьма признателен за их мнение по этому поводу.
Учет всех пользователей сети ведут т.н. сервера авторизации. Этих серверов - больше одного, но некоторое ограниченное количество - по нашим прикидкам, 10-20 штук будет вполне достаточно. Все эти сервера известны всем пользователям сети, т.е. изменение списка этих серверов не может происходить в автоматическом режиме - только через обновление клиенского ПО. Фактически, это - единственный в какой-то мере централизованный элемент сети Диптауна (в том смысле, что больше никакой централизации в сети нет).
Каждый сервер сети Диптауна имеет сертификат сервера, выданный сервером авторизации. Таким образом устанавливается подлинность сервера - т.е. пользователь всегда может быть уверен, что соединяется с тем сервером, с которым он хотел соединиться.
Сразу оговорюсь, что в сети Диптауна используются свои форматы ключей и сертификатов. Т.е. под сертификатом не следует понимать стандартный X.509 сертификат. С точки зрения безопасности, сертификат - это всего лишь техническая информация о сервере, подписанная ключом доверенного сервера - в данном случае сервера авторизации. Проверка сертификата заключается в том, чтобы убедиться, что информация в сертификате соответствует ожидаемой, а подпись - верна.
Но самое интересное - это авторизация пользователя в сети. Сеть является распределенной, и пользователь в процессе своих блужданий может посещать десятки различных серверов. Каждый из них должен удостовериться, что пользователь - тот, за кого он себя выдает. Каким образом он это делает? В этом заключается суть процесса авторизации.
Прежде всего, пользователь соединяется с сетью через сервер доступа, который служит для него, фактически, проводником по сети. Т.е. пользователь единожды при запуске клиента соединяется с сервером доступа, и все дальнейшее общение происходит с ним: сервер доступа сам устанавливает соединения с остальными требуемыми данным пользователем серверами сети.
Как только пользователь соединяется с сервером доступа, он проходит процесс авторизации. Для этого сервер доступа соединяет его с сервером авторизации. После проверки логина и пароля, сервер авторизации выдает серверу доступа пользователя сертификат сессии, в котором указывается следующая информация:
- идентификатор пользователя;
- отпечаток публичного ключа сервера доступа;
- время действия сертификата.
Возможно также указать "черный" или "белый" список серверов, для которых действителен данный сертификат.
Когда процесс авторизации пройден - пользователь входит в Диптаун, и, сам того не подозревая, заходит на множество серверов обсчета ландшафта. Каждый раз, когда это происходит, сервер доступа пользователя передает серверу обсчета ланжшафта выданный пользователю сертификат сессии, по которому и устанавливается подлинность пользователя.
Наличие в сертификате такого поля, как отпечаток публичного ключа сервера доступа, делает возможным использование данного сертификата только с данным сервером доступа - т.е. даже если кто-то и сворует этот сертификат, он не сможет им воспользоваться, поскольку не имеет приватного ключа сервера доступа пользователя.
В этой схеме предполагается, что пользователь доверяет своему серверу доступа, а серверам авторизации доверяют все. На наш взгляд, такой подход сочетает в себе удобство и достаточную степень безопасности. Для тех серверов, где стандартный уровень безопасности кажется недостаточным, предусмотрены более сложные методы авторизации.
На данный момент полностью реализован модуль ядра, отвечающий за безопасность: разработаны форматы данных ключей и сертификатов, имеется возможность их генерации и проверки, реализована авторизация пользователя по сертификату.
В часности, мне вчера удалось выдать самому себе сертификат, который прошел все проверки среднего уровня безопасности. Конечно, это было сделано в рамках тестирования, но тем не менее это можно считать первой успешной авторизацией в сети Диптауна :)
Please login or register to see comments
