Должны ли программисты, которые создают веб-сайты / веб-приложения, понимать криптографию? Я понятия не имею, как работает большинство криптографических алгоритмов, и я действительно не понимаю различий между md5 / des / aes / etc. Кто-нибудь из вас нашел необходимость в глубоком понимании криптографии?
Мне это не нужно, но мне интересно, возможно, я что-то упускаю. Я использовал соль + md5 хеш для шифрования паролей, и я говорю веб-серверам использовать SSL. Кроме того, я не могу сказать, что я использовал многое другое, и я не могу с уверенностью сказать, насколько безопасны эти методы. Я использую их только потому, что другие люди утверждают, что они в безопасности.
Вы когда-нибудь находили необходимость использовать криптографию в веб-программировании помимо этих двух простых примеров?
источник
Ответы:
Веб-программисты должны знать, что они никогда не должны пытаться реализовать криптографию самостоятельно.
В частности, это означает, что ни один эксперт, не связанный с безопасностью, не должен напрямую касаться ни одного из криптографических примитивов. Они не должны думать на уровне AES, SHA-1 и т. Д. Вместо этого им следует использовать высокоуровневые функции для шифрования и подписи сообщений, а также для «хеширования» паролей.
Зачем? Потому что в противном случае люди вводят в заблуждение, думая, что:
Просто чтобы быть на той же странице, ни один из вышеперечисленных пунктов не в порядке . Если вы этого не понимаете, то не стоит трогать крипто 10-футовым шестом! (AES-256 - отличное шифрование, но только если вы правильно его используете. «Не размер имеет значение, а то, что вы делаете с ним». :-))
О каких функциях высокого уровня я говорю? Я лично рекомендую использовать библиотеку OpenPGP (для данных в покое) или SSL (для данных в движении). Эти протоколы жестко определяют правильное использование асимметричных, симметричных и хеш-алгоритмов. Например, с OpenPGP:
EME-PKCS1-v1_5
). Обивка очень важна для RSA. ( Некоторые считают, что использовать заполнение v1.5 - это нормально. Другие считают, что OAEP лучше. )Резюме: если вы не эксперт по безопасности и думаете на уровне AES, или SHA-1, или (не дай бог) MD5, вы делаете это неправильно . Используйте библиотеку, написанную экспертами по безопасности (например, Bouncy Castle), которая реализует протоколы, разработанные экспертами по безопасности (например, OpenPGP для шифрования, или bcrypt или scrypt для хеширования паролей), вместо того, чтобы использовать свой собственный.
Я ни в коем случае не специалист по криптографии, но знаю достаточно, чтобы не пытаться разрабатывать свои собственные специальные протоколы. Просто чтобы прояснить, весь этот пост - материал Cryptography 101 . Так что, если этот пост не имеет для вас 100% смысла, то вам определенно не стоит приближаться к криптографии.
источник
Вам не нужно ничего знать, кроме самих основ криптографии (что за хеш, что за соль, грубо говоря, как трудно взломать это шифрование или тому подобное), но вы должны знать немало о безопасности в генеральный.
Основные области безопасности, которые вы обязательно должны знать как веб-разработчик:
источник
Я помню, как я видел эту беседу под названием « Что каждый инженер должен знать о безопасности и где ее изучать», выступающий - Нил Дасвани, и это - Google Tech Talk, который он дал, может быть хорошим началом!
Хотя это относится не только к веб-программистам, возможно, вопрос следует переименовать в «Что должны знать программисты о безопасности?» поскольку им не нужно знать больше, чем основы криптографии (как бы это ни было интересно)
источник
Crypto пригодится во многих ситуациях. В качестве примера мы использовали шифрование файла cookie сеанса, созданного и установленного хостом Win / IIS для использования на хосте LAMP.
Если вы хотите реализовать шифрование (в отличие от хеширования md5 / sha1), важны некоторые базовые термины, такие как разница между симметричным и асимметричным шифрованием. Наряду с пониманием различий между этими двумя понятиями вы должны понять, что вам, веб-разработчику, нужно делать для правильного хранения и защиты ключей дешифрования. Например, если вы разрабатываете приложение для развертывания на хосте, над которым у вас нет полного административного контроля, например, на общем хосте, вместо развертывания на сервере, где все администраторы известны и заслуживают доверия.
источник
На мой взгляд, вы должны знать все о криптографии, которую знает кто-то, кто атакует ваш код. Вы должны понимать хэши, соль, неслучайность случайности, основные алгоритмы шифрования (RSA, 3DES, AES и т. Д.), SHA-1 / MD-5 / et al. Вам не нужно запоминать их, но вы должны хотя бы знать, насколько эффективен алгоритм хеширования и как его усилить. Вы должны знать, что такое коллизии и ложные срабатывания. Вы не должны быть в состоянии перечислить алгоритмы шифрования, но вы должны быть знакомы с их тестами, которые идеально подходят для каких сценариев. Вы должны быть в состоянии описать и объяснить симметричное или асимметричное шифрование и когда использовать каждый из них. Вы должны знать, что такое PKI и как его использовать. Вы должны знать, что такое центр сертификации и как он взаимодействует с вашими серверами.
Знание всех деталей не так важно, как знание его основ. Каковы критерии определенных вещей (как быстро, как сильно, слабости и т. Д.).
Эти рекомендации предназначены для информации старшего уровня или уровня архитектора. Если вы просто веб-обезьяна, гребущая на весле, вам не нужно ничего знать об этом. Ваш архитектор должен знать это. Если вы отвечаете за сайт, разрабатываете его, внедряете и т. Д., То вы должны быть знакомы со всеми этими концепциями и уметь разумно их обсуждать. Вам не нужно учить этому, просто принимайте и распространяйте информацию об этом.
источник
Вы должны использовать bcrypt (Blowfish) для хранения паролей, а не MD5; это гораздо более медленный алгоритм , а это значит, что хакеру гораздо сложнее угадать и проверить. Кроме того, bcrypt принимает в качестве параметра фактор работы , что означает, что он может стать еще медленнее по мере появления новых компьютеров, поэтому он имеет встроенную поддержку будущего.
См. Как безопасно хранить пароль для получения дополнительной информации.
источник
В качестве довольно общего ответа на подобные вопросы я всегда думаю, что вам следует постараться получить общее представление обо всем, что имеет отношение к тому, что вы делаете. Конечно, вам нужны конкретные подробные знания о том, над чем вы работаете. Очень трудно предсказать, как определенная область будет развиваться, что будет «в моде» или что вам понадобится в будущем, поэтому наличие широкого круга вещей, о которых вы, по крайней мере, «слышали», сохранит многие двери открыты.
Что касается моего личного опыта в веб-программировании, я нашел базовые понятия асимметричной криптографии и того, что помогает понять, что происходит под капотом. Я мог бы выжить без этого, но я должен сказать, что мне нравится криптография и математика, так почему бы и нет.
источник