Алгоритм шифрования «цифр» на мобильном устройстве, чтобы неправильный пароль показывал только неправильные номера, но не подсказывал, что он неправильный - PullRequest
1 голос
/ 16 сентября 2010

Я ищу алгоритм для шифрования секретных номеров на мобильном устройстве со следующими свойствами:

  • Каждое число имеет имя, связанное с пользователем, которое хранится в открытом тексте, но может использоваться для возмущенияшифрование
  • Число должно быть зашифровано паролем без указания подсказки о том, является ли данный пароль правильным или неправильным
  • При расшифровке с неправильным паролем результатом должно быть числоравной длины (т. е. если оригинал был 4-значным, неправильный должен быть также 4-значным)
  • Когда злоумышленник знает одно или несколько чисел, самый простой способ получить другие числа долженбыть взломанным паролем до тех пор, пока числа не расшифруют до этого значения.
  • При желании он может поддерживать другие наборы символов (например, 0-9a-f или 0-9a-zA-Z) - набор символов будетхранится вместе с записью, и каждое неправильное дешифрование покажет только эти символы, конечно
  • Я предполагаю, что злоумышленник, который получил мУстройство obile найдет способ вывести из него зашифрованные данные и повторно реализовать алгоритм или любую логику взлома, поэтому даже при наличии доступа к необработанным данным оно не должно раскрывать информацию о неправильных паролях

Поскольку у меня есть SHA-1, доступное на устройстве, я подумал о следующем:

  • Найдите наименьшее число байтов, в которое можно сохранить все значения диапазона (для 3-значного числа).число, используйте 2 байта, поскольку 999 не умещается в один байт)
  • возьмите число для шифрования и проверьте, как часто вы можете добавлять 10**digitcount к нему, чтобы оно все еще вписывалось в диапазон, т.е. когдачисло шифрования 555, это 64, как 65555> 65536, но при шифровании 222 это 65, как 65222 <65536. </li>
  • Выберите случайное число от 0 до числа, определенного вами на последнем шаге (линейноераспределение) и добавьте number*(10**digitcount) к числу для шифрования
  • Результатом должно быть число, которое каким-то образом равномерно распределено по всему диапазону байтов.
  • Возьмите SHA-1 из name+password, обрежьте первые (или последние) байты - столько, сколько нужно для покрытия числа из последнего шага - и присвойте им XOR с номером из последнего шага.
  • Сохраните Xor-ed SHA1,длина номера и имя.
  • Адаптация к другим базам, кроме 10, проста, что может удовлетворить необязательные требования, приведенные выше.

Что вы думаете?Есть идеи по улучшению?Есть ли более простые способы добиться того же?Есть ли какие-то очевидные недостатки, которые я пропустил?

(И есть ли (бесплатные, как в речи) приложения для мобильных устройств, которые реализуют аналогичный алгоритм?)

(Или есть какие-либо другие веб-сайты для обмена стеками, гдевопрос подходит лучше?)

edit : Теперь я принял единственный ответ, который не пытается сказать мне, что требования неверны.Да, я знаю, что требования неверны, но альтернатива (хранить все свои PINS в открытом виде или слабо зашифрованными на вашем мобильном устройстве) определенно является большим злом.

Ответы [ 3 ]

0 голосов
/ 16 сентября 2010

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

0 голосов
/ 16 сентября 2010

Просто чтобы дать вам идею более простого подхода: используйте старый добрый DLP в конечных циклических группах.

Аддитивно написано: cipher = plain + key mod 10^number-of-digits затем ясно: cipher - key mod 10^number-of-digits = plain снова, и это всегда будет в заданном интервале по проекту.

0 голосов
/ 16 сентября 2010

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

Просто сохраните число в виде строки ASCII, XORed с байтами первых цифр изхэш SHA-1, который вы вычислили.

Затем при декодировании перебором любой "цифры", которая декодируется вне диапазона, обратно в действительную цифру.(Например, если действительными цифрами являются «0» - «9», просто вычтите «0», модуль 10 и добавьте «0» обратно.)

...