Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Посоветуйте крипто-алгоритм.


Автор: En_t_end 18.1.2007, 17:26
Задача:
Аутентификация и работа с пользователями приватно по сети.
Проблемы:
1. Хранение паролей пользователей на машине аутентифицирующей пользователей.
2. Соб-венно сам алгоритм крипто-обмена.
Подробнее:
1. У меня было желание хранить пароли пользователей в виде однозначно сгенирированных хешей. Но, почитал в инете, оказывается хеш-методы крайне неусточивы к BruteForce-методам взлома.
2. Хочу, чтобы алгоритм работал блочно, т.е. если был блок информации 128 бит то после приминения крипто-алгоритма, он на другом конце имел тот же размер.
Я задал эти два вопроса в одной теме, потому что хочу решить их близко к друг другу, если это возможно.Посоветуйте какой алгоритм выбрать.

Автор: Snowy 18.1.2007, 17:38
Цитата(En_t_end @  18.1.2007,  17:26 Найти цитируемый пост)
Хранение паролей пользователей на машине аутентифицирующей пользователей.
Храниение паролей всегда небезопасно.
Варианта 3: хранить хэш / хранить шифрованный пароль / хранить в открытом виде

Цитата(En_t_end @  18.1.2007,  17:26 Найти цитируемый пост)
Хочу, чтобы алгоритм работал блочно, т.е. если был блок информации 128 бит то после приминения крипто-алгоритма, он на другом конце имел тот же размер.
Непонятно...
При дешифровке информация восстанавливается один к одному.
Или ты имел ввиду, что шифрованные данные должны иметь тот же размер, что и не шифрованные?

Автор: En_t_end 18.1.2007, 17:43
Snowy, 
Цитата(Snowy @  18.1.2007,  21:38 Найти цитируемый пост)
Варианта 3: хранить хэш / хранить шифрованный пароль / хранить в открытом виде

3-ий отсекается точно. А вот что лучше хранить хеш или шифрованный пароль, всё же ?
Цитата(Snowy @  18.1.2007,  21:38 Найти цитируемый пост)
Или ты имел ввиду, что шифрованные данные должны иметь тот же размер, что и не шифрованные?

да

Добавлено @ 17:44 
Цитата(Snowy @  18.1.2007,  21:38 Найти цитируемый пост)
Храниение паролей всегда небезопасно

Из всех зол мне нужно выбрать меньшее.

Автор: Snowy 18.1.2007, 17:58
Ну тогда, что касается хранения - самый параноидальный вариант - хранить шифрованный хэш smile

Что касается алгоритма, то в твоём случае это явно не блочный, а как раз поточный алгоритм.
ИМХО RC4 - самое оно.

Автор: En_t_end 18.1.2007, 18:04
Snowy, 
Спасибо!
Цитата(Snowy @  18.1.2007,  21:58 Найти цитируемый пост)
 хранить шифрованный хэш

А в чем хранить ключ к шифрованному хешу ? smile тут блин кольцевая проблема... наверное выберу просто хеш, только больший по размеру.
Цитата(Snowy @  18.1.2007,  21:58 Найти цитируемый пост)
ИМХО RC4 - самое оно.

уже читаю http://ru.wikipedia.org/wiki/RC4.
Жду ещё варианты.


Автор: Snowy 18.1.2007, 18:06
Цитата(En_t_end @  18.1.2007,  18:04 Найти цитируемый пост)
А в чем хранить ключ к шифрованному хешу
В программе! Зашить насмерть smile

Вот, буквально с утра тема была: http://forum.vingrad.ru/topic-132588.html

Автор: En_t_end 18.1.2007, 18:19
Snowy, 
млин RC4 под лицензией. А тут ещЁ
http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=15&m=18553
Получается совсем как-то плохо.

Добавлено @ 18:25 
Цитата(Snowy @  18.1.2007,  22:06 Найти цитируемый пост)
В программе! Зашить насмерть

Издеваешься ? даже я смогу выдрать из программы ключ. 
Нет уж, лучше просто хеш.

Автор: Snowy 18.1.2007, 18:25
Цитата(En_t_end @  18.1.2007,  18:19 Найти цитируемый пост)
RC4 под лицензией
Это не страшно.
За его использование уже уплочено при покупке винды.
Возьми тот же SSL. Он бесплатен. А юзает тот же RC4 и RSA.
Возможно, что патент уже и не действует вовсе.

