Алгоритм 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), як і раніше здійснюється за таким принципом.

Для чого створювався SHA - 256

SHA 256 – скорочення від Secure Hashing Algorithm – це популярний криптографічнийалгоритм хешування, розроблений National Security Agency - Агентством національної безпеки США. Завдання SHA-256 полягає в тому, щоб зробити з випадкового набору даних певні значення з фіксованою довжиною, яке послужить ідентифікаторомцих даних.

Отримане значення порівнюється з дублікатами вихідних даних, які неможливо отримати. Основна сфера застосування алгоритму - використання в різних додатках або сервісах, пов'язаних із захистом інформації, де функція і отримала широке поширення. Також вона використовується як технологія для майнінгу криптовалют.

Цей алгоритм належить до групи шифрувальних алгоритмів SHA-2, які у свою чергу розроблені на базі алгоритму SHA-1, вперше створеного в 1995 році для використання в цивільних цілях. Сам SHA-2 розроблений Агентством національної безпеки США навесні 2002 року. Протягом трьох років АНБ США випустили патент на використання технології SHA у цивільних проектах.

У 2012 році в Національному інституті стандартів та технологій створено оновлений варіант алгоритму: SHA - 3. Згодом новий алгоритм витіснятиме як поточний основний алгоритм SHA - 2 , так і вже застарілий , але SHA - 1 , що ще використовується .

Хеш - сума не є технологією шифрування даних у класичному розумінні, цим обумовлена ​​неможливість розшифровки даних у зворотний бік. Це одностороннє шифрування для будь-якої кількості даних. Всі алгоритми SHA базуються на методі Меркла-Дамгарда: дані поділяють на рівномірні групи, кожна з яких проходить через односторонню функцію стиснення. Внаслідок цього довжина даних зменшується.

Такий метод має дві значні переваги :

  • швидка швидкість шифрування та практично неможливе розшифрування без ключів;
  • мінімальний ризик появи колізій (однакових образів).

Де ще використовується

Щодня кожен користувач Мережі, знаючи чи ні, використовує SHA-256: сертифікат безпеки SSL, яким захищений кожен веб-сайт, включає алгоритм SHA-256. Це необхідно для встановлення та автентифікації захищеного з'єднання з сайтом.

Плюси SHA - 256

SHA - 256 - самий поширенийалгоритм майнінгу серед усіх інших. Він зарекомендував себе як стійкий до зламів (за рідкісними винятками) та ефективний алгоритм як для завдань майнінгу, так і для інших цілей.

Мінуси SHA - 256

Головним недоліком SHA - 256 є його підконтрольністьмайнерам: власники найбільших обчислювальних потужностей отримують більшу частину криптовалюти, що виключає один з основоположнихпринципів криптовалют децентралізованість.

Після того як великі інвестори почали вкладати гроші в обчислювальні потужності для промислового майнінгу біткоїну, складність майнінгу багаторазово зросла і почала вимагати виняткових обчислювальних потужностей. Цей недолік виправлений в інших протоколах, сучасніших і «заточених» під використання в майнінгу криптовалют, таких як Scrypt. Незважаючи на те, що сьогодні SHA-256 займає більшу частину ринку криптовалют, він послаблюватиме свій вплив на користь більш захищених і просунутих протоколів.

Через деякий часалгоритми SHA-1 перестали давати необхідний рівень надійності через ймовірне виникнення колізій. SHA-256, як і SHA-512, більш захищені від цього недоліку, але ймовірність виникнення все одно присутня.

Використання в криптовалютах

Майнінг на SHA - 256

Майнінг на SHA — 256 , як і на будь-якому іншому алгоритмі — це процес вирішення якоїсь складної. криптографічноїзадачі, яку генерує програма для майнінгу на основі даних із попередніх блоків.

Майнить з використанням функції SHA - 256 можна трьома способами:

  • CPU (центральний процесор);
  • GPU (графічний процесор);
  • спеціалізованийпроцесор: ASIC.

У майнінгу хеш — сума використовується як ідентифікатор вже наявних блоків та створення нових на основі попередніх. Процес майнінгу відображається в інтерфейсі у вигляді "accepted f33ae3bc9 ...". Де f33ae3bc9 — це хеш — сума, частина даних, призначенадля дешифрування. Основний блок складається з величезної кількості подібних хеш - сум.

Тобто, майнінг з алгоритмом SHA — 256 є безупиннийпідбір правильного значення хеш - суми, перебір чисел для створення нового блоку. Чим більше ваші обчислювальні потужності, тим більше шансів отримати правильний блок: швидкість перебору різних хеш-сум залежить від потужностей.

Зважаючи на те, що Bitcoin побудований на алгоритмі SHA - 256, для конкурентоспроможногомайнінгу на ньому необхідні вкрай великі обчислювальні потужності. Це з тим , що з майнінгу биткоина досить давно налагоджено виробництво « асиков » — application specific integrated circuit , т.і. е. інтегральна схема спеціального призначення. Асики дозволяють майнути біткоїни та інші криптовалюти на алгоритмі SHA - 256 набагато швидше, ефективніше і дешевше.

