Алгоритм для дешифрования данных с оттянутыми штрихами

lisapp.vbs от Microsoft для точно этого.

13
задан Senseful 23 October 2009 в 23:38
поделиться

8 ответов

Проблема шифрования данных с помощью ключевого материала, который может содержать небольшие ошибки, была изучена достаточно широко. В частности, есть ряд предложений по защите данных с использованием биометрических данных (например, отпечатков пальцев или сканирования сетчатки глаза) в качестве ключа. Типичный подход - использовать соответствующий код коррекции ошибок, взять исходный ключевой материал K, вычислить его синдром и сохранить только синдром. Как только вы получите второе чтение ключевого материала K ', синдром можно использовать для восстановления K из K', если K и K 'достаточно близки (где «достаточно близко», конечно, зависит от схемы исправления ошибок)

. ] Для начала вот статья, в которой предлагается схема нечеткого хранилища . Это общее предложение схемы шифрования с использованием «нечеткого» ключа. Конечно, вам все еще необходимо изучить, как извлекать характеристики из чертежей, которые достаточно стабильны для использования такой схемы исправления ошибок. Вам также нужно будет проверить, сколько энтропии вы можете извлечь из таких рисунков. Какими бы плохими ни были пароли с точки зрения энтропии, их все же трудно превзойти.

2
ответ дан 2 December 2019 в 01:41
поделиться

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

Вы можете быть совершенно уверены, когда одна линия заканчивается, а другая начинается, поскольку есть 8 направлений, и вы можете обнаружить изменение направления (или, для более простого подхода, просто определите перо вверх и перо вниз и используйте их в качестве разделителей строк) . Первая строка дает коэффициент масштабирования, поэтому длина каждой второй строки может быть представлена ​​как коэффициент (например, в обычной L-образной форме первая вертикальная линия будет давать «базовую длину» b, а другая линия тогда будет иметь длина примерно 0,5 * б). После того, как пользователь закончит, вы можете использовать наименьший множитель s для «округления» длин, так что вы У меня будет массив целых длин, например [1 * s, 2 * s, 4 * s, 5 * s]. Это предотвратит чрезмерную точность системы, а использование базовой длины сделает систему устойчивой к масштабированию.

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

Кроме того, вы можете сохранить значение двухмерного смещения (конечно, «округленное») для каждой строки после второй строки, чтобы строки также должны быть в одной и той же позиции, если вы этого не сделаете, L и T, скорее всего, получат одну и ту же строку (1 строка вверх-вниз, 1 строка влево-вправо длиной 0,5). Таким образом, сохранение позиций немного усиливает все это, но это необязательно.

РЕДАКТИРОВАТЬ:

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

Обратите внимание, что этот алгоритм дает только 3 бита на ход, если все строки имеют одинаковую длину и максимум, возможно, до 6-8 бит на ход, а некоторые больше, если вы сохраняете позиции тоже. Это означает, что вам понадобится довольно сложный символ из 20-40 штрихов, чтобы получить 128 бит безопасности.

Простой способ добавить больше вариаций / безопасности - позволить пользователю использовать разные цвета из данной палитры.

1275] Чтобы снизить риск того, что кто-то наблюдает за вами, вы можете заставить каждую линию исчезать после того, как она нарисована, или изменить цвет на цвет с очень низким контрастом по отношению к фону.

еще немного, если вы тоже храните позиции. Это означает, что вам понадобится довольно сложный символ из 20-40 штрихов, чтобы получить 128 бит безопасности.

Простой способ добавить больше вариаций / безопасности - позволить пользователю использовать разные цвета из данной палитры.

1275] Чтобы снизить риск того, что кто-то наблюдает за вами, вы можете заставить каждую линию исчезать после того, как она нарисована, или изменить цвет на цвет с очень низким контрастом по отношению к фону.

еще немного, если вы тоже храните позиции. Это означает, что вам понадобится довольно сложный символ из 20-40 штрихов, чтобы получить 128 бит безопасности.

Простой способ добавить больше вариаций / безопасности - позволить пользователю использовать разные цвета из данной палитры.

1275] Чтобы снизить риск того, что кто-то наблюдает за вами, вы можете заставить каждую линию исчезать после того, как она была нарисована, или изменить цвет на цвет с очень низким контрастом по отношению к фону.

3
ответ дан 2 December 2019 в 01:41
поделиться

Распознавание рукописного ввода часто учитывает продолжительность штриха больше, чем фактическую длину и т.п.

Хотя это относится к чувствительности к давлению, я думаю, вы сможете увидеть некоторые концептуальные элементы, похожие на то, что вы здесь думаете .... jdadesign.net/safelock/

Это не совсем та же тема , но это самое близкое, что приходит на ум в данный момент.

1
ответ дан 2 December 2019 в 01:41
поделиться

Я не думаю, что вы могли бы получить достаточно «битов» из нарисованного от руки символа для выполнения безопасного шифрования. Как вы заметили, вы должны допускать достаточную уклончивость в понимании того, что естественные вариации рисунка будут допустимы. Другими словами, вы должны отбросить шумы в штрихах, сгладив их до воспроизводимого сигнала. Но шум (высокая энтропия) делает криптографические ключи лучше.

Подумайте об этом так. Если вы разложите жест на сегменты вверх, вниз, влево и вправо, каждый сегмент будет представлять 2 бита информации. Для ключа AES для символа потребуется 64 таких сегмента. Это довольно сложный жест для запоминания. А если его упростить, повторяя много сегментов подряд («правильно, правильно, правильно, ...»), получится паршивый (предсказуемый, неслучайный) ключ.

1
ответ дан 2 December 2019 в 01:41
поделиться

Я еще раз подумал об этом. Я не компьютерщик, но мне бы хотелось, чтобы это сработало.

Допустим, кто-то рисует каким-либо символом или «узором». Единственное, что вам остается проанализировать, - это все точки в шаблоне, созданном в событиях touchBegan, touchMoved и touchEnded.

Итак ... давайте возьмем все набранные очки, будь то 100 или 1 000 000, на самом деле это не имеет значения.

Разделите их на группы, столько групп, сколько хотите. Я предполагаю, что чем больше, тем лучше, но для этого примера давайте разделим их на 4 группы. При 100 точках группа 1 будет содержать точки 1> 25, группа 2 - 26> 50 и т. Д.

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

Может быть лучше, если холст пространства разделены сеткой, и "средние позиции" наносятся на их ближайшую координату.

Затем проверьте относительное расстояние между всеми группами. Итак, между 1,2 1,3 1,4 2,3 2,4 3,4.

Теперь у вас есть столько разных точек и информация об этих точках для генерации ключа. Средние значения и сетка должны помочь сгладить некоторую, если не всю энтропию.

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

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

На самом деле, я попробую сам.

наносятся на их ближайшую координату.

Затем проверьте относительное расстояние между всеми группами. Итак, между 1,2 1,3 1,4 2,3 2,4 3,4.

Теперь у вас есть столько разных точек и информация об этих точках для генерации ключа. Средние значения и сетка должны помочь сгладить некоторую, если не всю энтропию.

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

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

На самом деле, я сам попробую.

будут нанесены на их ближайшую координату.

Затем проверьте относительное расстояние между всеми группами. Итак, между 1,2 1,3 1,4 2,3 2,4 3,4.

Теперь у вас есть столько разных точек и информация об этих точках для генерации ключа. Средние значения и сетка должны помочь сгладить некоторую, если не всю энтропию.

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

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

На самом деле, я попробую сам.

3 2,4 3,4.

Теперь у вас есть столько различных точек и информация об этих точках для генерации ключа. Средние значения и сетка должны помочь сгладить некоторую, если не всю энтропию.

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

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

На самом деле, я сам попробую.

3 2,4 3,4.

Теперь у вас есть столько различных точек и информация об этих точках для генерации ключа. Средние значения и сетка должны помочь сгладить некоторую, если не всю энтропию.

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

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

На самом деле, я попробую сам.

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

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

На самом деле, я сам попробую.

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

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

На самом деле, я попробую сам.

1
ответ дан 2 December 2019 в 01:41
поделиться

Жесты.

http://depts.washington.edu/aimgroup/proj/dollar/

Вы можете определить собственные алгоритмы для определенных жестов. Например, круг,

1. Найдите начальную точку 2. Найдите крайний левый, самый правый и самый дальний точки и получите приблизительный радиус. 3. проверить все точки на радиусе с погрешностью (25%?) 4. Если радиус подтверждается, у вас есть круг.

Вертикальная прямая линия: 1. Проверьте положение начальной и конечной точек X и Y. 2. Сравните промежуточные точки с координатами x и y начала и конца. 3. Если они примерно в одной и той же координате X, но по восходящей или нисходящей координате Y, у вас есть вертикальная линия.

И так далее, усложнение для более сложных жестов.

Вы даже можете комбинировать жесты. Допустим, у вас есть алгоритм для 6 жестов. Вы можете комбинировать их, чтобы образовать разные символы. Порядок, в котором создаются жесты, может иметь важное значение, добавляя дополнительный уровень безопасности.

0
ответ дан 2 December 2019 в 01:41
поделиться

что, если бы вы взяли все координаты x, y штриха и выполнили над ними какую-то линейную двустороннюю операцию? Затем вы можете вычислить «приблизительный» хэш, и если число, вычисленное, когда штрих находится в пределах ... скажем, 10% от вашего приближения, тогда вы предоставляете доступ ..

0
ответ дан 2 December 2019 в 01:41
поделиться

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

Например, что-то вроде метода разблокировки цифры 9 ячеек в Android может дать вам около 16 бит энтропия. Предположим, вы используете 5 секунд процессорного времени для вычисления ключа шифрования. Тогда со средним ПК для взлома требуется 5 * 2 ** 16/20 секунд, или около 4,5 часов. Любая потеря энтропии при вводе или неэффективность установки ключей и шифрования быстро сократит это до минут, не говоря уже о том, используются ли кластеры компьютеров.

Откровенно говоря, это будет не намного лучше, чем просто хранить файл в неизвестном формате и надеяться, что никто его не поймет

0
ответ дан 2 December 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: