+79268855999
(Viber, WhatsApp, Telegram)

Шифрование. Как превратить 8-значную строку в 128-битный ключ, 256-битный ключ и т.д.? 256 битное шифрование что это


AES (Rijndael) - шифрование online

Комментарий: Описание: Advanced Encryption Standard (AES), также известный под своим оригинальным названием Rijndael - это спецификация для шифрования электронных данных, созданная национальным Институтом стандартов и технологий США (NIST) в 2001 году.

AES является подмножеством шифра Rijndael, разработанного двумя Бельгийскими криптографами, Винсентом Рейменом и Джоан Даймен, которые представили предложение NIST в процессе отбора AES. Rijndael - это семейство шифров с различными размерами ключей и блоков.

Для AES NIST выбрал трех членов семейства Rijndael, каждый из которых имеет размер блока 128 бит, но три разных длины ключа: 128, 192 и 256 бит.

AES был принят правительством США и в настоящее время используется во всем мире. Он заменяет Стандарт шифрования данных (des), который был опубликован в 1977 году. Алгоритм, описываемый AES, является алгоритмом симметричного ключа, то есть один и тот же ключ используется как для шифрования, так и для расшифровки данных.

AES вступил в силу в качестве стандарта федерального правительства 26 мая 2002 года после утверждения министром торговли. AES включен в стандарт ISO/IEC 18033-3. AES доступен во многих различных пакетах шифрования и является первым (и единственным) общедоступным шифром, одобренным агентством национальной безопасности (NSA) для сверхсекретной информации при использовании в одобренном криптографическом модуле NSA (см. безопасность AES ниже).

Ресурсы:

crypt-online.ru

java - Как реализовать Java 256-битное шифрование AES с CBC

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

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

Кроме того, вы не должны использовать метод no-arg getBytes() String. Это зависит от платформы. Если все строки, которые вы кодируете, содержат только символы из набора символов US-ASCII, проясните это, указав эту кодировку явно. В противном случае, если на телефонных и серверных платформах используются разные кодировки символов, ключ и IV не окажутся одинаковыми.

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

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

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

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

Update:

Diffie-Hellman в режиме "эфемерно-статический" (и "статический-статический" режим, хотя и менее желательный) возможен без первоначального сообщения с сервера на телефон, если включен общедоступный ключ сервера в приложении.

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

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

Я не знаю, насколько быстрыми являются телефоны. На моем рабочем столе генерация эфемерной пары ключей занимает около 1/3 секунды. Создание параметров Диффи-Хеллмана происходит очень медленно; вы обязательно захотите повторно использовать параметры с помощью ключа сервера.

qaru.site

Не такой уж ты и страшный, XTS-AES / Хабр

Приветствую, %username%!
Сегодняшняя статья навеяна мыслями написать бесплатный аналог программы для шифрования файлов в DropBox, а именно аспектом режима шифрования файлов посекторно (для возможности читать\писать из/в произвольное место) Мы поговорим о режиме шифрования XTS-AES, применяемом во всех популярных дискошифровалках (TrueCrypt, DiskCryptor). Он описан в IEEE P1619™/D16 (Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices) и считается самым безопасным способом хранить данные посекторно.

Перво-наперво определим входные данные для работы:

  1. 256/512 бит ключа (может быть SHA-256/512(соль+пароль) или что нибудь вроде KDF)
  2. Адрес (номер) сектора
  3. Собсно блок данных длины кратной 128 битам (размер блока AES)

Упрощенно, алгоритм следующий:

  1. Разбивка ключа на два. Первая часть становится ключом шифрования данных(k1), вторая — ключом для генерации tweak value(k2) Таким образом, если у нас используется ключ в 512 бит, то мы его пилим на 2х256 и используем в AES-256
  2. Конвертируем номер сектора в массив байт и шифруем его ключом k2. Это наше tweak value
  3. Идём по массиву данных блоками размером по 16 байт и для каждого блока:
  4. 1.Ксорим его с tweak value
  5. 2.Шифруем/расшифровываем его ключом k1
  6. 3.Опять ксорим уже (рас)шифрованный блок данных с tweak value. Сохраняем его, это и будет нужный нам (за/рас)шифрованный блок сектора
  7. 4.Умножаем tweak value на полином α = x128+x7+x2+x+1