Які криптовалюти використовують алгоритм SHA - 256

SHA - 256 це класичний алгоритм для криптовалют: на ньому побудована основна криптовалюта - Bitcoin. Відповідно, і у форках біткоїну використовується цей алгоритм: у Bitcoin Cash, Gold, Diamond.

Крім них , SHA - 256 використовується також у :

  • Steemit;
  • DigiByte;
  • PeerCoin;
  • NameCoin;
  • TeckCoin;
  • Ocoin;
  • Zetacoin;
  • EmerCoin.

Також алгоритм SHA-256 використовується як підпрограма в криптовалюті Litecoin, а основним алгоритмом для майнінгу є Scrypt.

Зі зростанням популярності криптовалюти дедалі більше людей починають сприймати її як перспективний фінансовий інструмент. Проте, мало хто замислюється, яку цінність вона представляє для науково-технічного прогресу. Адже щоб вникнути в суть цього явища, необхідно пробратися крізь справжні нетрі криптографічних понять, а також незвичних та таємничих абревіатур на кшталт SHA-256. Про неї і йтиметься у сьогоднішній статті.

Що таке майнінг?

Майнінг – головна складова захисного механізму будь-якої цифрової валюти. Принцип дії полягає в групуванні майнерами досконалої операції в один блок, який вже перетворили безліч разів для встановлення виняткового рідкісного хеш-коду, що відповідає спеціальним вимогам. Якщо подібне значення відшукується, блок майне і додається в блокчейн монети. Така обчислювальна діяльність не дає будь-якої користі, крім підвищення складності генерації необхідного блоку. З іншого боку, лише завдяки їй користувачі електронної валюти можуть бути впевнені, що їхній майданчик не буде взятий під контроль та централізований.

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

Одним із найпопулярніших протоколів обчислення є SHA-256. Саме його використовує перша криптовалюта у світі – Біткоїн. Причому підвищення рівня безпеки алгоритм задіюється 2 разу і називається вже подвійним.

У Bitcoin критерієм придатності хеша вважається необхідна кількість "0" на його початку. Виявити подібне значення також неймовірно важко, як, наприклад, відшукати номер автомобіля або стільникового, що закінчується на пару 0. Зрозуміло, зробити таке для хеш-функції набагато складніше. В даний час правильне значення має включати приблизно 17 початкових нулів, чому відповідає лише одне з 1,4 помножене на 10 в 20 ступеня. Проводячи порівняння, знайти подібний хеш значно складніше, ніж знайти певну піщинку серед усієї нескінченної маси піску на планеті.

Початкова версія алгоритму SHA-256 була створена Агентством національної безпекиСША навесні 2002 року. Через кілька місяців Національний метрологічний університет опублікував новий протокол шифрування в прийнятому на федеральному рівні стандарті безпечної обробки даних FIPS PUB 180-2. Взимку 2004 року він поповнився другою версією алгоритму.

Протягом наступних 3 років АНБ випустила патент на SHA 2-го покоління під ліцензією Royalty-free. Саме це дало старт застосуванню технології у цивільних сферах.

Зверніть увагу! Досить цікавий факт: кожен користувач Всесвітнього павутиння, сам того не знаючи, під час своїх подорожей інтернетом користується даним протоколом. Відвідування будь-якого веб-ресурсу, захищеного сертифікатом безпеки SSL, автоматично запускає виконання алгоритму SHA-256.

Цей протокол працює з інформацією, роздроблений на частини по 512 біт (або тобто 64 байти). Він робить її криптографічне "змішування", а потім видає 256-бітний хеш-код. До складу алгоритму входить порівняно простий раунд, який повторюється 64 рази.

Крім того, SHA-256 має досить непогані технічні параметри:

  • Показник розміру блоку (байт) – 64.
  • Гранично допустима довжина повідомлення (байт) – 33.
  • Характеристика обсягу дайджесту повідомлення (байт) – 32.
  • Стандартний розмір слова (байт) – 4.
  • Параметр довжини внутрішнього становища (байт) – 32.
  • Число ітерацій в одному циклі – лише 64.
  • Досягана протоколом швидкість (MiB/s) – приблизно 140.

Робота алгоритму SHA-256 базується на методі побудови Меркла-Дамгарда, відповідно до якого початковий показник відразу після внесеної зміни поділяється на блоки, а ті, своєю чергою, на 16 слів.

Набір даних проходить через цикл, що налічує 80 або 64 ітерації. Кожен етап характеризується запуском хешування зі складових блок слів. Пара їх обробляються інструментарієм функції. Далі результати перетворення складаються, видавши у результаті правильний показник хеш-коду. Для створення чергового блоку використовується значення попереднього. Перетворювати їх окремо один від одного не вдасться.

