| 一般的な | |
|---|---|
| デザイナー | コリン・パーシバル |
| 初版 | 2009 |
| 暗号の詳細 | |
| ダイジェストサイズ | 変数 |
| ブロックサイズ | 変数 |
| ラウンド | 変数 |
暗号学において、scrypt(発音は「エス・クリプト」[1])は、2009年3月にコリン・パーシバルによって作成されたパスワードベースの鍵導出関数であり、もともとはTarsnapオンラインバックアップサービスのために作成された。[2] [3]このアルゴリズムは、大量のメモリを必要とすることで、大規模なカスタムハードウェア攻撃の実行コストが高くなるように特別に設計された。2016年に、scryptアルゴリズムはIETFによってRFC 7914として公開された。[4] scryptの簡易バージョンは、多くの暗号通貨でプルーフオブワークスキームとして使用されており、最初にArtForzと呼ばれる匿名のプログラマーによってTenebrixに実装され、その後すぐにFairbrixとLitecoinがそれに続いた。[5]
導入
パスワードベースのキー導出関数(パスワードベースの KDF) は、一般的に計算集約型に設計されているため、計算には比較的長い時間がかかります (数百ミリ秒程度)。正当なユーザーは、操作 (認証など) ごとに関数を 1 回実行するだけでよいため、必要な時間はごくわずかです。ただし、ブルート フォース攻撃では、操作を数十億回実行する必要がある可能性が高く、その時点で時間要件が大きくなり、理想的には法外なものになります。
以前のパスワードベースの KDF ( RSA Laboratoriesの人気のPBKDF2など) はリソース要求が比較的低く、実行に複雑なハードウェアや大量のメモリを必要としません。そのため、ハードウェア ( ASICやFPGAなど) に簡単かつ安価に実装できます。これにより、十分なリソースを持つ攻撃者は、ハードウェアにアルゴリズムの実装を数百または数千構築し、それぞれにキー空間の異なるサブセットを検索させることで、大規模な並列攻撃を開始できます。これにより、ブルートフォース攻撃を完了するために必要な時間が利用可能な実装の数で分割され、妥当な時間枠に短縮される可能性が高くなります。
scrypt関数は、アルゴリズムのリソース要求を高めることで、このような攻撃を阻止するように設計されています。具体的には、このアルゴリズムは他のパスワードベースのKDFと比較して大量のメモリを使用するように設計されており、[6]ハードウェア実装のサイズとコストが大幅に高くなり、したがって、攻撃者が特定の量の資金リソースに対して使用できる並列処理の量が制限されます。
概要
scrypt の大きなメモリ要件は、アルゴリズムの一部として生成される疑似ランダムビット文字列の大きなベクトルに起因します。ベクトルが生成されると、その要素は疑似ランダムな順序でアクセスされ、結合されて派生キーが生成されます。単純な実装では、必要に応じてアクセスできるように、ベクトル全体を RAM に保持する必要があります。
ベクトルの要素はアルゴリズム的に生成されるため、各要素は必要に応じてオンザフライで生成され、一度に 1 つの要素のみをメモリに格納できるため、メモリ要件が大幅に削減されます。ただし、各要素の生成は計算コストが高くなることが想定されており、関数の実行中に要素に何度もアクセスすることが予想されます。したがって、大量のメモリ要件をなくすには、速度とのトレードオフが大きくなります。
この種の時間とメモリのトレードオフは、コンピュータ アルゴリズムによく存在します。つまり、速度を上げるにはメモリ使用量を増やす必要があり、メモリ要件を下げるには操作数を増やして時間がかかることになります。scrypt の背後にある考え方は、このトレードオフをどちらの方向でも意図的にコストがかかるようにすることです。つまり、攻撃者は、多くのリソースを必要としない (したがって、限られた費用で大規模に並列化できる) が非常に低速で実行される実装を使用したり、より高速で実行されるがメモリ要件が非常に大きいため並列化にコストがかかる実装を使用したりすることができます。
アルゴリズム
関数scrypt 入力: このアルゴリズムには、次のパラメータが含まれます: パスフレーズ: ハッシュされるバイト文字列 ソルト: レインボー テーブル攻撃から保護するためにハッシュを変更するランダムな文字のバイト文字列 CostFactor (N): 整数 CPU/メモリ コスト パラメータ - 2 の累乗にする必要があります (例: 1024) BlockSizeFactor (r): 整数 ブロック サイズ パラメータ。順次メモリの読み取りサイズとパフォーマンスを微調整します。(通常は 8 が使用されます) ParallelizationFactor (p): 整数 並列化パラメータ。 (1 .. 2 32 -1 * hLen/MFlen) DesiredKeyLen (dkLen): 整数 バイト単位の希望するキーの長さ (派生キーのオクテット単位の想定出力長。dkLen ≤ (2 32 − 1) * hLen を満たす正の整数。) hLen: 整数 ハッシュ関数のオクテット単位の長さ (SHA256 の場合は 32)。 MFlen: 整数 ミキシング関数 (以下のSMix )の出力のオクテット単位の長さ。RFC7914 では r * 128 と定義されています。 出力: DerivedKey: バイト配列のバイト、DesiredKeyLen は long ステップ 1. 高価なソルトを生成します 。blockSize ← 128*BlockSizeFactor // SMix ミキシング関数出力の長さ (バイト単位) (例: 128*8 = 1024 バイト) PBKDF2 を使用して、最初の 128*BlockSizeFactor*p バイトのデータを生成します (例: 128*8*3 = 3072 バイト)。結果を p要素の配列として扱います。各エントリはブロックサイズバイトです (例: 3 要素、各 1024 バイト)。 [B 0 ...B p−1 ] ← PBKDF2 HMAC-SHA256 ( Passphrase、Salt、 1、 blockSize*ParallelizationFactor) ROMix関数を使用して、 B内の各ブロックをCostFactor回ミックスします(各ブロックは並列にミックスできます) 。i ← 0からp-1まで、 B i ← ROMix(B i , CostFactor)を実行します。 B のすべての要素は、新しい「高価な」ソルト expensiveSalt ← B 0 ‖B 1 ‖B 2 ‖ ... ‖B p-1 // ここで ‖ は連結です ステップ 2. PBKDF2 を使用して必要なバイト数を生成しますが、先ほど生成した高価なソルトを使用して、 PBKDF2 HMAC-SHA256 (Passphrase, expensiveSalt, 1, DesiredKeyLen); を返します。
ここで、PBKDF2(P, S, c, dkLen)表記は RFC 2898 で定義されており、c は反復回数です。
この表記法は、c = 1 の PBKDF2 の使用法を指定するために RFC 7914 で使用されます。
関数ROMix(ブロック、反復)
Xの反復コピーを作成する
X ← ブロック
i ← 0からIterations−1まで
V i ← X を実行する
X ← ブロックミックス(X)
i ← 0からIterations−1まで
j ← Integerify(X) mod 反復
X ← BlockMix(X xor V j )
Xを
返す
RFC 7914 では、 X の最後の 64 バイトをリトルエンディアン整数 A 1Integerify(X)として解釈した結果として定義されています。
反復回数は 2 の N 乗に等しいため、計算に実際に必要なのは、リトルエンディアン整数 A 2として解釈される X の最後の64 バイトのうち最初のCeiling(N / 8) バイトだけです。
Integerify(X) mod Iterations = A1 mod Iterations = A2 mod Iterations
機能ブロックミックス(B):
ブロックBはr個の128バイトのチャンク(2r個の64バイトのチャンクに相当)です。
r ← 長さ(B) / 128;
Bを2r個の64バイトチャンクの配列として扱う
[B 0 ...B 2r-1 ] ← B
X ← B 2r−1
for i ← 0 to 2r−1 do
X ← Salsa20/8(X xor B i ) // Salsa20/8は64バイトから64バイトにハッシュします
Y i ← X
戻る← Y 0 ∈Y 2 ∈...∈Y 2r−2 ∈Y 1 ∈Y 3 ∈...∈Y 2r− 1
Salsa20/8はSalsa20の 8 ラウンド バージョンです。
暗号通貨の用途
scryptは、多くの暗号通貨でプルーフ・オブ・ワークアルゴリズムとして使用されています(より正確には、Hashcashプルーフ・オブ・ワークアルゴリズムのハッシュ関数として使用されています)。これは、Tenebrix(2011年9月リリース)に最初に実装され、同じくscryptアルゴリズムを採用したLitecoinとDogecoinの基礎となりました。 [7] [8] scryptを使用する暗号通貨のマイニングは、多くの場合、グラフィックス処理装置( GPU )で実行されます。これは、GPUがCPUと比較して(一部のアルゴリズムでは)はるかに高い処理能力を持つ傾向があるためです。[9]これにより、2013年11月と12月にこれらの通貨の価格が上昇したため、ハイエンドGPUが不足しました。[10]
ユーティリティ
| 開発者 | コリン・パーシバル |
|---|---|
| 安定版リリース | 1.3.2 [11]
/ 2023年10月2日 |
| リポジトリ | github.com/tarsnap/scrypt より |
| Webサイト | 詳しくはこちら |
scryptユーティリティは、scryptキー導出関数のデモンストレーションとして、2009年5月にColin Percivalによって作成されました。[2] [3]ほとんどのLinuxおよびBSDディストリビューションで利用可能です。
参照
- Argon2 – 2015年のパスワードハッシュコンテストの優勝者
- bcrypt – blowfish ベースのパスワードハッシュ関数
- bcrypt – 2002年に開発されたblowfishベースのクロスプラットフォームファイル暗号化ユーティリティ[12] [13] [14] [15]
- crypt – Unix C ライブラリ関数
- crypt – Unix ユーティリティ
- ccrypt – ユーティリティ
- キー導出関数
- キーストレッチ
- mcrypt – ユーティリティ
- PBKDF2 – 広く使用されている標準のパスワードベースのキー導出関数 2
- PufferFish – 改良された bcrypt 設計に基づくキャッシュハード パスワード ハッシュ関数
- 空間と時間のトレードオフ
参考文献
- ^ “Colin Percival”. Twitter . 2019年2月17日時点のオリジナルよりアーカイブ。
- ^ ab 「scryptキー導出関数」。Tarsnap 。 2019年5月28日時点のオリジナルよりアーカイブ。 2014年1月21日閲覧。
- ^ ab "SCRYPT(1) 一般コマンドマニュアル". Debian Manpages . 2022年3月2日時点のオリジナルよりアーカイブ。2022年3月2日閲覧。
- ^ Percival, Colin; Josefsson, Simon (2016 年 8 月). 「scrypt パスワードベースのキー導出関数」. RFC エディター. 2021 年 12 月 13 日時点のオリジナルよりアーカイブ。2021年12 月 13 日に閲覧。
- ^ Alec Liu (2013年11月29日). 「ビットコインを超えて: 最も有望な暗号通貨ガイド」。2018年6月13日時点のオリジナルよりアーカイブ。2017年7月8日閲覧。
- ^ Percival, Colin. 「Sequential Memory-Hard Functions による強力な鍵導出」(PDF) 。 2019年4月14日時点のオリジナルよりアーカイブ(PDF) 。 2022年11月11日閲覧。
- ^ Andreas M. Antonopoulos (2014 年 12 月 3 日)。Mastering Bitcoin: Unlocking Digital Cryptocurrencies。O'Reilly Media。221、223 ページ。ISBN 9781491902646。
- ^ 「暗号通貨の歴史」litecoin.info wiki 2014年2月7日。2016年6月11日時点のオリジナルよりアーカイブ。2014年6月27日閲覧。
- ^ Roman Guelfi-Gibbs. Radeon 7950 向け Litecoin Scrypt マイニング設定。Amazon Digital Services。2016 年 10 月 24 日時点のオリジナルよりアーカイブ。2017 年9 月 11 日閲覧。
- ^ Joel Hruska (2013年12月10日). 「Litecoinマイニングの急増によりグラフィックカードが不足」ExtremeTech. 2017年12月12日時点のオリジナルよりアーカイブ。2014年1月1日閲覧。
- ^ “リリース 1.3.2”. 2023年10月2日. 2023年10月20日閲覧。
- ^ Shelley, Johnny; Stolarczyk, Philip. 「Bcrypt – Blowfish File Encryption (ホームページ)」。Sourceforge。2015年8月29日時点のオリジナルよりアーカイブ。2024年4月8日閲覧。
- ^ 「bcrypt APK for Android – Droid Informerで無料ダウンロード」。droidinformer.org。2020年2月15日時点のオリジナルよりアーカイブ。2022年3月2日閲覧。
- ^ 「T2 パッケージ – trunk – bcrypt – ファイルを暗号化するユーティリティ」。t2sde.org。2017年 10 月 28 日時点のオリジナルよりアーカイブ。2022 年3 月 2 日閲覧。
- ^ 「Oracle® GoldenGate ライセンス情報」。Oracleヘルプセンター。2024 年 3 月 6 日時点のオリジナルよりアーカイブ。2024年4 月 8 日に閲覧。
外部リンク
- Tarsnap Web サイトの暗号化ページ。
- オリジナルのscrypt紙。
- GitHubの scrypt