Самое непонятное тут (для меня, в частности) это умножение на полином. Алгоритмически это просто сдвиг всего массива на 1 бит + xor на последнем шаге.

  1.  
  2. private const int GF_128_FDBK = 0x87;
  3. private const int AES_BLK_BYTES = 16;
  4. ...
  5.  
  6. // умножаем T(weak value) на α
  7. Cin = 0; // бит переноса
  8. for (j = 0; j < AES_BLK_BYTES; j++)
  9. {
  10.     Cout = (T[j] >> 7) & 1;
  11.     T[j] = (byte)(((T[j] << 1) + Cin) & 0xFF);
  12.     Cin = Cout;
  13. }
  14. if (Cout != 0)
  15. {
  16.     T[0] ^= GF_128_FDBK;
  17. }
  18.  

В принципе, никакого криминала. Делается это для того, чтоб tweak value был различным для каждого блока данных внутри сектора.Вопрос к математически подкованной аудитории: Почему выбрано именно умножение на полином в GF(2) по модулю x128+x7+x2+x+1? Моих (не)знаний хватает лишь предположить, что тут замешаны циклические группы, и всё это некий аналог циклического сдвига.

Рабочий код на C#, который даже проходит стандартные тесты:

  1.  
  2. class XTS
  3. {
  4.     private const int GF_128_FDBK = 0x87;
  5.     private const int AES_BLK_BYTES = 16;
  6.  
  7.     public static byte[] encryptSector(byte[] inData, byte[] dataEncryptionKey, byte[] tweakEncryptionKey, UInt64 sectorNumber, bool encrypt)
  8.     {
  9.         byte[] outData = new byte[inData.Length]; //тут будет результат. Размер inData должен быть кратен 32!
  10.  
  11.         uint i, j; // local counters
  12.         var T = new byte[AES_BLK_BYTES]; // tweak value
  13.         var x = new byte[AES_BLK_BYTES]; // буфер для (за/рас)шифрованного блока данных
  14.  
  15.         // конвертируем номер сектора в массив байт
  16.         Array.Copy(BitConverter.GetBytes(sectorNumber), T, 8);
  17.  
  18.         //после шифрования в T у нас tweak value. true значит шифровать
  19.         processAES(tweakEncryptionKey, T, true);
  20.        
  21.         // Обрабатываем по AES_BLK_BYTES байт за раз
  22.         for (i = 0; i < inData.Length; i += AES_BLK_BYTES)
  23.         {
  24.             // ксорим tweak value с куском данных
  25.             for (j = 0; j < AES_BLK_BYTES; j++)
  26.             {
  27.                 x[j] = (byte)(inData[i + j] ^ T[j]);
  28.             }
  29.  
  30.             // шифруем/расшифровываем блок
  31.             processAES(dataEncryptionKey, x, encrypt);
  32.  
  33.              // ксорим tweak value с обработанным блоком данных
  34.             for (j = 0; j < AES_BLK_BYTES; j++)
  35.             {
  36.                 outData[i + j] = (byte)(x[j] ^ T[j]);
  37.             }
  38.  
  39.             // Умножаем tweak value на α
  40.             j = AES_BLK_BYTES;
  41.             int t = T[AES_BLK_BYTES - 1];
  42.             while (--j != 0)
  43.                 T[j] = (byte)((T[j] << 1) | ((T[j - 1] & 0x80) != 0 ? 1 : 0));
  44.             T[0] = (byte)((T[0] << 1) ^ ((t & 0x80) != 0 ? 0x87 : 0x00));
  45.         }
  46.         return outData;
  47.     }
  48.  
  49.     private static void processAES(byte[] k, byte[] T, bool encrypt)
  50.     {
  51.         /*AesFastEngine взят из BouncyCastle. Вы можете заменить на стандартную
  52.         * реализацию, либо вообще использовать другой алгоритм, только учитывайте
  53.         * размер блока шифрования.
  54.         */
  55.         var engine = new AesFastEngine();
  56.         engine.Init(encrypt, new KeyParameter(k));
  57.         engine.ProcessBlock(T, 0, T, 0);
  58.     }
  59. }
  60.  

