Преобразование пароля в ключ симметричного алгоритма
стоит такая задача, что нужно сделать по паролю пользователя (контрольная фраза) доступ к ключу RSA, который предполагается шифровать Rijndael. Где почитать о алгоритмах преобразования или кто что подскажет? Реализация – Windows CryptoAPI
Смотрите варианты с реализацией S2K в OpenPGP:
http://sunsite.icm.edu.pl/gnupg/rfc2440-3.html
ПО аналогии, можно и в WinApi сделать.
Скорее всего CryptoAPI ближе придерживается спецификаций PKCS, так что всё, что касается функций вычисления ключей, можно найти здесь[link1] (общие сведения) и здесь[link2] (конкретно по PKCS#5 v2).
понятно, простое решение s2k – salted, однако, не пойму, как соль поможет предотвратить перебор? И где ее хранить? Ведь если взломщик знает соль и как она прицепляется к ключевой фразе, что ему стоит делать перебор по словарю, затем цеплять соль... может, я чего-то не понимаю?
Он просто не сможет просчитать заранее один словарь для всех вероятных слов паролей и использовать его как базу для последующих взломов.
Для каждого случая придётся все пароли перебирать заново.
Сама "соль" (или "привязка", мне так больше нравится) не является секретным значением. Она передаётся с шифртекстом, или, в Вашем случае, хранится вместе с зашифрованным ключом.
хорошо, тогда каким образом она может повысить криптостойкость системы?
допусти, у нас ключ образует взятием хеш от "пароль|соль". соль доступное значение, а о том, что пароль последовательно конкатенируется с солью, злоумышленник узнал. оно опять же, просто перебирает пароли, конкатенирует с солью, считает хеш, пробует расшифровать. Криптостойкость системы не повысилась. Что я упустил?
unknown выше уже объяснил что соль затрудняет атаки по словарю.
Например, это
http://ru.wikipedia.org/wiki/%..... BB%D0%B8%D1%86%D0%B0[link3]
ааа, понятно. спасибо. реализация оказалась тривиальной =) единственное, помима ключа, если блоки подстановкинадо генерировать. но это уж как-нибудь сам. еще раз спасибо
выбрал такую реализацию:
SHA384 в качестве хеширующего алгоритма, способ s2k – salted. Хеш разбивается на 256 и 128 бит, которые используются в качестве ключа и блока инициализации Rijndael (AES). Есть одно НО! Нормальный способ получения блока подстановки?
А это про что? Как S-block AES посчитать что-ли?
Что-такое блок инициализации и блок подстановки?
Я зная про вектор инициализации (IV), может Вы подразумеваете ещё какую-то другую терминологию?
да, я имею именно в виду IV, т.к. это и есть блок подстановки, насколько я знаю, ведь это алгоритм на сетях Фейстеля, вроде.
Я не знаю, какой терминологией Вы пользуетесь, но IV нигде вроде не называется "блоком подстановки". Он имеет отношение к режиму шифрования (например CBC), а не к "алгоритму на сетях Файстеля".
RIJNDAEL вообще к сетям Файстеля не относится, но даже если бы Вы выбрали файстелевский шифр, это опять же не имело бы никакого отношения к выбору IV.
IV должен выбираться каждый раз случайным (или криптостойко псевдослучайным) и быть равен размеру блока используемого шифра.
Для AES=128 бит (бывает ещё RIJNDAEL, не входящий в стандарт AES с размером блока 256 бит).
P. S. Надеюсь Ваша программа не будет ни в каких серьёзных целях использоваться, это что-то вроде курсовика? Если что, предупредите, чтобы мы ею не пользовались. (Sorry, если что, всего лишь шутка ;-)
извиняюсь за IV, я просто напутал =)
не пойму? Что в ней не так?
Если вы про IV, то я уже понял, что не так делал и выбираю его криптостойко псевдослучайно :))))
насколько я понимаю, IV при расшифровании должен быть таким же, как и при шифровании. грубо говоря, он тоже является часть, необходимой для шифрования. где же его хранить? Совсем запутался =((
Извиняюсь за такое кол-во сообщений, но, все-таки убеждаюсь, что моя схема вполне нормальная
взято отсюда[link4] .
Т.к. IV в моей схеме неявно зависит от пароля, то и злоумышленнику без пароля его НИКАК не узнать.
Еше задумался о стойкости к радужным таблицам. В приведенной выше схеме, злоумышленник не получает доступа к хешу пароля, поэтому не может применять радужные таблицы для взлома пароля. Ему необходимо, либо перебирать пароли, либо перебирать 256 битные хеши в купе с 128 битными IV.
хотелось бы добавить, что игра в "угадайку" при постоянном IV не пройдет тут, так как я шифрую только одно сообщение.
Он является открытым и несекретным. Его можно хранить вместе с сообщением.
Да ничего, здесь все свои. Можете спрашивать конечно, для этого форум и существует.
Моё дело конечно давать советы, а не морализировать, но уж разрешите немного поворчать:
Только-только разузнать про IV, S2K и т.д. и тут же сходу делать программу? Не имея представления о практической (я уж не говорю о теоретической) криптографии даже на базовом уровне?
Хотя обычно достаточно получить деньги за работу, а криптостойкость самоцелью не является. Так, пустые формальные обязательства перед заказчиком, который в 99% случаев всё-рано ни о чём не догадается. Видимость безопасности. И 99% коммерческих программ именно так и пишутся.
(правда если Ваша программа пишется не за деньги, то это ещё более непонятно для чего, хотя это Ваше дело).
я извиняюсь, но я совершенно случайно безопасностью стал заниматься. я пришел на работу кодером, а меня заставили заниматься безопасностью, несмотря на мои доводы. я читал инфу разнообразную по алгоритмам шифрования, в основном статьи, книги не читал. (Кстати, может кто по безопасности посоветует что-нибудь). Я старюсь по аналогии с уже готовыми решениями делать свою реализацию. Тем более, что алгоритмы уже реализованы, главное – логика работы.
И все-таки. чем неподходит мое решение? SHA384, S2K-salted + with Rijndael Encryption 256 bits key. Вроде, вполне достаточно, чтобы зашифровать что-то важное небольшого объема и один раз. Трудно наугад тыкаться. Если можете подсказать что-нибудь еще, я был бы очень рад. Вобще, форум приятно удивляет отзывчивостью и грамотным подходом. спасибо.
курс теоретической криптографии сейчас слушаю, хотя он базовый, без особых углублений и не касается криптоанализа (не рассматриваем методы и прочее) .
От SHA384 я бы отказался в пользу SHA512. По сути SHA384 — это и есть SHA512, но с другими константами и принудительно обрезанным выходом. Так что при переходе на SHA512 Вы не потеряете в скорости, но получите более крупное хэш-значение, которому может найтись применение.
да не за что извиняться, ещё раз :-)
Я так и подумал. То есть у работодателя требования к криптобезопасности невысокие или он в этом не разбирается.
А потом в результате этого бардака появляются совершенно идиотские клиент-банковские программы, где безопасности – ноль и т.д.
Я про это и говорю. Хороших программеров мало, хороших математиков и криптографов ещё меньше. Чтобы один и тот же человек это всё сочетал – таких в мире единицы.
Для всех остальных пишутся готовые стандарты, где всё можно посмотреть. Им и надо следовать. Вы мыслите абсолютно в правильном направлении.
Очень здорово! Методы криптоанализа самих алгоритмов не нужны, а вот методы анализа протоколов очень были бы полезны, даже необходимы.
Я считаю, что без курсов
"Introduction to Modern Cryptography"
By: Mihir Bellare and Phillip Rogaway
http://www-cse.ucsd.edu/users/mihir/cse207/
или аналогичных по уровню, программеров вообще нельзя допускать до написания даже элементарного криптокода.
Надеюсь это поможет Вам в вашей работе.
если я хотел бы позиционировать себя, как специалист по безопасности, в каком направлении мне стоит двигаться. Курс, на который Вы даете ссылку, конечно был бы очень полезен, если бы его можно было пройти тут, в России. Можно ли с Вами пообщаться например в icq?
увидел, что есть заметки по курсу, качаю, буду читать
скачал, пооткрывал пдфники, ну, очень много математики =))
Не знаю. Может кто подскажет?
Там не очень сложная математика (если найдёте ещё простые курсы по дискретке и теории чисел), но это базовый уровень формального анализа протоколов (без него вообще никуда), я именно эти pdf-ники и имел в виду.
Да мне некогда. Я консультациями не занимаюсь, на частные вопросы не отвечаю. Этот форум – максимум, что я могу себе позволить.
Знаю, НИП Информзащита проводит курсы переподготовки и повышения квалификации в сфере ИБ. Об их качестве судить не берусь, слушателем не был.
а в каком городе этот НИП находится? Москва?
Да, в Москве на Образцова.
www.infosec.ru
спасибо!