Jump to content

сценарий

сценарий
Общий
Дизайнеры Колин Персиваль
Впервые опубликовано 2009
Деталь шифрования
Размеры дайджеста переменная
Размеры блоков переменная
Раунды переменная

В криптографии . scrypt (произносится как «эсс крипт») [1] на основе пароля, ) — это функция получения ключей созданная Колином Персивалем в марте 2009 года первоначально для службы онлайн-резервного копирования Tarsnap . [2] [3] Алгоритм был специально разработан для того, чтобы сделать проведение крупномасштабных специализированных аппаратных атак дорогостоящим , требующим больших объемов памяти. В 2016 году алгоритм scrypt был опубликован IETF как RFC 7914. [4] Упрощенная версия scrypt используется в качестве схемы доказательства работы рядом криптовалют , сначала реализованная анонимным программистом по имени ArtForz в Tenebrix, а вскоре после этого — Fairbrix и Litecoin . [5]

Введение [ править ]

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

Предыдущие KDF на основе паролей (такие как популярный PBKDF2 от RSA Laboratories ) имели относительно низкие требования к ресурсам, то есть для их работы не требовалось сложное оборудование или большой объем памяти. Поэтому их легко и дешево реализовать аппаратно (например, на ASIC или даже FPGA ). Это позволяет злоумышленнику, обладающему достаточными ресурсами, запустить крупномасштабную параллельную атаку, создав сотни или даже тысячи аппаратных реализаций алгоритма и заставив каждую из них искать различное подмножество пространства ключей. Это делит время, необходимое для завершения атаки методом перебора, на количество доступных реализаций, что вполне возможно снизит ее до разумных временных рамок.

Функция scrypt предназначена для предотвращения таких попыток за счет повышения требований к ресурсам алгоритма. В частности, алгоритм предназначен для использования большого объема памяти по сравнению с другими KDF на основе паролей. [6] что делает размер и стоимость аппаратной реализации намного дороже и, следовательно, ограничивает объем параллелизма, который может использовать злоумышленник, при заданном объеме финансовых ресурсов.

Обзор [ править ]

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

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

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

Алгоритм [ править ]

Function scrypt
   Inputs: This algorithm includes the following parameters:
      Passphrase:                Bytes    string of characters to be hashed
      Salt:                      Bytes    string of random characters that modifies the hash to protect against Rainbow table attacks
      CostFactor (N):            Integer  CPU/memory cost parameter – Must be a power of 2 (e.g. 1024)
      BlockSizeFactor (r):       Integer  blocksize parameter, which fine-tunes sequential memory read size and performance. (8 is commonly used)
      ParallelizationFactor (p): Integer  Parallelization parameter. (1 .. 232-1 * hLen/MFlen)
      DesiredKeyLen (dkLen):     Integer  Desired key length in bytes (Intended output length in octets of the derived key; a positive integer satisfying dkLen ≤ (232− 1) * hLen.)
      hLen:                      Integer  The length in octets of the hash function (32 for SHA256).
      MFlen:                     Integer  The length in octets of the output of the mixing function (SMix below). Defined as r * 128 in RFC7914.
   Output:
      DerivedKey:                Bytes    array of bytes, DesiredKeyLen long

   Step 1. Generate expensive salt
   blockSize ← 128*BlockSizeFactor  // Length (in bytes) of the SMix mixing function output (e.g. 128*8 = 1024 bytes)

   Use PBKDF2 to generate initial 128*BlockSizeFactor*p bytes of data (e.g. 128*8*3 = 3072 bytes)
   Treat the result as an array of p elements, each entry being blocksize bytes (e.g. 3 elements, each 1024 bytes)
   [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)

   Mix each block in B Costfactor times using ROMix function (each block can be mixed in parallel)
   for i ← 0 to p-1 do
      Bi ← ROMix(Bi, CostFactor)

   All the elements of B is our new "expensive" salt
   expensiveSalt ← B0∥B1∥B2∥ ... ∥Bp-1  // where ∥ is concatenation
 
   Step 2. Use PBKDF2 to generate the desired number of bytes, but using the expensive salt we just generated
   return PBKDF2HMAC-SHA256(Passphrase, expensiveSalt, 1, DesiredKeyLen);

Где обозначение PBKDF2(P, S, c, dkLen) определено в RFC 2898, где c — количество итераций.

Это обозначение используется в RFC 7914 для указания использования PBKDF2 с c = 1.

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

Где RFC 7914 определяет Integerify(X) в результате интерпретации последних 64 байтов X как целого числа с прямым порядком байтов A 1 .

Поскольку число итераций равно 2 в степени N, только первые байты Ceiling(N / 8) среди последних 64 байтов X, интерпретируемые как целое число с прямым порядком байтов A 2 . для вычисления фактически необходимы Integerify(X) mod Iterations = A1 mod Iterations = A2 mod Iterations.

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

