Какие методы вы используете при написании своих собственных методов криптографии?[закрыто]

StackOverflow https://stackoverflow.com/questions/118374

Вопрос

В течение многих лет, может быть, 10, я был очарован криптографией.Я прочитал книгу о битовом шифровании XOR, и с тех пор меня это зацепило.

Наверное, справедливее будет сказать, что я очарован теми, кто может взломать различные методы шифрования, но я отвлекся.

Ближе к делу - какие методы вы используете при написании криптографии?Хороша ли обфускация в криптографии?

Я использую XOR-шифрование на основе двух ключей, различные методы хеширования (SHA1) для ключей и простые вещи, такие как переворачивание строк здесь и там и т.д.

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

Чтобы уточнить - у меня нет желания использовать это в каком-либо производственном коде или в любом моем коде, если уж на то пошло.Мне интересно узнать, как это работает, играя, а не изобретая велосипед.:)

Йен

Это было полезно?

Решение

Противоречить тому, что все остальные говорили до сих пор, дерзай! Да, в вашем коде могут быть уязвимости, связанные с переполнением буфера, и он может быть медленным, глючным и т.д., Но вы делаете это для ВЕСЕЛЬЕ!Я полностью понимаю, какое удовольствие можно получить, играя с криптографией.

При этом криптография вообще не основана на запутывании (или, по крайней мере, не должна быть).Хорошая криптография будет продолжать работать, даже один раз Ева с трудом просмотрел ваш запутанный код и полностью понимает, что происходит.Т. Е.:Во многих газетах есть код подстановки головоломки, которые читатели пытаются разгадать за завтраком.Если бы они начали делать такие вещи, как переворачивание всей строки, да, это было бы сложнее, но Джо Ридер все равно смог бы это сломать, неве туохтив гниб длот.

Хорошая криптография основана на проблемах, которые считаются (пока не доказанными, AFAIK) действительно сложными.Примеры этого включают факторинг простых чисел, поиск журнала, или действительно любой другой NP-полный проблема.

[Править:щелчок, ни то, ни другое не является доказанный NP-полный.Все они недоказанны, но отличаются друг от друга.Надеюсь, вы все еще понимаете мою точку зрения:криптография основана на односторонних функциях.Это операции, которые легко выполнить, но трудно отменить.т.е. умножьте два числа и найдите простые множители произведения.Хороший улов tduehr ( тдуэр )]

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

Примечание:С учетом сказанного, некоторые алгоритмы добавляют дополнительные особенности (например, разделение строк), чтобы значительно усложнить их грубое форсирование.Часть меня чувствует, что я где-то читал это со ссылкой DES, но я в это не верю...[ПРАВИТЬ:Видишь, я был прав 5 - й абзац настоящей статьи для ссылки на перестановки как на бесполезные.]

Кстати:Если вы не нашли его раньше, я бы предположил, что ЧАЙ/XTEA/XXTEA интерес представлял бы ряд алгоритмов.

Другие советы

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

Возьмите книгу Брюса Шнайера Прикладная криптография и прочтите его внимательно.

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

Выберите также текущие лучшие стандарты для криптографических алгоритмов.AES для шифрования, SHA256 для хеширования.Эльгамал для открытого ключа.

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

Редактировать:Чтобы расширить новую информацию, приведенную в правке.Подавляющее большинство современной криптографии включает в себя множество сложных математических операций.Даже блочные шифры, которые просто кажутся всевозможным перебором битов, одинаковы.

В этом случае прочтите "Прикладная криптография", а затем получите книгу Справочник по прикладной криптографии который вы можете скачать бесплатно.

Оба они содержат много информации о том, что входит в криптографический алгоритм.Некоторое объяснение таких вещей, как дифференциальный и линейный криптоанализ.Другим ресурсом является Ситесер в котором есть ряд научных работ, на которые ссылаются обе эти книги, для скачивания.

Криптография - сложная область с огромной академической историей, в которой можно продвинуться куда угодно.Но если у вас есть необходимые навыки, это весьма полезно, как я убедился.

Выполняйте упражнения здесь:

http://www.schneier.com/crypto-gram-9910.html#SoYouWanttobeaCryptographer

