Новые монеты с алгоритмом ша 256. Объясняем крипто-алгоритмы майнинга


Многие интересуются техническими основами криптовалют, но немногие знакомы с криптографией. Для того, чтобы докопаться до сути происходящего в биткойн-протоколе приходится продираться через дебри криптографических терминов, загадочных и неудобных акронимов типа SHA-256, Scrypt, base58check, RIPMD-160 и т.п. Мы уже освещали ранее некоторые . В этой статье мы постараемся рассказать об одной из наиболее важных ее сторон – крипто-алгоритмах .

Классика: SHA-256

Начнем наш обзор, конечно же, с классического SHA-256, с которого все начиналось — именно на этом алгоритме построен биткойн-майнинг, как и майнинг подавляющего большинства биткойн-клонов ().

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

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

Как мы все знаем, при майнинге SHA-256 криптомонет, мы решаем поставленную задачу при помощи CPU, GPU или специализированного процессора. Процессы преобразования отображаются в интерфейсе программы, предназначенной для майнинга, например, в виде строки «Accepted 0aef41a3b». Значение 0aef41a3b - это и есть хэш. Он является как бы подписью большого набора данных (собственно, очередного блока транзакций с добавленным к нему случайным числом). Эта короткая строка как бы представляет собой блок, который состоит из нескольких тысяч, если не миллионов, подобных строк.

Это также объясняет то, почему вам нужно решить перебором множество задач, прежде чем удастся отыскать нужный хэш для нового блока. Ведь мы ищем не какой попало хэш, а тот, который начинается на определенное количество нулей. У вас имеется один шанс на тысячу, десятки, сотни тысяч, миллионы решений, что случайно получившийся хэш будет иметь нужное количество нулей в начале. Сколько именно? Определяется параметром сложности, которое задает ваш майнинг-пул. Заранее понять, получится у вас «красивый хэш» или нет, невозможно. Это похоже на игру в лотерею, но с машинами, которые могут выполнять вычисление выигрышной комбинации быстрее и лучше, чем любой из нас.

Вы считаете, что для решения задач, связанных с хэшированием при использовании протокола SHA-256, вам потребуется мощное ? В этом есть определенный смысл. Чем больше используется вычислительной мощности, тем лучше, так как увеличиваются шансы на добычу монет. Но имейте в виду, что вы не единственный, кто занимается майнингом. Есть люди, которые располагают более . Не расстраивайтесь, у вас есть все шансы на выигрыш. Это похоже на игру в лотерею, вы никогда не знаете, когда повезет!

Теперь вернемся к алгоритму SHA-256. Криптовалюта — это не единичный пример, где используется SHA-256. Есть несколько протоколов, о которых вы, скорее всего, слышали и которые используют данный алгоритм. Это протоколы SSL, SSH, PGP и многие другие. Каждый раз, когда вы заходите на защищенный веб-сайт с помощью сертификата SSL, используется SHA-256. Бьюсь об заклад, вы не задумывались об этом, не так ли? Все мы узнаем что-то новое со временем!

Именно алгоритм SHA-256 реализован во всех выпущенных на настоящий момент специализированных ASIC-майнеров, ASIC-оборудование для других алгоритмов майнинга пока только разрабатывается. Помимо Биткойна, майнинг, основанный на SHA-256, используется в ряде других цифровых валют-клонов. Например, такие альткойны как Peercoin и Namecoin его используют. В последнее время наблюдается всплеск новых SHA-256 монет: Zetacoin, Ocoin, Tekcoin и десятки других.

Задачки посложнее: Scrypt

Алгоритм SHA-256 - не единственный алгоритм, который интересен для майнеров. Вторым по популярности майнинг-алгоритмом в мире криптовалют является Scrypt. История появления Scrypt связана с тем, что уже на ранних этапах существования биткойна стало очевидно, что простота функции SHA-256 позволяет сделать аппаратные решения, которые будут выполнять такие вычисления гораздо эффективнее, чем на обычном компьютерном процессоре (CPU). И действительно, биткойн-майнинг очень быстро мигрировал с CPU на графические процессоры (GPU), затем на программируемые аппаратные устройства (FPGA), после чего вышли специально под него заточенные микросхемы (ASIC). специализированной ASIC-мощности представляет проблему для децентрализованной валюты.

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

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

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

Эта искусственно созданная сложность, весь этот трудоемкий вычислительный процесс и требования к памяти приводят к тому, что любое специализированное оборудование для Scrypt-майнинга не будет на порядки эффективнее универсальных устройств (GPU, CPU). В идеале, добыча монет, основанных на Scrypt, должна осуществляться на одном (или нескольких) компьютерах с большим количеством памяти. Здесь большое значение уделяется видеокартам. Если вы рассматриваете покупку видеокарт для майнинга с использованием Scrypt протокола, то наилучшим вариантом станет приобретение изделия от фирмы ATI. В силу архитектурных различий, производительность майнинга на видеокартах ATI сейчас гораздо выше, чем на Nvidia, хотя в будущем все может измениться.

В конечном счете, все сводится к следующему: протоколы SHA-256 и Scrypt работают ради одной цели – получить перебором «красивый хэш», который даст нам (или, скорее, пулу, на который мы работаем) право удлинить блокчейн и получить за это вознаграждения. Они просто решают поставленную задачу по-разному: в SHA-256 упор на технические возможности аппаратного обеспечения — чем выше производительность, тем лучше результат. А Scrypt требует в работе большой объем памяти. Соответственно, производительность напрямую зависит от размера оперативного запоминающего устройства (ОЗУ) и видеокарт, установленных в компьютере.

