Что должны знать веб-программисты о криптографии? [закрыто]

Должны ли программисты, которые создают веб-сайты /веб-приложения, понимать криптографию? Я понятия не имею, как работают большинство криптографических алгоритмов, и я действительно не понимаю различий между md5 /des /aes /etc. Кто-нибудь из вас нашел необходимость в глубоком понимании криптографии?

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

Вы когда-нибудь находили необходимость использовать криптографию в веб-программировании помимо этих двух простых примеров?

28 голосов | спросил davidhaskins 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 16:59:53 +0300000000pmThu, 24 Feb 2011 16:59:53 +030011 2011, 16:59:53

7 ответов


42

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

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

Почему? Потому что иначе люди вводят в заблуждение, думая, что:

  • AES-256 - это «отличное шифрование», несмотря на то, что он использует его в режиме ECB или использует неслучайные значения IV и т. д. (В некоторых режимах неслучайные, но уникальные IVs в порядке. другие, не так много.)
  • Они могут использовать один и тот же симметричный ключ для шифрования нескольких сообщений (или, что еще хуже, хранить симметричный ключ в коде для непосредственного использования).
    • Они могут даже решить использовать ключевую фразу в качестве ключа напрямую, без использования каких-либо функций деривации ключей.
  • Они могут использовать RSA для прямого шифрования данных.
  • Они могут просто «солить и MD5» свои пароли, чтобы они были в безопасности. (Если вы считаете, что таблицы радуги являются самым слабым звеном, снова подумайте .)

Чтобы быть на одной странице, ни один из вышеперечисленных элементов не подходит . Если вы этого не понимаете, вам не следует прикасаться к криптому с 10-футовым полюсом! (AES-256 это отличное шифрование, но только если вы используете его правильно. «Это не тот размер, который имеет значение, это то, что вы делаете с ним».::))

О каких функциях высокого уровня я говорю? Я лично рекомендую использовать OpenPGP (для данных в состоянии покоя) или SSL (для данных в движении). Эти протоколы жестко указывают правильное использование асимметричных, симметричных и хэш-алгоритмов. Например, с OpenPGP:

  • Он не использует RSA для шифрования данных напрямую, но вместо этого генерирует случайный сеансовый (симметричный) ключ для каждого сообщения (это важно) и использует RSA для шифрования этого сеансового ключа.
ответил Chris Jester-Young 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 20:17:32 +0300000000pmThu, 24 Feb 2011 20:17:32 +030011 2011, 20:17:32
14

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

Основные области безопасности, о которых вы, безусловно, должны знать как веб-разработчик:

  1. SQL-инъекция. Вероятно, это самая опасная дыра, которую веб-разработчик может пробить в системе.
  2. Межсайтовый скриптинг и файлы cookie.
  3. Spambots и captchas.
  4. SQL-инъекция. Невозможно подчеркнуть, насколько это важно.
ответил biziclop 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 17:06:32 +0300000000pmThu, 24 Feb 2011 17:06:32 +030011 2011, 17:06:32
4

Я помню, как этот разговор назывался Что каждый инженер должен знать о безопасности и где Чтобы узнать об этом , докладчик - Нил Дасвани, и это Google Tech Talk, который он дал, может быть хорошим местом для начала!

Не применимо только к веб-программистам, возможно, вопрос должен быть переименован «Что должны знать программисты о безопасности?» так как им не нужно знать больше, чем основы криптографии (насколько это интересно)

ответил 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 17:04:07 +0300000000pmThu, 24 Feb 2011 17:04:07 +030011 2011, 17:04:07
2

Crypto пригодится во многих ситуациях. Примером, который мы использовали, является шифрование созданного и установленного хостом Win /IIS cookie сеанса, который будет использоваться на узле LAMP.

Если вы хотите внедрить шифрование (в отличие от хеширования md5 /sha1), важны некоторые основные термины - например, разница между симметричным и асимметричным шифрованием. Наряду с пониманием разницы между этими двумя, вы должны понять, что вам, как веб-разработчик, нужно делать, чтобы правильно хранить и защищать ключи дешифрования. Например, при разработке приложения для развертывания на узле, на котором у вас нет полного административного элемента управления, например, на общем хосте, а также на развертывании на сервере, где все администраторы известны и доверяются.

ответил Michael 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 17:23:16 +0300000000pmThu, 24 Feb 2011 17:23:16 +030011 2011, 17:23:16
2

По-моему, вы должны знать все о криптографии, которую кто-то атакует ваш код. Вы должны понимать хеши, соль, неслучайность случайных, основные алгоритмы шифрования (RSA, 3DES, AES и т. Д.), SHA-1 /MD-5 /et al. Вам не нужно запоминать их, но вы должны хотя бы знать, что эффективность алгоритма хеширования и как сделать его сильнее. Вы должны знать, какие коллизии и ложные срабатывания. Вы не сможете читать алгоритмы шифрования, но вы должны быть знакомы с их критериями, которые идеально подходят для каких сценариев. Вы должны уметь описывать и объяснять симметричное и асимметричное шифрование и когда использовать их. Вы должны знать, что такое PKI и как оно используется. Вы должны знать, что такое центр сертификации и как он взаимодействует с вашими серверами.

Знание всех аспектов не так важно, как знание фона. Каковы критерии определенных вещей (насколько быстро, насколько сильны, слабые стороны и т. Д.).

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

ответил Joel Etherton 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 18:00:15 +0300000000pmThu, 24 Feb 2011 18:00:15 +030011 2011, 18:00:15
2

Вы должны использовать bcrypt (Blowfish) для хранения паролей, а не MD5; это гораздо более медленный алгоритм , а это значит, что хакеру намного сложнее догадаться и проверить. Кроме того, bcrypt принимает рабочий фактор в качестве параметра, то есть он может становиться еще медленнее по мере появления новых компьютеров, поэтому он имеет встроенную функцию будущей проверки.

См. Как безопасно хранить пароль для получения дополнительной информации .

ответил chrisaycock 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 18:02:04 +0300000000pmThu, 24 Feb 2011 18:02:04 +030011 2011, 18:02:04
0

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

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

ответил Omar Kohl 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 17:12:25 +0300000000pmThu, 24 Feb 2011 17:12:25 +030011 2011, 17:12:25

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132