______________________ Использовать AES, как видно, не обязательно. Правда, об этом ничего не сказано в стандарте.

Домашним заданием будет реализовать обработку сектора для размеров не кратных 32. А я продолжу написание шифровалки для DropBox)

habr.com

Алгоритмы шифрования данных. Симметричные алгоритмы шифрования. Алгоритм шифрования RSA. Алгоритм шифрования DES. Выбор алгоритма шифрования

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

Что собой представляет система шифрования данных?

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

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

Зачем это нужно?

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

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

На ум приходит только одна фраза, ставшая классикой принципов деятельности Натана Ротшильда: «Кто владеет информацией, тот владеет миром». И именно поэтому информацию приходится защищать от посторонних глаз, дабы ей не воспользовался кто-то еще в своих корыстных целях.

Криптография: точка отсчета

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

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

Современный мир: виды алгоритмов шифрования

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

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

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

Симметричные и асимметричные алгоритмы шифрования: в чем разница

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

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

А что представляют собой асимметричные алгоритмы шифрования? Здесь применяются два ключа, то есть для кодирования исходной информации использует один, для расшифровки содержимого – другой, причем совершенно необязательно, чтобы они совпадали или одновременно находились у кодирующей и декодирующей стороны. Для каждой из них достаточно одного. Таким образом, в очень высокой степени исключается попадание обоих ключей в третьи руки. Однако, исходя из современной ситуации, для многих злоумышленников кражи такого типа особо проблемой и не являются. Другое дело – поиск именно того ключа (грубо говоря, пароля), который подойдет для расшифровки данных. А тут вариантов может быть столько, что даже самый современный компьютер будет обрабатывать их в течение нескольких десятков лет. Как было заявлено, ни одна из имеющихся в мире компьютерных систем взломать доступ к нему и получить то, что называется «прослушкой», не может и не сможет в течение ближайших десятилетий.

Наиболее известные и часто применяемые алгоритмы шифрования

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

В большинстве стран стандартом де-факто является криптографическая система AES на основе 128-битного ключа. Однако параллельно с ней иногда используется и алгоритм шифрования RSA, который хоть и относится к шифрованию с использованием открытого (публичного) ключа, тем не менее является одним из самых надежных. Это, кстати, доказано всеми ведущими специалистами, поскольку сама система определяется не только степенью шифрования данных, но и сохранением целостности информации. Что касается ранних разработок, к коим относится алгоритм шифрования DES, то он безнадежно устарел, а попытки его замены начали проводиться еще в 1997 году. Вот тогда-то на его основе и возник новый расширенный (Advanced) стандарт шифрования AES (сначала с ключом 128 бит, потом – с ключом 256 бит).

Шифрование RSA

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

Для шифрования берутся два достаточно больших числа X и Y, после чего вычисляется их произведение Z, называемое модулем. Далее выбирается некое постороннее число A, удовлетворяющее условию: 1< A < (X - 1) * (Y - 1). Оно обязательно должно быть простым, то есть не иметь общих делителей с произведением (X - 1) * (Y - 1), равным Z. Затем происходит вычисление числа B, но только так, что (A * B - 1) делится на (X - 1) * (Y – 1). В данном примере A – открытый показатель, B – секретный показатель, (Z; A) – открытый ключ, (Z; B) – секретный ключ.

