Алгоритм sha 256 простыми словами. Расшифровка Sha256 и особенности майнинга. Что такое хэш

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

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

Как работает алгоритм SHA-256?

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

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

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

Какое отношение алгоритм SHA-256 имеет к майнингу?

Осуществляя майнинг монет на графических картах или процессорах, в консоли мы видим сообщения следующего формата: «Accepted 0aef41a3b». 0aef41a3b и является тем хешем, который ищут все майнеры, то есть сокращенной копией какого-то большого массива данных. Эти несколько символом по существу представляют собой блок, состоящий из сотен, тысяч и миллионов подобных строк.

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

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

Какие монеты используют алгоритм SHA-256 ?

На сегодняшний день, помимо биткоина, на SHA-256 работают и другие криптовалюты, например:

  • ZetaCoin.
  • NameCoin.
  • PeerCoin.
  • EmerCoin.

Несмотря на некоторые свои недостатки в контексте криптовалютного сегмента, монеты, основанные на алгоритме SHA-256, продолжают удерживать свои позиции. Чего стоит только биткоин, который сегодня продается по цене около 7,5 тыс. долларов за монету, а также занимает первое место в рейтинге по капитализации.

, "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, а оно достаточно простое и может быть вычислено даже без компьютера. Само собой, процесс очень небыстрый и совершенно непрактичный. Но, пройдя все шаги на бумажке, можно хорошо разобраться в деталях работы алгоритма.

Один криптографический раунд

Майнинг

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

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

В биткойне критерием валидности хэша является достаточное число нулей в его начале. Найти такой хэш так же сложно, как, к примеру, найти номер машины или телефона, заканчивающийся на несколько нулей. Но, конечно, для хэша это экспоненциально сложнее. На текущий момент, правильный хэш должен содержать примерно 17 стартовых нулей, чему удовлетворяет только 1 из 1.4x10 20 . Если провести аналогию, то найти такое значение сложнее, чем обнаружить конкретную частичку среди всего песка на Земле .

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

Функция большинства (Ma блок) побитово работает со словами A, B и C. Для каждой битовой позиции она возвращает 0, если большинство входных битов в этой позиции - нули, иначе вернёт 1.

Блок Σ0 циклически сдвигает A на 2 бита, затем исходное слово A циклически сдвигается на 13 бит, и, аналогично, на 22 бита. Получившиеся три сдвинутые версии A побитово складываются по модулю 2 (обычный xor, (A ror 2) xor (A ror 13) xor (A ror 22) ).

Ch реализует функцию выбора. На каждой битовой позиции проверяется бит из E, если он равен единице, то на выход идёт бит из F с этой позиции, иначе бит из G. Таким образом, биты из F и G перемешиваются, исходя из значения E.

Σ1 по структуре аналогичен Σ0, но работает со словом E, а соответствующие сдвиговые константы - 6, 11 и 25.

Красные блоки выполняют 32-битное сложение, формируя новые значения для выходных слов A и E. Значение W t генерируется на основе входных данных (это происходит в том участке алгоритма, который получает и обрабатывает хэшируемые данные. Он вне нашего рассмотрения). K t - своя константа для каждого раунда.

На схеме сверху заметно, что только A и E меняются за один криптографический раунд. Остальные слова не меняются, но сдвигаются на выходе - старое A превращается в выходное B, старое B - в новое C, и так далее. Хотя отдельный раунд алгоритма не сильно изменяет данные, но после 64 раундов, входная информация будет полностью зашифрованной.

Майним вручную

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


Немного поясню что происходит: я записал слова от A до H в шестнадцатеричной форме, и под каждым сделал перевод в двоичный вид. Результат выполнения блока Ma находится под словом C, а значения A после сдвигов и сам выход Σ0 располагаются над строкой с A. Функция выбора появляется под G, и, наконец, соответствующие сдвинутые версии E и значение после блока Σ1 идут над строкой с E. В нижнем правом углу произвёл сложение, результат которого участвует в вычислении и нового A, и нового E (первые три красных блока суммирования). Справа сверху я рассчитал новое значение A, а посерёдке располагается уже расчет нового значения E. Все эти шаги обсуждались выше и легко могут быть отслежены на схеме.

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


Последний раунд SHA-256, в результате которого виден успешно смайненный биткойн-блок

Что всё это значит для проектирования «железных» майнеров?

