Рейтинг:6

Сделать надежный, легко запоминающийся пароль с помощью классической криптографии?

флаг cn

Пароли бывает сложно запомнить. Например:

H7535637353959595*9608J614625C1313^398583I0397897j^

Итак, Боб хочет создать и использовать хороший пароль для GPG, который ему никогда не придется запоминать. Он редко будет использовать этот пароль (асимметричное шифрование для оффлайнового хранилища). Когда ему это понадобится, он сгенерирует свой пароль с помощью карандаша и бумаги из некоторой ключевой информации, которая хранится в одном месте: в его голове.

Он надеется использовать классическую криптографию, чтобы превратить то, что он не хотел или не мог вспомнить, во что-то доступное. Как Боб мог сделать пароль достаточно надежным для GPG, используя классические методы?

Важно отметить, что он хочет избежать «безопасности» за счет запутывания.

Некоторые особенности и принципы, лежащие в основе Шифр ВИК пришло в голову (во всяком случае):

  1. 5-значное число (действительно случайное)

67106 растянут до 10 цифр, 67106 + (6+7=3) + (7+1=8) и т. д. 6710638169

  1. Заученная короткая фраза: канцкритическая философия (по первым 20 буквам). В результате чего 5169827304 и 2159346708

Короче говоря, следуя процессу Боба, в основном похожему на шифр VIC (сложение цепочки, создание перестановок от 1 до 0, сложение цифр без переносов), мы приходим сюда:

    5730481269
    НЕТ АДЬЕУС
  3 BCFGHJKLMP
  9 QRTVWXYZ
  1. Боб использует растянутую клавиатуру для своей заученной длинной фразы:

ТРЕНИРОВКА В АМСТЕРДАМБЕ, НО НЕ В ЙОНГЯНЕ и помещает результат в столбчатую транспозицию длиной три (не ломаную транспозицию).

Добавляет перец, если хотите, в конце строк транспонирования: *^^ и 11=A, 22=B и т. д., 111=a, 222=b и т. д., 1111=!, 2222=@ и т. д.

Результат: H7535637353959595*9608J614625C1313^398583I0397897j^

Немного потренировавшись, несложно запомнить процесс, подобный тому, который использует шифр VIC.

Вопросы:

  1. Может ли подобный метод создать достаточно надежный пароль для использования, скажем, в GPG?

  2. Как будет выглядеть надежный метод, использующий классическую криптографию для генерации паролей?