Самым известным альткойном из использующих в майнинге Scrypt является Litecoin. Есть и Dogecoin, Digitalcoin, Franco, Bottlecaps и многие другие. Популярность Scrypt-монет, особенно лайткойна, существенно возросла после того как биткойн-майнинг массово мигрировал на ASIC и бывшие майнеры с видеокартами остались не у дел — их оборудование не может конкурировать со специализированными комбайнами. Вот они и приспособили свои видюшки к лайткойн-майнингу, или к добыче другой экзотики, которую пока еще можно сбыть доверчивым горе-инвесторам, .

Крипто-танцы: Scrypt-Jane


Знакомьтесь – это Джейн! Нет, нет, она и Scrypt не состоят в браке, хотя между ними все же есть некие родственные отношения. Scrypt-Jane подобно любой другой девушке любит хорошо провести время. А ее способности к перемешиванию данных и приятели-алгоритмы унесут вас в самые экзотические места! Не понимаете? Сейчас все объясню.

Scypt-Jane поддерживает не менее трех различных систем поточного шифрования. Прежде всего, у нас есть Salsa20/8. Нет, это не латиноамериканский танец — на самом деле, это довольно простая функция. Основная ее работа заключается в приеме 192-байтной строки (из букв или цифр) и дальнейшем ее преобразовании в 64-байтную строку Salsa20 (х).

Непонятно, не так ли? Хорошо, постараюсь использовать меньше теории. Salsa20 состоит из двух частей: потокового шифра для шифрования данных (это, должно быть, звучит более знакомо) и функции сжатия (так называемый алгоритм Rumba20), предназначенной для сжимания строки в 192 байта до 64-байтного значения. Используя лексикон «чайника», можно сказать так: ваша строка может быть длиннее 64 байт, пока не сравняется со значением в 192 байта, при этом строка будет сжата (читай: конвертирована) до 64-байтной строки.

Теперь, когда мы немного разогрелись после сальсы и румбы, пришла пора вводить вторую функцию – ChaCha20. Честно, это не я выдумываю такие названия. ChaCha20 очень похож Salsa20: это такой же поточный шифр. И, тем не менее, он предлагает некоторые дополнительные услуги, такие как увеличение устойчивости к криптоанализу. Он также улучшает перемешивание данных на раунд. То есть, если вы занимаетесь добычей криптовалюты в составе майнерского пула, то вы можете увидеть, что один майнерский раунд (период времени, в течение которого пул находит один блок) может составлять либо длинный, либо короткий промежуток времени. Длительность подобных раундов частично зависит и от улучшенного перемешивания, предлагаемого ChaCha20 из Scrypt-Jane. Есть и другие факторы, влияющие на снижение времени раунда, но об этом позже.

И, наконец, последняя, но не менее важная третья функция перемешивания данных — Salsa6420/8. Сексуальное название, не так ли? Salsa6420/8 является доказательством правильности концепции 64-байтной версии Salsa20/8. Это просто улучшенная версия Salsa20/8, которая позволяет работать с более высокобайтными блоками. Я мог бы продолжить в том же духе выдавать подробную техническую информацию, но, боюсь, что половина из вас, мои дорогие читатели, уже заснула, а остальные принялись за игрушки на своих смартфонах, так что давайте не будем заострять на этом внимание. Просто помните о том, что у Scrypt-Jane имеется три отличных «миксовых партнера».

Но вернемся к реальности! Scrypt-Jane также поддерживает несколько хэш-функций. Одна из них уже очень хорошо известна всем нам – это SHA-256. Она также поддерживает более продвинутый вариант SHA-512. Другие поддерживаемые хэш-функции включают BLAKE256/512, Skein512 и Keccak256/512 (или просто SHA -3).

BLAKE256-512 отличается очень простой разработкой для применения и опирается на уже проанализированные нами компоненты: структуру HAIFA (не будем ее рассматривать в данный момент) и основную функцию ChaCha (которую мы затронули ранее). Наиболее характерные особенности BLAKE – это высокий запас надежности (довольно важная характеристика, но о ней не сейчас) и высокопроизводительная универсальность (что тоже очень важно для майнеров). Что нужно запомнить о BLAKE, так это то, что она может и будет работать быстрее, чем SHA- 2(56) на ряде платформ.

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

Да уж, танцевально-криптографическая терминология тут просто зубодробительная. Но хватит теории, давайте посмотрим на то, что Scrypt-Jane может сделать для нас. Scrypt-Jane имеет свой ​​собственный вариант масштабирования сложности проблем. Scrypt-Jane использует N-фактор (который является числом), и это число определяет количество памяти, необходимой для решения задач. Значение числа N-фактора возрастает через определенные промежутки времени. Обычно это происходит тогда, когда в блокчейне найдено определенное количество блоков. Всякий раз, когда это число N-фактора увеличивается, снижается эффективность добычи криптовалют, так как требуется все больший объем памяти на выполнение тех же задач. Говоря простым языком, количество выполненных задач снизится, то есть упадет и вероятность нахождения решения.

Scrypt-Jane первоначально была предназначена для майнинга только на процессорах CPU как еще более замороченная замена Scrypt. Но увы, доминирование CPU-майнинга и тут длилось недолго. Майнеры, работающие на GPU, как вороны кружили вокруг Scrypt-Jane монет, стремясь увеличить эффективность добычи и, соответственно, прибыль. Вы можете подумать, что даже в случае уменьшения прибыли, вы сможете вести добычу с GPU в течение более длительного времени по сравнению с майнингом на CPU? Боюсь, что вы ошибаетесь. В конце концов, значение N-фактора будет настолько высоко, что для добычи на Scrypt-Jane GPU будут менее эффективным, чем процессоры CPU. В связи с этим, Scrypt-Jane не так-то легко перевести в специализированный ASIC-майнинг, как SHA-256 или даже Scrypt.

Одной из первых Scrypt-Jane-монет, получивших некоторую популярность, была Yacoin (да, да, Yet Another Coin — «еще одна монета»), правда, популярность этой монеты быстро упала вместе с уменьшением интереса к ней майнеров. Совсем недавно мы были свидетелями появления монет, подобных Copperbars (эффективность майнинга на GPU также упала), и самые свежие дополнения к списку – это валюты TIX и Cryptonerd.

Далее везде

Три описанных алгоритма покрывают более 90% всего зоопарка криптовалют, но, конечно же, есть и другие. Чуть ли не еженедельно появляются предложения относительно все более новых и хитромудрых алгоритмов майнинга — все и не осветить. Из относительно новых можно упомянуть особо «асикоустойчивый» алгоритм , который собираются использовать в криптовалютной платформе нового поколения .

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

Техническая основа криптовалюты на данный момент вызывает интерес у многих, кто интересуется таковыми. Не все знакомы с таким понятием, как «криптография». Понять суть в том, что происходит в так называемом Bitcoin-протоколе очень сложно. Но мы все-таки попытаемся сделать это. Для начала рассмотрим алгоритм SHA-256 для майнинга.

SHA-256 — классический алгоритм
Отметим: каждый пользователь, который работает с интернетом, даже понятия не имеет, что работает с этим алгоритмом ежедневно, ежесекундно. Каждый интернет-ресурс защищается сертификатом SSL, и посещение такового возможно только при работе с алгоритмом SHA-256.

Классический алгоритм SHA-256 выстраивает весь Биткоин-майнинг. Отсюда происходит и майнинг других криптографических валют (альткоинов).

ОПРЕДЕЛЕНИЕ: SHA-256 — криптографическая хэш-функция. Разработана «Агентством национальной безопасности США».

Основная задача: хэширование данных (произвольный набор) в определенное значение длины («отпечатка» или другое значение — «дайджест»).

Используя майнинг SHA-256 криптовалюты, задача решается при помощи специализированного процессора либо CPU/GPU. При помощи интерфейса программы пользователи следят за преобразовательными процессами. Фактически алгоритм подбирает правильное значение хэша.

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

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

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

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

Алгоритм SHA-256 в майнинге реализуется на каждом ASIC-майнере. А вот ASIC-оборудование для остальных алгоритмов, которые на данном сайте мы также отметим, только разрабатывается.

Алгоритм SHA-256 присутствует в процессе добычи не только биткоинов, но и другой криптовалюты.

Очень активно сегодня набирают популярность криптовалюты, реализованные на основе алгоритма SHA-256: Tekcoin, Ocoin, Zetacoin.

Работа алгоритма SHA-256 является сложной для понимания, поэтому идеальный вариант — сконцентрироваться на способах/эффективных стратегиях добычи криптовалюты, чем пытаться анализировать алгоритм и понимать, как он работает.

Александр Марков

Аббревиатура SHA 256 расшифровывается как Secure Hashing Algorithm – востребованный механизм хэширования, созданный специалистами из NSA. Ключевая задача алгоритма – преобразование случайной информации в значения с фиксированной длиной, в дальнейшем оно будет использоваться с целью идентификации данных сведений.

История появления

Сразу отметим, что это алгоритм второго поколения, созданный на основе своего предшественника – SHA-1, который в свою очередь был разработан еще в 1995 году исключительно для применения в гражданских целях. Обновленную версию ныне популярного алгоритма создали сотрудники Агентства Национальной Безопасности в 2002 году.

Уже спустя три года появился патент, позволяющий использовать алгоритм в гражданских целях. Третья версия популярного механизма появилась в 2012 году, ее разработкой занимались специалисты из агентства Национальных стандартов. Со временем, SHA-3 полностью вытеснил своих предшественников.

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

Стоит отметить, что абсолютно все существующие версии алгоритма Secure Hashing Algorithm создавались согласно принципу Меркла-Дамгарда: информация подразделяется на равномерные категории. Каждая группа подвергается одностороннему сжатию, вследствие чего длина данных значительно уменьшается.

Такой способ шифрования имеет массу преимуществ:

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

Технические параметры

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

  • 64-байтный размер блока.
  • Максимальная длина зашифровываемого кода – 33 byte.
  • Параметры дайджеста сообщения – 32 byte.
  • Размер слова по умолчанию – 4 byte.
  • Количество повторений в рамках одного цикла – 64.
  • Скорость алгоритма – 140 Мбит/с.

Как уже было сказано ранее, протокол SHA-256 основывается на концепции Меркла-Дамгарда, а значит, сначала проводится разделение на блоки, а уже потом на отдельные слова.

Набор информации проходит сквозь диапазон повторений – 64 или 80. Каждый цикл сопровождается преобразованием блок слов. Итоговый хэш-код генерируется посредством суммирования первоначальных значений.

Криптовалюты с алгоритмом SHA-256