Каждый шаг в SHA-256 очень просто выглядит в цифровой логике - простые битовые операции и 32-битные суммирования (если вы когда-либо изучали схемотехнику, то, скорее всего, уже представили себе как это может выглядеть в железе). Поэтому ASIC-микросхемы реализуют SHA-256 очень эффективно, размещая параллельно сотни блоков исполнения SHA-256 раундов. Фотография ниже показывает микросхему для майнинга, которая может вычислять 2-3 миллиарда хэшей в секунду. На Zeptobars можно поглядеть больше фото.


Снимок кремниевого кристалла ASIC-микросхемы Bitfury, которая может майнить биткойны со скоростью в 2-3 гигахэшей в секунду. Картинка с Zeptobars . (CC BY 3.0)

В противоположность биткойну, Litecoin, Dogecoin и другие похожие альтернативные -coin системы используют алгоритм хэширования scrypt , в котором изначально заложена сложность реализации в железе. Этот алгоритм во время выполнения хранит в памяти 1024 разных значений хэша, а уже на выходе комбинирует их для получения конечного результата. Поэтому требуется куда больше памяти и схематики для вычисления scrypt-хэшей по сравнению с SHA-256-хэшами. Влияние изменения алгоритма хэширования наглядно видно при сравнении соответствующего аппаратного обеспечения для майнинга - версии под scrypt (Litecoin и прочие) в тысячи раз медленнее, чем версии под SHA-256 (биткойн).

Заключение

SHA-256 неожиданно оказался настолько простым, что может быть вычислен даже вручную (алгоритм на эллиптических кривых, который используется для подписи биткойн-транзакции, был бы куда более мучительным, так как содержит кучу перемножений 32-байтных чисел). Расчет одного раунда SHA-256 занял у меня 16 минут, 45 секунд. С такой производительностью хэширование всего биткойн-блока (128 раундов ) займёт 1,49 суток, то есть получаем скорость хэширования в 0,67 хэшей в день (на самом деле, конечно же, с практикой процесс бы ускорился). Для сравнения, текущее поколение биткойн-майнеров производит несколько терахэшей в секунду, что примерно в квинтиллион раз быстрее меня. Думаю, очевидно, что ручной майнинг биткойнов не очень практичен.

Читатель с reddit"a спросил о моих затратах энергии. Так как я не прилагаю каких-то серьезных физических усилий, то можно предположить что скорость метаболизма будет 1500 килокалорий в день, тогда получаем, что ручное хэширование требует почти 10 мегаджоулей за хэш. Типичное потребление энергии для железного майнера - 1000 магехэшей за джоуль. Таким образом, я менее энергоэффективен чем специализированная железка в 10^16 раз (10 квадриллионов). Другой вопрос в стоимости энергии. Дешевым источником питания являются пончики по 23 цента за 200 килокалорий. Электроэнергия у меня стоит 15 центов за киловатт-час, что дешевле пончиков в 6.7 раз. В итоге, стоимость энергии в пересчете на хэш для меня, как человека-майнера, в 67 квадриллионов раз выше. Да-а-а, понятно, что я не ухвачу удачу за хвост ручным майнингом биткойнов, и это еще не учитывая стоимость бумаги и ручек!

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

Аббревиатура 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. О ней и пойдет речь в сегодняшней статье.

Что такое майнинг?

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

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

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

В Bitcoin критерием пригодности хеша считается необходимое количество «0» в его начале. Обнаружить подобное значение также невероятно трудно, как, например, отыскать номер автомобиля или сотового, кончающегося на пару 0. Разумеется, сделать такое для хеш-функции в много раз сложнее. В настоящее время, правильное значение должно включать приблизительно 17 начальных нулей, чему соответствует лишь одно из 1,4 умноженное на 10 в 20 степени. Проводя сравнение, отыскать подобный хеш значительно сложнее, нежели отыскать определенную песчинку среди всей нескончаемой массы песка на планете.

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

В течение следующих 3 лет АНБ выпустила патент на SHA второго поколения под лицензией 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.

Поддержите проект — поделитесь ссылкой, спасибо!
Читайте также
Стикеры Как найти нужные стикеры в телеграмме Стикеры Как найти нужные стикеры в телеграмме Bsplayer скачать последнюю версию Bsplayer скачать последнюю версию Как изменить файловую систему внешнего диска? Как изменить файловую систему внешнего диска?