В нашей компании, мы обрабатываем много запросов на ведущих подарочные карты и купоны веб-сайтов в мире.Старшие разработчики провели встречу в конце октября, чтобы обсудить работает над решением для репликации MySQL функций AES_ENCRYPT
и AES_DECRYPT
на языке PHP.Эта статья центров на то, что был произведен старший разработчик Дерек Вудс и как его использовать в своих applications.
Безопасность должна быть в верхней части ума каждого разработчика при создании приложений, которые могли бы провести конфиденциальные данные.Мы хотели повторить функции MySQL, потому что многие наши данные уже AES-зашифрованную в нашей базе данных, и если вы, как и мы, вы, вероятно, что well.
? Почему шифрования Материя
Мы начнем с рассмотрения, почему безопасность и шифрование вопрос на всех уровнях приложения.Каждая заявка, независимо от того, насколько большой или маленький, нуждается в некоторой форме защиты и шифрования.Любой пользователь, у вас данных является чрезвычайно ценной для потенциальных хакеров и должны быть защищены.Основные шифрования должны использоваться, когда ваше приложение хранит пароль или другие формы определения information.
Различные уровни конфиденциальные данные требуются различные алгоритмы шифрования.Зная, какой уровень использования можно определить, ответив на основной вопрос: «Смогу ли я когда-нибудь понадобится доступ к исходным данным, после того, как были зашифрованы?” При сохранении пароля пользователя, используя сильно соленые хэш-функции MD5 и хранении, что в базе данныхдостаточным, тогда, вы должны использовать тот же MD5 хеширования на входе и сравнить результат из базы данных.При хранении другие конфиденциальные данные, которые должны быть возвращены в свое первоначальное входа, вы не сможете использовать односторонний алгоритм хеширования, таких как MD5, вам потребуется двусторонняя схема шифрования, чтобы убедиться, что исходные данные могут бытьвернулся после того, как был encrypted.
Шифрование только такая мощная, как ключ, используемый для его защиты.Представьте себе, что злоумышленник нарушения межсетевого экрана и имеет точный клон базы данных; без ключа, нарушая шифрования, которые защищают конфиденциальные данные будет практически невозможно.Хранение ключа в надежном месте всегда должна быть приоритетом номер один.Многие люди используют ini
файл, который читается во время выполнения и, что не является общедоступной в рамках веб-сервера.Если ваше приложение требует двустороннего шифрования, существуют отраслевые стандарты для защиты таких данных, один из которых AES encryption.
Что такое шифрование AES
AES, которая выступает за Advanced Encryption Standard, была разработана Джоан Daemen и Винсент Rijmen.Они назвали свой шифр, Rijndael, после того, как игра на двух своих имен.AES был объявлен победителем пятилетний конкурса, проведенного Национальным институтом стандартов и технологий (NIST) 26 ноября 2001.
AES является двусторонним шифрования и расшифровки механизма, который обеспечивает уровень безопасности для чувствительныхДанные позволяя при этом оригинальные данные, которые будут получены.Для этого он использует ключ шифрования, который используется в качестве семян в алгоритме AES.До тех пор, пока ключ остается той же, исходные данные могут быть расшифрованы.Это необходимо, если ваши конфиденциальные данные должны быть возвращены в исходное состояние.
Как это работает
AES использует сложный математический алгоритм, который мы рассмотрим позже, чтобы объединить два основных понятия: путаница и диффузия.Путаница это процесс, который скрывает связь между исходными данными и зашифрованный результат.Классическим примером этого является шифр Цезаря, который применяется простое смещение буквы так, что А становится C, B становится D и т.д. Диффузия является процессом, который смещается, настраивает или иным образом изменяет данные в сложных случаях.Это можно сделать с помощью бит смены, замены, дополнения, матрица манипуляции и многое другое.Сочетание этих двух методов обеспечивает уровень безопасности, что AES необходимо для того, чтобы дать нам безопасный алгоритм для нашей data.
Для того чтобы быть двунаправленным, путаница и диффузия процесс управляется с помощью секретного ключа, которые мы предоставляем AES.Запуск алгоритма в одном направлении с ключом и данные будут выводить запутывание строки, таким образом, шифрование данных.Передавая эту строку обратно в алгоритм с тем же ключом, работает алгоритм в обратном направлении будет выводить исходные данные.Вместо того чтобы пытаться сохранить тайну алгоритм, алгоритм AES опирается на полную секретность ключа.Согласно криптографических хранения guidelines, OWASP рекомендует вращающихся ключевые каждый одного до трех лет.В руководящих принципах также пройти методами вращающегося AES keys.
PHP Mcrypt Specifics
PHP предоставляет AES реализации в рамках расширения Mcrypt, что дает нам ряд других шифров, а также.В дополнение к алгоритму себя, Mcrypt предоставляет несколько режимов, которые изменяют уровень безопасности алгоритма AES, чтобы сделать его более безопасным.Эти два определения, которые мы должны использовать в нашей PHP функции MCRYPT_RIJNDAEL_256
и MCRYPT_MODE_ECB
.Rijndael 256 является алгоритм шифрования, который мы будем использовать для нашей шифрования AES.Кроме того, код использует “электронные книги кодекс”, что сегменты данных на блоки и шифрует их отдельно.Альтернативный и более безопасные режимы, но MySQL использует ЕЦБ по умолчанию, поэтому мы будем разработке наших PHP осуществление вокруг that.
Почему Вы должны избегать AES в MySQL
Использование AES шифрования MySQL и расшифровки функции очень прост.Настройка требует меньше работы, и это, как правило, гораздо легче понять.Наряду с очевидным преимуществом простоты, существуют три основные причины, почему Mcrypt в PHP превосходит MySQL, AES функции:
- MySQL нуждается в базе данных связь между приложением и базой данных для того, чтобы шифрование и дешифрование происходит.Это может привести кненужные вопросы масштабируемости и фатальные ошибки, если база данных имеет внутренние сбои, в результате чего приложение unusable.
- PHP может делать то же расшифровки MySQL и шифрование с некоторым усилием, но без соединения с базой данных, что увеличивает скорость приложения и efficiency.
- MySQL часто журналов транзакций, так что если сервер базы данных был скомпрометирован, то файл журнала будет производить как ключ шифрования и оригинальных value.
MySQL AES ключа Modification
Из коробки, PHP, Mcrypt функций, к сожалению, не обеспечивает зашифрованные строки, которые совпадают с MySQL.Есть несколько причин для этого, но основной причиной разницы, так это в MySQL обрабатывает ключ и ввода.Чтобы понять причины, мы должны вникать в алгоритм по умолчанию в MySQL шифрования AES.Сегменты кода, представленные ниже, были протестированы до последней версии MySQL, но MySQL могли изменить свою схему шифрования.Первой проблемой мы сталкиваемся в том, что MySQL будет разрушить нашу секретного ключа в 16-байтовых блоков и XOR символов вместе слева н …
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров