Криптографический FAQ(ЧаВо)

Список вопросов #

Основы криптографии #

  1. Про что данный ФАК?
  2. В чем различие между защитой информации и криптографической защитой?
  3. Что такое шифр и чем он отличается от кода?
  4. Одинаковы ли понятия расшифровать, раскодировать, декодировать, дешифровать и прочее?
  5. Что такое протокол аутентификации?
  6. В чем отличие идентификации от аутентификации? И за чем они нужны?
  7. Что такое электронная цифровая подпись и в чем ее отличие от сертификата?
  8. Мне интересна криптография, но я не знаю с чего начать. Есть какой-нибудь курс молодого бойца?
  9. Часто слышу про тотальный перебор, полный перебор, метод грубой силы, брудфорс. Что это такое и есть ли отличия?
  10. Бывают ли совершенные шифры и что это такое?
  11. Гарантирует ли шифрование целостность данных при передаче?
  12. Если есть слабость у хэш-функции или алгоритма шифрования, то может, если я применю их два раза, слабости уже не будет?

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

  1. Когда используют поточные шифры, а когда блочные??
  2. Что такое режимы шифрования и для чего они нужны?
  3. Использования ключа какой длины достаточно для обеспечения конфиденциальности данных?
  4. Какой блочный шифр лучше: AES или отечественный ГОСТ?
  5. Какой алгоритм шифрования является наиболее предпочтительным?
  6. Существует ГОСТ на шифрование, зачем нам еще какие-то шифры и алгоритмы?
  7. Я придумал свой шифр, могу ли я его использовать?
  8. Какие атаки на шифры самые эффективные?
  9. Что такое rainbow attacks и rainbow table?

Криптография с открытым ключом, ЭЦП #

  1. Если ключ – “открытый”, то как же обеспечивается защита информации?
  2. Если криптография с открытым ключом – это так удобно, то зачем тогда «традиционная» криптография с секретным ключом?
  3. Какие бывают протоколы открытого распределения ключей? Какой лучше?
  4. Какую схему электронной цифровой подписи нужно использовать, чтобы ее невозможно было подделать?

Функции хэширования #

  1. Есть ли пример коллизии для какой-нибудь популярной хэш-функции
  2. MD5 сломали, могу ли я обратить ее и узнать, от какого сообщения получен именно этот хэш-код?
  3. Зачем нужны криптографические хэш-функции?
  4. Зачем нужны ключевые хэш-функции, MAC, HMAC? И в чем между ними разница?
  5. При анализе хэш-функций часто говорят про дни рождения. Что это значит?
  6. Слышал, что-то не так с отечественным стандартом на хэш-функцию. В чем там дело?
  7. Говорят, сломали MD5 и SHA-1! Можно их использовать дальше?
  8. Что такое соль и зачем ее используют при хранении паролей и вычислении хэш-кода?

Использование криптографии на практике #

  1. Как обеспечить целостность данных?
  2. Как шифровать электронную почту?
  3. Как подписать цифровой подписью электронный документ (письмо)?
  4. Мне нужно зашифровать файл (данные), как это сделать?
  5. Какая ОС безопасней: Windows или Unix?
  6. Как создать свой сертификат и использовать у себя на сайте?
  7. Мне нужно получить случайное число. Как это сделать?
  8. Что такое одноразовые пароли?
  9. У меня есть несколько компьютеров в большой сети предприятия, как организовать между ними защищенный обмен?
  10. Является ли использование паролей для файлов Word/RAR/Zip достаточным для обеспечения конфиденциальности информации?
  11. У меня пароль на сайте из 5 символов? Насколько реально его угадать или перебрать? Если да, сколько символов точно не переберут?
  12. Я слышал, что сети Wi-Fi не безопасны! Так ли это?
  13. Считается что SSL - это безопасный протокол в Интернете, но как же можно этому верить, если ключ или пароль я нигде не ввожу?
  14. Иногда браузер при заходе на сайт предупреждает о просроченных или неверных сертификатах и советует не заходить туда? Насколько это опасно?

Вопрос-ответ: #


Про что данный ФАК? #

Данный ФАК организован следующим образом. В разделе “Основы криптографии” содержаться вопросы об общих понятиях криптографии. Раздел “Алгоритмы шифрования” посвящен вопросам выбора и использования различных алгоритмов шифрования. В разделе “Криптография с открытым ключом, электронная цифровая подпись” содержатся вопросы об открытом распределении ключей, схемах ЭЦП и алгоритмах шифрования с открытым ключом. Раздел “Функции хэширования” посвящен криптографическим функциям хэширования. В разделе “Использование криптографии на практике” содержаться вопросы об используемых на практике криптографических системах. Добро пожаловать!


Основы криптографии #

В чем различие между защитой информации и криптографической защитой? #

“Защита информации” – более широкое понятие по сравнению с понятием “криптографической защиты”. Защита информации может обеспечиваться различными методами (физическими, методами стеганографии, др.), в том числе и криптографическими. Под криптографическими методами защиты информации понимаются такие, которые используют математические способы преобразования защищаемой информации (см. «Словарь криптографических терминов», под ред. Б.А. Погорелова, В.Н. Сачкова, МЦНМО, М., 2006.).

Что такое шифр и чем он отличается от кода? #

Определения шифра Вы можете посмотреть в словаре. Однако очень часто в рунете, да и в литературе тоже, путают эти понятия. Выделим основное отличие на понятийном уровне. Кодирование - это преобразование информации, в котором НЕ участвует секретная составляющая в виде ключа, примером кода является base64 - схема, по которой произвольная последовательность байт преобразуется в последовательность печатных ASCII символов. Другой пример кодирования - смайлики, тоже преобразование информации в другую форму без секретной составляющей. Шифр – это преобразование, в котором участвует в каком-либо виде секретная составляющая (ключ). Примерами шифров являются алгоритмы AES, ГОСТ 28147-89, Магма, Кузнечик.

Одинаковы ли понятия расшифровать, раскодировать, декодировать, дешифровать и прочее? #

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

Что такое протокол аутентификации? #

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

В чем отличие идентификации от аутентификации? И зачем они нужны? #

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

Что такое электронная цифровая подпись и в чем ее отличие от сертификата? #

Определения данных понятий Вы можете найти в словаре , а здесь поясним в чем их различие. Для нормальной работы инфраструктуры открытых ключей (PKI) необходимо наличие центра доверия, обычно это удостоверяющий центр (УЦ). Сертификат - это подписанный удостоверяющим центром открытый ключ пользователя. Сертификат может содержать еще много информации, они выстраиваются в цепочки сертификатов, но главная задача сертификата - удостоверить что открытый ключ именно ВАШ.

Мне интересна криптография, но я не знаю с чего начать. Есть какой-нибудь курс молодого бойца? #

В первую очередь Вам следует запастись терпением. Криптография – наука сложная. Для изучения криптографии также является необходимым знание математики на высоком уровне (студент 3го курса математических/технических специальностей – уровень необходимый, но не достаточный). Для начала можно воспользоваться книгой А.П. Алферов, А.Ю. Зубов, А.С. Кузьмин, А.В. Черемушкин, «Основы криптографии», Гелиос АРВ, М., 2001. Также неплохой вариант: Б. Шнайер «Прикладная криптография: Протоколы, алгоритмы, исходные тексты на языке Си», Триумф, М., 2002, - более популярный, но, на мой взгляд, более слабый вариант. Еще есть книга “Криптографические методы защиты информации для изучающих компьютерную безопасность : учебник для вузов” / А. Б. Лось, А. Ю. Нестеренко, М. И. Рожков. 2023, ISBN 978-5-534-12474-3. На следующем этапе нужно уже определиться со специализацией, и… Удачи!

Часто слышу про тотальный перебор, полный перебор, метод грубой силы, брудфорс. Что это такое и есть ли отличия? #

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

Бывают ли совершенные шифры и что это такое? #

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

Гарантирует ли шифрование целостность данных при передаче? #

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

Если есть слабость у хэш-функции или алгоритма шифрования, то может, если я применю их два раза, слабости уже не будет? #

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

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

Когда используют поточные шифры, а когда блочные? #

