Какие методы вы используете при написании собственных методов криптографии?
В течение многих лет, может быть, 10 лет, я был очарован криптографией. Я прочитал книгу о шифровании на основе бит XOR и с тех пор подключился.
Я думаю, более справедливо сказать, что меня увлекают те, кто может нарушать различные методы шифрования, но я отвлекаюсь.
К пункту - какие методы вы используете при написании криптографии? Является ли обфускация хорошей в криптографии?
Я использую два ключа XOR-шифрования, различные методы хэширования (SHA1) на клавишах и простые вещи, такие как реверсирование строк здесь и там и т.д.
Мне интересно узнать, что думают другие, и попробовать, когда вы пишете метод шифрования "не из-за коробки". Кроме того, будет интересна любая информация о том, как профессионалы могут "разбить" различные методы криптографии.
Чтобы уточнить - у меня нет желания использовать это в любом производственном коде или любом моем коде. Мне интересно узнать, как это работает, обойдя, а не изобретая колесо.:)
Ян
Ответы
Ответ 1
Чтобы противоречить тому, что все остальные сказали до сих пор, пойти на это! Да, ваш код может иметь уязвимости переполнения буфера в нем и может быть медленным, багги и т.д., но вы делаете это для FUN! Я полностью понимаю рекреационное наслаждение, обнаруженное при игре с криптографией.
При этом криптография вообще не основана на обфускации (или, по крайней мере, не должна быть). Хороший крипто будет продолжать работать даже один раз Ева провалилась сквозь ваш запутанный код и полностью понимает, что происходит. IE: Во многих газетах есть код замены головоломки, которые читатели пробуют и ломают завтрак. Если бы они начали делать такие вещи, как реверсирование всей строки, да, это было бы сложнее, но Джо Ридер все равно мог бы ее сломать, неважно tuohtiw gnieb dlot.
Хорошее шифрование основано на проблемах, которые предположительно (пока не доказано, AFAIK) действительно сложны. Примеры этого включают факторинговые простые числа, поиск журнала, или действительно любая другая проблема NP-complete.
[Edit: snap, ни один из них не является доказано NP-complete. Они все недоказанные, но разные. Надеюсь, вы все еще видите мою точку зрения: криптография основана на односторонних функциях. Это операции, которые легко сделать, но трудно отменить. т.е. умножить два числа и найти простые множители произведения. Хороший улов tduehr]
Больше сил для игры с действительно крутой отраслью математики, просто помните, что криптография основана на вещах, которые сложны, а не сложны. Многие криптоалгоритмы, как только вы их действительно понимаете, разумно просты, но все же работают, потому что они основаны на чем-то, что сложно, а не просто на переписке.
Примечание. С учетом сказанного некоторые алгоритмы добавляют лишние причуды (например, чередование строк), чтобы заставить грубый заставить их намного сложнее. Часть меня чувствует, что я читаю это где-то, ссылаясь на DES, но я не верю... [EDIT: Я был прав, см. 5-й параграф этой статьи для ссылки на перестановки как бесполезные.]
BTW: Если вы этого еще не нашли, я бы предположил TEA/XTEA/XXTEA будет интересна серия алгоритмов.
Ответ 2
Лучший совет, который я могу вам дать, - это противостоять искушению изобретать колесо. Криптография сложнее, чем вы думаете.
Получите книгу Брюса Шнайера Прикладная криптография и внимательно прочитайте ее.
Ответ 3
Правильный ответ - не делать что-то подобное. Лучший способ - выбрать одну из множества криптографических библиотек для этой цели и использовать их в своем приложении. Безопасность через неясность никогда не срабатывает.
Подберите текущие верхние стандарты для криптографических алгоритмов. AES для шифрования, SHA256 для хэширования. Elgamal для открытого ключа.
Чтение Прикладной криптографии также является хорошей идеей. Но подавляющее большинство книг - это детали реализаций, которые вам не понадобятся для большинства приложений.
Изменить: развернуть новую информацию, указанную в редакции. Подавляющее большинство нынешней криптографии включает в себя множество сложной математики. Даже блок-шифры, которые просто кажутся всевозможными мутациями вокруг бит, одинаковы.
В этом случае затем прочитайте Прикладную криптографию, а затем получите книгу Справочник по прикладной криптографии, которую вы можете скачать бесплатно.
У обоих из них есть много информации о том, что входит в алгоритм криптографии. Некоторое объяснение таких вещей, как дифференциальный и линейный криптоанализ. Другой ресурс Citeseer, который содержит ряд академических работ, на которые ссылаются обе эти книги для скачивания.
Криптография - это сложное поле с огромной академической историей, чтобы идти куда угодно. Но если у вас есть навыки, это очень полезно, как я его нашел.
Ответ 4
Выполняйте упражнения здесь:
http://www.schneier.com/crypto-gram-9910.html#SoYouWanttobeaCryptographer
Для начала просмотрите бумагу для куба (http://eprint.iacr.org/2008/385) и попробуйте сломать с ней некоторые алгоритмы. После того, как вы знакомы с нарушением криптографических схем, вы станете лучше их создавать.
Что касается производственного кода, я повторю уже сказанное: просто используйте то, что доступно на рынке, так как все основные схемы уже прошли через несколько циклов криптоанализа.
Ответ 5
Все приведенные выше советы звучат. Обфускация плохая. Не помещайте свой собственный крипто в производство, не позволяя публике биться на нем какое-то время.
несколько вещей, которые нужно добавить:
-
Кодирование - это не шифрование. Недавно я обошел систему аутентификации веб-сайта из-за непонимания разработчиков здесь.
-
Узнайте, как сломать даже самые основные системы. Вы будете удивлены, как часто полезно знание простых шифров вращения.
-
A ^ B = C. Вы заявили, что работаете с двумя ключами шифрования XOR. При построении криптосистемы всегда проверяйте, что ваши шаги на самом деле что-то выполняют. в двух ключевых случаях XOR вы действительно используете только другой ключ.
-
A ^ A = 0. XOR-шифрование очень слабо против известных или выбранных атак с открытым текстом. Если вы знаете все или часть открытого текста, вы можете получить все или часть ключа. Plaintext ^ Cyphertext = Key
-
Еще одна хорошая книга для чтения - Кодовая книга Симона Сингха. В нем рассказывается об истории криптографии и методах устранения большинства криптосистем, которые он охватывает.
-
Два алгоритма обучения (узнать их и историю за ними):
- 3DES: да, это устарело, но это хорошая отправная точка для обучения фиестерам и блочным шифрам, и есть несколько хороших уроков в этом создании из DES. Кроме того, аргументы в пользу используемой методологии шифрования, дешифрования и шифрования - это хорошая вещь для изучения.
- RSA: Я собираюсь показать свою внутреннюю математику. Вероятно, самый простой алгоритм шифрования, который используется сегодня. Способы его разлома известны (просто фактор ключа), но вычислительно чрезвычайно сложно. m ^ d mod n, где n = p * q (p и q prime) и gcd (d, n) = 1. Немного теории групп/чисел объясняет, почему это не так легко изменить, не зная p и q. В моем курсе теории чисел мы доказали теорию, лежащую в основе этого, по крайней мере, полдюжины способов.
Примечание для PhirePhly:
простая факторизация и дискретный журнал не являются NP-Complete, или NP-Hard, если на то пошло. Они оба неизвестны по сложности. Я предполагаю, что вы получите достойную славу, просто поняв, что эта часть. Тем не менее, остальная часть вашего утверждения верна. Хорошее шифрование основано на вещах, которые легко сделать, но трудно отменить без ключа.
Ответ 6
Если вы не станете экспертом в этой области, не используйте самодельный криптографический продукт в продуктах. Достаточно сказано.
Ответ 7
DO NOT!
Даже экспертам очень сложно узнать, правильно ли они поняли. Вне класса Crypto CS просто используйте код других людей. Код порта, только если вы абсолютно должны, а затем проверить сот из него с хорошим кодом.
Ответ 8
Большинство экспертов согласны с тем, что открытость более ценна, чем обфускация при разработке криптографических методов и алгоритмов.
Другими словами, каждый, похоже, способен разработать новый код, который каждый может сломать, кроме них. Лучшая криптография выживает при проверке наличия алгоритма и некоторых зашифрованных сообщений, и самые лучшие крипто-хакеры пытаются его сломать.
В общем, большинство методов обфускации и простого хэширования (и я сделал немало из них сам) очень легко сломаны. Это не значит, что им не интересно экспериментировать и учиться.
Список книг по криптографии (из Википедии)
Этот вопрос попался мне на глаза, потому что я сейчас перечитываю Cryptonomicon Нила Стивенсона, что неплохое описание сам, хотя это роман...
Ответ 9
Чтобы повторить всех остальных (для потомков), никогда не выполняйте свой собственный криптографический код. Используйте библиотеку.
Итак, вот статья о том, как реализовать DES:
http://scienceblogs.com/goodmath/2008/09/des_encryption_part_1_encrypti.php
Пермутация и шум имеют решающее значение для многих алгоритмов шифрования. Суть заключается не столько в том, чтобы скрывать вещи, сколько в том, чтобы добавить шаги к процессу, который делает атаки грубой силы нецелесообразными.
Кроме того, получите и прочитайте Прикладная криптография. Это отличная книга.
Ответ 10
Согласиться с другими плакатами. Не делайте этого, если вы не пишете на нем бумагу и не должны делать какие-либо исследования или что-то в этом роде.
Если вы думаете, что знаете много об этом, заходите и прочитайте книгу Applied Cryptography. Я знаю много математики, и эта книга все еще пнула мою задницу. Вы можете читать и анализировать его псевдокод. У книги также есть тонна ссылок на спине, чтобы выровнять глубже, если хотите.
Crypto - одна из тех вещей, которые многие люди считают очень крутыми, но фактическая математика за концепциями выходит за их пределы. Я давно решил, что для меня не стоит умственных усилий, чтобы добраться до этого уровня.
Если вы просто хотите посмотреть, как это делается (изучите существующие реализации в коде), я бы предложил заглянуть в Crypto ++ library даже если вы обычно не кодируете код на С++, это хороший обзор тем и частей внедрения шифрования.
У Брюса также есть хороший список ресурсов, который вы можете получить со своего сайта.
Ответ 11
В эти годы я посещал сеанс безопасности кода Aus TechEd. Говоря об алгоритме AES в .Net и о том, как он был выбран, ведущий (Rocky Heckman) рассказал нам об одном из тех методов, которые были использованы для нарушения предыдущего шифрования. Кто-то сумел использовать тепловизионную камеру для записи тепловой сигнатуры процессора, в то время как она шифровала данные. Они смогли использовать эту запись, чтобы выяснить, какие типы вычислений выполняет чип, а затем перепроектировать алгоритм. У них было слишком много времени на их руках, и я уверен, что никогда не буду достаточно умен, чтобы победить таких людей!: (
- Примечание: Я искренне надеюсь, что правильно передал историю, если нет - ошибка, скорее всего, моя, а не то, о чем говорил докладчик.
Ответ 12
Уже избили до смерти, что вы не должны использовать домашний криптографический продукт в продукте. Но я прочитал ваш вопрос, и вы четко заявляете, что делаете это просто для удовольствия. Похоже на истинного выродка/хакера/академического духа для меня. Вы знаете, что это работает, вы хотите знать, почему это работает, и попытайтесь выяснить, можете ли вы заставить его работать.
Я полностью поддерживаю это и делаю то же самое со многими программами, которые я написал просто для удовольствия. Я предлагаю прочитать этот пост (http://rdist.root.org/2008/09/18/dangers-of-amateur-cryptography/) в блоге под названием "rootlabs". В посте это серия ссылок, которые вы должны найти очень интересными. Парень, интересующийся математикой/криптографией с доктором философии в области компьютерных наук, и который работает в Google, решил написать серию статей по программированию криптографии. Он сделал несколько неочевидных ошибок, на которые указал эксперт по промышленности Нейт Лоусон.
Я предлагаю вам прочитать его. Если это не побуждает вас продолжать попытки, это, несомненно, все равно научит вас чему-то.
Удачи!
Ответ 13
Я согласен с тем, что не изобретаю колесо повторно.
И помните, что безопасность через безвестность - это не безопасность. Если какая-либо часть ваших механизмов безопасности использует фразу "никто никогда не узнает об этом!", Она не защищена. Подумайте об AES - алгоритм является общедоступным, поэтому каждый точно знает, как он работает, но никто не может его сломать.
Ответ 14
В соответствии с другими ответами - разработка схемы шифрования определенно для экспертов, и любая новая предлагаемая криптосистема действительно нуждается в проверке общественности для любой разумной надежды на подтверждение и уверенность в ее надежности. Однако внедрение существующих алгоритмов и систем - гораздо более практичная работа "для удовольствия", и все основные стандарты имеют хорошие тестовые векторы, которые помогают доказать правильность вашей реализации.
С учетом сказанного, для производственных решений существующие реализации многочисленны, и обычно не должно быть причин, по которым вам нужно будет внедрить систему самостоятельно.
Ответ 15
Я согласен со всеми ответами: "Не пишите свой собственный криптоалгоритм для использования в производстве" и "черт возьми, идите на это для своего собственного назидания", но мне напоминают о чем-то, что я считаю преподобным Брюсом Шнейер часто пишет: " легко создать кого-то, что они сами не могут сломать".
Ответ 16
Единственная криптография, которую не специалисты могут рассчитывать на право, - это простые простые шифры One Time Pad.
CipherTextArray = PlainTextArray ^ KeyArray;
Кроме того, все, что стоит посмотреть (даже для отдыха), потребует высокой степени математики.
Ответ 17
Я не хочу углубляться в правильные ответы, которые уже были даны (не делайте этого для производства, простое разворот недостаточно, обфускация плохая и т.д.).
Я просто хочу добавить принцип Kerckoff: "Криптосистема должна быть безопасной, даже если все о системе, кроме ключа, является общедоступным".
Пока я нахожусь в этом, я также упомянул принцип Бергофского (цитируется Дэном Брауном в Digital Fortress): "Если компьютер пробовал достаточно ключей, было бы гарантировано математически найти правильный. Безопасность кодов не была что его прокси-ключ был неоправданным, а скорее, что у большинства людей не было времени или оборудования, чтобы попробовать".
Только это по своей сути не верно; Дэн Браун сделал это.
Ответ 18
Отвечая на 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. Мы знаем, что PRIMES находится в P, поэтому мы можем проверить правильность каждого p_i в полиномиальное время. Поскольку наименьшее простое число равно 2, в любой допустимой факторизации не более чем log_2 (n) простых факторов. Каждый коэффициент меньше n, поэтому они используют не более O (n log (n)) бит. Таким образом, если n не имеет простого коэффициента между 1 и k, существует короткое (полиномиальное) доказательство, которое можно быстро проверить (в полиномиальное время).
Таким образом, факторинг находится в NP и coNP. Если он был NP-полным, то NP будет равен coNP, что часто считается ложным. Это можно считать доказательством того, что факторинг действительно не является NP-полным; Я предпочел бы просто ждать доказательства; -)
Ответ 19
Обычно я начинаю с получения кандидатской диссертации по теории чисел. Затем я занимаюсь примерно десятилетним исследованием и слежу за этим с большим количеством публикаций и экспертной оценки. Что касается методов, которые я использую, они разные из моих исследований и моих сверстников. Иногда, когда я просыпаюсь посреди ночи, я разработаю новую технику, реализую ее, нахожу в ней дыры (с помощью моей теории чисел и аналогов компьютерных наук), а затем уточняю оттуда.
Если вы даете мыши алгоритм...