Також варто згадати 6 бітових операцій, на основі яких функціонує протокол:

  • "and" - побітова операція "І";
  • "shr" - переміщує значення на потрібну кількість біт вправо;
  • «rots» - команда аналогічна по дії попередній, з тією різницею, що здійснюється циклічне зрушення;
  • «||» або конкатенація - операція з'єднання частин лінійної структури, найчастіше рядків;
  • "xor" - команда, що прибирає "АБО";
  • «+» - звичайна операція складання.

Як можна побачити, досить типовий для будь-якого алгоритму шифрування набір операцій.

Щоб визначити цінність цього алгоритму, необхідно звернутися до криптоаналізу. Ця дисципліна знаходить методи розшифровування інформації без застосування спеціалізованого ключа.

Перші дослідження SHA-256 на наявність уразливостей почали здійснюватися фахівцями з 2003 року. На той момент помилок у протоколі виявлено не було.

Проте, вже в середині 2008 року група експертів з Індії спромоглася знайти колізії для 22 ітерацій архітектур сімейства SHA. Через кілька місяців був запропонований спосіб розробки колізій для усіченого варіанта протоколу, а потім і для ітерації 31 хешування безпосереднього самого SHA-256.

Під час аналізу функції згортки здійснюється тестування її опірності до 2 різновидів атак:

  1. Наявність прообразу - дешифрування початкового повідомлення на його хеш-коду. Опірність такого типу впливу гарантує надійний захист результатів перетворення.
  2. Перебування колізій - подібні вихідні дані при різних вхідних параметрах. Від стійкості до такого різновиду атак знаходиться в прямій залежності. електронного підписуіз використанням актуального протоколу.

Творці другого покоління алгоритму SHA вирішили, що новий механізм шифрування функціонуватиме на основі інших принципів. Так, восени 2012 року на світ з'явився протокол третьої серії – Keccak.

Практичне застосування та сертифікація технології

Законодавством Сполучених Штатів дозволяється використання SHA-256 та інших аналогічних методів хешування в певних державних програмах для захисту відомостей. З іншого боку, допускається застосування алгоритму комерційними компаніями.

Важливо!Тому немає нічого дивного в тому, що цей протокол був використаний у першій цифровій валюті. Випуск нових монет Біткоїна здійснюється шляхом знаходження рядків за їхньою вказаною архітектурою SHA-256.

Як це впливає на спеціалізованих пристроях для видобутку криптовалюти? Кожен крок у цьому алгоритмі має досить простий вигляд - примітивна бітова операція і 32-бітове складання (будь-який, хто знайомий з основами схемотехніки, зможе легко уявити, як подібне виглядає в залозі). А тому для ефективної роботиасик-майнерів потрібно лише мати десяток блоків виконання етапів алгоритму.

На противагу Bitcoin, Лайткоїн, Догікоїн та інші подібні «коїни» використовують протокол шифрування Scrypt, який оснащений функцією підвищення складності. Цей алгоритмв ході діяльності зберігає 1024 різних значення хеш-функцій, а вже на виході з'єднує їх та отримує перетворений результат. Завдяки цьому для реалізації протоколу потрібні незрівнянно великі обчислювальні потужності.

Висновок

Підсумовуючи, можна сказати, що протокол SHA-256 виявився надто легким і сьогодні є безліч спеціалізованих девайсів (так звані майнери), які успішно обходять його. З їхньою появою відпала необхідність майнути на процесорі або збирати ферми з відеокарт, оскільки ASIC-пристрої дозволяють своїм власникам заробити набагато більше. Однак у цього є і Зворотній бік. Використання майнерів дуже централізує криптовалюту, отже, необхідно використання нових протоколів хеширования. Таким алгоритмом став Scrypt – куди більш просунутий захисний механізм, який потребує значної продуктивності і тому теоретично позбавляє спеціальні прилади особливої ​​переваги.

З позиції рядового користувача немає жодної різниці між протоколами SHA-256 та Scrypt. Можна майнути цифрову валюту своїм комп'ютером або фермою будь-якого з даних протоколів.

Алгоритм SHA-256 на сьогоднішній день займає понад 40% всього ринку, проте, поза всяким сумнівом, є й інші. І незабаром вони потіснять уславленого попередника. Так, з порівняно нових необхідно згадати про особливо «майнеростійкий» протокол Dagger, який збираються використовувати в децентралізованому майданчику Ефіріум. Можливо, саме він прийме естафету лідера в галузі хешування та займе місце SHA-256.

, "Secure Hash Standard (SHS)", US. 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, що обчислюють стисле уявлення цифрових даних (повідомлень). Якщо на вхід хеш-алгоритму подати повідомлення будь-якої довжини, але менше, ніж 264 біт (для SHA-1, SHA-224і SHA-256) або менше, ніж 2128 біта (для 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 ≤ 19Ch(x, y, z)
20 ≤ t ≤ 39Parity (x, y, z)= x XOR y XOR z
40 ≤ t ≤ 59Maj(x, y, z)
60 ≤ t ≤ 79Parity (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$ все помножено на 232).

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") з початковими значеннями 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) + Wt + Kt
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) + Wt + Kt
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- використовуються для створення електронного цифрового підпису сертифіката
Поломки