Шифры разделяются на блочные и поточные по следующему признаку. Первые оперируют сразу с большим блоком информации (64, 128, 256 бит), вторые вырабатывают знаки шифрующей последовательности меньшей длины (1, 4, 16, 32 бита). В некотором приближении данное различие можно считать условным. Как правило, блочные шифры отличаются от поточных принципами строения. Также, обычно поточные шифры работают в режиме гаммирования, т.е. вырабатывают шифрующую последовательность, которая затем накладывается (суммируется) с последовательностью основного текста. Для блочных же шифров отдельно разрабатываются различные режимы использования (в том числе, режим гаммирования). Исторически поточные шифры использовались на платформах с ограниченными ресурсами (вычислительными, малым объемом памяти), или для обеспечения высокой скорости шифрования. Однако в настоящее время на подавляющем большинстве платформ использование блочных шифров является приемлемым. Поточные шифры продолжают использоваться (Э. Бихам) в случае необходимости иметь сверхскоростной программный шифр, а также в случае аппаратной реализации шифра в массовых дешевых изделиях.

Что такое режимы шифрования и для чего они нужны? #

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

Использования ключа какой длины достаточно для обеспечения конфиденциальности данных? #

Чисто теоритически почти для любого шифра можно определить ключ шифрования (или дешифровать шифртекст). Другой вопрос: за сколько времени? Пусть длина ключа равна n бит. Если Вы используете «хороший» алгоритм шифрования, то для него не существует методов нахождения ключа с трудоемкостью меньше чем 2n (операций опробования одного ключа). В этом случае длины ключа, равной 128 битам, более чем достаточно. Можно также порекомендовать НЕ использовать ключи длиной меньше 64 бит. В то же время, если у Вас не возникает неудобств с хранением, передачей ключей, со скоростью шифрования, то всегда нужно использовать ключ максимальной длины из возможных для Вашего алгоритма шифрования.

Какой блочный шифр лучше: AES или отечественный ГОСТ? #

Чтобы ответить на этот вопрос, нужно в первую очередь определить, по каким критериям следует сравнивать шифры. В первую очередь, это, конечно же, криптографическая стойкость. Во вторую – скорость программной (аппаратной) реализации. Шифры можно также сравнивать по следующему критерию: количество различных платформ, на которых они могут быть реализованы. (Следует учитывать, что платформы, на которых возникает необходимость реализации шифрования, могут быть весьма различными: от высокопроизводительных ЭВМ до смарт-карт.). Что касается криптографической стойкости, то на данный момент и американский стандарт AES и отечественные Кузнечик и Магма можно считать стойкими. В плане быстродействия Магма уступает американскому (не стоит забывать, что Магма старше AES), а вот Кузнечик сравним с AES по скорости. Оба стандарта шифрования позволяют создавать реализации на самых различных платформах, в том числе с ограниченными ресурсами. В то же время, следует отметить, что для реализации шифра Магма, требуется меньше памяти. Таким образом, нельзя однозначно заключить, какой шифр «лучше». Если добавить в критерии оценки шифров такое свойство, как «патриотизм», то однозначно побеждает отечественный стандарт.

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

В первую очередь, алгоритм шифрования должен быть стойким. Во вторую – с достаточно высокой скоростью шифрования. Наибольшее число вопросов у пользователя может вызывать первое условие. Определить, что шифр является стойким может лишь большая группа профессиональных криптографов в течение длительного периода времени (для этого и проводятся в Европе и США конкурсы на различные криптографические алгоритмы). Обычному пользователю, а иногда даже крупной компании, такие трудоемкие исследования, как правило, оказываются неподсилу. Специально для вас существуют стандартизированные решения. (см. предыдущий вопрос). Стандартизированные решения подходят практически в любой ситуации. Однако бывают исключительные случаи (см. ответ на вопрос из ФАКа «Существует ГОСТ на шифрование, зачем нам еще какие-то шифры и алгоритмы?»). Какой шифр использовать в таких ситуациях – зависит уже от множества различных условий, и общего рецепта здесь дать нельзя.

Существует ГОСТ на шифрование, зачем нам еще какие-то шифры и алгоритмы? #

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

Я придумал свой шифр, могу ли я его использовать? #

