Серия криптографии: Алгоритм scrypt в криптовалюте

Java алгоритм блокчейн

Эта статья приняла участие"Проект "Звезда раскопок"", чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам

«Добро пожаловать для обсуждения в области комментариев, официальный представитель NuggetsПроект «Звезда раскопок»После мероприятия в комментариях будет разыграно 100 штук Наггетсов.Подробнее о лотерее читайте в статье о мероприятии».

Введение

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

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

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

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

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

scrypt — это алгоритм получения пароля, созданный Колином Персивалем. Использование алгоритма scrypt для генерации производных ключей требует много памяти. Алгоритм шифрования был опубликован в 2016 году как стандарт RFC 7914.

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

Но по тем же причинам, упомянутым выше, предыдущая KDF на основе пароля, такая как PBKDF2, увеличила количество проходов для генерации пароля, но использовала очень мало места в памяти. Поэтому его легко взломать с помощью простых машин ASIC. Алгоритм scrypt предназначен для решения такой проблемы.

Подробное объяснение алгоритма скрипта

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

Далее давайте подробно проанализируем алгоритм scrypt.Стандартный алгоритм Scrypt требует ввода 8 параметров, а именно:

  • Passphrase: вводимый пароль для хеширования
  • Соль: защищенная паролем соль для предотвращения атак радужных таблиц
  • CostFactor (N): параметр стоимости ЦП/памяти, должен иметь индекс 2 (например: 1024).
  • BlockSizeFactor (r): параметр размера блока
  • ParallelizationFactor (p): Параметр распараллеливания
  • DesiredKeyLen (dkLen): длина производного ключа вывода.
  • hLen: выходная длина хэш-функции
  • MFlen: выходная длина функции Mix

Результатом этой функции является DerivedKey.

Сначала нам нужно сгенерировать файл «дорогая соль». Сначала получите размер блока:

blockSize = 128*BlockSizeFactor 

Затем используйте PBKDF2 для генерации p blockSize и объедините блоки p в массив:

[B0...Bp−1] = PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)

Используйте ROMix, чтобы смешать получившийся блок:

   for i ← 0 to p-1 do
      Bi ← ROMix(Bi, CostFactor)

Объедините B в новую дорогую соль:

expensiveSalt ← B0∥B1∥B2∥ ... ∥Bp-1

Затем используйте PBKDF2 и новую соль для создания окончательного производного ключа:

return PBKDF2HMAC-SHA256(Passphrase, expensiveSalt, 1, DesiredKeyLen);

Ниже приведен псевдокод функции ROMix:

Function ROMix(Block, Iterations)

   Create Iterations copies of X
   X ← Block
   for i ← 0 to Iterations−1 do
      Vi ← X
      X ← BlockMix(X)

   for i ← 0 to Iterations−1 do
      j ← Integerify(X) mod Iterations 
      X ← BlockMix(X xor Vj)

   return X

Псевдокод BlockMix выглядит следующим образом:

Function BlockMix(B):

    The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)
    r ← Length(B) / 128;

    Treat B as an array of 2r 64-byte chunks
    [B0...B2r-1] ← B

    X ← B2r−1
    for i ← 0 to 2r−1 do
        X ← Salsa20/8(X xor Bi)  // Salsa20/8 hashes from 64-bytes to 64-bytes
        Yi ← X

    return ← Y0∥Y2∥...∥Y2r−2 ∥ Y1∥Y3∥...∥Y2r−1

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

Scrypt используется во многих новых виртуальных валютах POW, таких как Tenebrix, Litecoin и Dogecoin. Заинтересованные друзья могут посмотреть.

Эта статья была включена вwww.flydean.com/42-scrypt/

Самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!

Добро пожаловать, чтобы обратить внимание на мой официальный аккаунт: «Программируйте эти вещи», разбирайтесь в технологиях, лучше поймите себя!