Преобразование пароля в ключ симметричного алгоритма


стоит такая задача, что нужно сделать по паролю пользователя (контрольная фраза) доступ к ключу RSA, который предполагается шифровать Rijndael. Где почитать о алгоритмах преобразования или кто что подскажет? Реализация – Windows CryptoAPI

Комментарии
— unknown (23/11/2006 12:35)   
Смотрите варианты с реализацией S2K в OpenPGP:

http://sunsite.icm.edu.pl/gnupg/rfc2440-3.html

ПО аналогии, можно и в WinApi сделать.
— SATtva (23/11/2006 12:47)   
Скорее всего CryptoAPI ближе придерживается спецификаций PKCS, так что всё, что касается функций вычисления ключей, можно найти здесь[link1] (общие сведения) и здесь[link2] (конкретно по PKCS#5 v2).
— Pah (23/11/2006 12:51)   
понятно, простое решение s2k – salted, однако, не пойму, как соль поможет предотвратить перебор? И где ее хранить? Ведь если взломщик знает соль и как она прицепляется к ключевой фразе, что ему стоит делать перебор по словарю, затем цеплять соль... может, я чего-то не понимаю?
— unknown (23/11/2006 12:57, исправлен 23/11/2006 12:58)   
как соль поможет предотвратить перебор?

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

Для каждого случая придётся все пароли перебирать заново.
— SATtva (23/11/2006 13:01)   
Сама "соль" (или "привязка", мне так больше нравится) не является секретным значением. Она передаётся с шифртекстом, или, в Вашем случае, хранится вместе с зашифрованным ключом.
— Pah (23/11/2006 13:18)   
хорошо, тогда каким образом она может повысить криптостойкость системы?
допусти, у нас ключ образует взятием хеш от "пароль|соль". соль доступное значение, а о том, что пароль последовательно конкатенируется с солью, злоумышленник узнал. оно опять же, просто перебирает пароли, конкатенирует с солью, считает хеш, пробует расшифровать. Криптостойкость системы не повысилась. Что я упустил?
— ParanoidAnt (23/11/2006 13:27)   
unknown выше уже объяснил что соль затрудняет атаки по словарю.
— sentaus (23/11/2006 13:28)   
Например, это
http://ru.wikipedia.org/wiki/%..... BB%D0%B8%D1%86%D0%B0[link3]
— Pah (23/11/2006 13:35)   
ааа, понятно. спасибо. реализация оказалась тривиальной =) единственное, помима ключа, если блоки подстановкинадо генерировать. но это уж как-нибудь сам. еще раз спасибо
— Pah (23/11/2006 14:00)   
выбрал такую реализацию:
SHA384 в качестве хеширующего алгоритма, способ s2k – salted. Хеш разбивается на 256 и 128 бит, которые используются в качестве ключа и блока инициализации Rijndael (AES). Есть одно НО! Нормальный способ получения блока подстановки?
— unknown (23/11/2006 14:57)   
Нормальный способ получения блока подстановки?


А это про что? Как S-block AES посчитать что-ли?

Что-такое блок инициализации и блок подстановки?

Я зная про вектор инициализации (IV), может Вы подразумеваете ещё какую-то другую терминологию?
Гость (23/11/2006 23:00)   
да, я имею именно в виду IV, т.к. это и есть блок подстановки, насколько я знаю, ведь это алгоритм на сетях Фейстеля, вроде.
— unknown (24/11/2006 09:06, исправлен 24/11/2006 09:12)   
Я не знаю, какой терминологией Вы пользуетесь, но IV нигде вроде не называется "блоком подстановки". Он имеет отношение к режиму шифрования (например CBC), а не к "алгоритму на сетях Файстеля".

RIJNDAEL вообще к сетям Файстеля не относится, но даже если бы Вы выбрали файстелевский шифр, это опять же не имело бы никакого отношения к выбору IV.