Смотря для каких целей. Если хотите поиграть в шпионов – используйте на здоровье! Если же от стойкости Вашего шифра зависит конфиденциальность Ваших данных, финансовое состояние Вашей фирмы или Вас лично, то ответ – НЕТ. Человеку свойственно ошибаться, даже если он профессионал. Поэтому, перед тем, как начать практическое использование криптографического алгоритма, он проходит множество проверок различными экспертами. И процесс этот не быстрый: конкурс NESSIE проводился в течение 3,5 лет; конкурс AES – почти 4 года; конкурса SHA-3 – 4 года. В общем, если Вам нужно шифровать более серьезные сообщения, чем «Сережка любит Светку из 8 “Б”», то используйте либо стандартизированные решения, либо криптоалгоритмы, прошедшие экспертизу высокого уровня.

Какие атаки на шифры самые эффективные? #

На этот вопрос однозначно ответить нельзя. Дело в том, что для разных шифров наиболее эффективными могут являться совершенно различные атаки. Существуют, конечно, универсальные атаки, как, например, метод полного перебора ключей. В то же время, целый ряд атак (например, слайд-атака) применимы только к очень ограниченному кругу шифров. В последнее время, в связи с увеличением длин ключей и развитием методов синтеза шифров, наиболее эффективными (по крайней мере с точки зрения практики) являются атаки не на сами шифры, а на их реализацию: кэш-атаки (cache attacks), атаки на основе потребления ресурсов (time attack, power analysis attacks, side-channel attack), методы на основе связанных ключей, и др.

Что такое rainbow attacks и rainbow table? #

Радужные таблицы (rainbow table) это особый вариант таблиц, который используется при алгоритмах поиска или перебора, основанных на принципе time-memory tradeoff (компромисс между временем поиска и размером таблиц). Существует несколько способов построения таких таблиц. Все они основаны на построении цепочек последовательного применения исследуемой функции и хранении только первой и последней точек данных цепочек. Известны классический метод, предложенный Хеллманом, метод основанный на выделенных точках и метод радужных таблиц. Все эти методы различаются так называемой функцией редукции. Для метода радужных таблиц эта функция состоит из последовательности различных функций. Это позволяет уменьшить число таблиц и увеличить их размер, т.к. уменьшается вероятность склеивания генерируемых цепочек. Самые известные атаки подобного вида: обращение хэш-функции MD5, атаки на A5/1 и DES.

Криптография с открытым ключом, ЭЦП #

Если ключ – «открытый», то как же обеспечивается защита информации? #

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

Если криптография с открытым ключом – это так удобно, то зачем тогда «традиционная» криптография с секретным ключом? #

У криптографии с открытым ключом есть свои плюсы и минусы. К плюсам можно отнести удобство в управлении ключами и возможность организовать процедуры подписи и ключевого обмена. Однако есть и минусы. Это сложность реализации, как правило, невысокая скорость работы. Так же относят к минусам и то, что принципы, которые лежат в основе криптографии с открытым ключом, основаны на трудно решаемых математических задачах, которые однажды, кто-нибудь, может и решить. В общем случае, они (задачи эти, типа разложения на множители), конечно, решены, но вот с практической точки зрения требуются БОЛЬШИЕ И ДОРОГИЕ компьютеры для их решения, которые не могут быть доступны простым гражданам или фирмам. Например, квантовый компьютер - хороший кандидат для решения подобных задач, но пока его не построили в нужном виде!

Какие бывают протоколы открытого распределения ключей? Какой лучше? #

Один из самых распространенных протоколов открытого распределения ключей - это протокол Диффи-Хеллмана. Все остальные, в принципе, построены на его основе. К сожалению, протокол не стойкий относительно активной атаки «человек посередине». Однако если расширить протокол средствами аутентификации, то данное решение будет вполне безопасно. Существуют десятки модификаций протокола Диффи-Хеллмана и протоколов, использующих схожие математические идеи. Кроме того, существуют протоколы, использующие симметричные криптографические алгоритмы. За годы работы сложилась большая практика использования и анализа этих протоколов, так что если хотите прямо самый стойкий - обратите внимание на алгоритмы рукопожатия протоколов TLS 1.3, IPSec, WireGuard.

