Криптография для абсолютных новичков

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

Не стесняйтесь пролистать теоретическую часть, если захотите просто поиграться с PGP-шифрованием в конце статьи.

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

Сегодня шифрование является неотъемлемой частью многих инструментов и протоколов, используемых нами для защиты безопасности повседневных транзакций и онлайн-коммуникаций. Шифрование может использоваться на физическом уровне интернета для скремблирования (обратимого искажения) данных, передаваемых по кабелю или беспроводной связи. Оно добавляет поддержку безопасных коммуникаций для простых текстовых протоколов – таких как Hypertext Transfer Protocol (HTTP), позволяющий просматривать веб-страницы – и может защитить целостность данных, передаваемых через такие приложения, как электронная почта и мобильные мессенджеры. Можно также шифровать данные на мобильных устройствах или компьютерах, защищая от несанкционированного доступа локальные копии электронных писем, текстовых сообщений, документов и фотографий.

То, как и на каком уровне зашифрованы ваши данные, имеет огромное значение. Само по себе то, что продукт или услуга использует шифрование, вовсе не обязательно означает, что все, что хранится на этой платформе или передается посредством ее, является полностью конфиденциальным. Например, Google теперь по умолчанию использует для всего трафика Gmail протокол HTTPS (HTTP по зашифрованному соединению), что предотвращает несанкционированный доступ к электронным письмам во время их передачи между почтовыми серверами Google и компьютерами конечных пользователей, однако это не мешает самому Google получать доступ к текстовым копиям этих писем. Если вы не хотите, чтобы ваш провайдер электронной почты мог читать ваши сообщения, вам придется предпринять дополнительные шаги для реализации сквозного шифрования, то есть системы, в которой «сообщения шифруются таким образом, что расшифровать их может только получатель». При сквозном шифровании содержимое сообщения шифруется на локальном компьютере или устройстве. Затем эти данные в виде зашифрованного текста передаются поставщиком электронной почты предполагаемому получателю, который является единственной стороной, которая может расшифровать их и прочитать исходное сообщение.

Действительно ли все правоохранительные органы и американское правительство против шифрования?

Необязательно. Сотрудники правоохранительных органов и разведки часто говорят, что они ценят преимущества шифрования, когда речь идет о защите данных от таких угроз, как хакеры или иностранные правительства. Однако они хотят иметь возможность доступа к зашифрованным данным – особенно к коммуникациям между людьми – в интересах проводимых ими расследований.

Как шифрование защищает мои данные?

Алгоритмы шифрования используют математику для «скремблирования» данных, чтобы они не могли быть прочитаны посторонним лицом — например, хакером или правительственными службами.

Данные могут быть зашифрованы в двух местах: во-первых, они могут шифроваться при передаче – например, когда вы отправляете информацию из своего браузера на веб-сайт. Во-вторых, данные могут шифроваться, когда они находятся «в состоянии покоя» – например, когда они хранятся на компьютере или на сервере.

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

Шифротекст

Если бы эта статья была зашифрована, любой перехвативший ее зашифрованную версию увидел бы очень длинную строку из несвязных цифр и букв, как, например: «SNaqi82xleab92lkafdtuijgjf0dgfdojtkr8vcp2dso».

Шифрование с симметричным ключом

Чтобы расшифровать скремблированные данные, вам понадобится «ключ» шифрования (что-то вроде пароля). Ключ – это очень большое число, которое алгоритм шифрования использует для изменения данных обратно в читаемую форму. Без ключа никто, кроме владельца зашифрованных данных, не может получить доступ к читаемой версии. Процесс возврата скремблированных данных к читаемому состоянию называется «расшифровкой». Это и называется шифрованием с симметричным ключом.

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

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

Чтобы отправитель и получатель могли безопасно общаться с помощью симметричного шифрования, они должны договориться о ключе и хранить его в секрете. Если они физически находятся в разных местах, им приходится доверять курьеру, приватной телефонной линии или какому-то другому защищенному средству связи в том, чтобы секретный ключ не был раскрыт во время передачи. Любой, кто случайно получит или намеренно перехватит ключ шифрования при его передаче, сможет прочитать, изменить и подделать информацию, зашифрованную или аутентифицированную с помощью этого ключа. От DES до секретного кольца-декодера капитана Полночь, постоянная проблема с шифрованием с симметричным ключом заключается в распределении ключей: как передать ключ получателю, исключив возможность его перехвата?

Криптография с открытым ключом (асимметричное шифрование)

Проблемы распределения ключей решаются криптографией с открытым ключом. Криптография с открытым ключом – это асимметричная схема, в которой для шифрования используется пара ключей: открытый, который шифрует данные, и соответствующий ему секретный ключ для расшифровки. Открытый ключ вы публикуете в открытом доступе, а секретный сохраняете в тайне. С помощью вашего открытого ключа кто угодно – даже совершенно незнакомые вам люди – может зашифровать информацию, прочесть которую после этого сможете только вы.

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

Основное преимущество криптографии с открытым ключом заключается в том, что она позволяет людям, не имеющим готового механизма обеспечения безопасности, тем не менее безопасно обмениваться сообщениями. Здесь для отправителя и получателя отпадает необходимость обмениваться секретными ключами по некоему защищенному каналу; все коммуникации включают только открытые ключи, тогда как секретный ключ никогда не передается и не используется совместно. Некоторые примеры криптоэкосистем с открытым ключом – это Elgamal (названная по имени своего изобретателя, Тахера Эль-Гамаля), RSA (названная по первым буквам фамилий своих изобретателей, Рональда Ривеста, Ади Шамира и Леонарда Адлемана), протокол Диффи – Хеллмана (названный, как вы догадались, по именам создателей) и DSA (Digital Signature Algorithm, алгоритм цифровой подписи), изобретенный Дэвидом Кравицем.

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