Что происходит при пересылке? Отправитель создает зашифрованный текст, обозначенный как F, с начальным сообщением M, после чего следует возведение в степень A и умножение на модуль Z : F = M**A*(mod Z). Получателю остается вычислить несложный пример: M = F**B*(mod Z). Грубо говоря, все эти действия сводятся исключительно к возведению в степень. По тому же принципу работает и вариант с создание цифровой подписи, но уравнения тут несколько сложнее. Чтобы не забивать пользователю голову алгеброй, такой материал приводиться не будет.

Что же касается взлома, то алгоритм шифрования RSA ставит перед злоумышленником практически нерешаемую задачу: вычислить ключ B. Это теоретически можно было бы сделать с применением доступных средств факторинга (разложением на сомножители исходных чисел X и Y), однако на сегодняшний день таких средств нет, поэтому сама задача становится не то что трудной - она вообще невыполнима.

Шифрование DES

Перед нами еще один, в прошлом достаточно эффективный алгоритм шифрования с максимальной длиной блока 64 бита (символа), из которой значащими являются только 56. Как уже было сказано выше, эта методика уже устарела, хотя достаточно долго продержалась в качестве стандарта криптосистем, применяемых в США даже для оборонной промышленности.

Суть его симметричного шифрования заключается в том, что для этого применяется некая последовательность из 48 бит. При этом для операций используется 16 циклов из выборки ключей в 48 бит. Но! Все циклы по принципу действия аналогичны, поэтому на данный момент вычислить искомый ключ труда не составляет. К примеру, один из самых мощных компьютеров в США стоимостью более миллиона долларов «ломает» шифрование в течение примерно трех с половиной часов. Для машин рангом ниже на то, чтобы вычислить даже последовательность в максимальном ее проявлении, требуется не более 20 часов.

Шифрование AES

Наконец, перед нами самая распространенная и, как считалось до недавнего времени, неуязвимая система – алгоритм шифрования AES. Он сегодня представлен в трех модификациях – AES128, AES192 и AES256. Первый вариант применяется больше для обеспечения информационной безопасности мобильных устройств, второй задействован на более высоком уровне. Как стандарт, эта система была официально внедрена в 2002 году, причем сразу же ее поддержка была заявлена со стороны корпорации Intel, производящей процессорные чипы.

Суть ее, в отличие от любой другой симметричной системы шифрования, сводится к вычислениям на основе полиноминального представления кодов и операций вычисления с двумерными массивами. Как утверждает правительство Соединенных Штатов, для взлома ключа длиной 128 бит дешифратору, пусть даже самому современному, потребуется порядка 149 триллионов лет. Позволим себе не согласиться с таким компетентным источником. Компьютерная техника за последние сто лет сделала скачок, соизмеримый с геометрической прогрессией, так что особо обольщаться не стоит, тем более что сегодня, как оказалось, существуют системы шифрования и покруче, чем те, которые США объявили совершенно стойкими ко взлому.

Проблемы с вирусами и дешифровкой

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

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

А если исходить из заявления правительства США о сроке, отводимом для дешифрования ключа длиной 128 бит, то что можно сказать о времени, которое потребуется на поиск решения для случая с ключом и его вариантами длиной 1024 бита? Вот тут-то США и прокололись. Они ведь считали, что их система компьютерной криптографии совершенна. Увы, нашлись какие-то спецы (судя по всему, на постсоветском пространстве), которые превзошли «незыблемые» американские постулаты по всем параметрам.

При всем этом даже ведущие разработчики антивирусного ПО, в том числе «Лаборатория Касперского», специалисты, создавшие «Доктора Веба», корпорация ESET и многие другие мировые лидеры просто разводят руками, дескать, на расшифровку такого алгоритма попросту нет средств, умалчивая при этом о том, что и времени не хватит. Конечно, при обращении в службу поддержки предлагается отправить зашифрованный файл и, если есть, желательно его оригинал - в том виде, в каком он был до начала шифрования. Увы, даже сравнительный анализ пока не дал ощутимых результатов.

