Глобальная авторизация с помощью ЭЦП
После того, как список паролей к различным сайтам перевалил за 100, я задумался об оптимизации этой системы.
Можно просто хранить все пароли в мастере подстановки броузера. Но тогда сайты не будут знать, что мои аккаунты на разных сайтах — это один и тот же человек.
Есть, конечно, OpenID, но она упирается в провайдера авторизации. Провайдер должен быть всегда он-лайн (в этом плане у отдельного пароля к каждому сайту есть преимущество), если провайдер закроется, мой аккаунт издыхает вместе с ним. Всё-таки приятнее свой аккаунт носить с собой. :)
Я подумал, что ЭЦП является наиболее элегантным решением проблемы. Есть ли какая-то готовая технология? Я видел, что здесь на форуме некоторые сообщения вроде бы подписаны. Насколько удобно общаться на форуме с использованием ЭЦП?
Ещё вопрос: обязательно человеку, который подписывает сообщения, регистрироваться на вашем сайте? Если обязательно, то зачем?
Какую технологию я хотел бы увидеть: заходить на сайт под одним из существующих у меня ключей или под сгенерированным анонимным. Если сайт мне нравится, тогда я подвязываю анонимный ключ к одному из основных, чтобы все знали, что это я. Я также могу подвязать какой-либо ключ к тому ключу, который связан с паспортом, но хочу, чтобы об этом знал только ограниченный круг людей.
Нормально.
Если открытый ключ загружен на сайт, движок может проверить ЭЦП и вывести "Верная ЭЦП от ...". Если ключ не загружен, движок не может проверить подпись и отображает "Неопределенная ЭЦП ключом 0x.....". В обоих случаях Вы можете открыть подписанный оригинал и проверить подпись лично.
Загружать ключи в настоящее время могут только зарегистрированные участники.
Привет, poptalk. Почитайте эту статью[link1]. Решение с открытыми ключами действительно наиболее элегантно. Осталось написать формальную спецификацию и реализовать.
В плане реализации, на мой взгляд, можно пойти таким путём.
Технических проблем здесь всё равно куча, останавливаться на них не стану. Главная беда та же, что и с OpenID, и с клиентскими SSL-сертификатами: они мало у кого есть. Пока ситуация не изменится, администраторам и разработчикам придётся создавать и поддерживать обе схемы аутентификации: и token-based, и парольную. А отсюда и куда меньшее желание изначально ввязываться в эту затею: зачем что-то менять, если и так всё работает? Ради пяти пользователей сайта? (Это отчасти и мои собственные мысли, когда я задумываюсь над реализацией чего-то подобного.)
Я думаю, что это нужно множеству людей, просто сами люди ещё об этом не знают. ;) Нужно только правильно подать технологию. Далёкий от криптографии человек на слово "шифрование" реагирует индифферентно, и я даже могу с ним согласится. Сегодняшние проблемы пользователей, взломы почтовых ящиков и угон ICQ, насколько я могу судить, происходят не из-за слабых алгоритмов шифрования, а из-за троянов или сами пользователи отдают свои пароли. :)
Но шифрование косвенно помогает решить проблемы с *регистрацией* и *авторизацией*. Регистрация обычно требует ввести капчу и проверить почту. Занимает время. А некоторые капчи приходится разгадывать как ребусы. :) Если вы хотите оставить всего один комментарий на сайте, овчинка, то есть регистрация, явно не стоит выделки. Или некоторые поступают так, что регистрируются с взятым от фонаря паролем, который помнят один день. В следующий раз регистрируют новый аккаунт. Потому что запомнить пароли ко всем сайтам в голове не реально.
И главный недостаток — даже зарегистрировавшись на сайте, я получаю доступ только к этому сообществу. Регистрироваться только для того, чтобы обнаружить, что на твой вопрос никто не может ответить.
Это реальные и очень больные проблемы.
Снижение барьера на вход в новое сообщество сильно расширит круг общения.
Если нет необходимости вводить пароль на сайте, ещё лучше. Даже если пароль подставляется броузером, всё равно лишняя перезагрузка страницы.
Прохождение капчей тоже можно оптимизировать. Для каждой технологии капчей достаточно иметь *один сайт*. Прошёл капчу — получил подпись об этом. Авторизация-то у нас глобальная. А сейчас приходится проходить капчу на каждом форуме/блоге.
Пошёл читать статью. :)
Человек, как ёж – гордая птица: пока никто не пинает, она не летит, и лишь когда появляется угроза сесть на длительный срок вследствии вовлечённости в антигосударственные/противоправные деяния, возникает и время, и силы, и желание на изучание основ ИБ.
то попробуйте сначала http://bugmenot.com/ ;)
Это ж для анонистов. :)
Теперь понятно, кто посещает сайты
www.nytimes.com
www.nypost.com
www.washingtonpost.com
www.chicagotribune.com
:))
Сложность всех подобных инициатив — как с электронными деньгами: начальное развёртывание (bootstrap). Пользователи не хотят пользоваться системой, пока она не поддерживается большим количеством участников среды (магазинами — для платёжных систем, интернет-сайтами — для систем аутентификации). Участники среды не хотят подключаться к новой системе, пока ей не начнёт пользоваться значительное число людей. В итоге оказывается так, что каждый проект изобретает собственную систему, которая, из-за недостатка поддержки, так и не получает распространения, чтобы стать де-факто или де-юре стандартом и выйти за рамки одно родительского или пары дружественных сайтов (вспомним хоть ту же инициативую Microsoft с Passport'изацией пользователей интернета).
Анонимы есть везде. :)
Я же говорил о глобальной авторизации, а в bugmenot.com я работаю под чужим аккаунтом. Эту систему можно использовать для шуток разве что.
Надеюсь, когда-нибудь всё сдвинется с мёртвой точки. :)
PGPuam похоже экспериментальная система, про которую все забыли. Вы говорили про клиентские SSL-сертификаты, их используют в WebMoney Keeper Light, хотя именно Light-ом я ни разу не пользовался. Уже есть прогресс.
3. Если не ошибаюсь, авторизация с помощью клиентского SSL-сертификата так и делает. Client Authentication – Mozilla Developer Center[link2]
Ещё возник такой вопрос. Раньше я думал, что клиентский SSL и PGP по сути одно и то же. То есть, данные, отправленные по защищённому SSL-соединению и с использованием клиентского сертификата, можно считать подписанными ЭЦП. Но вот я нашёл мнение, что это не так.
bankir.ru[link3].
Я подумал, что это происходит потому, что в SSL подписывается только сессионный ключ, а ключом шифруются отправленные клиентом данные, данные шифруются поблочно, следовательно, получатель может переставить блоки местами и извратить документ. Я прав?
Чтобы получить клиентский сертификат, пользователю Firefox-а достаточно пару раз щёлкнуть по ссылкам. Следовательно, загвоздка в серверах, в SSL-хостинге.
Да. Как-то у нас здесь упоминалось о старом не получившем поддержки протоколе SHTTP, реализующем процесс иначе. Можете легко найти, если воспользуетесь поиском.
Глобальность не испарится, если сервер будет считать достоверной не только свою подпись, но и подписи других таких же веб-сайтов. В этом случае схема получает должную гибкость: каждый администратор сам сможет решать, с каких сайтов принимать пользователей без дополнительной регистрации. Получается сеть доверия на уровне веб-сайтов.
Можно и так, только это сильно отличается от того, к чему мы привыкли на данный момент. Я хочу снизить затраты на вхождение в сеть. Пользователь, впервые зашедший в Интернет, хочет немедленно начать общаться. Значит, мы должны раздавать сертификаты всем желающим. Тогда в чём ценность такого сертификата? И в дальнейшем я не могу добавить доверия к своему сертификату. Хотя, наверное, технически возможно переподписать публичный ключ у другого CA. Просто система не подходит для наших целей. Всё-таки она была придумана для корпораций. Сеть PGP нам больше подходит. Я могу создать ключ независимо ни от кого, а получение доверия отложить на потом. И когда я получаю доверие, доверие к моим сделанным до этого сообщениям также растёт. Это имеет значение, если я, например, публикую блог. Люди могут читать мои старые записи. То есть это важно только для общения. Для платёжных транзакций, для подписания финансовых документов, эта функциональность, конечно, значения не имеет.
Ничто не ново под луной?[link4]
Не спорю.
poptalk, моя твоя не понимай. Причём тут CA? Я всё это время говорил о PGP.
Да, как-то упустил. :-) Я по умолчанию думаю об SSL, так как эта штука встроена в броузеры. Действительно, сертификаты SSL можно подписывать с помощью PGP.
Нельзя. Я имел в виду ключи PGP у всех участников системы: и у серверов, и у пользователей.
Я имел в виду, что технически можно подписать просто как файл, просто нет стандарта.
Здравствуйте, уважаемые.
Почиатл топик и нашел упоминание про WM Keeper Light. Пользуюсь сам.
И помиомо сертификата есть там еще один интересный и перспективный способо авторизации – Enum. Все подробности на сайте www.enum.ru
Вкратце: на вашем КПК\теелфоне – шифроблокнот, и введя выданную сайтом последовательность у себя, вы получаете ответ и вводите его на сайте.
Недостатки – необходим сервер, где будет храниться "вопросная" часть шифроблокнота.
А так – очень удобно. Из любого места, войдя на страницу авторизации, ввожу свое мыло(как идентификация меня), затем ввожу у себя выданное сайтом число и наконец отдаю сайту ответ. Сошлось – вхожу.
Действительно SSL-хостинг стоит в два раза дороже (где-то читал у вас, SATtva)? То есть, если есть хостинг за 0,8 USD/мес., то можно купить SSL за 1,6? :-)
poptalk, не занимайтесь офф-топиком, есть поиск. И проявите здравомыслие. SSL не увеличивает тупо стоимость вдвое, но для нашего тарифного плана получается примерно так из-за почти одинаковой стоимости хостинга и опций SSL.
Это не совсем оффтоп. Не могу понять, что препятствует внедрению нормальной авторизации. Технологически всё готово, как на клиенте, так и на сервере. Конкуренции технологий нет, технология одна — SSL. Может, деньги? Меня интересовала реальная сумма, могут быть скрытые платежи. В интернете я действительно нашёл SSL-хостинг за 0,8 USD/мес., но придётся раскошелиться ещё на выделенный IP-адрес, ещё 2 USD/мес.
Остаются психологические причины. Если человек авторизуется с помощью логина и пароля, он зависит от сайта. Если с помощью сертификата — он свободная птица.
Пора закругляться, так как в эту тему пишу один я.
Любая авторизация предполагает проверку установленного ранее доверия. Сертификат сам по себе — просто набор байтов. Чтобы сертификат был принят при авторизации, он должен быть заверен доверенной стороной. Кто ею выступит?
Вот ещё! OpenPGP!
Скорее, отсутствие формализованной идеи. Попробуйте описать своё предложение более конкретно.
Вот я зарегистрировался на вашем сайте. Какое между нами было ранее доверие? Вы узнали обычную информацию, которую передаёт броузер сайту. Разве это основание для установления доверия? И тем не менее я пользуюсь Вашим сайтом. ;-)
Точно так же обстоит дело с бесплатными почтовыми ящиками, форумами, блогами и др. Основную массу пользователей никто не проверяет, потому что большинство аккаунтов короткоживущие. Есть такая неофициальная статистика: из зарегистрированных пользователей 10% читает форум и 1% пишет. Т.е. 89% аккаунтов мёртвые, 10% ненужные.
Был бы у меня хостинг, я бы развернул прототип. Локально я сделал. Человек, не имеющий никакого сертификата, получает его. Кто подпишет сертификат, значения не имеет. Затем заходит в защищённую зону с использованием сертификата. Идентифицируется по $_SERVER["SSL_CLIENT_CERT"] (mod_ssl Apache-а). Аккаунты пользователя на разных сайтах связываются по этой же переменной.
Вы зарегистрировались — доверие появилось. Источником его в данном случае являетесь Вы сами (исходим из допущения, что это Ваш логин-пароль, а не злодея Мэллори). Для непосредственной регистрации на одном сайте это нормально, но ведь Вы предлагаете сделать распределённую систему регистрации. Это то же самое, как предложить администратору почтовой службы влить в свою базу данных пользователей данные из произвольного стороннего источника: какой резон ему это делать?
Для таких случаев подходят две вещи: единая база данных зарегистрированных пользователей и/или аутентификация по доверенным кукам (получаем централизованную систему мета-регистрации типа Яндекс.Паспорта) или схемы, реализующие криптографическое доверие. Второе может быть устроенно как централизованно с использованием X.509 (нужна доверенная сторона, заверяющая пользовательские сертификаты), так и распределённо с помощью OpenPGP (тут заверять пользовательский сертификат может любой участник системы регистрации).
Если сертификат X.509 может быть заверен кем угодно, то с чего ради я должен давать пользователю аутентифицированный доступ к своему сайту без процедуры регистрации? Только за то, что у него есть сертификат? В общем случае ему всё равно придётся регистрироваться для каждого сайта отдельно даже при наличии сертификата.
Электронная почта является не совсем удачным примером. Давайте пока остановимся на форумах, блогах и wiki, к примеру.
Какой резон администратору? Понятно, никакого. Это нужно только пользователям. Если вы попросите пользователя подтвердить свою личность, 99% из них просто развернутся и уйдут на другой сайт. Ведь конкуренция среди сайтов на общие темы высока.
А что такое регистрация обычно? Прохождение капчи и потраченное время, чтобы разобраться с механизмом регистрации. Этого досточно, чтобы попасть к вам на сайт. Опять же, у вас есть возможность подписывать сообщения с помощью PGP, а половина пишет, если не ошибаюсь, вообще анонимно. :-) А зачем эта капча, если 100 человек в интернете и так вам подтвердят, что я не робот? А давайте я вам лучше 10 центов скину на кошелёк, вместо того, чтобы разбираться с регистрацией, если уж вам так хочется меня помучить. ;-)
Конкретно как работает Яндекс. Паспорт я не знаю, но броузер говорит мне, что он оставляет куки на ".yandex.ru", похоже, это известная схема, когда все сервисы в одной доменной зоне. Эта схема приемлема для корпорации, не для независимых сайтов. Уязвимым местом является сервер авторизации, который принимает все-все-все пароли.
Я ведь не против доверия и проверки в принципе. Но проверка должна быть там, где это действительно нужно, и когда нужно. В SSL работа без чьей-то подписи вообще невозможна, без подписи нет сертификата. Поэтому я сказал, что SSL-подпись нам не нужна. Я думаю, она распространения не получит. На данный момент продажа сертификатов есть стиральная машина для отмывания денег. Но нам будут нужны подписи, сделанные по любой другой технологии. Какую из технологий использовать, это уж каждый администратор решает для себя. Даже больше — общаться или не общаться с анонимом — это личное дело каждого.
Впрочем, я использую bugmenot.com, чтобы просматривать форумы imdb.com.