PGP (от англ. Pretty Good Privacy) сочетает в себе некоторые из лучших свойств как одноключевой криптографии, так и криптографии с открытым ключом. Это гибридная криптосистема. Когда пользователь шифрует открытый текст с помощью PGP, система сначала производит его сжатие. Сжатие данных сокращает время их передачи, экономит место на диске и, что еще более важно, повышает надежность криптографической защиты. Большинство методов криптоанализа используют для взлома шифра паттерны, найденные в открытом тексте. Сжатие данных сокращает количество паттернов в открытом тексте, тем самым значительно повышая устойчивость к криптоанализу. (Слишком короткие для сжатия или плохо сжимающиеся файлы не сжимаются.)

Затем PGP создает сеансовый ключ, являющийся одноразовым секретным ключом. Этот ключ представляет собой случайное число, сгенерированное на основе произведенных вами движений мыши и нажатий клавиатуры. Сеансовый ключ работает с очень безопасным и быстрым алгоритмом одноключевого шифрования для шифрования открытого текста. Результатом является шифротекст. После того как данные зашифрованы, сеансовый ключ шифруется в открытый ключ получателя. Этот зашифрованный в открытом ключе сеансовый ключ передается вместе с зашифрованным текстом получателю.

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

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

Ключи

Ключ – это значение, работающее с криптографическим алгоритмом для получения определенного шифротекста. Ключи в основном представляют собой очень, очень, очень большие числа. Размер ключа измеряется в битах; число, представляющее собой 1024-битный ключ, чертовски велико. В криптографии с открытым ключом, чем больше ключ, тем надежнее шифрование.

Хотя открытый и секретный ключи математически связаны, очень трудно получить секретный ключ только на основе открытого ключа; однако это всегда возможно при наличии достаточного времени и вычислительных мощностей. Поэтому очень важно выбирать ключи правильного размера – достаточно большие, чтобы быть безопасными, но достаточно маленькие, чтобы обеспечивать приемлемую скорость шифрования. Кроме того, необходимо учитывать, кто может попытаться прочесть ваши файлы, насколько они могут быть целеустремлены, каким количеством времени и какими ресурсами они располагают.

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

Цифровые подписи

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

Цифровая подпись служит той же цели, что и подпись рукописная. Однако рукописную подпись несложно подделать. Цифровая подпись превосходит рукописную в том, что ее практически невозможно подделать, плюс она свидетельствует о подлинности и целостности информации, а также о личности подписавшего.

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

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

Обратите внимание: для прохождения следующего руководства вам понадобится установить GnuPG (GPG).

Командная строка GPG (PGP) — руководство для начинающих

PGP расшифровывается как «pretty good privacy» ([довольно] хорошая конфиденциальность), и это способ шифрования сообщений. Шифрование, в своей самой базовой форме, – это способ зашифровать сообщение таким образом, что, если кто-то увидит данные в процессе передачи, он не сможет узнать, что говорится в сообщении. OpenPGP – самый популярный стандарт цифрового шифрования.

Эдвард Сноуден первоначально связался с журналисткой Лорой Пойтрас, чтобы сообщить ей о своей сокровищнице документов, именно с помощью PGP.

Итак, давайте посмотрим, что собой представляет PGP и насколько он прост в использовании.

Краткий обзор (если вы пропустили теорию):

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

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

Примечание: существуют приложения с графическим интерфейсом, которые делают этот процесс проще и понятнее, но здесь мы для достижения того же результата используем командную строку. (Мы будем использовать командную строку Linux. Пользователи Windows могут обратиться к руководству по GUI-приложению GnuPG, которое делает все то же самое, только с управлением через графический интерфейс.)

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

gpg —gen-key

Вам будет предложено ввести несколько деталей. Не забудьте данные, которые вы вводили.

Чтобы вывести список ваших открытых ключей:

gpg —list-keys

Предположим, что вас зовут Джон Доу и вы хотите отправить сообщение Джейн Доу. Вот как вы это можете это сделать. (Внимание: все используемые здесь для примера имена и названия необходимо заменять на те, что вы видите при выводе списка ключей.)

Сначала экспортируйте свой открытый ключ:

gpg —export —armor youremail@example.com > publickey.asc

или

gpg —export —armor yourname > publickey.asc

Отправьте полученный файл с ключом Джейн Доу. Пусть она сделает то же самое.

Чтобы импортировать открытый ключ другого пользователя:

gpg —import publickey.asc

Теперь, когда вы импортировали ключ Джейн Доу, давайте отправим ей зашифрованное сообщение.

Зашифровать файл для отправки Джейн Доу:

gpg —encrypt —recipient receiversname filename.txt (Где receiversname – имя получателя; filename.txt – отправляемый файл)

Пример:

gpg —encrypt —recipient Jane Doe secretmessage.txt

Либо, если предыдущая команда не работает:

gpg -e -u “имя отправителя (ваше)” -r “имя ключа получателя” filename.txt

Пример:

gpg -e -u “John Doe” -r “Jane Doe” secretmessage.txt

Это создаст файл с названием secretmessage.txt.pgp. Отправьте его Джейн Доу.

Теперь Джейн получила ваш файл. Вот как она его расшифрует:

Для расшифровки в командную строку (это означает, что вы увидите сообщение только в командной строке и оно не будет в расшифрованном виде сохранено на вашем компьютере) используйте команду:

gpg —decrypt filename.txt.gpg

Для расшифровки на диск:

gpg filename.txt.gpg

Готово!

 

 

Источник