Оценка стойкости пароля от Google

    Недавно я публиковал описание алгоритма оценки стойкости пароля от Microsoft (Часть 1 и Часть 2). Теперь можно посмотреть, что предлагает Google.

    С этой проверкой я столкнулся при смене пароля в Gmail. В отличие от Microsoft, который реализовал проверку с помощью JavaScript (доступного для анализа), Google проверяет с помощью Ajax-запроса к собственному сервису.

    Вот этот запрос — можно поэкспериментировать.
    http://www.google.com/accounts/RatePassword?Passwd=PsWD

    Passwd — проверяемый пароль

    Возвращает число 1-4, соответствующее стойкости пароля.

    Экспериментируйте! Мои первые впечатления — ниже плинтуса.

    Upd. На эту параноидальную мысль навел один из комментариев ниже. Помимо самого пароля в этот сервис (при смене пароля на gmail) передается Фамилия (Last name), Имя (First name) и дата рождения. Данные об IP могут браться из браузера. Не слишком ли много о нас информации собирает Google при простой проверке пароля на стойкость, и как это соотносится с законодательством об обработке персональной информации?
    Share post

    Comments 70

      +2
      У пароля «xy» предмаксимальная стойкость. Не совсем правдоподобно.
        +4
        Не проверяютя не-латинские символы. И длина пароля, похоже, тоже.
          +2
          да там походу даже о не-QWERTY раскладках не знают…
          qawfpg — аналог qwert на Колемаке оценивают в 4 балла :) www.google.com/accounts/RatePassword?Passwd=qawfpg
          aoeui — Двораковскую тоже в 4 балла :) www.google.com/accounts/RatePassword?Passwd=aoeui

            –2
            Автор же сказал что проверяемое слово Passwd www.google.com/accounts/RatePassword?qawfpg=PsWD
              0
              Сорри, протупил. Это сервис виноват :) — он что так, что так возвращает неадекватный результат
              0
              Ну они действительно не очень популярные.
              Но 4 балла даже за 5 случайных букв — это фигня какая-то.
                0
                За пароль «ofn834uhf84___yg38fg834hf83_4f8h834f834uf234g____5234g534g53» тоже 4 балла.
                  0
                  /facepalm

                  Я думал он от 1 до 5 возвращает.
          +5
          словарное слово из 7 букв плюс одна цифра — и сразу стойкость пароля максимальная (4). Нехорошо это.
          трехцифренный пароль (например, 132): стойкость два, то есть даже не минимальная
          неправильный какой-то оценщик у гугла
            +33
            Моя оценка по четырехбальной шкале этому четырехбальному оценщику — 1
              +1
              Так оно и есть. Такое впечатление, что он не проверяет почти ничего из того, что должен.
                +14
                Основная задача в сборе персональных данных :)
                +1
                Слушайте, а вдруг у него прогрессирующий логарифмически временный бан за некорректные попытки аутентификации? Тогда и пароль из 3-х симолов будешь подбирать целую вечность. То есть, первые 5 неправильных попыток — бан на 1 минуту, потом на 10, и так далее. Конечно, прогресия должна быть умеренной, иначе можно же кому-то акк залочить злонамеренно. А вообще, с ориентаций по IP, можно в принципе, подзажать по времени злоумышленника-брутфорсера, ведь у гугла есть статистика твоих посещений и с каких IP, он может по-разному лимитировать при определении частых ошибок.
                Аутентификация задача весьма гибкая, даже в теории — лучшим выбором является точка пересечения двух кривых — А) сложности и криптостойкости Б) кол-ва ошибок при вводе.

                Дак вот, если гугл может техническим путем осложнить саму процедуру подбора пароля, то с точки зрения юзабилити можно на эту величину опустить сложность пароля, это даст уменьшение коллизий в целом и статистическую разгрузку ошибок реальных пользователей. Как-то так — как идея.
                  +1
                  После нескольких неудачных попыток входа, гугль выводит капчу.
                0
                Не хочу вдаваться в подробности откуда такие данные, но уверен, что реально они используют весьма солидный алгоритм и явно не с 4-х бальной оценкой.
                  0
                  Я писал — это оценка gmail при смене пароля. Возможно, для массового пользования они сильно упростили проверку.
                    +7
                    Я только вчера регил знакомой акк на гмыле, начнем с того, что форма принимает пароль с минимальной длинной 8 символов. И как следствие возможно их алгоритм проверки(представленный вами) на меньшее не рассчитан.
                      –3
                      Тогда вижу явную недоработку — длину пароля проверять на форме, а все остальное — в сервисе. Это надо делать вместе.
                        +10
                        Нерационально. Там, где можно не делать запрос к серверу, лучше не делать. Как раз случай с коротким паролем.
                          –2
                          JS выполняется на стороне клиента и его можно легко обойти. Имхо, в случае с паролем лучше сделать дополнительную проверку, она не сильно ресурсоемкая. Если бы мы валидировали, скажем, название картинки, тогда я с вами соглашусь.
                            +1
                            Вы представляете себе человека, который регистрируясь в gmail обходит проверки JS лишь для того, чтобы потестить 4х буквенные пароли на сложность? (При сабмите думаю длинна всё-равно проверится.)

                            Автор топика явно не до конца разобрался что это и как работает, но поспешил кинуть ссылку на хабр, заработать плюсов.
                              0
                              Автор топика хотел озвучить две мысли: (1) Google использует слабую проверку надежности пароля; (2) без вашего ведома, еще до смены пароля, в большом и неадекватном количестве собираются и связываются персональные данные.

                              Это позволяет сделать вывод, что всё это работает совсем не затем, зачем объявлено Google. И тонкости типа «автор не стал разбираться в развесистой лапше кода Google» уже не играют роли.
                                +2
                                1. Я регистрировался в Google не раз и не раз помогал это делать другим. Пароль там требуют нормальный, везде.

                                2. Они не собираются и связываются, а как я уже говорил ниже необходимы для того, чтобы человек не поставил свою дату рождения или имя-фамилию в качестве пароля. Неужели вы думаете, что гуглу негде достать эти все данные и без грязных трюков? Смешно.

                                Тонкости типа «автор не стал разбираться в развесистой лапше кода Google» играет роль для всех и всегда, вы выставляете претензию просто потому, что вам так показалось. А как там на самом деле вам плевать.
                                  0
                                  Прошу прощения за резкость. Респект старейшине Хабра.
                                  0
                                  в большом и неадекватном количестве собираются и связываются персональные данные

                                  Причем эти данные собираете Вы сами. Думаете зачем Гугл дает неограниченное (почти) место на диске для писем? В этих письмах вся ваша история. Случись что спецслужбы поднимут эту историю, а к Гуглу не будет никаких претензий, т.к. формально он за вами не шпионил.
                    –2
                    Странно, у меня любым паролям, кроме Passwd, оценка 1.
                      0
                      facepalm.jpg
                        +3
                        Параметр PsWD надо заменить на проверяемый пароль
                        +4
                        Хорошо бы с той стороны этой Ajax проверки добавлялку в радужные таблицы делать.
                          0
                          есть подозрения, что это уже сделано..
                            0
                            DNS spoofing Вам в помощь.
                            • UFO just landed and posted this here
                              0
                              Отличне:
                              qwerty11 — 1
                                +7
                                qwerty11 — 1
                                qwerty111 — 2
                                qwerty1111 — 3
                                qwerty11111 — 4
                                  +2
                                  qwerty111111 — 5
                                    +6
                                    qwerty!!!11адинадин — ∞
                                    +1
                                    qwerty111111 — 3
                                    qwerty1111111 — 4

                                    Странно
                                  +1
                                  [параноик mode on]
                                  Этот сервис служит Google для составления частотного словаря паролей и, возможно, для привязки к вашим ip.
                                  [параноик mode off]
                                    –1
                                    Такого сервиса для общего доступа не существует. Это я немного покопался в исходниках страницы.

                                    Но сам Google допонительно вместе с паролем туда пересылает Фамилию, Имя и дату рождения. Полагаю, что IP туда придет из браузера. В общем, «параноик off» пока делать не стоит.
                                    • UFO just landed and posted this here
                                        0
                                        У Гугла уже есть все данные о вас, даже если не от вас, то от ваших знакомых, которые добавили вас в список контактов вместе с домашним адресом и датой рождения.
                                          0
                                          Это они для Франции подсуетились.
                                            0
                                            Потому, что пароль не должен быть похож на фамилию, имя или дату рождения и проверка на это осуществляется. Откуда он их берёт? Из формы, которую вы итак заполняете на сайте гугла. Вы же всё равно эти данные им отправите.
                                            Проверка идёт на сервере чисто для того, чтобы алгоритм не стырили из js-кода.
                                            Паранойте дальше в своё удовольствие.
                                          –4
                                          Твердая четверочка у меня.
                                          20 символов.
                                            +3
                                            1QwE
                                            Твердая четверочка.
                                              0
                                              меньше 4-ех символов четверку не взять, мне кажется
                                            –1
                                            И Гуглу не стыдно?
                                              –2
                                              Возможно, в понедельник станет… Надежда умирает последней.
                                              0
                                              Чем то напоминает сервисы проверки адреса прокси-сервера :) Я бы не стал отправлять туда свой пароль, не связанный с гуглом.
                                                0
                                                > Возвращает число 1-4
                                                www.google.com/accounts/RatePassword?Passwd=жопа
                                                  0
                                                  Он видимо на все русские буквы возвращает 0
                                                  0
                                                  Как нынче просто собрать базу паролей… только вот чего с ними дальше делать (:
                                                    0
                                                    Там клевая проверка по словарю. «На коленке» за 5 минут такого самим не сделать :)

                                                    0
                                                    Вообще никакой логики не нашел:
                                                    «q1» — сложность 3
                                                    «q12345» — сложность 1
                                                      +1
                                                      По умолчанию, счиатется что длина пароля > 8 — это проверяется в форме ввода.
                                                    • UFO just landed and posted this here
                                                          +4
                                                          Вот самоубийци то…
                                                          пароль надо отправлять только через https!
                                                            0
                                                            Кстати да. По https тоже работает. Неужели при смене пароля Google отправляет его аяксом по http?
                                                            Надеюсь просто автор статьи ошибся при наборе адреса.
                                                              0
                                                              На самом деле, работает и http, и https. Насколько я понял, Ajax работает через http, хотя могу ошибаться.

                                                              Чтобы не быть голословным, демонстирирую код этого запроса (искать исходники здесь и здесь).
                                                              function CreateRatePasswdReq(formKey) {
                                                                  if (!isBrowserCompatible) {
                                                                    return;
                                                                  }
                                                              
                                                                  var passwd = document.forms[formKey].Passwd.value;
                                                              
                                                                  if (document.forms[formKey].Email) {
                                                                    var email = escape(document.forms[formKey].Email.value);
                                                                  } else {
                                                                    
                                                                    var email = escape("serge.ryvkin@gmail.com");
                                                                  }
                                                              
                                                                  if (document.forms[formKey].LastName) {
                                                                    
                                                                    var lastname = escape(document.forms[formKey].LastName.value);
                                                                  }
                                                              
                                                                  if (document.forms[formKey].FirstName) {
                                                                    var firstname = escape(document.forms[formKey].FirstName.value);
                                                                  }
                                                              
                                                                  if (document.forms[formKey].Birthday) {
                                                                    var birthday = escape(document.forms[formKey].Birthday.value);
                                                                  }
                                                              
                                                                  var min_passwd_len = 8;
                                                                  var passwdKey = "Passwd";
                                                                  var emailKey = "Email";
                                                                  var FirstNameKey = "FirstName";
                                                                  var LastNameKey = "LastName";
                                                                  var BirthdayKey = "Birthday";
                                                              
                                                                  if (passwd.length < min_passwd_len) {
                                                                    if (passwd.length > 0) {
                                                                DrawBar(0);
                                                                } else {
                                                                resetBar();
                                                                }
                                                                } else {
                                                                passwd = escape(passwd);
                                                                var params = passwdKey + "=" + passwd + "&" +
                                                                emailKey + "=" + email + "&" +
                                                                FirstNameKey + "=" + firstname + "&" +
                                                                LastNameKey + "=" + lastname + "&" +
                                                                BirthdayKey + "=" + birthday;
                                                                myxmlhttp = CreateXmlHttpReq(RatePasswdXmlHttpHandler);
                                                                XmlHttpPOST(myxmlhttp, "RatePassword", params);
                                                                }
                                                                }


                                                              //------------------------------------------------------------------------
                                                              // This file depends on: 
                                                              // http://gmail.google.com/gmail?view=page&name=browser
                                                              //------------------------------------------------------------------------
                                                              
                                                              //------------------------------------------------------------------------
                                                              // Some browser detection logic. 
                                                              // Once http://gmail.google.com/gmail?view=page&name=browser has these 
                                                              // variables as *global* these definitions can be deleted. 
                                                              //------------------------------------------------------------------------
                                                              var agt = navigator.userAgent.toLowerCase();
                                                              var is_op = (agt.indexOf("opera") != -1);
                                                              var is_ie = (agt.indexOf("msie") != -1) && document.all && !is_op;
                                                              var is_ie5 = (agt.indexOf("msie 5") != -1) && document.all && !is_op;
                                                              
                                                              //------------------------------------------------------------------------
                                                              // Communication with server
                                                              //------------------------------------------------------------------------
                                                              
                                                              function CreateXmlHttpReq(handler) {
                                                                var xmlhttp = null;
                                                                if (is_ie) {
                                                                  // Guaranteed to be ie5 or ie6
                                                                  var control = (is_ie5) ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP";
                                                              
                                                                  try {
                                                                    xmlhttp = new ActiveXObject(control);
                                                                    xmlhttp.onreadystatechange = handler;
                                                                  } catch (ex) {
                                                                    // TODO: better help message
                                                                    alert("You need to enable active scripting and activeX controls");  
                                                                  }
                                                              
                                                                } else {
                                                              
                                                                  // Mozilla
                                                                  xmlhttp = new XMLHttpRequest();
                                                                  xmlhttp.onload = handler;
                                                                  xmlhttp.onerror = handler;
                                                              
                                                                }
                                                              
                                                                return xmlhttp;
                                                              }
                                                              
                                                              // XMLHttp send POST request
                                                              function XmlHttpPOST(xmlhttp, url, data) {
                                                                try {
                                                                  xmlhttp.open("POST", url, true);
                                                                  xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
                                                                  xmlhttp.send(data);
                                                              
                                                                } catch (ex) {
                                                                  // do nothing
                                                                }
                                                              }
                                                              
                                                              // XMLHttp send GEt request
                                                              function XmlHttpGET(xmlhttp, url) {
                                                                try {
                                                                  xmlhttp.open("GET", url, true);	
                                                                  xmlhttp.send(null);
                                                              
                                                                } catch (ex) {
                                                                  // do nothing
                                                                }
                                                              }
                                                              
                                                                0
                                                                Прошу прощения, первая ссылка к исходникам должна быть www.google.com/accounts/EditPasswd?hl=ru
                                                              +1
                                                              Вообще то это не четырехбальный оценщик, а таки пятибальный:
                                                              www.google.com/accounts/RatePassword?Passwd=Привет_Хабрахабр — 0
                                                              (:
                                                                –1
                                                                www.google.com/accounts/RatePassword?Passwd=PsWD
                                                                4

                                                                Как-то нелогично он работает)
                                                                  +6
                                                                  На эту параноидальную мысль навел один из комментариев ниже. Помимо самого пароля в этот сервис (при смене пароля на gmail) передается Фамилия (Last name), Имя (First name) и дата рождения. Данные об IP могут браться из браузера.


                                                                  Так и должно быть. По сути эти данные необходимы, чтобы человек не поставил себе пароль состоящий с даты рождения или имени-фамилии.
                                                                      +1
                                                                      На рандомный пароль из 30 символов выдал Bad Request…
                                                                        0
                                                                        urlencode?
                                                                        0
                                                                        не учитываете минимальную длинну пароля, которая есть в форме регистрации аккаунта
                                                                          0
                                                                          Я писал чуть выше, что IMHO логика должна быть в одном месте, а не раскидана отдельно — в форме проверять длину пароля, а в сервисе — все остальное. Народ со мной не согласился (-3) — такая реализация снижает нагрузку на сервер.

                                                                          Вот мое IMHO как аналитика против IMHO специалистов по технологиям.

                                                                        Only users with full accounts can post comments. Log in, please.