id: Гость   вход   регистрация
текущее время 00:23 29/03/2024
Владелец: spinore (создано 16/06/2007 09:40), редакция от 26/03/2009 16:07 (автор: spinore) Печать
Категории: криптография, openpgp, управление ключами, стандарты, атаки, разное, сообщество, социальная инженерия
http://www.pgpru.com/Разработки/ЦветоваяPGPИдентификация
создать
просмотр
редакции
ссылки

Цветовая PGP-идентификация в социальных средах


Может быть, идея, которую я хочу озвучить, уже широко известна (и тогда предлагаю всем кинуться в меня ссылками), а, может быть, и нет – тогда надеюсь на конструктивное обсуждение. После моей атаки на сайт www.pgpru.com я подумал о том, как сделать простую защиту от подмены (имперсонации) пользователя на основе PGP-ключей. Давайте создадим синтез двух общеизвестных идей:


  • Xорошо известно, что зрительная память человека развита существенно лучше, чем все остальные: "лучше один раз увидеть, чем сто раз услышать" © народная мудрость.
  • Согласно идее асимметричной криптографии, удостоверением человека до момента создания квантового компьютера с успехом может служить отпечаток его OpenPGP-ключа – 40 цифр в 16теричном формате.

Запоминать цифры у большинства людей получается не очень хорошо, а запомниать цвета, хотя бы приблизительно, – намного лучше. Поскольку как цвета, так и отпечаток ключа есть некоторая информация, выражаемая несколькими цифрами, можно взаимнооднозначно отобразить одно на другое для упрощения запоминания. Идей, каким образом можно было бы осуществить данное отображение, можно изобрести много, но в каждом конкретном случае можно подобрать более-менее подходящий вариант в зависимости от существующего контекста.

Конкретный пример


Рассмотрим в качестве демонстрационного примера возможный способ реализации цветовой идентификации пользователя на форуме www.pgpru.com. Заметим, что цвет во многих программах часто задаётся в виде модели "RGB" (красный, зелёный, синий): 3-х чисел, соответствующих доле конкретного цвета в итоговом, каждое из которых может варьироваться от 00 до FF в 16-теричной системе исчисления (от нуля до 255 – в десятичной). Поскольку длина отпечатка ключа (40ок 16теричных цифр) не кратна длине числа цвета (6ти цифрам), оганичимся последними 36ю цифрами отпечатка ключа и разделим их попорядку на группы по 6 штук. Для отпечатка моего ключа (448F 5B26 9BC2 CFD8 09FF 8986 4E36 8194 BCBB B732) деление выглядело бы так:

5B269B C2CFD8 09FF89 864E36 8194BC BBB732

Итак, на основе простого правила мы сформировали 6 цветов, частично (и довольно уникально) характеризующих личность. Для пользователей, загрузивших свои ключи в профиль, отразим часть их "личных цветов", например, 4ёх первых, следующим образом (я специально считаю цвета с конца отпечатка по аналогии с вычислением той или иной длины идентификатора ключа (key id'а), равного нескольким последним цифрам отпечатка):
в шапке комментария

spinore (16/06/2007 05:53) профиль <#> правка удалить
отпечаток ключа: ... 4E36 8194 BCBB B732

дадим цвет тексту "BB B732" равным "BBB732" в модели RGB, тексту "8194 BC" – равным "8194BC", тексту "4E36" – равным "864E36" (взяв недостающие 2 цифры из фингерпринта пользователя), а цветом "09FF89" будем писать имя пользователя – "spinore".

Теоретические предпосылки


Цель введения цветовой идентификации есть один из способов упрощения распознавания участниками друг друга, основанная на специфике восприятия человечкого глаза, который очень хорошо различает разные цвета. Экспериментируя с графическими программами можно убедиться, что в некоторых случаях глаз способен уловить различие в единицу в одном из 3ёх цветов в 256тизначной RGB-модели цвета. Рассмотрим теперь атаку на основе социальной инженерии, недавно воплощённую мной на этом форуме. Поскольку никто не может подделать отпечатки ключей участников, в случае подмены я бы имел шапку комментария от имени "клонированного" пользователя подсвеченную другим образом несмотря на тот факт, что мог бы подделать многие другие параметры ключей участников, включая их дату создания и тому подобную информацию. Маловероятно, что многие участники помнят отпечатки ключей друг друга, копировать же себе ключ каждого вновь зарегистрировавшегося участника в больших сообществах также не является технически разумным, однако, общаясь в среде форума, все постепенно начали бы узнавать друг друга по цветам, время от времени читая форум и волей-неволей каждый раз видя уникальные цветовые сочетания в шапке комментариев. В случае подозрения на подмену ключа каждый может скопировать ключ, которым было подписано сообщение, сконструировать из него "личные цвета" по вышеприведённому правилу и сверить их с теми "личными цветами", которые он приблизительно помнит как принадлежащими автору сообщения. Описанный способ "цветовой проверки", естественно, не может дать стопроцентной гарантии отсутствия подмены ключа, но позволит отсечь многие заведомо фальшивые ключи. Задача о подделке личных цветов сводится к подделке хэш-функции ключа, которая на данный момент считается технически неразрешимой существующими средствами за разумное время.

Ограниченность метода


В качестве дополнения интересно было бы рассмотреть эффективность "цветовой иднетификации" с учётом реальных возможностей человеческого глаза и общего числа уже существующих ключей. Заведомо очевидно, что можно создать две схожих последовательности 40ка шестнадцатеричных цифр, "подцветку" которых различить на глаз сходу будет сложно, однако, в силу трудности подбора ключа с заданным хэшэм, атака по цвету мне представляется не столь простой в реализации. Строгим ответом на надёжность цветовой идентификации являлось бы исследование, которое определило, какой процент среди уже существующих в мире ключей имеют слабо различимые "личные цвета", что же касается моего личного мнения на этот счёт, то в большинстве случаев надёжность метода при хорошем знакомстве с "личными цветами" будет достаточной для применения в серьёзных системах на практике.

Технические ремарки


При выборе количества "личных цветов" следует выбирать оптимум между их числом, которое отражает информативность, и лёгкостью запомнания: один цвет проассоциировать с человеком легко, но будет много коллизий с точки зрения глаза, много же цветов будут смотреться как разноцветная ёлка, которая опять же не запомнится. По моему мнению 4 – это максимальное число, которое ещё не в ущерб запоминанию и в то же время хорошо стойко к коллизиям.


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


Дополнение: мне предложили взять более грубую дискретизацию во избежание зрительных коллизий – расматривать 16тизначные цвета, взяв последние 18 цифр и разделив их на группы попорядку по 3, чтобы сконструировать 6 личных цветов. Выбор глубины цвета, которая связана с длиной используемой последовательности для конструирования фиксированного числа цветов, должен исходить из сравнения вероятностей зрительных коллизий и хэшовых коллизий для рассматриваемых вариантов: в данном случае мы имеем уже два варианта выбора: 6 цветов 256тизначных (5B269B C2CFD8 09FF89 864E36 8194BC BBB732) или 6 цветов 16тизначных (864 E36 819 4BC BBB 732), и я склоняюсь к тому, что последний из предложенных вариантов даже лучше (идея, предложенная Vadim_Z'ом).


P. S.: открыт для отзывов, предложений, критических замечений и уточнений.
spinore


© 2007-2009 spinore
© 2007-2008 SATtva

Материал распространяется на условиях
CreativeCommons-Attribution-NonCommercial-ShareAlike
CreativeCommons-Attribution-NonCommercial-ShareAlike


 
На страницу: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 След.
Комментарии [скрыть комментарии/форму]
— spinore (16/06/2007 09:49)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Да, параллельно можно теперь "гадать на PGP-ключах": рисуете свои личные цвета на экране и сморите: какие они и с чем обычно ассоциируются (каждый цвет имеет то или иное значение и вызывает ту или иную реакцию у человека). Я вот тут поглядел личные цвета у некоторых участников... ну что ж ребяты, некоторым не повезло :-) говяный у некоторых цвет, в общем :-)))
— SATtva (16/06/2007 13:29)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Идея мне нравится (в чём-то созвучная криптографическому petnaming'у). Сходу попробовал доработать: вместо использования 6 независимых групп чисел можно приводить их к единому значению, вычисляя их XOR. Проверка показала, что это не самая лучшая мысль. Например, XOR отпечатков unknown'а и Kent'а почти совпадают (0x7478e7 и 0x767dee, соответственно), а визуально их вообще не отличить. В общем, с сокращением пространства чисел вероятность коллизий возрастает, что особенно очевидно для волновых функций (что есть воспринимаемый свет).

Лучше действительно использовать комбинации. Но всё же, я думаю, делать из отпечатка семафор — не лучшая мысль. Получится та же ситуация, как и с шестнадцатеричным отпечатком: с возрастанием числа элементов их потенциал к запоминанию и ассоциированию с пользователем неуклонно снижается.
— spinore (16/06/2007 13:36)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
SATtva:
Идея мне нравится (в чём-то созвучная криптографическому petnaming'у

А в чём он, если в двух словах, состоит?
SATtva:
Сходу попробовал доработать: вместо использования 6 независимых групп чисел можно приводить их к единому значению

А зачем?! И что мешает сделать 4 значения как я предложил? Имеется в виду, чтоя склоняюсь к расцветке типа 819 4BC BBB 732.
Уже описал, что увеличение более 4-х не даёт смысла.
Для простоты можно сначала попробовать более простой способ отображения что был описан вначале:
spinore:
дадим цвет тексту "BB B732" равным "BBB732" в модели RGB, тексту "8194 BC"? Равным "8194BC", тексту "4E36"? Равным "864E36" (взяв недостающие 2 цифры из фингерпринта пользователя), а цветом "09FF89" будем писать имя пользователя ? "spinore"

Если он нас не устроит, то будем дорабатывать. Я к тому, что я не тестировал метод на реальных ключах, но так сходу попробовал цвета – вроде как чтоб все 4 близки были почти нереально.
— spinore (16/06/2007 13:41)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Я специально нехотел делать никаких преобразований над фингерпринтом чтобы сохранить алгоритм простым.
Скажу честно и откровенно: я не знаю что есть XOR.
Метод должен быть прост и понятен новчику, и единственным его условием должна быть хорошая стойкость к коллизиям после простоты, не более.
Взять шестнадцатеричные числа как RGB – это самое простое, и если оно стоит против коллизий, то незачем выдумывать что-то более сложное.
Да, я здесь везде имею в виду "зрительные коллизии".
— spinore (16/06/2007 13:44)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Кстати, от приведения всего к одному цвету я отказался сразу, так как могу навскидку сказать, что, например, 10.000 разных цветов вы не запомните, и деление на 4 разных цвета что-то меняет в положении дел.
Вообще, это должна быть известной информация: сколько разных цветов может различить человек если они все отдельно друг от друга предъявляются ему на белом фоне?
— spinore (16/06/2007 13:51)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Предположим, что человек может различать 16 цветов всего (думаю что это мало, но для простоты). Тогда 3 цвета, идущие на кусок отпечатка в шапке комментария и один, что идёт на ник пользователя, дают 16^4=65536 различных комбинаций, и вероятность коллизии довольно низкая. Когда-то вы называли 10.000 пользователей как ориентировочное число пользователей проекта при расчёте коллизий хэшей...
— Гость (16/06/2007 13:58)   <#>
Кроме цвета есть ещё другие характеристики: начертание шрифта, размер, наклон, фон, межсимвольное расстояние,...(в общем см. программу для вёрстки)
Можно ещё картинку из ключа генерировать. Вот тут свобода для творчества. (существуют генераторы пейзажей, и вроде даже лиц)

А кроме ключа ещё другую, важную для идентификации, информацию отображать можно, типа даты регистрации, а также количество сообщений (ну это в отдельном (медленно) переменном поле :)
— spinore (16/06/2007 13:58, исправлен 16/06/2007 13:59)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
SATtva:
Сходу попробовал доработать: вместо использования 6 независимых групп чисел можно приводить их к единому значению, вычисляя их XOR.

прочтение всего текста порой творит чудеса, кстати:
spinore:
Маленькая ремарка: при выборе количества "личных цветов" следует выбирать оптимум между их числом, которое отражает информативность, и лёгкостью запомнания: один цвет проассоциировать с человеком легко, но будет много коллизий с точки зрения глаза, много цветов же будут смотреться как разноцветная ёлка, которая опять же не запомнится. По моему мнению 4 – это максимальное число, которое ещё не в ущерб запоминанию и в то же время хорошо стойко к коллизиям.
— spinore (16/06/2007 14:02)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Гость:
Кроме цвета есть ещё другие характеристики: начертание шрифта, размер, наклон, фон, межсимвольное расстояние

А подумать прежде чем что-то написать? Как мы будем отображать число в наклон общественно-понятным способом?
— SATtva (16/06/2007 15:52)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Идея мне нравится (в чём-то созвучная криптографическому petnaming'у

А в чём он, если в двух словах, состоит?

Присваивание ключам по их отпечаткам понятных имён. (Только пэтнейминг подразумевает, что связывать отпечаток и имя будет пользователь.)
http://en.wikipedia.org/wiki/Zooko's_triangle (принципы и постановка проблемы)
http://en.wikipedia.org/wiki/Petname (реализации и решение проблемы)
http://petname.mozdev.org (расширение для Firefox)
— SATtva (16/06/2007 16:35)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Я специально нехотел делать никаких преобразований над фингерпринтом чтобы сохранить алгоритм простым. Скажу честно и откровенно: я не знаю что есть XOR.

Операция "исключающее ИЛИ". Побитово XOR'им значения всех шести групп чисел, получая в итоге их единое значение. Согласен, для подручного преобразования это не годится, но данная операция и не обязана быть простой для верификации пользователем. В конце концов, если у него есть сомнения в аутентичности ключа, он всё равно должен сверять отпечаток. Цветовая индикация нужна только для упрощения идентификации ключей.

Ладно, бог с ним, всё равно одно значение не годится. Я написал простую реализацию этой схемы, и вот какие сразу возникают замечания (смотрите примеры).
  • Задавать необходимо fileцвет фона отпечатка, а не fileцвет шрифта, иначе разница совсем не очевидна.
  • Использование fileболее двух цветов перестаёт различаться, и все блоки сливаются в общий шум. При этом два блока (для цветов берём последние группы чисел) дают достаточную защиту от случайных коллизий.
— spinore (16/06/2007 18:58)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Значит, так:
проверка Ваших, SATtva'а, примеров лишний раз мне показал что я был прав.
Нет, цвет фона выглядит как кляксы, не будет смотреться на общем фоне сайта, и в этом нет необходимости: у нас прекрасный контраст в случае цветного шрифта на белом фоне. Я уже настоятельно просил не гнать 4 цвета в фингер: на фингер 3, 4-м – печатать никнэйм. Лучше вы бы оформили несколько реальных комментариев с учётом предложенной мною схемы и оценивали их в реальном тексте. Пока чтоя вижу – уже сказал: по цвету шрифта (а это будет 3 разных цвета) – все друг от друга будут прекрасно отличаться (256 значений на R, G и B) а 4-й цвет для ника дополнит картину. 4 цвета шрифта вполне достаточно даже для близких к коллизионным части отпечатков с точки зрения зрения. Если не нравится, реализовывайте разными методами, один из них пусть будет мой и повешаем на голосование. Буду голосовать всеми четырьмя!
— spinore (16/06/2007 19:27)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Хотя... я тут подумал... Наверное, пользователь ко всему привыкает, так что можно и такую схему оставить как в pgpcolors_back.html, ... ладно. Только про подцветки имени пользователя в шапке не забывайте 3-м цветом, если для комментов только 2 выберете. Можете, SATtva, вставлять как уже там есть, я решился. Если что, в процессе использования доработаем с учётом пожелания других участников.
— SATtva (16/06/2007 19:32)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Не забывайте об изначальной проблеме, решение которой преследует эта схема: социальные атаки. На мой взгляд, отпечаток ключа должен определять только расцветку самого отпечатка, никнэйм — это структура посторонняя. Давать ему цвет от отпечатка будет неинтуитивно понятным.

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

В общем, пока мы тут просто вдвоём спорим. Мне бы хотелось выслушать и третьи мнения.
— SATtva (16/06/2007 19:36)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Только про подцветки имени пользователя в шапке не забывайте 3-м цветом, если для комментов только 2 выберете.

Та же самая проблема с вероятным близким к белому цветом может возникнуть и здесь (прозрачное имя — каковО, а!). Если настаиваете на трёх цветах, третий придётся в какое-то другое место засунуть поставить.
На страницу: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3