Рассмотрим цифровые валюты, майнинг которых осуществляется согласно принципам алгоритма SHA-256:

  • Bitcoin – валюта, которая не нуждается в дополнительном представлении, по-прежнему остается самым популярным криптоактивом.
  • Peercoin – уникальность заключается в том, что код создан на основе Bitcoin, но механизм используется для защиты сети, а PoW для распределения монет.
  • Namecoin – технология с открытым кодом, которая заметно улучшает безопасность, конфиденциальность, децентрализацию.
  • Unobtanium – характеризуется минимальной подверженностью инфляции. На добычу монет Unobtanium потребуется около 300 лет.
  • Deutsche eMark – цифровая сеть для передачи различных активов, например, денег. Обмен осуществляется без посредников.
  • BetaCoin – международное платежное средство, функционирует по тому же принципу, что и система Bitcoin.
  • Joulecoin – обеспечивает максимально оперативное подтверждение транзакций, основывается на Bitcoin.
  • IXCoin – еще один проект с открытым кодом, основанный по принципу одноранговой сети.
  • – Blockchain-платформа, которая вознаграждает пользователей за публикацию уникального контента.

Стоит также отметить, что алгоритм SHA-256 используется в системе Litecoin, но исключительно в подпрограмме. Для майнинга применяется протокол Scrypt.

Майнинг криптовалюты на алгоритме SHA-256

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

  • ASIC.

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

В среднем ASIC-майнер стоит около 100 тысяч рублей (Asic Майнер AVALON 821), но также можно приобрести и более дорогие модели, цена которых достигает полмиллиона рублей (Asic Майнер BITFURY B8 16NM 50 TH/S).

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

Наиболее адекватное решение – из видеокарт. В среднем, стоимость прибыльной фермы колеблется в диапазоне 1000-2000$. Какую видеокарту выбрать для добычи криптовалюты на алгоритме SHA-256?

Если говорить о компании Nvidia, то наилучшим решением станет видеокарта (1400 MH/s). Естественно, непосредственный конкурент в лице AMD также не отстает, для майнинга подойдут абсолютно все карты серии Vega. Видеоадаптер Radeon RX Vega обеспечивает майнинг со скоростью 1200 MH/S. Именно такому оборудованию следует отдать предпочтение.

Если вы ищите вариант подешевле, в таком случае можно приобрести Radeon 7970, такое оборудование способно выдавать до 800 MH/s. Не забывайте, что помимо видеокарт для запуска фермы требуется и другое оборудование, например, радиаторы охлаждения, блок питания, оперативная память и т. д.

Заключение

Это все что нужно знать майнерам об алгоритме SHA-256. Конечно, многие современные криптовалюты используют протокол Scrypt, но майнинг самой популярной монеты (BTC), по-прежнему осуществляется по такому принципу.

, "Secure Hash Standard (SHS)", U.S. Department of Commerce, март 2012

Термины:
FIPS Federal Information Processing Standard (Федеральный стандарт обработки информации).
SHA Secure Hash Algorithm (алгоритм стойкого хэширования).
Слово – беззнаковая переменная длиной 32 бита (4 байта), либо 64 бита (8 байт), зависит от выбранного SHA-алгоритма.

SECURE HASH STANDARD (семейство криптографических функций SHA-1 и SHA-2)

Семейство криптографических функций SHA делят на два подмножества: непосредственно алгоритм SHA-1 (опубликован в 1995 году – FIPS PUB 180-1) и ряд алгоритмов под общим названием SHA-2 (опубликован в 2002 году – FIPS PUB 180-2, обновлен в 2008 году - FIPS PUB 180-3): SHA-224 , SHA-256 , SHA-384 , SHA-512 ; в 2012 году в FIPS PUB 180-4 добавлены алгоритмы SHA-512/224 и SHA-512/256 . Мы рассмотрим стандарт FIPS PUB 180-4, объединяющий все семейство хэш-функций SHA-1 и SHA-2.

Этот стандарт определяет следующие хэш-алгоритмы: SHA-1 , SHA-224 , SHA-256 , SHA-384 , SHA-512 , SHA-512/224 и SHA-512/256 , вычисляющие сжатое представление цифровых данных (сообщений). Если на вход хэш-алгоритма подать сообщение любой длины, но меньшее, чем 2 64 бит (для SHA-1 , SHA-224 и SHA-256 ) или меньше, чем 2 128 бита (для SHA-384 , SHA-512 , SHA-512/224 и SHA-512/256 ), то результатом будут данные, называемые дайджестом или хэш-значением сообщения . Размер хэш-значения сообщения лежит в диапазоне от 160 до 512 бит (или от 20 до 64 байт), зависит от выбранного алгоритма. SHA алгоритмы обычно используются совместно с другими криптографическими алгоритмами, например, с алгоритмами цифровой подписи или при хешировании с ключом для аутентификации сообщений (HMAC), или при создании случайных чисел (бит).

Хэш-алгоритмы, указанные в этом стандарте называются безопасными потому, что по заданному алгоритму невозможно вычислить следующее: 1) восстановить сообщение по конкретному дайджесту сообщения, или 2) найти два различных сообщения, у которых один и тот же дайджест сообщения (найти коллизию). Любые изменения в сообщении, с очень высокой вероятностью, приводят к различным хэш-значениям. Это свойство полезно при создании и проверке цифровых подписей, при аутентификации сообщений, при создании случайных чисел.

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