Какую схему электронной цифровой подписи нужно использовать, чтобы ее невозможно было подделать? #

Используйте стандартизированные решения, например ГОСТ Р 34.10-2012. Очень хорошая стойкая схема.

Функции хэширования #

Есть ли пример коллизии для какой-нибудь популярной хэш-функции #

Долгое время самой распространенной функцией хэширования являлась MD5. В настоящее время эта функция хэширования к большому сожалению еще продолжает использоваться. Однако в августе 2004 года для MD5 впервые предъявлены коллизии. Методы совершенствовались и теперь коллизии MD5 строятся уже за сотые доли секунды. Более того, имеются примеры так называемых мультиколлизий. Например, здесь можно найти примеры исполняемых файлов с различным содержанием, но одинаковыми значения хэш-функции MD5 от них. Никогда не используйте MD5!

MD5 сломали, могу ли я обратить ее и узнать, от какого сообщения получен именно этот хэш-код? #

Для произвольного значения хэш-функции, на данный момент, нет. Хэш-функцию MD5 сломали относительно задачи построения коллизии. Но пока не разработано универсального метода построения прообраза для этой хэш-функции. Однако методы анализа MD5 развиваются очень стремительно и появление метода построения прообраза в ближайшее время весьма реально. Следует отметить, что при определенных предположениях задача построения прообраза решена уже на данный момент. Например, здесь (http://eprint.iacr.org/2011/248.pdf) решается задача восстановления пароля по значению хэш-кода MD5 от строки, состоящей из этого пароля и значения соли. Кроме того существует много проектов по “обращению” хэш функций MD5 и SHA1 для популярных паролей.

Зачем нужны криптографические хэш-функции? #

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

Зачем нужны ключевые хэш-функции, MAC, HMAC? И в чем между ними разница? #

Ключевые функции хэширования (коды аутентификации сообщений, message authentication code, MAC), в отличие от бесключевых функций хэширования, при вычислении хэш-кода используют некоторую секретную информацию – ключ. Ключевые функции хэширования используются для обеспечения целостности информации и аутентификации сообщений или пользователей. Один из наиболее распространенных вариантов построения MAC на основе бесключевой функции хэширования носит название HMAC. При вычислении хэш-кода с помощью HMAC используется двукратное вычисление бесключевой функции хэширования.

При анализе хэш-функций часто говорят про дни рождения. Что это значит? #

При криптографическом анализе хэш-функций, одной из основных рассматриваемых задач является задача построения коллизии. Другими словами, требуется найти два различных сообщения x и y, такие что значения их хэш-кодов совпадают: h(x)=h(y). На первый взгляд может показаться, что если длина хэш-кода равна n бит, то найти коллизию для “идеальной” хэш-функции можно только с помощью перебора 2n различных сообщений. Но это не так, и в теории вероятностей это называется парадоксом задачи о днях рождениях. Задача о днях рождениях формулируется следующим образом: какова вероятность того, что среди N учеников одного класса существуют двое, имеющие одинаковую дату рождения? Оказывается, что данная вероятность больше 0,5 уже при N=23. Задача о днях рождениях схожа с задачей поиска коллизии функции хэширования и для построения коллизии достаточно перебрать гораздо меньше, чем 2n сообщений, а именно - порядка 2(n/2).

Слышал, что-то не так с отечественным стандартом на хэш-функцию. В чем там дело? #

При криптографическом анализе функций хэширования рассматриваются три основные задачи: 1. Построение прообраза. 2. Построение второго прообраза. 3. Построение коллизии. (см. основную статью о хэш-функциях). Существуют общие методы решения каждой из этих задач, применимые к любой функции хэширования. Некоторые считают хэш-функцию «сломанной», если для нее предложены методы решения какой-либо из задач 1-3 с трудоемкостью меньше трудоемкости общего метода. В 2008 году появился ряд работ австрийских и польских криптографов по анализу прошлого отечественного стандарта на хэш-функцию. Их усилиями трудоемкость решения основных задач криптоанализа для хэш-функции ГОСТ Р 30.11-94 существенно снижена по сравнению с общими методами анализа. В то же время, трудоемкость решения данных задач (как и требования на необходимый объем памяти) остается настолько большой, что не стоит опасаться за отечественный стандарт на хэш-функцию. При этом с 2013 года в России действует новый стандарт на функцию хэширования Стрибог. Если кртако, то в новом алгоритме полностью поменяли структуру и увеличили размер хэш-кода.

Говорят, сломали MD5 и SHA-1! Можно их использовать дальше? #

«Сломали» - термин неформальный и его можно трактовать различными способами. В последнее время действительно появился целый ряд работ, показавших серьезные слабости алгоритмов хэширования MD5 и SHA-1. Здесь отметим только основное. Для MD5 уже построено огромное число практических инструментов как для построения коллизий, так и обращения для “некоторых” вариантов. В то же время, на данный момент существует незначительное число практических примеров использования теоретических результатов по анализу хэш-функций SHA-1, например вот первая коллизия SHA1. Тем не менее, от использования MD5 и SHA1 нужно отказаться КАТЕГОРИЧЕСКИ!

Что такое соль и зачем ее используют при хранении паролей и вычислении хэш-кода? #

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

Использование криптографии на практике #

Как обеспечить целостность данных? #

Что такое целостность данных Вы посмотрите в словаре, а мы рассмотрим методы ее обеспечения. Сначала теория. Обеспечение целостности данных это одна из задач, которую успешно решают с помощью функций хэширования. Если вычислить хэш-код от блока данных, то при практически любом, даже самом незначительном изменении блока данных хэш-код поменяется. И если Вы сохраняете хэш-код в безопасности, то это гарантирует Вам неизменность данных при передаче. Однако, если Вы передаете хэш-код вместе с данными, то использование обычных хэш-функций уже опасно, Вам необходимо применить ключевые хэш-функции, например HMAC. Задачу обеспечения целостности можно также решать с помощью шифрования или кодирования (например, процедурой архивации данных). Теперь о практике. Если вы хотите передать файл по сети и хотите быть уверены, что он дойдет в точности такой, какой был послан, Вы можете: - воспользоваться программой вычисления функции хэширования (самая популярная программа sha256sum) и вычислить хэш-код от файла. Однако, во первых, вам надо убедиться что само значение хэш-кода никто не изменил; - архивировать файл и передать архив. От случайных изменений это предохраняет, а если Вы боитесь намеренного изменения – архивируйте с паролем; - зашифровать файл, только при этом ключ шифрования не передавайте вместе с файлом; - и, наконец, подписать ваш файл с помощью ЭЦП (о том как это сделать, смотрите ФАК)

Как шифровать электронную почту? #

Для обмена зашифрованными или подписанными ЭЦП электронными письмами можно использовать стандартное решение PGP. Реализаций данного решения много, например http://www.gnupg.org/ . Для использования PGP Вам необходимо сгенерировать пару ключей: открытый и секретный. Затем необходимо передать по безопасному или доверенному каналу Ваш открытый ключ абоненту. Далее в любой почтовой программе типа The Bat или Outlook создать письмо и подписать и/или зашифровать его, используя соответствующие пункты меню программы. Вашему абоненту останется просто проверить подпись или расшифровать письмо.

Как подписать цифровой подписью электронный документ (письмо)? #

Как подписать письмо цифровой подписью смотрите в отдельном вопросе. Если Вы хотите подписать файл то Вам понадобиться развернуть у себя небольшую инфраструктуру открытых ключей, а именно сгенерировать себе открытый и закрытый ключ. Проще всего это сделать с помощью библиотеки openssl (http://www.openssl.org/ ). Утилитами genrsa можно получить открытый и секретный ключи необходимого размера, а утилитой rsautl подписать файл. Это будут решение на коленке. А по правильному - вам нужно скачать отечественный криптопровайдер (Инфотекс или КриптоПро), получить сертификаты на свои ключи у некоторго УЦ и затем вы сможете подписывать свои документы стойкими алгоритмами и любой ваш абонент сможет эту подпись проверить.

Мне нужно зашифровать файл (данные), как это сделать? #

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

Какая ОС безопасней: Windows или Unix? #

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

Как создать свой сертификат и использовать у себя на сайте? #

Действительн, без включения TLS многие поисковики просто не будут индексировать ваш сайт. Самое простое - это создать свой самоподписанный сертификат. Это может легко сделать библиотека openssl. После чего заходите в конфиги своего любимого apache и прописываете пути к ключам и сертификату для организации TLS/SSL соединения. Если Вы хотите сделать это под Windows, то Вам понадобиться установленный CSP (Cryptographic Service Provider), можно установить и отечественный CSP ((Инфотекс или КриптоПро) с поддержкой отечественных стандартов на хэш-функцию, шифрование и ЭЦП. Далее Вам останется воспользоваться средствами этого самого CSP, ну или просто зайти на сайт, например, http://www.cryptopro.ru/certsrv/ и запросить там тестовый сертификат. Но самый быстрый путь - воспользоваться сервисом LetsEncrypt. Там за 5 минут и совершенно бесплатно вы установите себе сертификаты на сайт. К сожалению российского аналога пока нет, но мы (российское криптографическое сообщество) работаем над этим.

Мне нужно получить случайное число. Как это сделать? #

Получение качественных случайных чисел является сложной криптографической задачей. Для ее решения существуют как аппаратные так и программные средства. На практике можно воспользоваться как самыми простыми так и более сложными алгоритмами. Можно выписывать случайное число “из головы”, либо с помощью механических средств (монетка, кубики, домино т.д.). Затем, для повышения его “качества” желательно применить к нему хэш-функцию, добавив в качестве аргумента еще каких-либо псевдослучайных параметров (текущее время, дата, номер машины соседа и т.п.). Однако этот метод хорош для разового использования. Для получения большого числа случайных чисел желательно использовать программные средства. Почти в любом языке программирования есть функция rand(), которая генерирует псевдослучайное число. Однако следует помнить, что период данной функции обычно небольшой (216 или 232) и до ее использования необходимо задать первоначальное псевдослучайное заполнение seed (на основе времени, даты и тп). Существуют генераторы ключевой информации в программных криптографических пакетах (например, VeraCrypt). Многие открытые операционные системы собирают псевдослучайную информацию (движение мышки, нажатие клавиш и т.п.) в определенный файл (/dev/random). Можно воспользоваться онлайн-генераторами (http://random.org), однако алгоритмы их работы, как правило, не опубликованы.

Что такое одноразовые пароли? #

Одноразовые пароли (One-Time Password, OTP) - это одно из средств решения задачи аутентификации пользователей. Ключевым свойством OTP является то, что пароль действует только для одного процесса аутентификации и в ограниченном промежутке времени. Данное свойство позволяет эффективно противостоять возможной компрометации пароля во время использования. Современные реализации таких систем строятся на основе электронных брелков (типа https://idcards.ru/catalog/13404/). Существуют различные схемы работы системы OTP, в самой простой из них сервер и клиентское устройство ведут счет уже полученных паролей и для новой аутентификации на обоих сторонах генерируется одинаковое случайное значение - пароль.

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

Для решения задачи соединения компьютеров в безопасную сеть в рамках общедоступной сети существует стандартный способ – организовать VPN с закрытым трафиком с помощью протокола IPSec или TLS. Способ хороший, но для частного использования, например двух компьютеров, может быть слишком громоздким. Можно использовать более простое решение – туннелирование. Организовать его не сложно: ставится сервер ssh. Для linux систем это не проблема, для Windows можно использовать freeSSHd (www.freesshd.com ). Далее настраиваем туннель. Для linux способов много, для Windows можно использовать бесплатный клиент Putty, у которого существует возможность настройки туннеля. После успешной настройки трафик между двумя компьютерами (ftp, http, icq, и т.д.) можно направлять через зашифрованный канал ssh.

Является ли использование паролей для файлов Word/RAR/Zip достаточным для обеспечения конфиденциальности информации? #

C паролями на архивы ситуация существенно зависит от программы архивации. Как правило, ни один архиватор пароль для архива в самом архиве не хранит. Шифруется, в основном, уже архивированный файл. Основная атака на архиваторы с паролем - это атака с известным открытым текстом, т.е. одним из файлов архива. Для наиболее известных архиваторов положение следующее: ARJ – не стойкий, любая длинна пароля вскрывается; ZIP – не стойкий, если только не используется AES; RAR – ранние версии уязвимы, версия 3.0 и старше использует в качестве шифра AES и достаточно стойки при хорошем пароле. Что касается Word и MS Office, то здесь ситуация схожая. Ранние версии офиса уязвимы и пароли легко вскрываются. Версии программы, начиная с Office XP/2003, содержат возможность установки более-менее стойкого пароля на открытие файлов, однако по умолчанию стоит пароль 40 бит, что очень опасно.

У меня пароль на сайте из 5 символов? Насколько реально его угадать или перебрать? Если да, сколько символов точно не переберут? #

Вопрос о грамотной политике своих паролей не прост. Следует сказать, что скорость и возможность перебора паролей сильно зависит от того, кто и какой пароль подбирает. Например, если злоумышленник хорошо знает автора пароля, то, попробовав около 20 вариантов (например номер машины, имя жены, дни рождения или номер телефона) злоумышленник может добиться успеха. Следует так же заметить, что большое количество программ получают пароли в открытом виде, что облегчает задачу перехвата. Скорость перебора паролей сильно зависит от самого приложения, для которого он осуществляется. Приложение может содержать защиту от перебора, что очень осложнит сам перебор, однако нельзя забывать, что злоумышленник может украсть базу паролей и спокойно перебирать ее дома на своем компьютере. Тем не менее, скорость перебора иногда может достигать десятков миллионов вариантов в секунду. А значит, пароль из 5 символов очень слаб. Несложно посчитать, что для такой скорости и латинского алфавита из больших и малых букв (52 символа) время полного перебора 10 символьного пароля составит (5210)/10000000/3600/24/365 = 458 лет. Для 6 символов время составит 33 минуты! Как выбирать хороший пароль смотрите в отдельной статье.

Я слышал, что сети Wi-Fi не безопасны! Так ли это? #

Если грамотно подходить к вопросу обеспечения безопасности своей точки доступа или WiFi канала, то проблем можно избежать. Дело в том, что протокол WEP (Wired Equivalent Privacy) — устаревший протокол обеспечения безопасности беспроводной IEEE 802.11 сети, имеет существенные уязвимости и использовать его на практике категорически не рекомендуется. В качестве замены протокола WEP был разработан сначала протокол WPA, а затем и протокол WPA2. Для обеспечения достаточного уровня безопасности беспроводной сети рекомендуется использовать протокол WPA2, режим шифрования AES и режим аутентификация либо PSK (предварительно распределенный ключ) для личного использования либо аутентификацию EAP. В любом случае, когда используете общественную точку доступа даже с применением WPA - будте бдительны, не передавайте конфиденциальную информацию в открытом виде.

Считается что SSL/TLS - это безопасный протокол в Интернете, но как же можно этому верить, если ключ или пароль я нигде не ввожу? #

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

Иногда браузер при заходе на сайт предупреждает о просроченных или неверных сертификатах и советует не заходить туда? Насколько это опасно? #

Это опасно! В этой ситуации возможны два случая. Первый, самый распространенный и менее опасный. Поддавшись привычке к халяве, или просто по неспособности, владельцы сайта не удосужились изготовить верный сертификат и продлевать его должным образом. Вместо этого они изготовили самоподписной сертификат и установили его на сайт (обычно он еще и просроченный). Это связано с тем, что для изготовления верного (валидного) сертификата необходимо его подписать в некотором Удостоверяющем Центре, а это, как правило, стоит денег. И второй, более опасный случай. Существует атака на протокол TLS методом «человек посередине» (Man-in-the-middle attack). Атака сводиться к тому, что злоумышленник подменяет собой сервер назначения (например gmail.com), использует свой самоподписной или просто «не верный» сертификат и предлагает его Вам в качестве сертификата сервера. Если вы игнорируете предупреждение браузера об опасности и соглашаетесь на начало сессии TLS, вы начинаете общение с компьютером злоумышленника по как бы защищенному каналу и рассказываете ему все свои «пароли и явки»