В криптографии SHA-1 ( алгоритм безопасного хеширования 1 ) — это хэш-функция , которая принимает входные данные и создает 160- битное (20- байтовое ) хеш - значение, известное как дайджест сообщения , обычно отображаемое в виде 40 шестнадцатеричных цифр. Он был разработан Агентством национальной безопасности США и является федеральным стандартом обработки информации США . [3] Алгоритм был криптографически взломан [4] [5] [6] [7] [8] [9] [10] , но до сих пор широко используется.
С 2005 года SHA-1 не считается безопасным против хорошо финансируемых противников; [11] по состоянию на 2010 год многие организации рекомендовали его замену. [12] [10] [13] NIST официально отказался от использования SHA-1 в 2011 году и запретил его использование для цифровых подписей в 2013 году, а также заявил, что от него следует отказаться к 2030 году. [ 14] По состоянию на 2020 год выбранный-префикс атаки на SHA-1 практичны. [6] [8] Таким образом, рекомендуется как можно скорее удалить SHA-1 из продуктов и вместо этого использовать SHA-2 или SHA-3 . Замена SHA-1 необходима там, где он используется для цифровых подписей .[обновлять]
Все основные поставщики веб-браузеров прекратили прием SSL-сертификатов SHA-1 в 2017 году. [15] [9] [4] В феврале 2017 года CWI Amsterdam и Google объявили, что провели коллизионную атаку на SHA-1, опубликовав два разных PDF-файла. который произвел тот же хэш SHA-1. [16] [2] Однако SHA-1 по-прежнему безопасен для HMAC . [17]
Microsoft прекратила поддержку подписи кода SHA-1 для Центра обновления Windows 7 августа 2020 г.
SHA-1 создает дайджест сообщения на основе принципов, аналогичных тем, которые использовал Рональд Л. Ривест из Массачусетского технологического института при разработке алгоритмов дайджеста сообщения MD2 , MD4 и MD5 , но генерирует большее хэш-значение (160 бит против 128 бит).
SHA-1 был разработан в рамках проекта правительства США Capstone . [18] Исходная спецификация алгоритма была опубликована в 1993 году под названием Secure Hash Standard , FIPS PUB 180, агентством по стандартизации правительства США NIST (Национальный институт стандартов и технологий). [19] [20] Эту версию теперь часто называют SHA-0 . Он был отозван АНБ вскоре после публикации и заменен пересмотренной версией, опубликованной в 1995 году в FIPS PUB 180-1 и обычно обозначаемой SHA-1 . SHA-1 отличается от SHA-0 лишь одним побитовым вращением в расписании сообщений своей функции сжатия . По данным АНБ, это было сделано для исправления ошибки в исходном алгоритме, которая снижала его криптографическую безопасность, но никаких дополнительных объяснений они не предоставили. [21] [22] Общедоступные методы действительно продемонстрировали компрометацию SHA-0 в 2004 году, до SHA-1 в 2017 году ( см. §Атаки ).
SHA-1 является частью нескольких широко используемых приложений и протоколов безопасности, включая TLS и SSL , PGP , SSH , S/MIME и IPsec . Эти приложения также могут использовать MD5 ; и MD5, и SHA-1 произошли от MD4 .
SHA-1 и SHA-2 — это алгоритмы хеширования, требуемые по закону для использования в некоторых приложениях правительства США , включая использование в других криптографических алгоритмах и протоколах, для защиты конфиденциальной несекретной информации. FIPS PUB 180-1 также поощряет принятие и использование SHA-1 частными и коммерческими организациями. SHA-1 больше не используется в государственных целях; Национальный институт стандартов и технологий США заявил: «Федеральные агентства должны прекратить использование SHA-1 для... приложений, которым требуется устойчивость к коллизиям, как можно скорее, и должны использовать семейство хеш-функций SHA-2 для этих приложений после 2010 года». , [23] , хотя позже это правило было смягчено, чтобы позволить использовать SHA-1 для проверки старых цифровых подписей и отметок времени. [24]
Основной мотивацией для публикации алгоритма безопасного хеширования стал стандарт цифровой подписи , в который он включен.
Хэш-функции SHA были использованы в качестве основы блочных шифров SHACAL .
Системы контроля версий , такие как Git , Mercurial и Monotone, используют SHA-1 не для безопасности, а для идентификации версий и обеспечения того, чтобы данные не изменились из-за случайного повреждения. Линус Торвальдс сказал о Git в 2013 году:
Однако Git не требует второго сопротивления прообраза SHA-1 в качестве функции безопасности, поскольку он всегда предпочитает сохранять самую раннюю версию объекта в случае конфликта, не позволяя злоумышленнику тайно перезаписать файлы. [26]
Для хеш-функции, для которой L — количество битов в дайджесте сообщения, поиск сообщения, соответствующего данному дайджесту сообщения, всегда можно выполнить с помощью перебора примерно за 2 L вычислений. Это называется атакой прообраза и может быть практичным, а может и не быть практичным в зависимости от L и конкретной вычислительной среды. Однако коллизия , заключающаяся в поиске двух разных сообщений, которые создают один и тот же дайджест сообщения, требует в среднем всего лишь около 1,2×2 L /2 вычислений с использованием атаки «дня рождения» . Таким образом, надежность хеш-функции обычно сравнивают с симметричным шифром, длина которого составляет половину дайджеста сообщения. Первоначально предполагалось, что SHA-1, имеющий 160-битный дайджест сообщения, имеет 80-битную надежность.
Некоторые приложения, использующие криптографические хэши, например хранилище паролей, лишь минимально подвержены атаке коллизий. Создание пароля, который работает для данной учетной записи, требует атаки прообразом , а также доступа к хешу исходного пароля, что может быть тривиальным, а может и не быть. Обратное шифрование пароля (например, для получения пароля для проверки учетной записи пользователя в другом месте) не представляется возможным в результате атак. (Однако даже безопасный хеш пароля не может предотвратить перебор слабых паролей .)
В случае подписания документа злоумышленник не мог просто подделать подпись на существующем документе: злоумышленнику пришлось бы предоставить пару документов, один безобидный и один вредный, и заставить владельца закрытого ключа подписать безобидный документ. Существуют практические обстоятельства, при которых это возможно; до конца 2008 года можно было создавать поддельные сертификаты SSL с использованием коллизии MD5 . [27]
Из-за блочной и итеративной структуры алгоритмов и отсутствия дополнительных финальных шагов все функции SHA (кроме SHA-3) [28] уязвимы для атак с расширением длины и коллизией частичных сообщений. [29] Эти атаки позволяют злоумышленнику подделать сообщение, подписанное только хэшем с ключом – SHA( message || key ) или SHA( key || message ) – путем расширения сообщения и пересчета хеша без знания ключа. Простым улучшением для предотвращения этих атак является двойное хеширование: SHA d ( message ) = SHA(SHA(0 b || message )) (длина 0 b , нулевого блока, равна размеру блока хеш-функции) .
На CRYPTO 98 два французских исследователя, Флоран Шабо и Антуан Жу , представили атаку на SHA1: коллизии можно найти со сложностью 2 61 , что меньше, чем 2 80 для идеальной хэш-функции того же размера. [30]
В 2004 году Бихам и Чен обнаружили близкие коллизии для SHA-0 — двух сообщений, хэш которых имеет почти одно и то же значение; в этом случае 142 из 160 бит равны. Они также обнаружили, что количество полных столкновений SHA-0 сократилось до 62 из 80. [31]
Впоследствии, 12 августа 2004 г., Жу, Каррибо, Лемюэ и Жалби объявили о коллизии полного алгоритма SHA-0. Это было сделано путем обобщения атаки Шабо и Жу. Обнаружение коллизии имело сложность 2 51 и заняло около 80 000 процессоро-часов на суперкомпьютере с 256 процессорами Itanium 2 (что эквивалентно 13 дням полноценного использования компьютера).
17 августа 2004 года на конференции CRYPTO 2004 Ван , Фэн, Лай и Ю объявили предварительные результаты об атаке на MD5 , SHA-0 и другие хэш-функции. Сложность их атаки на SHA-0 составляет 2 40 , что значительно лучше, чем у атаки Joux et al. [32] [33]
В феврале 2005 года было объявлено об атаке Xiaoyun Wang , Yiqun Lisa Yin и Hongbo Yu, которая смогла обнаружить коллизии в SHA-0 за 2 39 операций. [5] [34]
Еще одна атака в 2008 году с использованием атаки бумеранга снизила сложность обнаружения коллизий до 2 33,6 , что, по оценкам, с 2008 года на среднем ПК занимало 1 час. [35]
В свете результатов SHA-0 некоторые эксперты [ кто? ] предложил пересмотреть планы использования SHA-1 в новых криптосистемах . После публикации результатов CRYPTO 2004 NIST объявил, что планирует отказаться от использования SHA-1 к 2010 году в пользу вариантов SHA-2. [36]
В начале 2005 года Винсент Реймен и Элизабет Освальд опубликовали атаку на урезанную версию SHA-1 – 53 из 80 раундов – которая обнаруживает коллизии с вычислительными затратами менее 280 операций . [37]
В феврале 2005 года было объявлено о нападении Сяоюнь Вана , Ицюнь Лизы Инь и Хунбо Юй. [5] Атаки могут обнаруживать коллизии в полной версии SHA-1, требуя менее 269 операций . (Для перебора потребуется 280 операций .)
Авторы пишут: «В частности, наш анализ построен на оригинальной дифференциальной атаке на SHA-0, атаке на близкую коллизию на SHA-0, методах многоблочных коллизий, а также методах модификации сообщений, используемых при атаке поиска коллизий на SHA-0. MD5. Взлом SHA-1 был бы невозможен без этих мощных аналитических методов». [38] Авторы представили коллизию для 58-раундового SHA-1, обнаруженную с помощью 2 33 хеш-операций. Статья с полным описанием атаки была опубликована в августе 2005 года на конференции CRYPTO.
В интервью Инь заявляет: «Грубо говоря, мы используем следующие две слабости: первая заключается в том, что этап предварительной обработки файла недостаточно сложен; другая заключается в том, что некоторые математические операции в первых 20 раундах имеют неожиданные проблемы с безопасностью». [39]
17 августа 2005 года на конференции CRYPTO 2005 Rump Session от имени Сяоюнь Вана , Эндрю Яо и Фрэнсис Яо было объявлено об улучшении атаки SHA-1 , в результате чего сложность, необходимая для обнаружения коллизии в SHA-1, снизилась до 263 . [7] 18 декабря 2007 года детали этого результата были объяснены и проверены Мартином Кокраном. [40]
Кристоф Де Каньер и Кристиан Рехбергер еще больше усовершенствовали атаку на SHA-1 в работе «Нахождение характеристик SHA-1: общие результаты и приложения» [ 41], получив награду за лучшую статью на ASIACRYPT 2006. Столкновение двух блоков для 64-раундового SHA Было представлено -1, найденное с использованием неоптимизированных методов с использованием 2 35 оценок функции сжатия. Поскольку эта атака требует примерно 235 оценок , она считается значительным теоретическим прорывом. [42] В 2010 году Гречников продлил атаку до 73 раундов (из 80). [43] Однако для того, чтобы найти фактическое столкновение за полные 80 раундов хэш-функции, требуется огромное количество компьютерного времени. С этой целью 8 августа 2007 года начался поиск коллизий SHA-1 с использованием волонтерской вычислительной платформы BOINC , организованный Технологическим университетом Граца . Проект был прекращен 12 мая 2009 г. из-за отсутствия прогресса. [44]
На конференции CRYPTO 2006 Кристиан Рехбергер и Кристоф Де Каньер заявили, что обнаружили коллизионную атаку на SHA-1, которая позволит злоумышленнику выбрать хотя бы части сообщения. [45] [46]
В 2008 году методология атаки Стефана Мануэля сообщила о хеш-коллизиях с оценочной теоретической сложностью от 2,51 до 2,57 операций . [47] Однако позже он отказался от этого утверждения, обнаружив, что локальные пути столкновений на самом деле не были независимыми, и, наконец, указал в качестве наиболее эффективного вектора столкновений, который уже был известен до этой работы. [48]
Кэмерон Макдональд, Филип Хоукс и Йозеф Пепшик представили атаку коллизией хэшей с заявленной сложностью 2,52 на сессии Rump Session Eurocrypt 2009. [49] Однако в сопроводительной статье «Дифференциальный путь для SHA-1 со сложностью O ( 2,52 )» было отозвано в связи с тем, что авторы обнаружили, что их оценка была неверной. [50]
Одна из атак на SHA-1 была предпринята Марком Стивенсом [51] с ориентировочной стоимостью 2,77 миллиона долларов (2012 г.) за взлом одного хеш-значения путем аренды мощности ЦП у облачных серверов. [52] Стивенс разработал эту атаку в проекте под названием HashClash, [53] реализовав атаку по дифференциальному пути. 8 ноября 2010 года он заявил, что у него была полностью работающая почти коллизионная атака на полный SHA-1, работающая с оценочной сложностью, эквивалентной 2 57,5 сжатиям SHA-1. По его оценкам, эту атаку можно расширить до полного столкновения со сложностью около 261 .
8 октября 2015 года Марк Стивенс, Пьер Карпман и Томас Пейрин опубликовали атаку с коллизиями при свободном запуске функции сжатия SHA-1, которая требует всего 257 вычислений SHA-1. Это не приводит напрямую к коллизии полной хеш-функции SHA-1 (когда злоумышленник не может свободно выбирать начальное внутреннее состояние), но подрывает требования безопасности для SHA-1. В частности, это был первый раз, когда была продемонстрирована атака на полный SHA-1 ; все предыдущие атаки были слишком дорогими для их авторов. Авторы назвали этот значительный прорыв в криптоанализе SHA-1 The SHAppening . [10]
Метод был основан на их более ранней работе, а также на методе ускорения вспомогательных путей (или бумерангов) от Жу и Пейрина и использовании высокопроизводительных и экономичных графических карт от Nvidia . Коллизия была обнаружена в кластере из 16 узлов с 64 видеокартами. Авторы подсчитали, что подобную коллизию можно найти, купив 2000 долларов США графического времени на EC2 . [10]
Авторы подсчитали, что стоимость аренды достаточного количества времени CPU/GPU EC2 для создания полной коллизии для SHA-1 на момент публикации составляла от 75 до 120 тысяч долларов США, и отметили, что это вполне укладывалось в бюджет преступных организаций. не говоря уже о национальных спецслужбах . Таким образом, авторы рекомендовали как можно скорее прекратить поддержку SHA-1. [10]
23 февраля 2017 года CWI (Centrum Wiskunde & Informatica) и Google объявили об атаке SHAttered , в ходе которой они сгенерировали два разных PDF-файла с одинаковым хешем SHA-1 примерно в двух оценках 63,1 SHA-1. Эта атака примерно в 100 000 раз быстрее, чем перебор коллизии SHA-1 с атакой Birthday , для которой, по оценкам, потребуется 2 80 оценок SHA-1. Атака потребовала «вычислительной мощности, эквивалентной 6500 годам однопроцессорных вычислений и 110 годам однопроцессорных вычислений». [2]
24 апреля 2019 года в статье Гаэтана Леурана и Томаса Пейрина, представленной на Eurocrypt 2019, описывалось усовершенствование ранее использовавшейся атаки с использованием лучшего выбранного префикса в функциях дайджеста, подобных Меркле – Дамгорду, на основе блочных шифров Дэвиса – Мейера . Благодаря этим улучшениям этот метод способен обнаруживать конфликты выбранных префиксов примерно за 268 оценок SHA-1. Это примерно в 1 миллиард раз быстрее (и теперь может использоваться для многих целевых атак благодаря возможности выбора префикса, например, вредоносного кода или поддельных идентификационных данных в подписанных сертификатах), чем оценки предыдущей атаки 2 77.1 (но без выбранного префикса, который был непрактичен для большинства целевых атак, поскольку обнаруженные коллизии были почти случайными) [1] и достаточно быстр, чтобы быть практичным для находчивых злоумышленников, требуя около 100 000 долларов облачной обработки. Этот метод также способен находить коллизии выбранных префиксов в функции MD5 , но при сложности 2 46,3 не превосходит предшествующий наилучший доступный метод на теоретическом уровне (2 39 ), хотя потенциально на практическом уровне (≤2 49) . ). [54] Для этой атаки требуется более 500 ГБ памяти.
5 января 2020 года авторы опубликовали улучшенную атаку. [8] В этой статье они демонстрируют атаку коллизией выбранного префикса со сложностью 2 63.4 , которая на момент публикации стоила 45 тысяч долларов США за сгенерированную коллизию.
Реализация всех функций безопасности, одобренных FIPS, может быть официально проверена с помощью программы CMVP , совместно управляемой Национальным институтом стандартов и технологий (NIST) и Управлением безопасности коммуникаций (CSE). Для неофициальной проверки на сайте NIST доступен для скачивания пакет для создания большого количества тестовых векторов; Однако полученная в результате проверка не заменяет формальную проверку CMVP, которая требуется по закону для определенных приложений.
По состоянию на декабрь 2013 года [обновлять]существует более 2000 проверенных реализаций SHA-1, 14 из которых способны обрабатывать сообщения длиной в битах, не кратной восьми (см. Список проверок SHS, заархивированный 23 августа 2011 г. на Wayback Machine ) . .
Это примеры дайджестов сообщений SHA-1 в шестнадцатеричном формате и в двоичном формате Base64 в текстовой кодировке ASCII .
SHA1("The quick brown fox jumps over the lazy dog")
Даже небольшое изменение в сообщении с огромной вероятностью приведет к изменению многих битов из-за лавинного эффекта . Например, изменение dog
на cog
создает хэш с разными значениями для 81 из 160 бит:
SHA1("The quick brown fox jumps over the lazy cog")
Хэш строки нулевой длины:
SHA1("")
Псевдокод для алгоритма SHA-1 следующий:
Примечание 1. Все переменные представляют собой 32-битные величины без знака и при расчете переносятся по модулю 2 32 , за исключением ml, длины сообщения, которая представляет собой 64-битную величину, и hh, дайджеста сообщения, который представляет собой 160-битную величину. Примечание 2. Все константы в этом псевдокоде имеют обратный порядок байтов . В каждом слове самый старший байт хранится в крайнем левом положении.Инициализируйте переменные:ч0 = 0x67452301h1 = 0xEFCDAB89h2 = 0x98BADCFEh3 = 0x10325476h4 = 0xC3D2E1F0ml = длина сообщения в битах (всегда кратна количеству бит в символе).Предварительная обработка:добавьте к сообщению бит «1», например, добавив 0x80, если длина сообщения кратна 8 битам.добавить 0 ≤ k < 512 бит «0», так чтобы результирующая длина сообщения в битах была равна -64 ≡ 448 (по модулю 512).добавьте ml, исходную длину сообщения в битах, как 64-битное целое число с прямым порядком байтов. Таким образом, общая длина кратна 512 битам.Обработайте сообщение последовательными 512-битными фрагментами:разбить сообщение на 512-битные кускиза каждый кусок разбить фрагмент на шестнадцать 32-битных слов с прямым порядком байтов w[i], 0 ≤ i ≤ 15 Расписание сообщений: расширить шестнадцать 32-битных слов до восьмидесяти 32-битных слов: для i от 16 до 79. Примечание 3: SHA-0 отличается отсутствием поворота влево. w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) поворот влево 1 Инициализируйте хеш-значение для этого фрагмента: а = h0 б = h1 с = h2 d = h3 е = h4 Основной цикл: [3] [55] для i от 0 до 79 , если 0 ≤ i ≤ 19 , то f = (b и c) или (( не b) и d) к = 0x5A827999 иначе, если 20 ≤ я ≤ 39 f = b xor c xor d к = 0x6ED9EBA1 иначе, если 40 ≤ я ≤ 59 f = (b и c) или (b и d) или (c и d) к = 0x8F1BBCDC иначе, если 60 ≤ i ≤ 79 f = b xor c xor d к = 0xCA62C1D6 temp = (a leftrotate 5) + f + e + k + w[i] е = d д = с c = b повернуть влево 30 б = а а = температура Добавьте хеш этого фрагмента к результату: h0 = h0 + а h1 = h1 + б h2 = h2 + с h3 = h3 + d h4 = h4 + еСоздайте окончательное значение хеш-функции (с обратным порядком байтов) в виде 160-битного числа: hh = (h0 сдвиг влево 128) или (h1 сдвиг влево 96) или (h2 сдвиг влево 64) или (h3 сдвиг влево 32) или h4
Число hh
представляет собой дайджест сообщения, который может быть записан в шестнадцатеричном формате (по основанию 16).
Предполагалось, что выбранные постоянные значения, используемые в алгоритме, не являются ничем иным, как числами в рукаве :
k
в 2 30 раз превышают квадратные корни из 2, 3, 5 и 10. Однако они были неправильно округлены до ближайшего целого числа вместо округления до ближайшего нечетного целого числа с уравновешенными пропорциями нуля и единицы битов. Кроме того, выбор квадратного корня из 10 (который не является простым числом) сделал его общим фактором для двух других выбранных квадратных корней из простых чисел 2 и 5, с возможными полезными арифметическими свойствами в последовательных раундах, что снизило устойчивость алгоритма против обнаружение коллизий по некоторым битам.h0
Through h3
такие же, как и в алгоритме MD5, а пятое (для h4
) аналогично. Однако они не были должным образом проверены на устойчивость к инверсии нескольких первых раундов, чтобы сделать вывод о возможных коллизиях в некоторых битах, которые можно использовать в многоблочных дифференциальных атаках.Вместо показанной формулировки из исходного FIPS PUB 180-1 для вычислений f
в приведенном выше основном цикле можно использовать следующие эквивалентные выражения:
Побитовый выбор между c и d , управляемый b . (0 ≤ i ≤ 19): f = d xor (b и (c xor d)) (альтернатива 1) (0 ≤ i ≤ 19): f = (b и c) или (( не b) и d) ( альтернатива 2) (0 ≤ i ≤ 19): f = (b и c) xor (( не b) и d) (вариант 3) (0 ≤ i ≤ 19): f = vec_sel(d, c, b) ( альтернатива 4) [премо08]Побитовая функция большинства. (40 ≤ i ≤ 59): f = (b и c) или (d и (b или c)) (вариант 1) (40 ≤ i ≤ 59): f = (b и c) или (d и (b) xor c)) (вариант 2) (40 ≤ i ≤ 59): f = (b и c) xor (d и (b xor c)) (вариант 3) (40 ≤ i ≤ 59): f = (b и в) xor (b и d) xor (c и d) (вариант 4) (40 ≤ i ≤ 59): f = vec_sel(c, b, c xor d) (вариант 5)
Также было показано [56] , что для раундов 32–79 вычисление:
w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) поворот влево 1
можно заменить на:
w[i] = (w[i-6] xor w[i-16] xor w[i-28] xor w[i-32]) leftrotate 2
Это преобразование сохраняет все 64-битные операнды выровненными и, устраняя зависимость w[i]
on w[i-3]
, обеспечивает эффективную реализацию SIMD с длиной вектора 4, как инструкции x86 SSE .
В таблице ниже внутреннее состояние означает «внутреннюю хеш-сумму» после каждого сжатия блока данных.
Ниже приведен список библиотек шифрования, поддерживающих SHA-1:
Аппаратное ускорение обеспечивается следующими расширениями процессора:
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка )В отличие от SHA-1 и SHA-2, Keccak не имеет недостатка расширения длины, поэтому не нуждается во вложенной конструкции HMAC.
Вместо этого вычисление MAC можно выполнить, просто добавив к сообщению ключ.