Pull to refresh

Comments 32

Опишите алгоритм генерации паролей.

Зная пароль от сайта можно ли получить мастер пароль?
Могу ошибаться, но мне кажется стоит посмотреть SHA3 (http://code.google.com/p/crypto-js/#SHA-3). А уже его вывод переводить в алфавит на котором сейчас генерятся пароли.
лучше пользоваться стандартными проверенными методами (PBKDF2 etc), чем малоизвестными алгоритмами
Можно, и не очень сложно.
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");

function encrypt(message, length) {
  // If the message is the empty string, return the empty string.
  if(message == "") {
    return "";
  }

  // Calculate the offset of the first character.
  var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
  for(var last = 0, i = 0, len = message.length; i < len; i++) {
    last = (message.charCodeAt(i) + 31 * last) % 59;
  }

  // Adjust for the specified length if it was given.
  length = length || message.length;
  while(len < length) {
    message += message;
    len += len;
  }
  message = message.slice(0, length);

  // Generate the encrypted string.
  for(var ret = "", i = 0; i < length; i++) {
    ret += chars[last = (i + last + message.charCodeAt(i)) % 64];
  }
  return ret;
}

function hackcrypt(last, message) {
  var len = message.length;
  for(var ret = "", i = 0; i < len; i++)
    ret += chars[last = (i + last + message.charCodeAt(i)) % 64];
  return ret;
}

function uncrypt(endata){
  var total = 0;
  for(var ll=59; ll; ll--){
    var ret = "", last = ll;
    for(var i=0,l=endata.length; i < l ; i++){
      var next_symb = 0;
      while( endata.substr(0, i+1) != 
             hackcrypt(ll, ret + chars[next_symb]).substr(0, i+1) && 
             next_symb < 64){
          next_symb++;
      }
      total += next_symb;
      if(next_symb == 64) break;
      ret += chars[next_symb];
    }
    if(encrypt(ret) == endata){
      console.log('Hash count: ', total, 'Password: ', ret);
      break;
    }
  }
}

uncrypt('mWodQ3pVKgLE');


Есть ситуации в которых он не отрабатывает, но, спасибо количеству коллизий, таких ситуаций не много. При желании можно дополнить алгоритм до гарантированного получения всех вариантов.
Плохо, что домен и мастер пароль просто склеиваются. в итоге пары foo/bar, fo/obar, f/oobar, fooba/r дают один и тот же ключ
А можно примеры из жизни, когда это плохо?
Не совсем тот вариант, который описывает Sirian, но есть момент с подобным нюансом работы: пароль для ресурсов с одинаковым доменным именем второго уровня будет одинаков. Например для сайтов «mail.by» и «mail.ru». Хотелось бы «зауникалиться» и в этом случае.
Мне ужасно неудобно, но я — наоборот — приложил некоторые усилия, чтобы отсекалось все, кроме «бренда» — потому что, например, amazon.com и amazon.fr имеют одинаковые логины, но разные tld.
Ну, в приведенном мной случае это, конечно, две почтовые системы, но абсолютно разных полей ягоды, никоим образом не связанные друг с другом.
Мне кажется, что было бы удобно как вариант в настройках использовать выбор — кодить на основе домена второго уровня или с учетом и первого.

Плюс еще ситуация, когда чисто теоретически злой дядька сфоткал мобилой мой пароль от хабра втихаря за спиной. Я это дело увидел, захотел сменить пароль. Получается нужно либо запоминать для хабра отдельный «мастер-пароль», либо сменить глобально на всех используемых мной ресурсах, чтобы как и раньше в памяти держать только один. Как вариант предлагаю по вторичному нажатию «Enter» выводить альтернативную версию пароля (допустим с некоторой «солью»). тогда не нужно ничего дополнительно менять или запоминать — не подошел с первого раза, используем альтернативный вариант.
Мне еще более ужасно неудобно :-) но, как вы могли заметить, в вПассе вообще нет ни одной настройки. Это потому, что я тиран и самодур, и любая необходимость что-то настраивать меня расстраивает.
Необходимость менять все пароли при смене мастер-пароля — это недостаток этой идеи в принципе. Но я с ним подружился.
Неплохо, но есть ведь supergenpass, который тоже работает из bookmarklet-a и у него есть настройки. Раньше пользовался им, потом пересел на LastPass из-за всяких дополнительных плюшек.
Спасибо, как раз он меня как-то и натолкнул на эту идею. Мне интерфейс его не понравился. Работа с вПасс у меня занимает 3 клавиши, без мышки —
— курсор на поле ввода пароля
— Cmd-P (навесил shortcut на extension — Chrome уже это умеет, Settings — Extensions — Configure Commands)
— набираю мастер-пароль
— Enter
— Esc
Есть плагин SuperChromePass (правда в github), который позволяет запомнить мастер пароль, достаточно одного клика мышью или нажать клавиатурное сочетание. При этом пароль можно и скопировать, что иногда приходится делать, например, если пароль требуется вводить в обычное поле ввода.

