25 августа 2016

Спроси эксперта: Йорнт ван дер Виль отвечает на вопросы о шифровании

Безопасность Спецпроекты

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

В первой части Йорнт отвечал на вопросы о троянах-шифровальщиках, а в этой он расскажет о шифровании и безопасности. Поехали!

Спроси эксперта: Йорнт ван дер Виль отвечает на вопросы о шифровании

Я тут задумался, есть ли у информационной безопасности какая-то глобальная цель, и если да, то какая? Гарантия свободы? Защита приватности? Или обеспечение национальной безопасности? Да, это непростой вопрос, но мне бы хотелось узнать, что вы об этом думаете.

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

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

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

Как объяснить обычному пользователю, слабо разбирающемуся в компьютерах, что ему тоже важно шифрование?

Мне кажется, лучше всего привести несколько примеров того, что может случиться, если не использовать шифрование. Часто люди теряют ноутбуки и флешки, на которых хранится важная информация. Или же их воруют. Если данные не зашифрованы, кто угодно сможет их прочесть. Также стоит напомнить об онлайн-платежах — без шифрования преступники могут манипулировать трафиком и воровать деньги и данные. Таких примеров на самом деле довольно много. Лучше использовать ситуации из жизни — они самые убедительные.

Насколько сложно самому написать алгоритм шифрования? Сколько для этого потребуется времени?

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

Как вообще работает расшифровка?

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

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

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

Асимметричное шифрование — это вообще самая настоящая магия. Также метод дешифровки зависит от того, какой именно асимметричный шифр использовался (ECC и RSA работают по-разному). Я использовал слово «магия» из-за сложности математики, задействованной в этом методе. Знать, как расшифровать такие файлы, и понимать математику процесса дешифровки — это два совершенно разных уровня погружения в тему.

Какие криптографические алгоритмы самые надежные?

Есть много разных криптографических алгоритмов, и все они используются для решения разных задач. Я предпочитаю те, которые выиграли в соревнованиях NIST, — AES/Rijndael и SHA-3/KECCAK. Выбирать алгоритм стоит в зависимости от того, как вы собираетесь его использовать и на какой системе. К примеру, если у вас ограниченная емкость хранилища, стоит обратить внимание на ECC, который использует ключи меньшей длины, чем RSA.

Какие способы шифрования устойчивы к брутфорсу, даже если он выполняется с помощью квантового компьютера?

Ого! Мне пришлось немало прочитать, чтобы ответить на этот вопрос. (Улыбается.) Вот к чему я пришел. В отличие от обычных ПК, квантовые компьютеры работают с так называемыми кубитами, а не с битами. В одном кубите — 2 бита. Если опустить все сложные расчеты, то ответить можно в двух словах: при симметричном шифровании можно свести на нет все преимущества квантового компьютера во время брутфорса, просто удвоив длину ключа.

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

Как можно внедрить алгоритм шифрования в программу?

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

Компании чаще используют надежные алгоритмы шифрования или же просто берут код из открытых источников и немного его меняют?

Вы говорите о разработчиках ПО? Я, если честно, очень надеюсь, что они не меняют код, опубликованный в открытых источниках. Мы уже сталкивались с печальными последствиями, вызванными именно таким подходом. Вспомните, например, баг, сделавший генератор случайных чисел в Debian Linux предсказуемым. По сути, разработчики модифицировали код — и вместо того, чтобы усилить, сделали его более уязвимым. Нужно четко понимать, что и как менять, чтобы не сделать хуже. Чаще всего компании используют готовые пакеты SDK (набор инструментов для разработки ПО), например для POS-терминалов, или же берут все необходимое из открытых источников. Во многом поэтому баги в OpenSSL и доставляют столько проблем сразу большому количеству производителей, ведь OpenSSL используется почти повсеместно.

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

Я не думаю, что шифрование когда-нибудь устареет или потеряет актуальность, и я очень надеюсь, что я прав. К примеру, алгоритм DES придумали очень давно, и он до сих пор часто используется в разных устройствах. Пройдет очень много времени, прежде чем эти устройства и их младшие братья с AES вообще перестанут использоваться. К тому же некоторые страны (например, моя родина — Нидерланды) недавно официально выступили с заявлениями, осуждающими использование бэкдоров, и признали, что шифрование — это хорошо. Если я все правильно помню, даже были пожертвованы определенные средства на разработку OpenSSL. В общем, я не думаю, что шифрование когда-нибудь исчезнет.

Можно ли как-то проверить надежность такой системы, как TrueCrypt? Есть ли какие-то достойные альтернативы — может, облачные, вроде Dropbox?

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

Преимущество решений вроде TrueCrypt в том, что ключами владеете вы, а не кто-то другой. Даже если Dropbox шифрует ваши файлы, ключи хранятся у компании на сервере, а значит, у нее есть доступ к вашим данным. С другой стороны, хранение файлов в Dropbox — это создание резервной копии. Поэтому я советую вам шифровать файлы локально, у себя на устройстве, а потом хранить их где вам захочется — так ключ останется у вас.

Шифруют ли игры данные, которыми обмениваются с сервером? Если нет, может ли пользователь сделать что-нибудь, чтобы защитить свои данные от киберворов?

Я надеюсь, что игры передают все данные по защищенному соединению, так как в противном случае это дает всяким читерам дополнительные возможности. Но если игра не использует шифрование, то пользователи ничего не могут с этим поделать. Недостаточно просто настроить SSL-соединение с сервером со стороны клиента — сервер тоже должен понимать SSL. Впрочем, тут есть одно но: если игра не использует шифрование, но вы являетесь владельцем как клиента, так и сервера игры, то вы можете просто поднять SSL-канал между ними и тем самым защитить соединение.

Как создать надежную защиту для компьютерной игры?

Если вам нужна по-настоящему надежная защита, вам придется перейти на аппаратное решение, в котором нет бэкдоров. Вот интересное видео по теме:

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

На этом проект «Спроси эксперта» с Йорнтом ван дер Вилем, растянувшийся на две серии, заканчивается. Всем большое спасибо за участие!