2011-02-12

связывание аккаунтов

Эта задачка возникает, когда один человек заводит несколько аккаунтов. Конечно, есть способы «регистрации», которые действительны сразу на многих сайтах:

  • все веб-сайты в одной доменной зоне и администрируются одним человеком;
  • OpenID;
  • клиентский сертификат SSL.

Но сейчас о ситуации, когда несколько аккаунтов уже есть.

Действительно ли владелец аккаунта А владеет также аккаунтом Б? Очевидный способ проверки следующий: если ты владеешь аккаунтом Б, значит ты управляешь аккаунтом Б, значит ты можешь написать что-нибудь от имени аккаунта Б. То есть нам нужно, чтобы из аккаунта Б вышло сообщение: владелец аккаунта А управляет также и данным аккаунтом. Обозначим через А~>Б факт выхода такого сообщения. Таким образом, мы определили бинарное отношение ~> .

Если вы решили, что А~>Б означает аккаунтами А и Б владеет один человек, вы ошиблись. Строго говоря, владелец аккаунта Б по собственной инициативе и без чьего-либо разрешения может создать факт А~>Б. Отличить такую ситуация никак нельзя. Что же на самом деле означает А~>Б?

Рассмотрим такой немного наивный пример. Известно, что аккаунтом А владеет нобелевский лауреат, и аккаунтом Б владеет директор завода. А~>Б истинно. Если аккаунт А выдаёт мнение, это авторитетное научное мнение. Если аккаунт Б выдаёт приказ, работники завода обязаны его исполнить. Что, если аккаунт Б выдаст мнение? Так как может быть, что А~>Б возник без согласия владельца аккаунта А, то есть без согласия нобелевского лауреата, то мнение не является авторитетным научным мнением. Что, если аккаунт А выдаст приказ? Всё наоборот, то есть работники обязаны исполнить этот приказ. Никто же не заставлял директора завода создавать факт А~>Б.

Общее правило такое: если А~>Б, то ресурс переходит от Б к А. В моём примере нобелевский лауреат имел ресурс научный авторитет и директор завода имел ресурс административная власть на заводе.

Вернёмся к определению А~>Б. Иногда его изменяют следующим образом: требуют, чтобы из аккаунта Б вышло сообщение, содержащее некоторый код или ключ (последовательность букв и цифр). якобы этот код обязателен для подтверждения, ля-ля-ля. Если вам такое предлагают, не соглашайтесь ни в коем случае. Эта схема уязвима для атаки man in the middle.

Описание атаки. Допустим, аккаунт М передаёт код К аккаунту А. Владелец аккаунта А публикует код из-под аккаунта Б. Хитрость в том, что М получил К от некоторого аккаунта В. Ситуация выглядит так, что В передаёт К аккаунту М и К выходит из-под Б. Отсюда В делает вывод, что владелец М управляет также Б, что неверно. Может, вы догадались, почему аккаунт М назван М от слова мошенник. М и является тем самым мэном in the middle.

2011-01-29

цифровой пароль

Одна из стереотипных претензий к цифровому паролю — что он более слабый. Под «слабостью» понимается меньшая энтропия (информационная энтропия, не путать с термодинамической энтропией и псевдонаучной энтропией).

Не вникая в теорию, энтропия считается по формуле (log A) * L. A — количество знаков в алфавите, то есть знаков, которые используются в пароле, причём все знаки должны появляться с равной вероятностью, то есть вы не должны ограничивать пароль например словами естественного языка, пароль должен быть абсолютно бессмысленным. L — количество знаков в пароле. Основание логарифма (обозначен log) может быть любым, для определённости возьмём 2, тогда энтропия будет вычислена в битах.

Теперь сравним энтропии. Если алфавит состоит из букв латинского алфавита, цифр, знаков !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ , тогда log A = log (32+26+10) = 6.08746284125034. Если алфавит состоит из цифр, тогда log A = log 10 = 3.3219280948873626. Действительно, энтропия цифрового пароля в 2 раза меньше энтропии разнообразного пароля при одинаковой длине паролей (L). Если цифровой пароль в 2 раза длиннее разнообразного пароля, то их энтропии равны. Труднее ли запомнить цифровой пароль, если его длина в 2 раза больше? Я думаю, раз их энтропии одинаковы, запомнить их одинаково трудно. Впрочем это зависит от запоминающего. Всё равно никто не запоминает случайные пароли, если этих паролей больше 2 штук. Это выше человеческих сил.

Цифровой пароль имеет преимущества:

  • его быстрее набирать;
  • его можно набрать одной рукой вслепую, на так называемом NumPad — правая часть клавиатуры;
  • его можно набирать в присутствии посторонних людей, если набирать правой рукой на NumPad, а левой рукой прикрывать правую руку.

К сожалению, в некоторых случаях вы никак не можете избавиться от шибко умного администратора/программиста, который приказывает вам, какие знаки использовать в пароле. В этом случае не включайте в пароль знаки, которые похожи на другие знаки. Например:

  • 1 I | l легко спутать на письме, а иногда и на печати, в зависимости от шрифта.
  • Буквы C K O P S V W X имеют похожие строчный и прописной варианты. На письме размер букв скачет, всё-таки человек не компьютер, поэтому легко спутать строчный и прописной варианты.
  • Для латинских A B C и многих других есть похожие кириллические буквы. Их внешний вид вообще никак не различается. Не включайте в пароль одновременно латиницу и кириллицу. Кроме того, на разных компьютерах переключение раскладок клавиатуры может отличаться, что дополнительно затрудняет ввод пароля.

Несоблюдение этих правил приведёт к тому, что вы пароль на бумажке-то запишете, но потом не сможете правильно ввести.