Movatterモバイル変換


[0]ホーム

URL:


Перейти до вмісту
Вікіпедія
Пошук

scrypt

Матеріал з Вікіпедії — вільної енциклопедії.

scrypt (читається ес-крипт[1]) — адаптивна криптографічна функція формування ключа на основі пароля, створена офіцером безпекиFreeBSD Коліном Персивалем для системи зберігання резервних копійTarsnap. Функція створена таким чином, щоб ускладнити атаку перебором за допомогоюПЛІС. Для її обчислення потрібний значний обсягпам'яті з довільним доступом.17 вересня2012 року алгоритм scrypt був опублікованийIETF у виглядіInternet Draft, планується його внесення вRFC. Використовується scrypt, наприклад, в якостідоказу виконаної роботи вкриптовалютіLitecoin[2].

Засновані на пароліфункції формування ключа (англ.password-based key derivation function, PBKDF) зазвичай розробляються таким чином, щоб вимагати відносно великий час обчислення (за порядком величини — сотні мілісекунд). При використанні легальним користувачам потрібно обчислити подібну функцію один раз (наприклад приаутентифікації) і такий час допустимий. Але при проведенні атаки повного перебору атакуючому потрібно зробити мільярди обчислень функції і її обчислювальна складність робить атаку повільнішою і дорожчою.

Однак перші функції PBKDF (наприклад PBKDF2, розробленаRSA Laboratories) обчислюються порівняно швидко, і їх перебір може бути ефективно реалізований на спеціалізованому обладнанні (FPGA абоASIC). Така реалізація дозволяє запускати масштабні паралельні атаки переборугрубою силою, наприклад, з обчисленням сотень значень функції в кожній мікросхемі FPGA.

Функція scrypt розроблялася з метою ускладнення апаратних реалізацій шляхом збільшення кількості ресурсів, необхідних для обчислення. Даний алгоритм використовує значну кількість оперативної пам'яті (пам'яті з довільним доступом) порівняно з іншими PBKDF. Пам'ять у scrypt використовується для зберігання великого вектора псевдовипадкових бітових послідовностей, що генеруються, на початку алгоритму[3]. Після створення вектора його елементи запитуються у псевдовипадковому порядку і комбінуються один з одним для отримання ключа. Так як алгоритм генерації вектора відомий, можлива реалізація scrypt, не вимагає пам'яті, і вираховує кожен елемент в момент звернення. Однак, обчислити елемент відносно складно і в процесі роботи функції scrypt кожен елемент прочитується багато разів. У scrypt закладений такийбаланс між пам'яттю і часом, і реалізації, що не використовують пам'ять, надто повільні.

Визначення scrypt

[ред. |ред. код]

scrypt (P, S, N, r, p, dkLen) =MFcryptHMAC SHA256,SMixr (P, S, N, p, dkLen)

деN, r, p — параметри, які визначають складність обчислення функції.

MFcrypt визначена так: DK = MFcryptPRF, MF (P, S, N, p, dkLen)

де

Вхідні параметри scrypt і MFcrypt:

  • P — пароль (passphrase) — байтовий рядок.
  • S — сіль (salt) — байтовий рядок.
  • N — параметр, що задає складність (кількість ітерацій для MF).
  • r — параметр, що задає розмір блоку.
  • p — ступінь паралельності,ціле число, менше ніж (232 − 1)*hLen/MFLen
  • dkLen — необхідна довжина вихідного ключа в байтах, не більше ніж (232 − 1)*hLen.
  • DK — вихідний ключ

ФункціяMFcrypt працює за алгоритмом:

  1. (B0 … Bp−1) = PBKDF2PRF (P, S, 1, p * MFLen)
  2. Для всіх i від 0 до p−1 застосувати функцію MF:
    Bi = MF(Bi, N)
  3. DK = PBKDF2PRF (P, B0 || B1 || … || Bp−1,1, dkLen)

Споживання пам'яті оцінюється в 128*r*N байт[4]. Співвідношення кількості читань і записів в цю пам'ять оцінюється в 100 % і 63 %.

Приклади

[ред. |ред. код]

Рекомендовані параметри scrypt:N = 16384,r = 8,p = 1 (споживання пам'яті — близько 16 МБ)

Швидкість обчислення однієї операції scrypt на процесорі загального призначення становить близько 100 мілісекунд при налаштуванні на використання 32 МБ пам'яті. При налаштуванні на тривалість операції в 1 мілісекунду використовується дуже мало пам'яті і алгоритм стає слабшим алгоритму bcrypt, налаштованого на порівнянну швидкість.

КриптовалютаLitecoin використовує такі параметри scrypt: N = 1024, r = 1, p = 1, розмір вхідного параметра і солі — 80 байт, розмір DK — 256 біт (32 байти)[5]. Споживання оперативної пам'яті — близько 128 КБ. Обчислення такого scrypt на відеокартах приблизно в 10 разів швидше, ніж на процесорах загального призначення[6], що є ознакою вибору недостатньо сильних параметрів[7].

Див. також

[ред. |ред. код]

Примітки

[ред. |ред. код]
  1. @cperciva (23 травня 2016).For the record, "scrypt" is pronounced "ess crypt". Like bcrypt, except with an S instead of the B. It is NOT pronounced "script" (Твіт). Архіворигіналу за 22 лютого 2022. Процитовано 3 квітня 2018 — черезТвіттер.(англ.)
  2. Litecoin — Bitcoin. Архіворигіналу за 16 червня 2018. Процитовано 3 квітня 2018.
  3. http://suanpalm3.kmutnb.ac.th/journal/pdf/vol16/ch17.pdf[Архівовано 17 грудня 2013 уWayback Machine.] page 5
  4. Crypto.Scrypt
  5. Scrypt — Litecoin Wiki. Архіворигіналу за 16 серпня 2013. Процитовано 3 квітня 2018.[Архівовано 2013-08-16 уWayback Machine.]
  6. http://2012.zeronights.org/includes/docs/SolarDesigner%20-%20New%20Developments%20in%20Password%20Hashing.pdf[Архівовано 28 грудня 2016 уWayback Machine.] slide 4 «Issues with scrypt for mass user authentication»; slide 6
  7. http://distro.ibiblio.org/openwall/presentations/Password-Hashing-At-Scale/YaC2012-Password-Hashing-At-Scale.pdf[Архівовано 18 жовтня 2014 уWayback Machine.] slide 18 «GPU Attacks on modern hashes»: «scrypt at up to ~1MB (misuse)»; slide 19-21

Посилання

[ред. |ред. код]
Загальні функції
Фіналісти SHA-3
Інші функції
Гешування паролів/
розтягування ключів[en]
Формування ключа
Коди автентифікації
повідомлення
Режимиавтентифікованого
шифрування
Контрольні сумми та
некриптографічні[en]
функції
Атаки (огляд[en])
Конструкції
Стандартизація
Використання
Отримано зhttps://uk.wikipedia.org/w/index.php?title=Scrypt&oldid=44641653
Категорія:
Приховані категорії:

[8]ページ先頭

©2009-2026 Movatter.jp