Алгоритмы различаются по размеру блоков и слов хэшируемых данных и хэш-значений – см. таблицу 1.

Алгоритм Размер сообщения (в битах) Размер блока (в битах) Размер слова (в битах) Размер дайджеста сообщения (в битах)
SHA-1 < 2 64 512 32 160
SHA-224 < 2 64 512 32 224
SHA-256 < 2 64 512 32 256
SHA-384 < 2 128 1024 64 384
SHA-512 < 2 128 1024 64 512
SHA-512/224 < 2 128 1024 64 224
SHA-512/256 < 2 128 1024 64 256
Функции

SHA-1 использует последовательность нелинейных функций f 0 , f 1 ,…, f 79 . Каждая функция f t , где 0 ≤ t < 79 , оперирует тремя 32-битными переменными: x , y , и z , в результате возвращая одно 32-битное слово. В алгоритме SHA-1 используется следующий набор нелинейных функций f t (x, y, z) :
00 ≤ t ≤ 19 Ch(x, y, z)
20 ≤ t ≤ 39 Parity(x, y, z) = x XOR y XOR z
40 ≤ t ≤ 59 Maj(x, y, z)
60 ≤ t ≤ 79 Parity(x, y, z) = x XOR y XOR z

Булева алгебра.
Обратите внимание, что, например, функцию Ch может выразить по-другому:
z XOR (x AND (y XOR z))
Результат не изменится. В различных реализациях алгоритма такие варианты можно встретить.

SHA-224 и SHA-256 использует шесть нелинейных функций:

Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)

Sigma0(x) = ROTR(x, 2) XOR ROTR(x, 13) XOR ROTR(x, 22)
Sigma1(x) = ROTR(x, 6) XOR ROTR(x, 11) XOR ROTR(x, 25)

Delta0(x) = ROTR(x, 7) XOR ROTR(x, 18) XOR SHR(x, 3)
Delta1(x) = ROTR(x, 17) XOR ROTR(x, 19) XOR SHR(x, 10)


n бит:
ROTR(x, n) = (x » n) | (x « (32-n))
SHR - сдвиг вправо на n бит:
SHR(x, n) = x » n

SHA-384, SHA-512, SHA-512/224, SHA-512/384 использует шесть нелинейных функций:

Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)

Sigma0(x) = ROTR(x, 28) XOR ROTR(x, 34) XOR ROTR(x, 39)
Sigma1(x) = ROTR(x, 14) XOR ROTR(x, 18) XOR ROTR(x, 41)

Delta0(x) = ROTR(x, 1) XOR ROTR(x, 8) XOR SHR(x, 7)
Delta1(x) = ROTR(x, 19) XOR ROTR(x, 61) XOR SHR(x, 6)

Операции над словами (64-битными).
ROTR - циклический сдвиг вправо на n бит:
ROTR(x, n) = (x » n) | (x « (64-n))
SHR - сдвиг вправо на n бит:
SHR(x, n) = x » n

Константы

Константы K t
00 ≤ t ≤ 19 0x5a827999
20 ≤ t ≤ 39 0x6ed9eba1
40 ≤ t ≤ 59 0x8f1bbcdc
60 ≤ t ≤ 79 0xca62c1d6

(Если вас заинтересовал вопрос, откуда взялись эти числа, то укажем их источник:
0x5A827999 = $\sqrt{2} / 4$ , 0x6ED9EBA1 = $\sqrt{3} / 4$ , 0x8F1BBCDC = $\sqrt{5} / 4$ , 0xCA62C1D6 = $\sqrt{10} / 4$ ; все умножено на 2 32).

64 константы (32-битные слова): K 0 , K 1 … K 63 . (Для любознательных: эти константы представляют собой первые 32 бита дробных частей кубических корней первых 64 простых чисел).

K = [
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
]

80 констант (64-битные слова): K 0 , K 1 … K 79 . (Для любознательных: эти константы представляют собой первые 64 бита дробных частей кубических корней первых 80 простых чисел).

K = [
0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc,
0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118,
0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2,
0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694,
0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,
0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5,
0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4,
0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70,
0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df,
0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b,
0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30,
0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8,
0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8,
0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3,
0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec,
0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b,
0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178,
0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b,
0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c,
0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817
]

Предварительная обработка
1. Дополнение сообщения

Цель – сделать сообщение кратным 512 или 1024 бит, зависит от выбранного алгоритма SHA. Дополнение может быть выполнено перед процедурой вычисления хэша, или в ходе выполнения хэша, но до обработки блока(ов), который (ые) будут содержать дополнение.

M равна l «1» k - так, чтобы размер полученного сообщения был на 64 разряда меньше числа, кратного 512 (l+1+k = 448 mod 512 ). Далее, к полученному результату добавляется 64-битовое представление размера l исходного сообщения М «abc» «1» , затем 448 - (24 +1) = 423 бит «0» , и в конце 64-битовое представление размера 24 = 00…011000. В итоге получим 512-битовое сообщение вида:

Предположим, что длина сообщения M равна l бит. Сначала в конец сообщения добавляется «1» , а затем нули - в количестве k - так, чтобы размер полученного сообщения был на 128 разрядов меньше числа, кратного 896 (l+1+k = 896 mod 1024 ). Далее, к полученному результату добавляется 128-битовое представление размера l исходного сообщения М . Например, (ASCII текст) у нас есть сообщение «abc» , длиной 8 * 3 = 24 бита. Добавляем к сообщению «1» , затем 896 - (24 +1) = 871 бит «0» , и в конце 128-битовое представление размера 24 = 00…011000. В итоге получим 1024-битовое сообщение вида:

2. Разбиение дополненного сообщения на M -битные блоки.

N M -битных блоков.

Дополненное сообщение разбивается на N 512 -битовых блоков: M (1) , M (2) … M (N) . Т.к. 512 бит можно выразить как 16 (шестнадцать) 32-битных слов, то первые 32 бита i M 0 (i) , следующие 32 бита M 1 (i) , и так дойдем до M 15 (i) .

Дополненное сообщение разбивается на N 1024 -битовых блоков: M (1) , M (2) … M (N) . Т.к. 512 бит можно выразить как 16 (шестнадцать) 64-битных слов, то первые 64 бита i -го блока сообщения обозначим M 0 (i) , следующие 64 бита M 1 (i) , и так дойдем до M 15 (i) .

3. Установка инициализирующих значений

Перед процедурой вычисления хэша алгоритм устанавливает начальные значения H . Размер и количество слов H зависит от выбранного алгоритма.

Четыре 32-битных слова.
H0 = 0x67452301
H1 = 0xefcdab89
H2 = 0x98badcfe
H3 = 0x10325476
H4 = 0xc3d2e1f0

Восемь 32-битных слова.

0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4)

Восемь 32-битных слова.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19)

(Для любознательных: эти значения представляют собой первые 32 бита дробных частей квадратного корня простых чисел – порядковые номера чисел: первые 8).

Восемь 64-битных слова.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17,
0x152fecd8f70e5939, 0x67332667ffc00b31, 0x8eb44a8768581511,
0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4)

(Для любознательных: эти значения представляют собой первые 64 бита дробных частей квадратного корня простых чисел – порядковые номера чисел: с 9-го по 16-е).

Восемь 64-битных слова.
H0, H1, H2, H3, H4, H5, H6, H7 = (


(Для любознательных: эти значения представляют собой первые 64 бита дробных частей квадратного корня простых чисел – порядковые номера чисел: первые 8).



H0, H1, H2, H3, H4, H5, H6, H7 = (
0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b,
0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f,
0x1f83d9abfb41bd6b, 0x5be0cd19137e2179)











Восемь 64-битных слова.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x8C3D37C819544DA2, 0x73E1996689DCD4D6, 0x1DFAB7AE32FF9C82,
0x679DD514582F9FCF, 0x0F6D2B697BD44DA8, 0x77E36F7304C48942,
0x3F9D85A86A1D36C8, 0x1112E6AD91D692A1)

"SHA-512/t" - общее название для t-битной хэш-функции на основе SHA-512, результат которой усекается до t бит. Каждый вариант t-битной хэш-функция требует различных инициализирующих значений. Для этого введена специальная процедура определения начальных значений для SHA-512/t конкретного варианта t.

Процедура определения начальных значений для SHA-512/t.
1. Берем начальные значения H из алгоритма SHA-512.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b,
0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f,
0x1f83d9abfb41bd6b, 0x5be0cd19137e2179)

2. Делаем следующие вычисления:
H0’ = H0 XOR 0xA5A5A5A5A5A5A5A5
H1’ = H1 XOR 0xA5A5A5A5A5A5A5A5
H2’ = H2 XOR 0xA5A5A5A5A5A5A5A5
H3’ = H3 XOR 0xA5A5A5A5A5A5A5A5
H4’ = H4 XOR 0xA5A5A5A5A5A5A5A5
H5’ = H5 XOR 0xA5A5A5A5A5A5A5A5
H6’ = H6 XOR 0xA5A5A5A5A5A5A5A5
H7’ = H7 XOR 0xA5A5A5A5A5A5A5A5

3. Считаем хэш от строки SHA-512("SHA-512/t") (где t может быть "224" или "256") c начальными значениями H’. Значение хэша и будет начальными значениями для алгоритма SHA-512/t:
H для SHA-512/224 = SHA512(H’, "SHA-512/224")
H для SHA-512/256 = SHA512(H’, "SHA-512/256")

Восемь 64-битных слова.
H0, H1, H2, H3, H4, H5, H6, H7 = (
0x22312194FC2BF72C, 0x9F555FA3C84C64C2, 0x2393B86B6F53B151,
0x963877195940EABD, 0x96283EE2A88EFFE3, 0xBE5E1E2553863992,
0x2B0199FC2C85B8AA, 0x0EB72DDC81C52CA2)

Вычисление хэша

В алгоритме сложение "+" происходит по модулю 2 32 .

For i = 1 to N:
{
1. i
М 0 (i) по М 15 (i) )
в 80 слов размером 32 разряда (с W 0 по W 79 ):
W t = M t , для t = 0..15
W t = ROTL (W t-3 XOR W t-8 XOR W t-14 XOR W t-16 , 1) , для t = 16..79
(Интересно, что в первоначальном варианте спецификации SHA (алгоритм SHA-0) не было
циклического сдвига влево ROTL(x, 1) )

2. Инициализируем переменные a,b,c,d,e.
a = H0 (i-1)
b = H1 (i-1)
c = H2 (i-1)
d = H3 (i-1)
e = H4 (i-1)

3. Главный цикл функции сжатия
For t = 0 to 79
TEMP = ROTL (a, 5) + f t (b,c,d) + e + W t + K t
e = d
d = c
c = ROTL (b, 30)
b = a
a = TEMP