Для начала взгляните на документ об атаке кубом (http://eprint.iacr.org/2008/385) и попробуйте сломать с его помощью некоторые алгоритмы.После того как вы познакомитесь со взломом криптографических схем, вы станете лучше создавать их.

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

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

хочу добавить пару вещей:

  • Кодировка - это нет шифрование.Недавно я обошел систему аутентификации веб-сайта из-за недопонимания разработчиков.

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

  • A ^ B = C.Вы заявили, что работаете с шифрованием XOR с двумя ключами.При создании криптосистемы всегда проверяйте, что ваши шаги действительно чего-то достигают.в случае с двумя ключами XOR вы на самом деле просто используете другой ключ.

  • A^A = 0.Шифрование XOR очень слабо защищено от известных или выбранных атак открытым текстом.Если вы знаете весь или часть открытого текста, вы можете получить весь или часть ключа.Открытый текст ^ Зашифрованный текст = Ключ

  • Еще одна хорошая книга для чтения - "Книга кодов" Саймона Сингха.В нем рассказывается о некоторых аспектах истории криптографии и методах взлома большинства криптосистем, которые он рассматривает.

  • Два алгоритма для изучения (изучите их и историю, стоящую за ними):

    • 3ДЭС:да, он устарел, но это хорошая отправная точка для изучения fiestel и блочных шифров, и в его создании есть несколько хороших уроков от DES.Кроме того, полезно изучить обоснование используемой методологии шифрования, дешифрования и расшифровывания.
    • RSA:Здесь я собираюсь показать свой внутренний математический гик.Вероятно, это самый простой алгоритм шифрования, используемый сегодня.Методы его взлома известны (достаточно ввести ключ), но вычислительно чрезвычайно сложны.m^ d mod n, где n = p*q (p и q простые числа) и gcd (d, n)= 1.Немного теории групп / чисел объясняет, почему это нелегко изменить, не зная p и q.В моем курсе теории чисел мы доказали теорию, стоящую за этим, по меньшей мере полудюжиной способов.

Записка для Фирефли:

простая факторизация и дискретный логарифм не являются NP-полными или NP-трудными, если уж на то пошло.Они оба неизвестны по сложности.Я полагаю, вы получили бы приличную известность, просто разгадав эту часть.Тем не менее, остальная часть вашего утверждения верна.Хорошая криптография основана на вещах, которые легко сделать, но трудно отменить без ключа.

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

НЕ НАДО!

Даже у экспертов есть очень трудно понять, правильно ли они все поняли.За пределами класса crypto CS просто используйте код других людей.Портируйте код только в том случае, если вам это абсолютно необходимо, а затем протестируйте его на известном хорошем коде.

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

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

В общем, большинство методов обфускации и простого хеширования (а я сам сделал немало таких) очень легко взломать.Это не значит, что с ними неинтересно экспериментировать и узнавать о них больше.

Список книг по криптографии (из Википедии)

Этот вопрос привлек мое внимание, потому что сейчас я перечитываю Криптономикон автор: Нил Стивенсон, что само по себе неплохой обзор, несмотря на то, что это роман...

Чтобы повторить за всеми остальными (для потомков), никогда не внедряйте свою собственную криптографию.Используйте библиотеку.

Тем не менее, вот статья о том, как реализовать DES:

http://scienceblogs.com/goodmath/2008/09/des_encryption_part_1_encrypti.php

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

Кроме того, получите и прочтите Прикладная криптография.Это великая книга.

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

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

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

Если вы просто хотите посмотреть, как это делается (изучите существующие реализации в коде) Я бы предложил взглянуть на Библиотека Crypto++ даже если вы обычно не программируете на C ++, это хорошее представление о темах и частях реализации шифрования.

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

В этом году я присутствовал на сессии по безопасности кода в Aus TechEd.Рассказывая об алгоритме AES в .Net и о том, как он был выбран, ведущий (Роки Хекман) рассказал нам об одном из методов, которые использовались для взлома предыдущего шифрования.Кому-то удалось использовать тепловизионную камеру для записи тепловой сигнатуры процессора, пока он шифровал данные.Они смогли использовать эту запись, чтобы выяснить, какие типы вычислений выполнял чип, а затем перепроектировать алгоритм.У них было слишком много свободного времени, и я совершенно уверен, что никогда не буду достаточно умен, чтобы побеждать таких людей!:(

  • Примечание:Я искренне надеюсь, что передал историю правильно, если нет - ошибка, скорее всего, моя, а не упомянутого ведущего.

Уже давно известно, что вам не следует использовать в продукте отечественную криптографию.Но я прочитал ваш вопрос, и вы четко заявляете, что делаете это просто для развлечения.По-моему, это похоже на истинного гика / хакера / академика.Вы знаете, что это работает, вы хотите знать, почему это работает, и попытаться увидеть, сможете ли вы заставить это работать.

Я полностью поддерживаю это и делаю то же самое со многими программами, которые я написал просто для развлечения.Я предлагаю прочитать этот пост (http://rdist.root.org/2008/09/18/dangers-of-amateur-cryptography/) в блоге под названием "rootlabs".В этом посте есть ряд ссылок, которые должны показаться вам очень интересными.Парень, интересующийся математикой / криптографией, имеющий степень доктора компьютерных наук и работающий в Google, решил написать серию статей по программированию криптографии.Он допустил несколько неочевидных ошибок, на которые указал отраслевой эксперт Нейт Лоусон.

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

Желаю удачи!

Я согласен с тем, что не стоит заново изобретать колесо.

И помните, безопасность через неизвестность - это вообще не безопасность.Если какая-либо часть ваших механизмов безопасности использует фразу "никто никогда в этом не разберется!", это небезопасно.Подумайте об AES - алгоритм общедоступен, так что все знает именно так как это работает, и все же никто не может это нарушить.

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

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

Я согласен со всеми ответами, обоими ".не пишите свой собственный криптоалгоритм для производственного использования" и "черт возьми, да, дерзай ради собственного назидания", но это напоминает мне кое о чем, что, как мне кажется, часто пишет достопочтенный Брюс Шнайер.:"кому-то легко создать что-то, что он сам не может сломать ".

Единственная криптография, которую неспециалисты должны иметь возможность использовать правильно, - это простые одноразовые шифры.

CipherTextArray = PlainTextArray ^ KeyArray;

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

Я не хочу углубляться в правильные ответы, которые уже были даны (не делайте этого для производства;простого разворота недостаточно;плохая запутанность;и т.д.).

Я просто хочу добавить принцип Керкоффа: "Криптосистема должна быть безопасной, даже если все, что касается системы, кроме ключа, является общедоступным".

Пока я занимаюсь этим, я также упомяну принцип Бергофски (цитируется Дэном Брауном в Digital Fortress).:"Если компьютер перепробовал достаточное количество клавиш, математически было гарантировано, что он найдет нужную.Безопасность кода заключалась не в том, что его ключ доступа невозможно было найти, а скорее в том, что у большинства людей не было времени или оборудования, чтобы попробовать ".
Только это по сути своей неправда;Это выдумал Дэн Браун.

Отвечая на запросы PhirePhly и tduehr о сложности факторинга:

Легко видеть, что факторинг осуществляется в формулах NP и coNP.Что нам нужно увидеть, так это то, что задачи "учитывая n и k, найдите простой множитель p из n с 1 < p <= k" и "показать, что такого p не существует" оба находятся в NP (первый является вариантом решения задачи факторинга, второй является вариантом решения дополнения).

Первая проблема:учитывая возможное решение p, мы можем легко (т. е.за полиномиальное время) проверьте, является ли 1 < p <= k и делит ли p на n.Решение p всегда короче (по количеству битов, используемых для его представления), чем n, поэтому факторинг выполняется в NP.

Вторая проблема:учитывая полную простую факторизацию (p_1, ..., p_m), мы можем быстро проверить, что их произведение равно n, и что ни одно из них не находится между 1 и k.Мы знаем, что ПРОСТЫЕ ЧИСЛА находятся в P, поэтому мы можем проверить простоту каждого p_i за полиномиальное время.Поскольку наименьшее простое число равно 2, в любой допустимой факторизации имеется не более log_2(n) простых множителей.Каждый коэффициент меньше n, поэтому они используют не более O(n log(n)) битов.Таким образом, если n не имеет простого множителя между 1 и k, существует короткое (размером с полином) доказательство, которое может быть быстро проверено (за полиномиальное время).

Таким образом, факторинг заключается в NP и coNP.Если бы оно было NP-полным, то NP было бы равно coNP, что часто считается ложным.Можно считать это доказательством того, что факторинг действительно не является NP-полным;Я бы предпочел просто дождаться доказательств ;-)

Обычно я начинаю с получения степени доктора философии.Степень по теории чисел.Затем я провожу исследование продолжительностью около десяти лет и сопровождаю его множеством публикаций и рецензий.Что касается методов, которые я использую, то они отличаются от моих исследований и от исследований моих коллег.Иногда, когда я просыпаюсь посреди ночи, я разрабатываю новую технику, внедряю ее, нахожу в ней пробелы (с помощью моих коллег по теории чисел и информатике), а затем совершенствуюсь на основе этого.

Если вы дадите мыши алгоритм...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top