Глобальная авторизация с помощью ЭЦП


После того, как список паролей к различным сайтам перевалил за 100, я задумался об оптимизации этой системы.
Можно просто хранить все пароли в мастере подстановки броузера. Но тогда сайты не будут знать, что мои аккаунты на разных сайтах — это один и тот же человек.
Есть, конечно, OpenID, но она упирается в провайдера авторизации. Провайдер должен быть всегда он-лайн (в этом плане у отдельного пароля к каждому сайту есть преимущество), если провайдер закроется, мой аккаунт издыхает вместе с ним. Всё-таки приятнее свой аккаунт носить с собой. :)
Я подумал, что ЭЦП является наиболее элегантным решением проблемы. Есть ли какая-то готовая технология? Я видел, что здесь на форуме некоторые сообщения вроде бы подписаны. Насколько удобно общаться на форуме с использованием ЭЦП?
Ещё вопрос: обязательно человеку, который подписывает сообщения, регистрироваться на вашем сайте? Если обязательно, то зачем?
Какую технологию я хотел бы увидеть: заходить на сайт под одним из существующих у меня ключей или под сгенерированным анонимным. Если сайт мне нравится, тогда я подвязываю анонимный ключ к одному из основных, чтобы все знали, что это я. Я также могу подвязать какой-либо ключ к тому ключу, который связан с паспортом, но хочу, чтобы об этом знал только ограниченный круг людей.

Комментарии
— ПэГусев (28/09/2007 21:15)   
Насколько удобно общаться на форуме с использованием ЭЦП?

Нормально.
Ещё вопрос: обязательно человеку, который подписывает сообщения, регистрироваться на вашем сайте? Если обязательно, то зачем?

Если открытый ключ загружен на сайт, движок может проверить ЭЦП и вывести "Верная ЭЦП от ...". Если ключ не загружен, движок не может проверить подпись и отображает "Неопределенная ЭЦП ключом 0x.....". В обоих случаях Вы можете открыть подписанный оригинал и проверить подпись лично.
Загружать ключи в настоящее время могут только зарегистрированные участники.
— SATtva (28/09/2007 23:07)   
Привет, poptalk. Почитайте эту статью[link1]. Решение с открытыми ключами действительно наиболее элегантно. Осталось написать формальную спецификацию и реализовать.

В плане реализации, на мой взгляд, можно пойти таким путём.
  1. У Вас есть ключ PGP (обычно один или несколько). Всё, что нужно для регистрации на сайте — это сообщить серверу свой ключ.
  2. Сервер подписывает Ваш сертификат своим ключом, определяя его как достоверный.
  3. Для логина на сайт Вы электронно подписываете выданную сервером строку-запрос.
  4. Сервер проверяет подлинность строки, Вашей подписи и собственной подписи на данном ключе. Если всё сходится — Вы внутри.

Технических проблем здесь всё равно куча, останавливаться на них не стану. Главная беда та же, что и с OpenID, и с клиентскими SSL-сертификатами: они мало у кого есть. Пока ситуация не изменится, администраторам и разработчикам придётся создавать и поддерживать обе схемы аутентификации: и token-based, и парольную. А отсюда и куда меньшее желание изначально ввязываться в эту затею: зачем что-то менять, если и так всё работает? Ради пяти пользователей сайта? (Это отчасти и мои собственные мысли, когда я задумываюсь над реализацией чего-то подобного.)
— poptalk (29/09/2007 01:33)   
Технических проблем здесь всё равно куча, останавливаться на них не стану. Главная беда та же, что и с OpenID, и с клиентскими SSL-сертификатами: они мало у кого есть. Пока ситуация не изменится, администраторам и разработчикам придётся создавать и поддерживать обе схемы аутентификации: и token-based, и парольную. А отсюда и куда меньшее желание изначально ввязываться в эту затею: зачем что-то менять, если и так всё работает? Ради пяти пользователей сайта?

