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

Как упоминалось в более раннем ответе, это поведение известно как с именем access по объекту window . Значение атрибута name для некоторых элементов и значение атрибута id для всех элементов становятся доступными как свойства глобального объекта window. Они известны как именованные элементы. Поскольку window является глобальным объектом в браузере, каждый именованный элемент будет доступен как глобальная переменная.

Это было первоначально добавлено Internet Explorer и в конечном итоге было реализовано всеми другими браузерами просто для совместимости с сайтами которые зависят от этого поведения. Интересно, что Gecko (движок рендеринга Firefox) решил реализовать это только в режиме quirks , тогда как другие механизмы рендеринга оставили его в стандартном режиме.

Однако, с Firefox 14, Firefox теперь поддерживает именованный доступ к объекту window в стандартном режиме. Почему они изменили это? Оказывается, все еще есть много сайтов, которые полагаются на эту функциональность в стандартном режиме. Microsoft даже выпустила маркетинговую демонстрацию , которая предотвратила демонстрацию работы в Firefox.

Недавно Webkit рассмотрел противоположное , отменив именованный доступ на window объект только для режима quirks. Они решили против этого по тем же соображениям, что и Гекко.

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

Почему? В этой статье можно суммировать рассуждения о том, почему глобальные переменные являются плохими . Проще говоря, наличие множества дополнительных глобальных переменных приводит к большему количеству ошибок. Допустим, вы случайно набрали имя var и случайно набрали id узла DOM, SURPRISE!

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

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

Как упоминалось в других ответах, используйте document.getElementById, чтобы получить ссылку на узел DOM своим id. Если вам нужно получить ссылку на узел по его атрибуту name, используйте document.querySelectorAll.

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

Если вам интересно, я более подробно расскажу об этом в своем блоге - http://tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/ .

16
задан laalto 15 July 2009 в 06:38
поделиться

19 ответов

Для противоречия, что все остальные сказали до сих пор, , идут для него! Да, Ваш код мог бы иметь уязвимости переполнения буфера в нем, и может быть медленным, ошибочным, и т.д., но Вы делаете это для [1 119] ЗАБАВА ! Я полностью понимаю развлекательное удовольствие, найденное в игре с crypto.

Однако криптография не основана на путанице вообще (или по крайней мере не должен быть). Хороший crypto продолжит работать, даже однажды , Eve сильно ударил через Ваш запутываемый код и полностью понимает то, что продолжается. IE: Много газет имеют код замены загадки, которые читатели пытаются повредить за завтраком. Если бы они начали делать вещи как инвертирование целой строки, то да, это было бы более твердо, но Joe Reader все еще был бы в состоянии повредить его, фирн tuohtiw gnieb dlot.

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

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

[еще 1115] питание Вам для игры вокруг с действительно прохладным ответвлением математики, просто помните, что crypto основан на вещах, которые тверды, не сложный. Много crypto алгоритмов, как только Вы действительно понимаете их, mindbogglingly простой, но все еще работают, потому что они основаны на чем-то, что твердо, не просто передвинув буквы.

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

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

24
ответ дан 30 November 2019 в 15:02
поделиться

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

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

-1
ответ дан 30 November 2019 в 15:02
поделиться

Ответ на 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 журнал (n)) биты. Таким образом, если n не имеет простого множителя между 1 и k, существует короткое (полиномиальный размер) доказательство, которое может быть проверено быстро (в полиномиальное время).

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

0
ответ дан 30 November 2019 в 15:02
поделиться

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

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

, В то время как я в нем, я также упомяну Принцип Bergofsky (заключенный в кавычки Dan Brown в Цифровой Крепости): "Если компьютер попробовал достаточно ключей, он, как математически гарантировали, найдет правильный. code’s безопасность не была то, что ее ключ доступа был unfindable, а скорее что у большинства людей didn’t есть время или оборудование для попытки".
Только это по сути не верно; Dan Brown составил его.

0
ответ дан 30 November 2019 в 15:02
поделиться

Единственная криптография, что не эксперты должны быть в состоянии ожидать разбираться, является костью простые шифры Одноразового шифра.

CipherTextArray = PlainTextArray ^ KeyArray;

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

0
ответ дан 30 November 2019 в 15:02
поделиться

Я соглашаюсь со всеми ответами, и" не пишут Ваш собственный crypto алгоритм для производственного использования" и" ад да, пойдите для него для Вашего собственного наставления ", но мне напоминают о чем-то, что я полагаю, что почтенный Bruce Schneier часто пишет: " для кого-то легко создать что-то, что они сами не могут повредить".

1
ответ дан 30 November 2019 в 15:02
поделиться

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

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

1
ответ дан 30 November 2019 в 15:02
поделиться

Я соглашаюсь с не перестраиванием колеса.

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

1
ответ дан 30 November 2019 в 15:02
поделиться

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

  • Примечание: Я искренне надеюсь, что передал историю правильно, если не - ошибка является вероятной шахтой, не, тот из предъявителя упомянул.
2
ответ дан 30 November 2019 в 15:02
поделиться

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

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

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

Всего наилучшего

2
ответ дан 30 November 2019 в 15:02
поделиться

Для повторения всех остальных (для потомства) никогда не реализуйте собственный crypto. Пользуйтесь библиотекой.

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

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

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

кроме того, доберитесь и читайте Прикладная Криптография . Это - замечательная книга.

2
ответ дан 30 November 2019 в 15:02
поделиться

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

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

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

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

Этот вопрос привлек мое внимание, потому что я в настоящее время перечитываю Cryptonomicon Neal Stephenson, который не является самим плохим обзором, даже при том, что это - роман...

3
ответ дан 30 November 2019 в 15:02
поделиться

не ДЕЛАЮТ!

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

3
ответ дан 30 November 2019 в 15:02
поделиться

Если Вы не (становитесь) экспертом в поле, не используйте самодельный crypto в производственных продуктах. Достаточно сказанный.

4
ответ дан 30 November 2019 в 15:02
поделиться

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

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

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

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

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

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

  • Другая хорошая книга для чтения является Сборником кодов Simon Singh. Это пробегается через часть истории криптографии и методов для повреждения большинства криптографических систем, которые он покрывает.

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

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

А отмечают PhirePhly:

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

6
ответ дан 30 November 2019 в 15:02
поделиться

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

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

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

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

9
ответ дан 30 November 2019 в 15:02
поделиться

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

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

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

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

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

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

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

15
ответ дан 30 November 2019 в 15:02
поделиться

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

Получают книгу Bruce Schneier Прикладная Криптография и читают его тщательно.

34
ответ дан 30 November 2019 в 15:02
поделиться

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

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

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

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

у Bruce также есть польза список ресурсов , можно добраться от его сайта.

2
ответ дан 30 November 2019 в 15:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: