LINUX.ORG.RU

[RC5 - блочный алгоритм] Как генерировать 16-ти байтный ключ на основе пароля?


0

1

Хелло алл


Продолжаю разбираться с алгоритмом шифрования RC5. Очередной вопрос состоит в следующем.

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

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

Или надо как-то по-другому делать?

Ответ на: комментарий от pat_minus

> Каким алгоритмом? А что делать, если пароль больше?
дополнить нулями. обрезать.

tn1 ()

> Как из такого пароля получить 16 байт?

Хэш

Имеет ли смысл высчитывать для пароля, например хеш MD5 (как раз 16 байт)

Ты ответил на свой вопрос :-)

Но не надёжно это всё-таки.

Chaser_Andrey ★★★★★ ()

Как вариант - можешь сгенерить ключ по такому принципу http://chaser.geek.km.ua/node/8

Только обрежь потом результат до своих 16 байтов.

Chaser_Andrey ★★★★★ ()
Ответ на: комментарий от Eddy_Em

man crypt не пойдет?

Вроде подходит. Но пишут, что для использования этой функции нужно подключать libcrypt.so. А у меня кроссплатформенная программа. Будет ли программа с такой функцией без дополнительного мозготраха собираться под Windows и Mac в MinGW?

pat_minus ()
Ответ на: комментарий от Chaser_Andrey

Как из такого пароля получить 16 байт?

Хэш

Имеет ли смысл высчитывать для пароля, например хеш MD5 (как раз 16 байт)

Ты ответил на свой вопрос :-)
Но не надёжно это всё-таки.

А как надежно?

pat_minus ()
Ответ на: комментарий от pat_minus

man crypt не пойдет?

Вроде подходит.

Нет, не подходит. Она оказывается фактически 11 байт выдает. Даже из пароля в 16 символов получим 11 байт, что недопустимо.

pat_minus ()
Ответ на: комментарий от i-rinat

md5(«salt»+md5(«salt2»+md5(.....(«password»))....)

В RC5 у меня используется рандомный вектор инициализации в 8 байт.

Исходя из этого, достаточно ли будет для создания ключа из пароля использовать просто MD5 без salt?

pat_minus ()
Ответ на: комментарий от pat_minus

Ничего подобного. Алгоритм получения хеша при помощи crypt зависит от вашей соли. Например, если соль имеет формат «$5$что-то$», то получим 43-символьный хэш.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от pat_minus

Соль нужна не для удлинения ключа, а для того, чтобы перебирать пароли было медленнее/сложнее.

i-rinat ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Например, если соль имеет формат «$5$что-то$», то получим 43-символьный хэш.

Почему именно 43 символа?

$5$salt$encrypted - is an SHA-256 encoded password

Это 32 байта. Плюс длина строки «что-то» 6 байт. Итого 38. Почему 43?

pat_minus ()
Ответ на: комментарий от pat_minus

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

...
	snprintf(salt, 128, "$5$.%d.$", rand());
	key = sha(id, salt);
	key = strrchr(key, '$') + 1;
	insert2db(id, key, level);
	printf("KEY=%s; path=%s\n", key, getpath(URL));
...

Выдает, например, такое: «KEY=ObYTIIgd9HD2Q9Zs97XMjS8Jy9o2dtyM6GdevyIGfv3; path=/»

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Chaser_Andrey

Алгоритм RC5 и ключ всего лишь 128 бит.

Всего лишь?

Последний осуществлённый взлом шифра RC5-32/12/8 потребовал 5 лет вычислений в рамках проекта распределённых вычислений RC5-64.

Distributed.net запустил проект RC5-72 для взлома RC5-32/12/9, в котором по состоянию на ноябрь 2010 года удалось перебрать 1.2% ключей.

А у нас идет речь о RC5-32/12/16. Для хранения приватных данных этого что, недостаточно?

pat_minus ()
Ответ на: комментарий от pat_minus

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

Разве AES-256 не лучше?

Chaser_Andrey ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.