Я думаю, что это нужно множеству людей, просто сами люди ещё об этом не знают. ;) Нужно только правильно подать технологию. Далёкий от криптографии человек на слово "шифрование" реагирует индифферентно, и я даже могу с ним согласится. Сегодняшние проблемы пользователей, взломы почтовых ящиков и угон ICQ, насколько я могу судить, происходят не из-за слабых алгоритмов шифрования, а из-за троянов или сами пользователи отдают свои пароли. :)
Но шифрование косвенно помогает решить проблемы с *регистрацией* и *авторизацией*. Регистрация обычно требует ввести капчу и проверить почту. Занимает время. А некоторые капчи приходится разгадывать как ребусы. :) Если вы хотите оставить всего один комментарий на сайте, овчинка, то есть регистрация, явно не стоит выделки. Или некоторые поступают так, что регистрируются с взятым от фонаря паролем, который помнят один день. В следующий раз регистрируют новый аккаунт. Потому что запомнить пароли ко всем сайтам в голове не реально.
И главный недостаток — даже зарегистрировавшись на сайте, я получаю доступ только к этому сообществу. Регистрироваться только для того, чтобы обнаружить, что на твой вопрос никто не может ответить.
Это реальные и очень больные проблемы.
Снижение барьера на вход в новое сообщество сильно расширит круг общения.
Если нет необходимости вводить пароль на сайте, ещё лучше. Даже если пароль подставляется броузером, всё равно лишняя перезагрузка страницы.
Прохождение капчей тоже можно оптимизировать. Для каждой технологии капчей достаточно иметь *один сайт*. Прошёл капчу — получил подпись об этом. Авторизация-то у нас глобальная. А сейчас приходится проходить капчу на каждом форуме/блоге.
Пошёл читать статью. :)
— ключ (29/09/2007 19:56)   
Я думаю, что это нужно множеству людей, просто сами люди ещё об этом не знают.

Человек, как ёж – гордая птица: пока никто не пинает, она не летит, и лишь когда появляется угроза сесть на длительный срок вследствии вовлечённости в антигосударственные/противоправные деяния, возникает и время, и силы, и желание на изучание основ ИБ.
Гость (29/09/2007 20:09)   
Если вы хотите оставить всего один комментарий на сайте
то попробуйте сначала http://bugmenot.com/ ;)
— poptalk (29/09/2007 20:17)   
Если вы хотите оставить всего один комментарий на сайте

то попробуйте сначала wwwhttp://bugmenot.com/ ;)

Это ж для анонистов. :)
Гость (29/09/2007 20:30)   
Теперь понятно, кто посещает сайты
www.nytimes.com
www.nypost.com
www.washingtonpost.com
www.chicagotribune.com
:))
— SATtva (29/09/2007 22:02)   
Прохождение капчей тоже можно оптимизировать. Для каждой технологии капчей достаточно иметь *один сайт*. Прошёл капчу — получил подпись об этом. Авторизация-то у нас глобальная. А сейчас приходится проходить капчу на каждом форуме/блоге.

Сложность всех подобных инициатив — как с электронными деньгами: начальное развёртывание (bootstrap). Пользователи не хотят пользоваться системой, пока она не поддерживается большим количеством участников среды (магазинами — для платёжных систем, интернет-сайтами — для систем аутентификации). Участники среды не хотят подключаться к новой системе, пока ей не начнёт пользоваться значительное число людей. В итоге оказывается так, что каждый проект изобретает собственную систему, которая, из-за недостатка поддержки, так и не получает распространения, чтобы стать де-факто или де-юре стандартом и выйти за рамки одно родительского или пары дружественных сайтов (вспомним хоть ту же инициативую Microsoft с Passport'изацией пользователей интернета).
— poptalk (29/09/2007 22:42)   
Теперь понятно, кто посещает сайты
www.nytimes.com
www.nypost.com
www.washingtonpost.com
www.chicagotribune.com
:))

Анонимы есть везде. :)
Я же говорил о глобальной авторизации, а в bugmenot.com я работаю под чужим аккаунтом. Эту систему можно использовать для шуток разве что.
— poptalk (29/09/2007 23:06)   
Сложность всех подобных инициатив — как с электронными деньгами: начальное развёртывание (bootstrap). Пользователи не хотят пользоваться системой, пока она не поддерживается большим количеством участников среды (магазинами — для платёжных систем, интернет-сайтами — для систем аутентификации). Участники среды не хотят подключаться к новой системе, пока ей не начнёт пользоваться значительное число людей.


Надеюсь, когда-нибудь всё сдвинется с мёртвой точки. :)
PGPuam похоже экспериментальная система, про которую все забыли. Вы говорили про клиентские SSL-сертификаты, их используют в WebMoney Keeper Light, хотя именно Light-ом я ни разу не пользовался. Уже есть прогресс.
— poptalk (30/09/2007 23:31)   
В плане реализации, на мой взгляд, можно пойти таким путём.