IV должен выбираться каждый раз случайным (или криптостойко псевдослучайным) и быть равен размеру блока используемого шифра.

Для AES=128 бит (бывает ещё RIJNDAEL, не входящий в стандарт AES с размером блока 256 бит).

P. S. Надеюсь Ваша программа не будет ни в каких серьёзных целях использоваться, это что-то вроде курсовика? Если что, предупредите, чтобы мы ею не пользовались. (Sorry, если что, всего лишь шутка ;-)
— Pah (24/11/2006 12:42)   
извиняюсь за IV, я просто напутал =)

P. S. Надеюсь Ваша программа не будет ни в каких серьёзных целях использоваться, это что-то вроде курсовика? Если что, предупредите, чтобы мы ею не пользовались. (Sorry, если что, всего лишь шутка ;-)

не пойму? Что в ней не так?
— Pah (24/11/2006 12:55)   
Если вы про IV, то я уже понял, что не так делал и выбираю его криптостойко псевдослучайно :))))
— Pah (24/11/2006 13:32)   
насколько я понимаю, IV при расшифровании должен быть таким же, как и при шифровании. грубо говоря, он тоже является часть, необходимой для шифрования. где же его хранить? Совсем запутался =((
— Pah (24/11/2006 14:07, исправлен 24/11/2006 14:21)   
Извиняюсь за такое кол-во сообщений, но, все-таки убеждаюсь, что моя схема вполне нормальная

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


взято отсюда[link4] .
Т.к. IV в моей схеме неявно зависит от пароля, то и злоумышленнику без пароля его НИКАК не узнать.
Еше задумался о стойкости к радужным таблицам. В приведенной выше схеме, злоумышленник не получает доступа к хешу пароля, поэтому не может применять радужные таблицы для взлома пароля. Ему необходимо, либо перебирать пароли, либо перебирать 256 битные хеши в купе с 128 битными IV.

хотелось бы добавить, что игра в "угадайку" при постоянном IV не пройдет тут, так как я шифрую только одно сообщение.
— unknown (24/11/2006 15:31)   
насколько я понимаю, IV при расшифровании должен быть таким же, как и при шифровании. грубо говоря, он тоже является часть, необходимой для шифрования. где же его хранить? Совсем запутался =((

Он является открытым и несекретным. Его можно хранить вместе с сообщением.

Извиняюсь за такое кол-во сообщений

Да ничего, здесь все свои. Можете спрашивать конечно, для этого форум и существует.

не пойму? Что в ней не так?

но, все-таки убеждаюсь, что моя схема вполне нормальная

Моё дело конечно давать советы, а не морализировать, но уж разрешите немного поворчать:

Только-только разузнать про IV, S2K и т.д. и тут же сходу делать программу? Не имея представления о практической (я уж не говорю о теоретической) криптографии даже на базовом уровне?

Хотя обычно достаточно получить деньги за работу, а криптостойкость самоцелью не является. Так, пустые формальные обязательства перед заказчиком, который в 99% случаев всё-рано ни о чём не догадается. Видимость безопасности. И 99% коммерческих программ именно так и пишутся.

(правда если Ваша программа пишется не за деньги, то это ещё более непонятно для чего, хотя это Ваше дело).
— Pah (24/11/2006 15:53)   
я извиняюсь, но я совершенно случайно безопасностью стал заниматься. я пришел на работу кодером, а меня заставили заниматься безопасностью, несмотря на мои доводы. я читал инфу разнообразную по алгоритмам шифрования, в основном статьи, книги не читал. (Кстати, может кто по безопасности посоветует что-нибудь). Я старюсь по аналогии с уже готовыми решениями делать свою реализацию. Тем более, что алгоритмы уже реализованы, главное – логика работы.
И все-таки. чем неподходит мое решение? SHA384, S2K-salted + with Rijndael Encryption 256 bits key. Вроде, вполне достаточно, чтобы зашифровать что-то важное небольшого объема и один раз. Трудно наугад тыкаться. Если можете подсказать что-нибудь еще, я был бы очень рад. Вобще, форум приятно удивляет отзывчивостью и грамотным подходом. спасибо.
— Pah (24/11/2006 15:56)   
курс теоретической криптографии сейчас слушаю, хотя он базовый, без особых углублений и не касается криптоанализа (не рассматриваем методы и прочее) .
— SATtva (24/11/2006 16:37)   
От SHA384 я бы отказался в пользу SHA512. По сути SHA384 — это и есть SHA512, но с другими константами и принудительно обрезанным выходом. Так что при переходе на SHA512 Вы не потеряете в скорости, но получите более крупное хэш-значение, которому может найтись применение.
— unknown (24/11/2006 16:39)   
я извиняюсь

да не за что извиняться, ещё раз :-)

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

Я так и подумал. То есть у работодателя требования к криптобезопасности невысокие или он в этом не разбирается.
А потом в результате этого бардака появляются совершенно идиотские клиент-банковские программы, где безопасности – ноль и т.д.

Я старюсь по аналогии с уже готовыми решениями делать свою реализацию. Тем более, что алгоритмы уже реализованы, главное – логика работы.

Я про это и говорю. Хороших программеров мало, хороших математиков и криптографов ещё меньше. Чтобы один и тот же человек это всё сочетал – таких в мире единицы.

Для всех остальных пишутся готовые стандарты, где всё можно посмотреть. Им и надо следовать. Вы мыслите абсолютно в правильном направлении.

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

Очень здорово! Методы криптоанализа самих алгоритмов не нужны, а вот методы анализа протоколов очень были бы полезны, даже необходимы.

Я считаю, что без курсов

"Introduction to Modern Cryptography"
By: Mihir Bellare and Phillip Rogaway

http://www-cse.ucsd.edu/users/mihir/cse207/

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

Надеюсь это поможет Вам в вашей работе.
— Pah (24/11/2006 17:05, исправлен 24/11/2006 17:21)   
если я хотел бы позиционировать себя, как специалист по безопасности, в каком направлении мне стоит двигаться. Курс, на который Вы даете ссылку, конечно был бы очень полезен, если бы его можно было пройти тут, в России. Можно ли с Вами пообщаться например в icq?

увидел, что есть заметки по курсу, качаю, буду читать

скачал, пооткрывал пдфники, ну, очень много математики =))
— unknown (24/11/2006 17:39)   
Курс, на который Вы даете ссылку, конечно был бы очень полезен, если бы его можно было пройти тут, в России.

Не знаю. Может кто подскажет?

скачал, пооткрывал пдфники, ну, очень много математики =))

Там не очень сложная математика (если найдёте ещё простые курсы по дискретке и теории чисел), но это базовый уровень формального анализа протоколов (без него вообще никуда), я именно эти pdf-ники и имел в виду.

Можно ли с Вами пообщаться например в icq?

Да мне некогда. Я консультациями не занимаюсь, на частные вопросы не отвечаю. Этот форум – максимум, что я могу себе позволить.
— SATtva (24/11/2006 19:56)   
Знаю, НИП Информзащита проводит курсы переподготовки и повышения квалификации в сфере ИБ. Об их качестве судить не берусь, слушателем не был.
— Pah (27/11/2006 13:11)   
а в каком городе этот НИП находится? Москва?
— SATtva (27/11/2006 21:07)   
Да, в Москве на Образцова.
www.infosec.ru
— Pah (28/11/2006 13:11)   
спасибо!

Ссылки
[link1] http://en.wikipedia.org/wiki/Key_derivation_function

[link2] http://en.wikipedia.org/wiki/PBKDF2

[link3] http://ru.wikipedia.org/wiki/Радужная_таблица

[link4] http://www.microsoft.com/Rus/Msdn/Magazine/2004/11/Crypto.mspx