#c #c #encryption #passwords
Вопрос:
Я пытаюсь создать программу шифрования, и я использую AES (256/192/128) из понимания, которое я взял с GitHub, есть исключение, если ключ не имеет этих размеров. Но я хочу использовать ключ в качестве пароля, в KeePass (они также шифруют с помощью этого алгоритма) мы можем создавать пароли разных размеров. Что мне делать? Я должен добавить несколько байтов заполнения? Или я должен использовать алгоритм хэширования для создания паролей одинакового размера?
Ответ №1:
Принятый ответ неверен, вводит в заблуждение и небезопасен!
вывод ключей на основе пароля (PBKDF), небольшое введение
Обычно ключ для AES должен генерироваться равномерно случайным образом. Людям трудно запоминать случайные ключи, поэтому мы используем пароли и извлекаем из них ключи. Правильный способ преобразования пароля в ключ-использовать PBKDFs, такие как PBKDF2, scrypt, или лучше использовать Argon2.
Эти функции вывода ключей принимают некоторые параметры , такие как info, salt, iteration count, memory size, thread amount
и т. Д. Эти параметры будут получены из очень длинной линейки мер противодействия методам взлома паролей.
- Соль используется для предотвращения радужного стола.
- Количество итераций используется для сокращения времени поиска пароля злоумышленником. Установка значения около 1 м для PBKDF2 замедлит атакующего в 1 м раз.
- объем памяти используется для того, чтобы сделать алгоритм хэширования паролей сложным для памяти, чтобы злоумышленник не мог использовать массивный графический процессор/ASIC для атаки.
- количество потоков используется для устранения распараллеливания даже в параллельных процессорах.
Эти и аналогичные параметры могут быть скорректированы в соответствии с вашей целевой безопасностью ( ознакомьтесь с документацией перед использованием).
Используйте PBKDF, чтобы получить нужный размер ключа
Каждый из этих файлов PBKDF может выводить требуемое количество ключей размером 128 256 или более. Даже можно получить несколько ключей из одного пароля, используя разные info
salt
параметры или.
- Простое хеширование с помощью SHA256 совершенно неправильно, для этого уже существуют радужные таблицы, и даже в hashcat можно использовать массовую параллель на графических процессорах, чтобы заложить ваш пароль. Никогда не используйте,
В вашем случае, поскольку ключ AES не является случайным, злоумышленники не будут прибегать к грубой силе AES, они будут искать ваш пароль, список заложенных 800 тысяч и, возможно, ваши поиски, основанные на знаниях.
Выбор хорошего пароля
Хороший пароль действительно важен, даже если вы используете очень надежный PBKDF, такой как недавний победитель конкурса Argon2.
Следует использовать пароль типа dicewire или аналогичный пароль типа Bip39. xkc936 очень хорошо передает эту идею.
С хорошим паролем вы можете даже пережить плохо разработанный механизм входа в систему для хэширования паролей, однако вы не можете добиться успеха в открытом механизме паролей Facebook, позор им!
Комментарии:
1. Это излишне для варианта использования операции. Хэш используется только в качестве ключа шифрования для AES. Он нигде не хранится, поэтому радужные таблицы не являются проблемой. Их программа могла бы так же легко взять необработанный ключ, но они искали способ расширить все, что вводит пользователь.
2. Не перебор, AES обычно должны генерироваться равномерно случайным образом. Если это не так, злоумышленник не будет искать грубое использование ключа AES. Они будут искать пароль. Использование простого SHA256 облегчит их работу. Поэтому PBKDF является обязательным! Я дал введение в PBKDFs, радуга является его частью.
3. Это должен быть ключ AES, который должен быть сгенерирован равномерно.
4. А если у вас должна быть функция, при которой один и тот же пароль, введенный в двух местах, генерирует один и тот же ключ?
5. Мне нужно всегда помнить соль и другие параметры, или я могу использовать их в качестве постоянных параметров?
Ответ №2:
При использовании парольной фразы с алгоритмом симметричного шифрования распространенным способом обработки этого является хэширование парольной фразы, а затем использование достаточного количества байтов из хэша для создания ключа шифрования. Это дает преимущество в том, что вы принимаете парольную фразу любого размера без необходимости дополнять ее (или обрезать, если она слишком длинная).
Например, если ваша парольная фраза «пароль», хэш SHA256 этого (напечатан как шестнадцатеричный) 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8. Затем вы можете использовать этот хэш в качестве ключа к AES256. Для AES128 используйте первые 16 байтов хэша (т. е. 5e884898da28047151d0e56f8dc62927).
Комментарии:
1. Это не очень хороший совет для хэширования паролей. Нам нужны специальные хэш-функции для хэширования паролей, такие как PBKDF2, Scrypt и Argon2.