Информационная безопасность — сложная, высокотехнологичная тема, достойная отдельной книги. Никто не хочет пользоваться небезопасной системой, а взломанные системы, в которых под угрозой находятся данные пользователей, приводят к увольнению технических директоров, а в крайних случаях и к краху компаний.
Основными элементами безопасной системы являются аутентификация, авторизация и целостность. Мы должны гарантировать, что данные не могут быть перехвачены при передаче по сети, а к данным, находящимся в состоянии покоя (в постоянном хранилище), не может получить доступ тот, кто не имеет разрешения на доступ к этим данным. В принципе, я не хочу, чтобы кто-то видел номер моей кредитной карты, когда он передаётся между системами или хранится в базе данных компании.
Таким образом, информационная безопасность является необходимым атрибутом качества для любых систем, работающих в интернете. Затрат на создание защищённых систем избежать невозможно, поэтому кратко рассмотрим, как они влияют на производительность и масштабируемость.
На сетевом уровне системы обычно используют протокол Transport Layer Security (TLS), который работает поверх TCP/IP (см. главу 3). TLS обеспечивает шифрование, аутентификацию и целостность с использованием асимметричной криптографии. Это связано с затратами производительности при установлении защищённого соединения, поскольку обеим сторонам необходимо генерировать и обмениваться ключами. Установление соединения TLS также включает в себя обмен сертификатами для проверки подлинности сервера (и, возможно, клиента) и выбор алгоритма для проверки того, что данные не были подделаны при передаче. После установления соединения данные на лету шифруются с помощью симметричной криптографии, которая приводит к незначительному снижению производительности, поскольку современные процессоры оснащены специальными средствами шифрования. Установление соединения обычно требует двух обменов сообщениями между клиентом и сервером и поэтому является сравнительно медленным. Максимально возможное переиспользование соединений позволяет минимизировать эти накладные расходы.
Существует множество вариантов защиты данных в состоянии покоя. Популярные системы баз данных, такие как SQL Server и Oracle, имеют такие функции, как прозрачное шифрование данных (tansparent data encryption TDE), обеспечивающее эффективное шифрование на уровне файлов. Более тонкие механизмы шифрования, вплоть до уровня поля, всё чаще требуются в регулируемых отраслях, таких как финансы. Поставщики «облачных» услуг также предлагают различные функции, обеспечивающие безопасность данных, хранящихся в «облачных» хранилищах данных. Накладные расходы на обеспечение безопасности данных в состоянии покоя — это просто затраты, которые необходимо понести для достижения безопасности. По данным исследований, эти накладные расходы составляют около 5-10% бюджета.
Другая точка зрения на безопасность — это триада CIA, которая расшифровывается как Конфиденциальность, Целостность и Доступность [Confidentiality, Integrity and Availability] (русский вариант — КГБ: Конфиденциальность, соГласованность, Бесперебойность). Первые два пункта практически полностью совпадают с тем, что я описал выше. Под доступностью понимается способность системы надёжно работать в условиях атак со стороны злоумышленников. Такими атаками могут быть попытки использовать недостатки конструкции системы, чтобы вывести её из строя. Другая атака — классический распределённый отказ в обслуживании (DDoS), при котором противник получает контроль над множеством систем и устройств и координирует поток запросов, фактически делающих систему недоступной.
В общем случае безопасность и масштабируемость являются противоположными силами. Безопасность неизбежно влечёт за собой снижение производительности. Чем больше уровней безопасности в системе, тем больше нагрузка на производительность, а значит, и на масштабируемость. В конечном итоге это сказывается на конечном результате — для достижения требований к производительности и масштабируемости системы требуются более мощные и дорогие ресурсы.