Где Salsa20/8 — это 8-раундовая версия Salsa20 .

Использование криптовалюты [ править ]

Scrypt используется во многих криптовалютах в качестве алгоритма доказательства работы (точнее, как хеш-функция в Hashcash алгоритме доказательства работы ). Впервые он был реализован для Tenebrix (выпущен в сентябре 2011 года) и послужил основой для Litecoin и Dogecoin , которые также переняли его алгоритм шифрования. [7] [8] Майнинг криптовалют , использующих scrypt, часто выполняется на графических процессорах ( GPU ), поскольку графические процессоры, как правило, имеют значительно большую вычислительную мощность (для некоторых алгоритмов) по сравнению с CPU. [9] Это привело к нехватке высокопроизводительных графических процессоров из-за роста цен на эти валюты в ноябре и декабре 2013 года. [10]

Утилита [ править ]

утилита шифрования scrypt
Разработчик(и) Колин Персиваль
Стабильная версия
1.3.2 [11]  Отредактируйте это в Викиданных / 2 октября 2023 г .; 8 месяцев назад ( 2 октября 2023 г. )
Репозиторий github / Крестовая привязка /скрипт
Веб-сайт www .крестовая привязка /скрипт .html

Утилита scrypt была написана в мае 2009 года Колином Персивалем как демонстрация функции получения ключа сценария. [2] [3] Он доступен в большинстве Linux и BSD дистрибутивов .

См. также [ править ]

Ссылки [ править ]

  1. ^ «Колин Персиваль» . Твиттер . Архивировано из оригинала 17 февраля 2019 года.
  2. ^ Jump up to: Перейти обратно: а б «Функция получения ключа сценария» . Тарснап . Архивировано из оригинала 28 мая 2019 года . Проверено 21 января 2014 г.
  3. ^ Jump up to: Перейти обратно: а б «Руководство по общим командам SCRYPT(1)» . Страницы руководства Debian . Архивировано из оригинала 2 марта 2022 года . Проверено 2 марта 2022 г.
  4. ^ Персиваль, Колин; Йозефссон, Саймон (август 2016 г.). «Функция получения ключа на основе пароля» . Редактор RFC. Архивировано из оригинала 13 декабря 2021 года . Проверено 13 декабря 2021 г.
  5. ^ Алек Лю (29 ноября 2013 г.). «За пределами Биткойна: Путеводитель по наиболее перспективным криптовалютам» . Архивировано из оригинала 13 июня 2018 года . Проверено 8 июля 2017 г.
  6. ^ Персиваль, Колин. «Более надежный вывод ключей с помощью последовательных функций с жесткой памятью» (PDF) . Архивировано (PDF) из оригинала 14 апреля 2019 г. Проверено 11 ноября 2022 г.
  7. ^ Андреас М. Антонопулос (3 декабря 2014 г.). Освоение биткойнов: разблокировка цифровых криптовалют . О'Рейли Медиа. стр. 221, 223. ISBN.  9781491902646 .
  8. ^ «История криптовалюты» . litecoin.info вики . 7 февраля 2014 года. Архивировано из оригинала 11 июня 2016 года . Проверено 27 июня 2014 г.
  9. ^ Роман Гуэльфи-Гиббс. Конфигурации майнинга Litecoin Scrypt для Radeon 7950 . Цифровые услуги Amazon. Архивировано из оригинала 24 октября 2016 года . Проверено 11 сентября 2017 г.
  10. ^ Джоэл Хруска (10 декабря 2013 г.). «Массовый всплеск добычи Litecoin приводит к нехватке видеокарт» . ЭкстримТех. Архивировано из оригинала 12 декабря 2017 года . Проверено 1 января 2014 г.
  11. ^ «Выпуск 1.3.2» . 2 октября 2023 г. Проверено 20 октября 2023 г.
  12. ^ Шелли, Джонни; Столарчик, Филипп. «Bcrypt – шифрование файлов Blowfish (домашняя страница)» . Сорсфордж . Архивировано из оригинала 29 августа 2015 года . Проверено 8 апреля 2024 г.
  13. ^ «bcrypt APK для Android – скачать бесплатно на Droid Informer» . droidinformer.org . Архивировано из оригинала 15 февраля 2020 года . Проверено 2 марта 2022 г.
  14. ^ «Пакет Т2 – транк – bcrypt – Утилита для шифрования файлов» . t2sde.org . Архивировано из оригинала 28 октября 2017 года . Проверено 2 марта 2022 г.
  15. ^ «Информация о лицензировании Oracle® GoldenGate» . Справочный центр Oracle . Архивировано из оригинала 6 марта 2024 года . Проверено 8 апреля 2024 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8fbaecebd7d68136125e629dca2f2fb0__1716578340
URL1:https://arc.ask3.ru/arc/aa/8f/b0/8fbaecebd7d68136125e629dca2f2fb0.html
Заголовок, (Title) документа по адресу, URL1:
scrypt - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)