Мир, которого мы не знаем

Да что там говорить, если мы гонимся за будущим, не имея возможности расшифровать прошлое. Если посмотреть на мир нашего тысячелетия, можно заметить, что тот же римский император Гай Юлий Цезарь в некоторых своих посланиях использовал симметричные алгоритмы шифрования. Ну а если взглянуть на Леонардо да Винчи, так вообще становится как-то не по себе от одного осознания того, что в области криптографии этот человек, чья жизнь покрыта неким флером тайны, на века превзошел свою современность.

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

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

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

Вместо послесловия

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

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

fb.ru

cryptography - Шифрование. Как превратить 8-значную строку в 128-битный ключ, 256-битный ключ и т.д.?

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

Во-первых, простой ответ. Q: Как превратить 8-значную строку в 128-битный ключ? A: Один не делает.

Это правдивый ответ. Теперь, более подходящий к тому, что вы спрашиваете: A: Создайте случайное 64-битное значение и сохраните его с паролем в базе данных. Теперь пароль составляет половину ключа, а случайным значением является другая половина.

Это ложь. Вот что вы на самом деле делаете: A: Хешируйте пароль вместе со случайной солью, используя метод, производящий 128-битный или более длинный вывод. Используйте 128 бит этого ключа. Храните соль.

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

  • Соль является случайной для ключа шифрования.
  • Случайное означает случайное. Если вы недостаточно произвольны, когда используете криптографический алгоритм, который предполагает непредсказуемый материал, вы уязвимы. Для этого /dev/random - для системного энтропийного пула очень хорошо. Получите лучший аппаратный RNG, если вы беспокоитесь.
  • Да, если вы соленый ключ, кому-то нужна соль, чтобы расшифровать вещи, которые вы зашифровали, используя значение хэшированного соленого ключа. Нет, отправка соли не обязательно компрометирует ваши данные; отправьте соль только кому-то, кто доказал, что у них уже есть пароль, но он хранится в вашей базе данных рядом с зашифрованным текстом. Как упоминалось выше, кому-то нужна соль и зашифрованный текст для установки атаки. Опять же, цель соли - не, чтобы поднять силу шифрования, это только для предотвращения предвыборных атак против ваших хешей.
  • Существуют методы расширения ключей. Но, в сущности, ваша защита настолько сильна, насколько ее слабая связь, поэтому для обеспечения 100% -ного нерушимого шифрования вам понадобится одноразовая клавиатура (по-настоящему случайный ключ до тех пор, пока данные будут зашифрованы). В реальном мире, как правило, делается хэширование пароля вместе с солью для производства непредсказуемого более длинного материала для ключей.

qaru.site

VPN-Сервис

VPN-провайдеры обычно предлагают на выбор несколько типов подключения, иногда как часть различных тарифных планов, а иногда в составе единого тарифного плана. Цель этой статьи – провести обзор доступных вариантов VPN и помочь понять основы используемых технологий.

Заметка про длину ключа шифрования

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

Сейчас почти невозможно найти VPN-шифрование с использованием ключа длиной менее 128 бит и все сложнее найти 256-битное шифрование в предлагаемых OpenVPN-решениях, ключи которых бывают даже 2048 бит. Но что означают эти цифры на практике, 256-битное шифрование действительно более безопасное, чем 128-битное?

Краткий ответ таков: при практическом применении – нет. Это правда, что взлом 256-битного ключа потребует в 2128 больше вычислительной мощности, чем взлом 128-битного ключа. Это означает, что потребуется 3.4х10^38 операций (количество комбинаций в 128-битном ключе) – подвиг для существующих компьютеров и даже в ближайшем будущем. Если бы мы применили самый быстрый суперкомпьютер (по данным 2011 года его скорость вычислений 10.51 петафлопс), нам потребовалось бы 1.02х10^18 (около 1 миллиарда) лет, чтобы взломать 128-битный AES-ключ путем перебора.