2.
Сервер подписывает Ваш сертификат своим ключом, определяя его как достоверный.
По-моему, если так сделать, и сервер будет проверять, что на клиентском сертификате обязательно стоит личная сервера подпись, вся глобальность авторизации испаряется. Это опять авторизация в границах одного сервера. Наоборот, или сервер не должен проверять подпись сертификата клиента, или, если веб-сервер на это настроить нельзя, то сертификат должен быть подписан закрытым ключом, который опубликован для общественности. Тогда любой пользователь сможет подписать свой сертификат самостоятельно.
3.
Для логина на сайт Вы электронно подписываете выданную сервером строку-запрос.
Если не ошибаюсь, авторизация с помощью клиентского SSL-сертификата так и делает. Client Authentication – Mozilla Developer Center[link2]

Ещё возник такой вопрос. Раньше я думал, что клиентский SSL и PGP по сути одно и то же. То есть, данные, отправленные по защищённому SSL-соединению и с использованием клиентского сертификата, можно считать подписанными ЭЦП. Но вот я нашёл мнение, что это не так.
Клиентские SSL-сертификаты обеспечивают лишь криптографически стойкую аутентификацию клиентов, но совершенно никак не пригодны для формирования ЭЦП клиентов под финансовыми документами (в браузерах просто нет такого механизма).

bankir.ru[link3].

Я подумал, что это происходит потому, что в SSL подписывается только сессионный ключ, а ключом шифруются отправленные клиентом данные, данные шифруются поблочно, следовательно, получатель может переставить блоки местами и извратить документ. Я прав?
— poptalk (01/10/2007 23:28)   
Чтобы получить клиентский сертификат, пользователю Firefox-а достаточно пару раз щёлкнуть по ссылкам. Следовательно, загвоздка в серверах, в SSL-хостинге.
— SATtva (02/10/2007 09:30)   
Я подумал, что это происходит потому, что в SSL подписывается только сессионный ключ, а ключом шифруются отправленные клиентом данные, данные шифруются поблочно, следовательно, получатель может переставить блоки местами и извратить документ. Я прав?

Да. Как-то у нас здесь упоминалось о старом не получившем поддержки протоколе SHTTP, реализующем процесс иначе. Можете легко найти, если воспользуетесь поиском.

Сервер подписывает Ваш сертификат своим ключом, определяя его как достоверный.

По-моему, если так сделать, и сервер будет проверять, что на клиентском сертификате обязательно стоит личная сервера подпись, вся глобальность авторизации испаряется...

Глобальность не испарится, если сервер будет считать достоверной не только свою подпись, но и подписи других таких же веб-сайтов. В этом случае схема получает должную гибкость: каждый администратор сам сможет решать, с каких сайтов принимать пользователей без дополнительной регистрации. Получается сеть доверия на уровне веб-сайтов.
— poptalk (02/10/2007 15:06)   
Глобальность не испарится, если сервер будет считать достоверной не только свою подпись, но и подписи других таких же веб-сайтов. В этом случае схема получает должную гибкость: каждый администратор сам сможет решать, с каких сайтов принимать пользователей без дополнительной регистрации. Получается сеть доверия на уровне веб-сайтов.

Можно и так, только это сильно отличается от того, к чему мы привыкли на данный момент. Я хочу снизить затраты на вхождение в сеть. Пользователь, впервые зашедший в Интернет, хочет немедленно начать общаться. Значит, мы должны раздавать сертификаты всем желающим. Тогда в чём ценность такого сертификата? И в дальнейшем я не могу добавить доверия к своему сертификату. Хотя, наверное, технически возможно переподписать публичный ключ у другого CA. Просто система не подходит для наших целей. Всё-таки она была придумана для корпораций. Сеть PGP нам больше подходит. Я могу создать ключ независимо ни от кого, а получение доверия отложить на потом. И когда я получаю доверие, доверие к моим сделанным до этого сообщениям также растёт. Это имеет значение, если я, например, публикую блог. Люди могут читать мои старые записи. То есть это важно только для общения. Для платёжных транзакций, для подписания финансовых документов, эта функциональность, конечно, значения не имеет.
— unknown (02/10/2007 16:01)   
Ничто не ново под луной?[link4]
— poptalk (02/10/2007 16:35)   
wwwНичто не ново под луной?


Не спорю.
— SATtva (02/10/2007 17:01)   
poptalk, моя твоя не понимай. Причём тут CA? Я всё это время говорил о PGP.
— poptalk (02/10/2007 17:16)   
poptalk, моя твоя не понимай. Причём тут CA? Я всё это время говорил о PGP.

Да, как-то упустил. :-) Я по умолчанию думаю об SSL, так как эта штука встроена в броузеры. Действительно, сертификаты SSL можно подписывать с помощью PGP.
— SATtva (02/10/2007 17:43)   

