hell0w0rd
@hell0w0rd
Просто разработчик

Криптографический алгоритм шифрования по мастер-паролю

В институте вместо десятка ненужных лаб договорился сделать программу для хранения паролей. Пароли и их предназначение должны шифроваться по мастер-паролю. Я в криптографии вообще ничего не знаю, но интересно, понял RSA, но я так понимаю он мне не подходит — это для передачи сообщений.
XOR слишком просто, хотелось бы интересный, но не очень сложный алгоритм. Подскажите такой?
  • Вопрос задан
  • 7019 просмотров
Решения вопроса 1
Carcharodon
@Carcharodon
люблю криптографию
Чем хорош RSA, например, то с ним можно использовать любой «мастер-ключ», так как там открытый и закрытый ключ взаимозависимые, а не как, например, в протоколе Эль-Гамаля.

Но тут будет проблема. Для программы, которая сама хранит пароли, хранить еще информацию о ключе шифрования ключей (мастер-ключе) — как-то небезопасно.
Лучше использовать другой подход. А именно стойкую (!) криптографическую хэш-функцию (так проще и информации о мастер-ключе почти не будет в программе) и симметричный алгоритм шифрования (3DES, AES, любой другой, который будет понятен для реализации. Даже ГОСТ28147-89 подойдет. Для всех них в сети много максимально разжеванных алгоритмов).

Теперь собственно протокол работы программы.

Шифрование:
Есть сообщение M, содержащее пользовательский пароль, который необходимо хранить в программе.
Шифруется оно случайно созданным ключом шифрования K.
К в свою очередь шифруется ключом шифрования ключей (мастер-ключом).
Ключ шифрования ключей — пусть будет результат воздействия стойкой криптографической хэш-функции H() на фразу-пароль P.

Расшифрование:
Я беру фразу-пароль P.
Беру от нее хэш H(P).
Расшифровываю разовый ключ шифрования данных K с помощью H(P) в качестве ключа.
Расшифровываю с помощью K хранимое сообщение М, содержащее пароль.

Возможные проблемы:
стойкость хэш-функции
равномерное распределение ГПСЧ

В остальном, будет очень даже увлекательное занятие. Для меня бы точно было таким =)
А если для хранения данных использовать списки и деревья, то преподаватели будут довольны)))
Ответ написан
Пригласить эксперта
Ответы на вопрос 7
ntkt
@ntkt
Потомственный рыцарь клавиатуры и паяльника
1. Начните с теории на уровне «для чайников».
Вам нужно понять, что такое «симметричное» и «асимметричное» шифрование, что такое хэширование с т.з. криптографии, когда они используются, какие данные можно шифровать, а какие — нельзя (да-да!), базовые вещи про режимы работы шифров и использование-переиспользование ключей.
2. Дальше — выбор алгоритмов не принципиален вообще.
Реализация RSA — это ровно одна лаба по объему.
Реализация простого симметричного шифра типа упомянутого XXTEA — еще меньше.
Реализация приличной хэш-функции — тут посложнее (но подсказка: из приличного симметричного алгоритма шифрования можно сделать довольно приличную хэш-функцию).
3. Принципиально — понимание что к чему (см. п.1).
Можно вообще ничего не реализовывать, а сначала собрать из готовых кусков и поиграться.
Ответ написан
Комментировать
ivan_kolmycheck
@ivan_kolmycheck
Если коротко суммировать все ответы, то: вам нужны симметричные алгоритмы (AES, Twofish, Blowfish). RSA — ассиметричный.

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

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

Из-за особенностей ассиметричных алгоритмов, безопасная длина ключей там побольше, чем в симметричном, да и операции более ресурсоёмкие. Поэтому часто используется гибридное шифрование, где сообщение шифруется симметрично случайно сгенерированным ключом, ключ шифруется ассиметрично и приклеивается к зашифрованному сообщению. Получатель «откусывает» ключ от сообщения, расшифровывает его ассиметрично и получает ключ, которым расшифровывает сообщение.
Ответ написан
Singerofthefall
@Singerofthefall
В институте вместо десятка ненужных лаб <...> Я в криптографии вообще ничего не знаю
Надеюсь, это не лабы по криптографии ;)

Вам подойдет любой симметричный алгоритм (вот тут есть краткий списочек). Посмотрите что-нибудь вроде XXTEA(блочный) или RC4(поточный) (хотя последний вроде лицензирован, если это вас беспокоит) — оба были задуманы как алгоритмы, простые в реализации.
Ответ написан
KEKSOV
@KEKSOV
Простите, а чем не подходит публичный Blowfish сотоварищи? Реализаций на всех языках, как грязи.
Ответ написан
Комментировать
Возьмите алгоритм AES вполне подойдет под ваши задачи.
Ответ написан
Комментировать
Protos
@Protos
Спрашивай - отвечу
Нормально! ключ 2кбита да и асимметричное, оно медленно для потокового шифрованная, но для хранения малых объемов информации норма! Сам делал на рса, правда смотря как будешь делать: все руками или используя сторонние готовые библиотеки
Ответ написан
ivan_kolmycheck
@ivan_kolmycheck
Ещё можно подсмотреть что-нибудь тут: www.keepassx.org/downloads/ (свободное ПО, соответственно, исходники в наличии)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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