Так как на практике 128-битный шифр не может быть взломан путем перебора, было бы правильно говорить, что ключа такой длины более чем достаточно для большинства применений. Только настоящие параноики (например, чиновники в правительстве, имеющие дело со сверхсекретными документами, которые должны оставаться в тайне в течение следующих 100 или более лет) могут использовать 256-битное шифрование (правительство США, например, использует сертифицированный NIST 256-битный AES-шифр).

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

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

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

PPTP

Протокол туннелирования точка-точка (Point-to-Point Tunneling Protocol) – это протокол, изобретенный Microsoft для организации VPN через сети коммутируемого доступа. PPTP является стандартным протоколом для построения VPN уже на протяжении многих лет. Это только VPN-протокол и он опирается на различные методы аутентификации для обеспечения безопасности (наиболее часто используется MS-CHAP v.2). Доступен как стандартный протокол почти во всех операционных системах и устройствах, поддерживающих VPN, что позволяет использовать его без необходимости установки дополнительного программного обеспечения. PPTP остается популярным выбором как предприятий, так и VPN-провайдеров. Его преимущество также в том, что он использует меньше вычислительных ресурсов, следовательно обладает высокой скоростью работы.

Хотя PPTP обычно и используется со 128-битным шифрованием, в следующие несколько лет после включения этого протокола в состав Windows 95 OSR2 в 1999 году были найдены ряд уязвимостей. Наиболее серьезной из которых явилась уязвимость протокола аутентификации MS-CHAP v.2. Используя эту уязвимость, PPTP был взломан в течение 2 дней. И хотя компанией Microsoft была исправлена эта ошибка (за счет использования протокола аутентификации PEAP, а не MS-CHAP v.2), она сама рекомендовала к использованию в качестве VPN проколов L2TP или SSTP.

Плюсы:клиент PPTP встроен почти во все операционные системыочень прост в настройкеработает быстро

Минусы:небезопасен (уязвимый протокол аутентификации MS-CHAP v.2 все еще много где используется)

L2TP и L2TP/IPsec

Протокол туннелирования 2 уровня (Layer 2 Tunnel Protocol) – это протокол VPN, который сам по себе не обеспечивает шифрование и конфиденциальность трафика, проходящего через него. По этой причине, как правило, используется протокол шифрования IPsec для обеспечения безопасности и конфиденциальности.

L2TP/IPsec встроен во все современные операционные системы и VPN-совместимые устройства, и так же легко может быть настроен как и PPTP (обычно используется тот же клиент). Проблемы могут возникнуть в том, что L2TP использует UDP-порт 500, который может быть заблокирован файрволлом, если вы находитесь за NAT. Поэтому может потребоваться дополнительная настройка роутера (переадресация портов). Кстати, протокол SSL, например, использует TCP-порт 443, чтобы быть неотличимым от обычного HTTPS-трафика.

Протокол IPsec на данный момент не имеет никаких серьезных уязвимостей и считается очень безопасным при использовании таких алгоритмов шифрования, как AES. Однако, поскольку он инкапсулирует данные дважды, это не так эффективно, как SSL-решения (например, OpenVPN или SSTP), и поэтому работает немного медленнее.

Плюсы:очень безопасенлегко настраиваетсядоступен в современных операционных системах

Минусы:работает медленнее, чем OpenVPNможет потребоваться дополнительная настройка роутера

OpenVPN