Нельзя. Я имел в виду ключи PGP у всех участников системы: и у серверов, и у пользователей.
— poptalk (02/10/2007 18:56)   
Нельзя. Я имел в виду ключи PGP у всех участников системы: и у серверов, и у пользователей.

Я имел в виду, что технически можно подписать просто как файл, просто нет стандарта.
— Constantine_ru (08/10/2007 01:17)   
Здравствуйте, уважаемые.
Почиатл топик и нашел упоминание про WM Keeper Light. Пользуюсь сам.
И помиомо сертификата есть там еще один интересный и перспективный способо авторизации – Enum. Все подробности на сайте www.enum.ru

Вкратце: на вашем КПК\теелфоне – шифроблокнот, и введя выданную сайтом последовательность у себя, вы получаете ответ и вводите его на сайте.
Недостатки – необходим сервер, где будет храниться "вопросная" часть шифроблокнота.
А так – очень удобно. Из любого места, войдя на страницу авторизации, ввожу свое мыло(как идентификация меня), затем ввожу у себя выданное сайтом число и наконец отдаю сайту ответ. Сошлось – вхожу.
— poptalk (18/10/2007 23:17)   
Действительно SSL-хостинг стоит в два раза дороже (где-то читал у вас, SATtva)? То есть, если есть хостинг за 0,8 USD/мес., то можно купить SSL за 1,6? :-)
— SATtva (19/10/2007 13:22)   
poptalk, не занимайтесь офф-топиком, есть поиск. И проявите здравомыслие. SSL не увеличивает тупо стоимость вдвое, но для нашего тарифного плана получается примерно так из-за почти одинаковой стоимости хостинга и опций SSL.
— poptalk (19/10/2007 16:33)   
poptalk, не занимайтесь офф-топиком, есть поиск. И проявите здравомыслие. SSL не увеличивает тупо стоимость вдвое, но для нашего тарифного плана получается примерно так из-за почти одинаковой стоимости хостинга и опций SSL.


Это не совсем оффтоп. Не могу понять, что препятствует внедрению нормальной авторизации. Технологически всё готово, как на клиенте, так и на сервере. Конкуренции технологий нет, технология одна — SSL. Может, деньги? Меня интересовала реальная сумма, могут быть скрытые платежи. В интернете я действительно нашёл SSL-хостинг за 0,8 USD/мес., но придётся раскошелиться ещё на выделенный IP-адрес, ещё 2 USD/мес.
Остаются психологические причины. Если человек авторизуется с помощью логина и пароля, он зависит от сайта. Если с помощью сертификата — он свободная птица.

Пора закругляться, так как в эту тему пишу один я.
— SATtva (21/10/2007 14:08)   
Если человек авторизуется с помощью логина и пароля, он зависит от сайта. Если с помощью сертификата — он свободная птица.

Любая авторизация предполагает проверку установленного ранее доверия. Сертификат сам по себе — просто набор байтов. Чтобы сертификат был принят при авторизации, он должен быть заверен доверенной стороной. Кто ею выступит?

Конкуренции технологий нет, технология одна — SSL.

Вот ещё! OpenPGP!

Может, деньги?

Скорее, отсутствие формализованной идеи. Попробуйте описать своё предложение более конкретно.
— poptalk (21/10/2007 16:45)   
Любая авторизация предполагает проверку установленного ранее доверия. Сертификат сам по себе — просто набор байтов. Чтобы сертификат был принят при авторизации, он должен быть заверен доверенной стороной. Кто ею выступит?

Вот я зарегистрировался на вашем сайте. Какое между нами было ранее доверие? Вы узнали обычную информацию, которую передаёт броузер сайту. Разве это основание для установления доверия? И тем не менее я пользуюсь Вашим сайтом. ;-)
Точно так же обстоит дело с бесплатными почтовыми ящиками, форумами, блогами и др. Основную массу пользователей никто не проверяет, потому что большинство аккаунтов короткоживущие. Есть такая неофициальная статистика: из зарегистрированных пользователей 10% читает форум и 1% пишет. Т.е. 89% аккаунтов мёртвые, 10% ненужные.

Может, деньги?
Скорее, отсутствие формализованной идеи. Попробуйте описать своё предложение более конкретно.

Был бы у меня хостинг, я бы развернул прототип. Локально я сделал. Человек, не имеющий никакого сертификата, получает его. Кто подпишет сертификат, значения не имеет. Затем заходит в защищённую зону с использованием сертификата. Идентифицируется по $_SERVER["SSL_CLIENT_CERT"] (mod_ssl Apache-а). Аккаунты пользователя на разных сайтах связываются по этой же переменной.
— SATtva (21/10/2007 17:56)   
Вот я зарегистрировался на вашем сайте. Какое между нами было ранее доверие?

