Дельта синхронизация без облака

Ранее мы показывали разные способы синхронизации криптодиска между ПК и Android-устройством.

Смотрим плавность хода с помощью BMW Rheingold

Всем знакома ситуация, когда двигатель немного "троит", но пропусков зажигания нет...

Дельта-синхронизация крипто-дисков

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

Облачный хостинг VDS за 2 минуты

Настоящий облачный VDS-хостинг от UltraVDS: тестируем производительность

Методы криптографии. Алгоритмы шифрования


Денис Колисниченко

Методы криптографии

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

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

Существует и еще один метод защиты электронной почты — электронная подпись. Правда, она позволяет только проверить авторство и подлинность сообщения, но не зашифровать сам текст, поэтому в данном обзоре средства для работы с ЭЦП рассматриваться не будут.

Алгоритмы шифрования

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

Одним из первых алгоритмов шифрования, получивших распространение в современном мире, является DES (Data Encryption Standard). Разработан в 1977 году, но, тем не менее, дожил до наших дней и все еще используется в некоторых криптосистемах. Алгоритм DES представляет собой блочный алгоритм шифрования с симметричным ключом. Размер ключа равен 64 битам, но только 56 из них используются для шифрования, а остальные 8 — для контроля четности.

В качестве усовершенствованной версии DES в 1978 году был разработан алгоритм 3DES (Triple-DES). Размер ключа у 3DES составляет 168 бит. Алгоритм 3DES в три раза медленнее, чем DES, но гораздо надежнее, поскольку время, необходимое для криптоанализа 3DES, гораздо больше, чем время, необходимое для взлома DES. В 1998 году алгоритм DES был взломан всего за три дня. Учитывая возможности современных компьютеров, сегодня на взлом DES понадобится гораздо меньше времени.

Оба алгоритма давно устарели. Хотя 3DES и надежнее, чем обычный DES, для большей надежности рекомендуется использовать другие алгоритмы. Но все же 3DES на сегодняшний день считается самой простой заменой DES.

Следующий алгоритм — это RC5 (Ron’s Code 5 или Rivest’s Cipher 5). Представляет собой блочный шифр, разработанный в 1994 году Роном Ривестом из компании RSA Security Inc. с переменным количеством раундов, длиной блока и длиной ключа. Максимальный размер ключа — 2048 битов, размер ключа по умолчанию — 128 бит.

Алгоритм RC5 является более быстрым и более надежным алгоритмом, особенно при длине ключа более 512 бит, поскольку в настоящее время ключи с длиной 512 бит и меньше считаются как недостаточно устойчивые.

Алгоритм RSA назван по первым буквам фамилий своих создателей Rivest, Shmir, Adleman. Один из первых алгоритмов шифрования с открытым ключом. Алгоритм используется до сих пор. Небезызвестная программа PGP использует именно RSA.

Позволим себе сделать небольшой экскурс в принцип работы RSA. Сначала выбираются большие простые числа — M и N. Затем вычисляется их произведение Q = M x N. После этого выбирается такое число D, которое должно быть взаимно простым с результатом умножения (M-1)x(N-1). Другими словами, не должно иметь с результатом умножения общих делителей, отличных от единицы. После этого вычисляется число A из выражения (AxD)mod[(M-1)x(N-1)] = 1.

Публичным ключом считается пара чисел (A,Q), а приватным (закрытым) ключом является пара чисел (D,Q). Открытым ключом можно закодировать передаваемый текст, а для его раскодирования нужен закрытый ключ.

Для кодирования числа S используется формула C = M^A mod Q. Для раскодирования используется обратная операция S = C^D mod Q.

Чтобы взломать RSA (другими словами, чтобы взломать PGP и другие программы, которые используют RSA), нужно разложить число Q (его можно получить из открытого ключа, который будет опубликован пользователем в Интернете) на простые множители. Вот только незадача: над этим бились известные математики многие годы и ничего, увы, у них не получилось. В математике нет теорем, которые могут предсказать, будет ли определенное число простым. Есть теоремы, которые могут определить, является ли число составным, но если число не является составным, это не означает, что оно является простым. Такое число якобы является простым, но чтобы убедиться в этом, нужно применять более сильные теоремы, реализации которых на машине сводятся к банальному перебору, на что уходит много времени.

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

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

Казалось бы, взломать RSA невозможно. Но возможности компьютеров постоянно растут и то, что казалось невозможным в 1977 году, становится реальности в наше время. Будет ли взломан ваш ключ, зависит от его длины. Тут простое правило: чем больше, тем лучше. Еще относительно недавно ключи с длиной 512 бит считались довольно надежными и даже "Хакер" писал о том, что длины ключа в 256 бит хватит навсегда (https://xakep.ru/2012/12/28/59888/). И было это совсем недавно — всего три года назад, а именно в 2012 году. Однако авторы той статьи, очевидно, не знали, что группе инженеров из Японии, Швейцарии, Нидерландов и США удалось успешно вычислить данные, зашифрованные при помощи криптографического ключа стандарта RSA длиной 768 бит. То есть ключ длиной в 768 бит был успешно взломан (http://www.cybersecurity.ru/crypto/85133.html) еще в 2010 году. А чуть позже был взломан и ключ длиной в 1024 бита, об этом писалось в "Хабре" (http://habrahabr.ru/post/86841/). Microsoft же побыстрее увеличила длину ключа до 2048 бит в Windows Server (https://support.microsoft.com/ru-ru/kb/2627272).

Другими словами, при использовании RSA минимальная длина ключа должна быть 2048 бит, а еще лучше — 4096 бит, если есть желание получить запас надежности на ближайшие 5-10 лет.

Нужно рассмотреть еще один алгоритм, достаточно популярный в наше время — AES (Advanced Encryption Standard). Это симметричный алгоритм с размером ключа 128, 192 и 256 бит. Принят в качестве стандарта шифрования правительством США. Все бы хорошо, но ассиметричные алгоритмы с большой длиной ключа будут все-таки надежнее. Однако могут встречаться и комбинированные варианты шифрования: сначала сообщение кодируется с помощью некоторого ключа симметричного алгоритма, например, 3DES или AES, а потом ключ шифруется алгоритмом RSA и передается вместе с закодированным сообщением. Это позволяет достичь высокой скорости обработки информации и обеспечивает дополнительную защиту.