Автор: sergejzr 18.1.2007, 18:29
Цитата(En_t_end @  18.1.2007,  16:26 Найти цитируемый пост)
У меня было желание хранить пароли пользователей в виде однозначно сгенирированных хешей. Но, почитал в инете, оказывается хеш-методы крайне неусточивы к BruteForce-методам взлома.

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

Я к чему клоню. Если сделаешь ограничение на пароль, чтобы был  не длиннее А и не короче Б, и будешь длину пароля всегда проверять, то вероятность найти корреляцию практически равна нулю. А если подумать, что хэш - слово из 32 букв, то любое другое слово < 32 букв даст практически однозначный результат, если прогнать его через хэш функцию. А это означает перебор и несколько десятков лет для атакующего.

Т.е проверяй длину пароля, чтобы небыло спецсимволов и используй обыкновенный md5. 

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


Короче говоря можешь со спокойной душой использовать нижеприведённую схему (На псевдоязыке):
Код

bool register(name,parol)
{
  if(!parolCheck(parol)) return false
  putInDatabase(user, generate_hash(parol));
  return true;
}
bool isAuthorised(name, parol)
{
  return parolCheck(parol) && ( generate_hash(parol) == getHashFromDatabase(name) );
}

bool parolCheck(parol)
{
  min_parol=4
  max_parol=8
  return parolContainsOnlyAllowedCharacters(parol) && length(parol)<min_parol && length(parol)>max_parol;
 
}
generate_hash(parol)
{
salt="xxx1234";
return hash=md5(parol+salt);
}

Автор: En_t_end 18.1.2007, 18:29
Цитата(Snowy @  18.1.2007,  22:25 Найти цитируемый пост)
За его использование уже уплочено при покупке винды.

хы-хы...

Автор: Snowy 18.1.2007, 18:29
Цитата(En_t_end @  18.1.2007,  18:19 Найти цитируемый пост)
Издеваешься ? даже я смогу выдрать из программы ключ. 
ну это ещё спорно. Много ньюансов.
Можно в качестве ключа взять любые данные. Например серийник биоса или любую стандартную ветку из реестра.

Цитата(En_t_end @  18.1.2007,  18:19 Найти цитируемый пост)
Нет уж, лучше просто хеш.
Чем же просто хэш лучше, чем скрытый хэш?

Добавлено @ 18:30 
Цитата(En_t_end @  18.1.2007,  18:29 Найти цитируемый пост)
хы-хы...
А это уже проблема того, кто будет юзать сервер.
Если винда не куплена, то это бОльшая проблема, чем юзанье RC4 smile
В любом случае это уже проблема не софта, а юзера.

Автор: En_t_end 18.1.2007, 18:31
sergejzr, 
спасибо.

Автор: sergejzr 18.1.2007, 18:32
Я немного подправил. Добавил проверку на символы.

Автор: En_t_end 18.1.2007, 18:40
Snowy, 
я следую философии независимости от платформы(посему разные интересные вещи, типа получения значений веток реестра и серийника харда мне не помогут). Стараюсь следовать. Windows меня интересует, только как friendly-user платформа. Но это тема отдельного треда.
Цитата(sergejzr @  18.1.2007,  22:29 Найти цитируемый пост)
salt

Спасибо, я что-то подобное себе и представлял. Однако псевдокод не помешает

Автор: Snowy 18.1.2007, 18:43
Кстати. Сходил на сайт  RSA Security Inc.
Никакого упоминания о лицензии вообще нет.
Возможно в вики устаревшие данные.
Сколько его юзаю, ни разу не слышал о лицензионных ограничениях.
Только об ограничении на длину ключа.
Но это ограничения законодательные, а не алгоритма.

Автор: En_t_end 19.1.2007, 15:56
Появилась какая-то псевдопроблема с пересылкой информации для установления защищенного соединения. Вообщем, как мне наиболее безболезненно послать пароль по сети серверу. Не в чистом ведь виде ?


M
sergejzr
продолждение тут

Автор: W4FhLF 19.1.2007, 16:12
Продолжение...
http://forum.vingrad.ru/topic-132852/0.html#entry1004194

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)