Вы зарегистрировались — доверие появилось. Источником его в данном случае являетесь Вы сами (исходим из допущения, что это Ваш логин-пароль, а не злодея Мэллори). Для непосредственной регистрации на одном сайте это нормально, но ведь Вы предлагаете сделать распределённую систему регистрации. Это то же самое, как предложить администратору почтовой службы влить в свою базу данных пользователей данные из произвольного стороннего источника: какой резон ему это делать?

Для таких случаев подходят две вещи: единая база данных зарегистрированных пользователей и/или аутентификация по доверенным кукам (получаем централизованную систему мета-регистрации типа Яндекс.Паспорта) или схемы, реализующие криптографическое доверие. Второе может быть устроенно как централизованно с использованием X.509 (нужна доверенная сторона, заверяющая пользовательские сертификаты), так и распределённо с помощью OpenPGP (тут заверять пользовательский сертификат может любой участник системы регистрации).

Если сертификат X.509 может быть заверен кем угодно, то с чего ради я должен давать пользователю аутентифицированный доступ к своему сайту без процедуры регистрации? Только за то, что у него есть сертификат? В общем случае ему всё равно придётся регистрироваться для каждого сайта отдельно даже при наличии сертификата.
— poptalk (21/10/2007 21:09)   
Вот я зарегистрировался на вашем сайте. Какое между нами было ранее доверие?

Вы зарегистрировались — доверие появилось. Источником его в данном случае являетесь Вы сами (исходим из допущения, что это Ваш логин-пароль, а не злодея Мэллори). Для непосредственной регистрации на одном сайте это нормально, но ведь Вы предлагаете сделать распределённую систему регистрации. Это то же самое, как предложить администратору почтовой службы влить в свою базу данных пользователей данные из произвольного стороннего источника: какой резон ему это делать?


Электронная почта является не совсем удачным примером. Давайте пока остановимся на форумах, блогах и wiki, к примеру.

Какой резон администратору? Понятно, никакого. Это нужно только пользователям. Если вы попросите пользователя подтвердить свою личность, 99% из них просто развернутся и уйдут на другой сайт. Ведь конкуренция среди сайтов на общие темы высока.

Если сертификат X.509 может быть заверен кем угодно, то с чего ради я должен давать пользователю аутентифицированный доступ к своему сайту без процедуры регистрации? Только за то, что у него есть сертификат?


А что такое регистрация обычно? Прохождение капчи и потраченное время, чтобы разобраться с механизмом регистрации. Этого досточно, чтобы попасть к вам на сайт. Опять же, у вас есть возможность подписывать сообщения с помощью PGP, а половина пишет, если не ошибаюсь, вообще анонимно. :-) А зачем эта капча, если 100 человек в интернете и так вам подтвердят, что я не робот? А давайте я вам лучше 10 центов скину на кошелёк, вместо того, чтобы разбираться с регистрацией, если уж вам так хочется меня помучить. ;-)

Конкретно как работает Яндекс. Паспорт я не знаю, но броузер говорит мне, что он оставляет куки на ".yandex.ru", похоже, это известная схема, когда все сервисы в одной доменной зоне. Эта схема приемлема для корпорации, не для независимых сайтов. Уязвимым местом является сервер авторизации, который принимает все-все-все пароли.

Я ведь не против доверия и проверки в принципе. Но проверка должна быть там, где это действительно нужно, и когда нужно. В SSL работа без чьей-то подписи вообще невозможна, без подписи нет сертификата. Поэтому я сказал, что SSL-подпись нам не нужна. Я думаю, она распространения не получит. На данный момент продажа сертификатов есть стиральная машина для отмывания денег. Но нам будут нужны подписи, сделанные по любой другой технологии. Какую из технологий использовать, это уж каждый администратор решает для себя. Даже больше — общаться или не общаться с анонимом — это личное дело каждого.
— poptalk (02/01/2008 23:13)   
Если вы хотите оставить всего один комментарий на сайте
то попробуйте сначала wwwhttp://bugmenot.com/ ;)

Впрочем, я использую bugmenot.com, чтобы просматривать форумы imdb.com.

Ссылки
[link1] http://www.pgpru.com/biblioteka/statji/upravlenieidentifikaciejjpgp

[link2] http://developer.mozilla.org/en/docs/Introduction_to_SSL#Client_Authentication

[link3] http://dom.bankir.ru/showthread.php?p=726081#post726081

[link4] http://hoohoo.ncsa.uiuc.edu/docs/PEMPGP.html