SuperGenPass формирует такие символы, которые точно везде проходят, не уверен, что в некоторых местах vPass 2 пройдёт валидацию пароля, что сводит его применение к нулю.

А почему выбрали другой алгоритм? Ведь можно было бы написать плагин под SuperGenPass, и получить совместимую вещь. Ведь если подсел на какой-то алгоритм, то с него будет очень сложно потом слезать. Я когда-то сделал для себя такую штуку, потом долго перебирался на другой алгоритм.
На Android есть play.google.com/store/apps/details?id=krasilnikov.alexey.cryptopass&hl=ru

> Ваши пароли не хранятся где-либо, сохраняются только username и url, для удобства.
> password = base64(pbkdf2(secret, username@url))
> PBKDF2 использует SHA-256 и 5000 итераций. Пароль обрезается до требуемой длины (25 по умолчанию).
Проблему решают менеджеры паролей, но они, как правило, только под одну платформу.
но они, как правило, только под одну платформу.
О, правда? А как же мультиплатформенный keepass? Или кроссбраузерный LastPass?

А что делать в случае утечки мастер-пароля?
Я ж написал — как правило :) LastPass наиболее близок к моему идеалу, но не сдружились по разным причинам.
«А что делать в случае утечки мастер-пароля?» — то же, что и в случае утери пароля от LastPass — менять.
Да. И вы, наверное, меня отругаете, но я подумал и решил не считать это (большим) недостатком. Час делов, в экстренном случае. Это цена за возможность нигде не хранить пароли.
Вообще, по-хорошему и в случае угона мастер-пароля от keepass или lastpass тоже надо бы поменять пароли везде. Так что, ваше решение таки стимулирует к хорошему. Только вот в таком случае надо ещё хранить где-то список сайтов. У меня в keepass их около 50. Все их за час не вспомнишь.
У меня их сотни :) И я просто по ходу дела жму им Forgot password. получаю ссылку, делаю новый.
Спасибо, что не отругали :)
KeePass (http://keepass.info) есть под кучу платформ. Windows, Android, iOS, Linux, Mac OS, J2ME, Windows Phone 7, Palm, BlackBerry — при условии хранения самой базы, например в DropBox — проблем не возникает.
Да, KeePass (+ LastPass) ближе, чем остальные, но по моему ощущению, сильно проигрывает в удобстве.
Остроумная идея, но на практике разбивается о нюансы, которых не счесть:

— Один и тот же логин на разных доменах (amazon/myhabit).
— Несколько логинов на одном сайте (почта, youtube etc.).
— Сайты, которые периодически требуют менять пароль (форумы, банки).
— Практически нереально сменить мастер-пароль.

Я когда-то делал то же самое, но алгоритм был в голове, намного проще, конечно. Потом надоело, ну и все недостатки все те же самые. Правда, «естественный интеллект» некоторые из них позволял успешно обходить, но все равно надоело.

Сейчас пользуюсь 1Password, тоже не 100% доволен, но это более универсальное решение, однозначно.
Итак, я открыл страничку и набрал «habrahabr.ru/ukko», мне сгенерировался пароль, злоумышленник, зная что я пользуюсь этим генератором паролей зашёл на него и набрал те же самые «habrahabr.ru/ukko», тем самым пароль на 100% совпал.

Я правильно понимаю что именно такая последовательность действий и была задумана?
У вас еще есть мастер-пароль, который тоже участвует в генерации пароля.
Действительно, я затупил. Думал что в этом поле появится сгенерированный код.
Итак, я открыл страничку и набрал «habrahabr.ru/ukko», мне сгенерировался пароль, злоумышленник, зная что я пользуюсь этим генератором паролей зашёл на него и набрал те же самые «habrahabr.ru/ukko», тем самым пароль на 100% совпал.

Нет.
Sign up to leave a comment.

Articles