Обновить

Комментарии 11

А не лучше ли вместо этого всего контрол с адресом разбить на два контрола: спереди хеш, сзади — сам адрес? Хеш и адрес можно сокращать многоточием в середине. Юзер будет проверять первые и последние цифры и хеша, и адреса. Математика позволяет добиться похожего адреса, обладающего похожим хешом?

Так об этом, собственно и расписано, просто материалов было очень много, я на все не сослался в статье:

Как люди сравнивают отпечатки:

Perrig, Song. Hash Visualization: a New Technique to Improve Real-World Security. 1999. https://users.ece.cmu.edu/~adrian/projects/validation/validation.pdf

Исходное предложение показывать хэш картинкой (Random Art), потому что люди сравнивают изображения лучше, чем строки. Отправная точка всей области и hh.

Hsiao, Lin, Studer, Studer, Wang, Kikuchi, Perrig, Sun, Yang. A Study of User-Friendly Hash Comparison Schemes. ACSAC 2009. https://netsec.ethz.ch/publications/papers/visual_hash_acsac09.pdf

Онлайн-исследование более 400 человек, десять способов показа хэша. При одинаковых 24 битах T-Flag (8 блоков, 8 цветов, различимых при дальтонизме) дал 85 % верных ответов на трудных парах, Flag Extension (цвет плюс форма в блоке) 88 %, а Flag с 64 мелкими оттенками упал до 50 %, то есть до случайного угадывания. Отсюда правила hh: мало категориальных цветов, форма поверх цвета, никаких тонких оттенков.

Olembo, Kilian, Stockhardt, Hülsing, Volkamer. Developing and Testing a Visual Hash Scheme. HAISA 2013. https://huelsing.net/wordpress/wp-content/uploads/2013/05/haisa-visualhash.pdf

Отмечает, что люди надёжно различают не более примерно 30 бит существующих визуальных хэшей, и строит CLPS (цвета, линии, узоры, фигуры) на 60 бит. Трудные пары распознаны верно в 96,6 % случаев рядом в лаборатории, но в 73,4 % в реалистичной проверке электронного голосования и в 78,6 % при проверке сертификата HTTPS. Поэтому hh считает картинку дополнением к проверке текста и требует сравнения бок о бок.

Dechand, Schürmann, Busse, Acar, Fahl, Smith. An Empirical Study of Textual Key-Fingerprint Representations. USENIX Security 2016. https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_dechand.pdf

1 047 участников и шесть текстовых форматов: привычная шестнадцатеричная запись сильнее других уязвима для атак частичного совпадения, а изменения люди замечают в основном на «якорях» (начало, конец, переносы строк). Именно эту слабость использует отравление адресов.

Ну так, вот это:

Исходное предложение показывать хэш картинкой (Random Art), потому что люди сравнивают изображения лучше, чем строки. Отправная точка всей области и hh.

выглядит очень сомнительно. По крайней мере, конкретно в этой реализации (не огорчайтесь на меня). Научно всё разнесено, а визуально цвета не контрастируют. Я и так, и этак с ними играл… пробовал обводить слияние пустых квадратиков, как в тетрисе, чтобы отличие лучше видеть, пробовал задавать цвет фона, и результат мне всё равно не понравился.

Как человек я бы гораздо лучше сравнивал так, как показано ниже.

Было:

[ d9a1…3a91 ]
[ d9a1…3a91 ]

Стало:

[ f563…3a91 ] [ d9a1…3a91 ]
[ 12d0…6b02 ] [ d9a1…3a91 ]

Мне кажется, самое главное - подсветить проблему, показать пример решения, объяснить разработчикам и пользователям. А по итогу конечный пользователь выберет наиболее удобное решение: можно ведь разные словари использовать: картинки, тэги, emoji, хеши и т. д.

Научно всё разнесено, а визуально цвета не контрастируют.

Не только цвета. Квадрат-круг, треугольники в разные стороны - тоже не так чтобы визульно друг от друга отличаются.