4.
H0 (i) = (H0 (i-1) + a)
H1 (i) = (H1 (i-1) + b)
H2 (i) = (H2 (i-1) + c)
H3 (i) = (H3 (i-1) + d)
H4 (i) = (H4 (i-1) + e)
}

Результирующее хэш-значение – 160-битный дайджест сообщения:
H0 (N) || H1 (N) || H2 (N) || H3 (N) || H4 (N) (5 слов * 32 бита = 160 бит)

Операции над словами (32-битными).
ROTL - циклический сдвиг влево на n бит:
ROTL(x, n) = (x « n) | (x » (32-n))

В алгоритме сложение "+" происходит по модулю 2 32 .

For i = 1 to N:
{
1. i -й блок сообщения с помощью приведенного далее алгоритма
преобразуется из 16 слов размером в 32 разряда (с М 0 (i) по М 15 (i) )
в 64 слова размером 32 разряда (с W 0 по W 63 ):
W t = M t , для t = 0..15
W t = W t-16 + Delta0 (W t-15) + W i-7 + Delta1 (W t-2) , для t = 16..63

2.
a = H0 (i-1)
b = H1 (i-1)
c = H2 (i-1)
d = H3 (i-1)
e = H4 (i-1)
f = H5 (i-1)
g = H6 (i-1)
h = H7 (i-1)

3. Главный цикл функции сжатия
For t = 0 to 63
TEMP1 = h + Sigma1 (e) + Ch (e,f,g) + W t + K t
TEMP2 = Sigma0 (a) + Maj (a,b,c)
h = g
g = f
f = e
e = d + TEMP1
d = c
c = b
b = a
a = TEMP1 + TEMP2

4. Считаем промежуточное хэш-значение
H0 (i) = (H0 (i-1) + a)
H1 (i) = (H1 (i-1) + b)
H2 (i) = (H2 (i-1) + c)
H3 (i) = (H3 (i-1) + d)
H4 (i) = (H4 (i-1) + e)
H5 (i) = (H5 (i-1) + f)
H6 (i) = (H6 (i-1) + g)
H7 (i) = (H7 (i-1) + h)
}

Результирующее хэш-значение – 256-битный дайджест сообщения:
(8 слов * 32 бита = 256 бит)
Внимание: порядок байт в каждом слове "big-endian"

Алгоритм полностью совпадает с алгоритмом SHA-256. Отличие в инициализирующих значениях H (см. выше) и в том, как берется результирующий хэш. Т.к. мы получаем 256-битный дайджест сообщения, то мы берем только первые 224 бита, чтобы получить финальное хэш-значение:

H0 (N) || H1 (N) || H2 (N) || H3 (N) || H4 (N) || H5 (N) || H6 (N) (7 слов * 32 бита = 224 бита)
Внимание: порядок байт в каждом слове "big-endian"

Алгоритм похож на SHA-256, только все переменные и слова – 64-битные.
В алгоритме сложение "+" происходит по модулю 2 64 .

For i = 1 to N:
{
1. i -й блок сообщения с помощью приведенного далее алгоритма
преобразуется из 16 слов размером в 64 разряда (с М 0 (i) по М 15 (i) )
в 80 слов размером 64 разряда (с W 0 по W 79 ):
W t = M t , для t = 0..15
W t = W t-16 + Delta0 (W t-15) + W i-7 + Delta1 (W t-2) , для t = 16..79

2. Инициализируем переменные a,b,c,d,e,f,g,h.
a = H0 (i-1)
b = H1 (i-1)
c = H2 (i-1)
d = H3 (i-1)
e = H4 (i-1)
f = H5 (i-1)
g = H6 (i-1)
h = H7 (i-1)

3. Главный цикл функции сжатия
For t = 0 to 79
TEMP1 = h + Sigma1 (e) + Ch (e,f,g) + W t + K t
TEMP2 = Sigma0 (a) + Maj (a,b,c)
h = g
g = f
f = e
e = d + TEMP1
d = c
c = b
b = a
a = TEMP1 + TEMP2

4. Считаем промежуточное хэш-значение
H0 (i) = (H0 (i-1) + a)
H1 (i) = (H1 (i-1) + b)
H2 (i) = (H2 (i-1) + c)
H3 (i) = (H3 (i-1) + d)
H4 (i) = (H4 (i-1) + e)
H5 (i) = (H5 (i-1) + f)
H6 (i) = (H6 (i-1) + g)
H7 (i) = (H7 (i-1) + h)
}

Результирующее хэш-значение – 512-битный дайджест сообщения:
H0 (N) || H1 (N) || H2 (N) || H3 (N) || H4 (N) || H5 (N) || H6 (N) || H7 (N) (8 слов * 64 бита = 512 бит)
Внимание: порядок байт в каждом слове "big-endian"

Алгоритм полностью совпадает с алгоритмом SHA-512. Отличие в инициализирующих значениях H (см. выше) и в том, как берется результирующий хэш. Т.к. мы получаем 512-битный дайджест сообщения, то мы берем только первые 384 бита, чтобы получить финальное хэш-значение:

H0 (N) || H1 (N) || H2 (N) || H3 (N) || H4 (N) || H5 (N) (6 слов * 64 бита = 384 бит)
Внимание: порядок байт в каждом слове "big-endian"

Алгоритм полностью совпадает с алгоритмом SHA-512. Отличие в инициализирующих значениях H (см. выше) и в том, как берется результирующий хэш. Т.к. мы получаем 512-битный дайджест сообщения, то мы берем только первые 224 бита, чтобы получить финальное хэш-значение:

H0 (N) || H1 (N) || H2 (N) || первые 32 бита H3 (N) (3 слова * 64 бита + 32 бита = 224 бит)
Внимание: порядок байт в каждом слове "big-endian"

Алгоритм полностью совпадает с алгоритмом SHA-512. Отличие в инициализирующих значениях H (см. выше) и в том, как берется результирующий хэш. Т.к. мы получаем 512-битный дайджест сообщения, то мы берем только первые 256 бита, чтобы получить финальное хэш-значение:

H0 (N) || H1 (N) || H2 (N) || H3 (N) (4 слова * 64 бита = 256 бит)
Внимание: порядок байт в каждом слове "big-endian"

Криптографические примитивы
Алгоритмы с открытым ключом RSA DSA
Поточные шифры RC4
Хэш-функции

SHA-256 представляет собой однонаправленную функцию для создания цифровых отпечатков фиксированной длины (256 бит, 32 байт) из входных данных размером до 2,31 эксабайт (2⁶⁴ бит) и является частным случаем алгоритма из семейства криптографических алгоритмов SHA-2 (Secure Hash Algorithm Version 2 ) опубликованным АНБ США в 2002 году.

Хеш-функции семейства SHA-2 построены на основе структуры Меркла - Дамгарда.

Исходное сообщение после дополнения разбивается на блоки, каждый блок - на 16 слов. Алгоритм пропускает каждый блок сообщения через цикл с 64 итерациями. На каждой итерации 2 слова преобразуются, функцию преобразования задают остальные слова. Результаты обработки каждого блока складываются, сумма является значением хеш-функции. Так как инициализация внутреннего состояния производится результатом обработки предыдущего блока, то нет возможности обрабатывать блоки параллельно. Графическое представление одной итерации обработки блока данных:

На текущий момент известны методы для конструирования коллизий до 31 итерации. Ввиду алгоритмической схожести SHA-2 с SHA-1 и наличия у последней потенциальных уязвимостей принято решение, что SHA-3 будет базироваться на совершенно ином алгоритме. 2 октября 2012 года NIST утвердил в качестве SHA-3 алгоритм Keccak.

Алгоритм расчёта отпечатка в виде псевдокода:

Пояснения:
Все переменные беззнаковые, имеют размер 32 бита и при вычислениях суммируются по модулю 232
message - исходное двоичное сообщение
m - преобразованное сообщение Инициализация переменных
(первые 32 бита дробных частей квадратных корней первых восьми простых чисел [от 2 до 19]):
h0:= 0x6A09E667
h1:= 0xBB67AE85
h2:= 0x3C6EF372
h3:= 0xA54FF53A
h4:= 0x510E527F
h5:= 0x9B05688C
h6:= 0x1F83D9AB
h7:= 0x5BE0CD19 Таблица констант
(первые 32 бита дробных частей кубических корней первых 64 простых чисел [от 2 до 311]):
k :=
0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 Предварительная обработка:
m:= message ǁ [единичный бит ]
m:= m ǁ , где k - наименьшее неотрицательное число, такое что
(L + 1 + K) mod 512 = 448, где L - число бит в сообщении (сравнима по модулю 512 c 448)
m:= m ǁ Длина (message) - длина исходного сообщения в битах в виде 64-битного числа с порядком байтов от старшего к младшему Далее сообщение обрабатывается последовательными порциями по 512 бит:
разбить сообщение на куски по 512 бит
для каждого куска разбить кусок на 16 слов длиной 32 бита (с порядком байтов от старшего к младшему внутри слова): w Сгенерировать дополнительные 48 слов:
для i от 16 до 63
s0:= (w rotr 7) xor (w rotr 18) xor (w shr 3)
s1:= (w rotr 17) xor (w rotr 19) xor (w shr 10)
w[i] := w + s0 + w + s1
Инициализация вспомогательных переменных:
a:= h0
b:= h1
c:= h2
d:= h3
e:= h4
f:= h5
g:= h6
h:= h7 Основной цикл:
для i от 0 до 63
Σ0:= (a rotr 2) xor (a rotr 13) xor (a rotr 22)
Ma:= (a and b) xor (a and c) xor (b and c)
t2:= Σ0 + Ma
Σ1:= (e rotr 6) xor (e rotr 11) xor (e rotr 25)
Ch:= (e and f) xor ((not e) and g)
t1:= h + Σ1 + Ch + k[i] + w[i] h:= g
g:= f
f:= e
e:= d + t1
d:= c
c:= b
b:= a
a:= t1 + t2 Добавить полученные значения к ранее вычисленному результату:
h0:= h0 + a
h1:= h1 + b
h2:= h2 + c
h3:= h3 + d
h4:= h4 + e
h5:= h5 + f
h6:= h6 + g
h7:= h7 + h Получить итоговое значения хеша:
digest = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7

Алгоритм используется:

  • Bitcoin  - эмиссия криптовалюты через поиск отпечатков с определёнными рамками значений
  • DNSSEC  - дайджесты DNSKEY
  • DSA  - используется для создания электронной цифровой подписи
  • IPSec  - в протоколах ESP и IKE
  • OpenLDAP  - хеши паролей
  • PGP  - используются для создания электронной цифровой подписи
  • S/MIME  - дайджесты сообщений
  • SHACAL-2  - блочный алгоритм шифрования
  • X.509  - используются для создания электронной цифровой подписи сертификата