OpenVPN является достаточно новой технологией с открытым кодом, которая использует библиотеку OpenSSL и протоколы SSLv3/TLSv1, наряду с множеством других технологий для обеспечения надежного VPN-решения. Одним из его главных преимуществ является то, что OpenVPN очень гибок в настройках. Этот протокол может быть настроен на работу на любом порту, в том числе на 443 TCP-порту, что позволяет маскировать трафик внутри OpenVPN под обычный HTTPS (который использует, например, Gmail) и поэтому его трудно заблокировать.

Еще одним преимуществом OpenVPN является то, что используемые для шифрования библиотеки OpenSSL поддерживают множество криптографических алгоритмов (например, AES, Blowfish, 3DES, CAST-128, Camelia и другие). Наиболее распространенные алгоритмы, которые используют VPN-провайдеры – AES и Blowfish. AES является новой технологией, и хотя оба считаются безопасными, тот факт, что он имеет 128-битный размер блока, а не 64-битный как у Blowfish, означает, что он может работать с большими (более 1Гб) файлами лучше. Различия, однако, довольно незначительные. То, как быстро работает OpenVPN, зависит от выбранного алгоритма шифрования, но, как правило, работает быстрее, чем IPsec.

OpenVPN стал технологией №1 при использовании VPN, и хотя он изначально не поддерживается операционными системами, этот протокол широко поддерживается через стороннее программное обеспечение. Совсем недавно невозможно было использовать OpenVPN на iOS и Android без джейлбрейка и рута, а сейчас появились сторонние приложения, которые частично решили эту проблему.

С этим связана другая проблема OpenVPN – гибкость может сделать его неудобным в настройке. В частности, при использовании типовой программной реализации OpenVPN (например, стандартный открытый клиент OpenVPN под Windows) необходимо не только скачать и установить клиент, но и загрузить и установить дополнительные конфигурационные файлы. Многие VPN-провайдеры решают эту проблему путем использования преднастроенных VPN-клиентов.

Плюсы:гибко настраиваетсяочень безопасен (зависит от выбранного алгоритма шифрования, но все они безопасны)может работать сквозь файрволлыможет использовать широкий спектр алгоритмов шифрования

Минусы:необходимо стороннее программное обеспечениеможет быть неудобен в настройкеограниченная поддержка портативными устройствами

SSTP

Протокол безопасного туннелирования сокетов (Secure Socket Tunneling Protocol) – был представлен Microsoft в Windows Vista SP1, и хотя он теперь доступен на Linux, RouterOS и SEIL, он по-прежнему используется в значительной степени только Windows-системами (есть очень маленький шанс, что он появится на Apple устройствах). SSTP использует SSL v.3 и, следовательно, предлагает аналогичные преимущества, что и OpenVPN (например, возможность использовать TCP-порт 443 для обхода NAT), а так как он интегрирован в Windows, он проще в использовании и более стабилен, чем OpenVPN.

Плюсы:очень безопасен (зависит от алгоритма шифрования, обычно используется очень стойкий AES)полностью интегрирован в Windows (начиная с Windows Vista SP1)имеет поддержку Microsoftможет работать сквозь файрволлы

Минусы:работает только в Windows-среде

Заключение

PPTP небезопасен (даже его создатели в Microsoft отказались от него), поэтому его использования следует избегать. В то время, как простота установки и кроссплатформенная совместимость являются привлекательными, L2TP/IPsec имеет те же преимущества и является более безопасным.

L2TP/IPsec является хорошим решением VPN, но не таким хорошим, как OpenVPN. Однако, для быстрой настройки VPN без необходимости установки дополнительного программного обеспечения остается лучшим решением, особенно для мобильных устройств, где поддержка OpenVPN по-прежнему на низком уровне.

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

SSTP предлагает большинство преимуществ OpenVPN, но только в среде Windows. Это означает, что он лучше интегрирован в ОС, но благодаря этому он слабо поддерживается VPN-провайдерами.

Большинство пользователей могут использовать OpenVPN на своих настольных компьютерах, возможно, дополнив его L2TP/IPsec на своих мобильных устройствах.

www.1vpns.com