jjj avatar
флаг cn
jjj
Когда злоумышленник знает, как вы генерируете свой пароль (а вы всегда должны это предполагать), алгоритм, примененный к ключу, становится бесполезным с точки зрения безопасности. Расширение ключей вообще не добавляет безопасности. Вы только можете сделать его более запоминающимся, что позволяет использовать более длинные начальные случайные ключи (это единственное, о чем вы должны заботиться)
флаг in
@jjj ну, дорогостоящая в вычислительном отношении функция получения ключа действительно повышает безопасность, потому что она требует больше времени для грубого форсирования. Но, конечно, вычисление такой функции хотя бы один раз вручную заняло бы годы, если не миллионы лет.
флаг lu
*"... [пароль], который он никогда не должен помнить.... когда он ему понадобится, он сгенерирует свой пароль [из] некоторой ключевой информации, которая хранится в одном месте: в его голове"*. Итак, вы хотите, чтобы Бобу не нужно было ничего запоминать... запоминая что-то? Это кажется действительно бессмысленным. Просто выберите [разумный пароль](https://xkcd.com/936/) вместо 51 случайного символа (как в вашем первом примере), который в любом случае излишне длинный для любого возможного метода атаки.
флаг tj
Это напоминает мне мой прошлый вопрос: [Надежное хеширование PHP без соли] (https://security.stackexchange.com/questions/142659/strong-php-hashing-without-salt). TL;DL цель состоит в том, чтобы использовать личную информацию для генерации паролей, которые я могу воспроизводимо генерировать снова.
Рейтинг:21
флаг in

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

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

Трюки с памятью - хорошо

Растяжка ручкой и бумагой - бессмысленно

флаг jp
(при условии, что злоумышленник знает, что вы сделали)
Meir Maor avatar
флаг in
Это действительно лучшая практика. и в вопросе явно говорится о желании не полагаться на безопасность путем запутывания.
Рейтинг:7
флаг ng

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

Основная идея заключается в том, что он выбирает каждое слово с помощью броска 5 d6 (например, каждое слово имеет $6^5= 7765= 2^{12,92}\приблизительно 2^{13}$ параметры). Тогда весь пароль представляет собой некоторую комбинацию $к$ самостоятельные слова, давая пароль с $\приблизительно {13k}$ биты энтропии. Затем вы можете выбрать $к = 6$ (или другие варианты, которые вы хотите), чтобы получить пароль с помощью $\около 80$ биты энтропии.

Я только что сгенерировал пароль:

YearlingExquisiteWorstUnsortedDenoteSkipper

Могу ли я запомнить это сразу? Нет. Могу я придумать историю в $\около 10$ минут, чтобы значительно помочь запоминанию? Наверное. Он также имеет (огромное) преимущество, заключающееся в том, что даже относительно технологически непродвинутые пользователи могут запомнить сгенерированный пароль. У этого также есть (опять же, огромное) преимущество, что он «просто» кодирует стандарт $\около 80$ битовый пароль с использованием (общедоступного) списка слов, чтобы помочь человек запоминание. Математически нет ничего нетривиального, на что можно было бы напасть.

John Smith avatar
флаг ru
Нет необходимости использовать программное обеспечение. Просто выберите песню, все слова которой вы помните, чтобы использовать ее в качестве строки слов. Вселенная песен достаточно велика. Затем выберите легко запоминающийся алгоритм и сохраните его в секрете («вторая и третья буквы каждого слова, начинающегося с согласной»), и у вас не возникнет проблем с сохранением соответствующих трудноугадываемых строк из сотен символов. в длину полностью в вашей голове. Вы даже можете записать, какая песня кодирует какие пароли, без схемы деривации даже этого недостаточно для реалистичного перебора.
Mark avatar
флаг ng
@JohnSmith Если вы собираетесь хранить информацию о своих паролях, это не должно быть специальным образом — просто используйте менеджер паролей. Если вы хотите, чтобы ваш мастер-ключ был из какой-то специальной схемы, прекрасно, но я не вижу причин делать это, так как это затрудняет аргументацию *количественной* надежности вашего пароля. Более того, приучение себя набирать некоторые слова «неправильно» таким образом, чтобы это соответствовало вашим паролям, кажется довольно подозрительным.
Рейтинг:1
флаг am

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

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

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

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

Таким образом, TL; DR, вам нужно будет запомнить только N-кратный пароль и местоположение, а все остальное будет случайным, поэтому его нельзя будет взломать за разумное время, а также защитить от атак по словарю + если вы не раскрываете местоположения, даже если ваши пароли были утеряны (социальная инженерия или простая ошибка копирования-вставки в чат), злоумышленнику все равно нужно будет получить «сундук с сокровищами». Ключ без замочной скважины - просто бесполезный предмет.

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

Patriot avatar
флаг cn
Я понимаю ваше первое замечание, но именно поэтому вариант использования — автономное хранилище. Я вижу, что вы говорите в своем последнем обсуждении.
Рейтинг:1
флаг cn
Leo

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

Я предполагаю, что пользователь может запомнить несколько слов разной длины, например ["Лондон", "Стамбул", "Шеффилд"].

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

Затем мы начинаем со строки из 72 "А" символов, а затем зашифровать его с помощью шифра Виженера с каждым ключевым словом.

Ключевые слова: ['ЛОНДОН', 'СТАМБУЛ', 'ШЕФФИЛД']
Наименьшее общее кратное: 72
Исходный ключ: ААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА
Зашифровано с помощью ЛОНДОН: ЛОНДОНЛОНДОНЛОНДОНЛОНДОНЛОНДОНЛОНДОНЛОНДОНЛОНДОНЛОНДОНЛОНДОНЛОНДОНЛОНДОН
Зашифровано с помощью ISTANBUL: TGGDBOFZVVHNYPHOWFEOAEIYTGGDBOFZVVHNYPHOWFEOAEIYTGGDBOFZVVHNYPHOWFEOAEIY
Зашифровано с помощью SHEFFIELD: LNKIGWJKYNORDUPSHIWVEJNGXRJVISKEDZSQQWLTBNIZDWPCYLOHMRXGZAMVCAKGDJJTIITB
Окончательный результат: LNKIGWJKYNORDUPSHIWVEJNGXRJVISKEDZSQQWLTBNIZDWPCYLOHMRXGZAMVCAKGDJJTIITB

Вот некоторый код Python, который делает это.

#!/usr/bin/env python3
импортировать математику
импорт системы

АЛФАВИТ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Виженер = {}

для i, буква в перечислении (АЛФАВИТ):
    а = список (АЛФАВИТ)
    для _ в диапазоне (i):
        а.добавлять(а.поп(0))
    виженер [буква] = а

ключевые слова = [x.upper() для x в sys.argv[1:]]

print("Ключевые слова:", ключевые слова)

key_len = math.lcm(*[len(x) для x в ключевых словах])
print("Наименьшее общее кратное:", key_len)

ключ = ["А"] * key_len

print("Начальный ключ:", "".join(key))
для ключевого слова в ключевых словах:
    для i в диапазоне (key_len):
        key_letter = ключевое слово[i % len(ключевое слово)]
        индекс = АЛФАВИТ.индекс (ключ [i])
        key[i] = vigenere[key_letter][index]
    print(f"Зашифровано {keyword}:", "".join(key))

print("Конечный результат:", "".join(key))

Ответить или комментировать

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