Вообще, тут смешано три случая
1) Сравнить битовые строчки по устному/текстовому каналу. Тут вообще больше подходят разны текстовые кодировки.
2) Визуально убедиться что произвольные битовые строчки совпадают.
3) Находить нужную, не ошибаясь, но в конечном списке. Тут вообще полный хэш выводить не надо. Достаточно выводить наименьший попарно различный элемент.

Грубо говоря, для текста: если в списке есть только один Саша Какой-То - то его в списке можно просто Сашей звать. А Саши два - то выводить их фамилии, не имя. А если еще кто-то с такой фамилией есть - то писать для них Имя-Фамилия.
Для визуальных хэшей - что-то аналогичное. (Если он в списке есть только один, начинающийся с квадрат-треугольник, то остальное можно не рисовать)

Представление становится зависимым от окружения, но зато становится значительно короче и легче для попарного сравнения.

3) Находить нужную, не ошибаясь, но в конечном списке. Тут вообще полный хэш выводить не надо. Достаточно выводить наименьший попарно различный элемент.

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

Но в случае с History, по-моему, ничего такого не предполагается. Может, и зря. Может ли такое происходить в норме? Чтобы два адреса различались только серединой? Если нет, вполне можно просто предупреждать юзера.

Но в случае с History, по-моему, ничего такого не предполагается

В случае истории нам нужно, чтобы совпадающие(по адресу) позиции - выглядели одинаково, а различные - по разному.
Если брать ту картинку, что был, можно сообразить что-то вроде (подсвечиваем минимальный набор, который всех отличает)

Такого

не заставляя пользователя все 16 фигур хэша визуально сравнивать. Тут сразу видно что первый и второй - разные.
Разумеется, если предпологается, что подтом нужно будет сравнить картинку на постороннем устройстве с тем что в списке видно - так делать нельзя. Это именно для сценария 'понять кто тут то же самое, а что нет'.

Ну и нужно, очевидно, починить вот эти 0x9A1..3a91. Добавляя в пропуск буквы (можно не те же самые, что там реально стоят, а просто индикаторные). Чтобы если полный адрес разный - то и сокращения были разными.

Я совершенно далек от всяких криптовалют - зашел посмотреть на очередной identicon, т.к. они полезны.
И проблемного сценария не понял. Точнее, не понял, откуда оно вообще взялось.
Описано как

Злоумышленник следит за переводами. Вы платите Алисе. Через несколько минут в вашей истории появляется новая строка с адресом, который начинается и заканчивается так же, как адрес Алисы. В следующий раз, когда вы платите Алисе, вы открываете историю, копируете «её» адрес, а он не её.

И дальше картинка "Слева: то, что показывает большинство кошельков." с этой самой историей c одними HEX что справа что слева.

Сдается мне, что тут создатели кошельков создали сами себе проблему на ровном месте. Там сразу должно бы рисоваться что-то в духе "неизвестный контрагент".

Более того, мне непонятно желание искать адрес счета Алисы в этом самом списке, а не в оригинальном сообщении от нее "Деньги слать сюда". Причем искать по адресу отправителя(чтобы попасться на адрес злодея), а не получателя.

Более того, мне непонятно желание искать адрес счета Алисы в этом самом списке

Тут возможны различные сценарии:
1. Использование блокчейн эксплорера вместо списка транзакций кошелька (ну они зачастую быстрее или когда открыто окно отправки транзакции, неудобно лезть в другой фрейм)

2. Автодополнение адреса самим кошельком, с сортировкой по времени транзакций (такая проблема была в Trust Wallet, но вроде пофиксили)

Почему взяли шаблон 4х4, а не 3х3?

Вот специально сравнивал представленные наборы и постоянно ловил себя на том, что сравниваю только фигуры на углах квадрата, а торцевые, и тем более центральные - гораздо меньше. Ибо "многабукаф, глазки ленятся".

А вот сетку 3х3 визуально сравнить гораздо проще и наглядее - глаз сам находит несоответствие.

Этропия для 4х4 - 68 бит, а у 3х3 - 38 бит.
То есть по рассчетам, время на подбора 3х3 кратно ниже: подобрать изображение, где не совпадает 1 символ - около 1 часа, полная идентичность - 9 дней, а если атакующий использует rainbow таблицы, это может сильно ускорить.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации