回答編集履歴
4
test
CHANGED
@@ -24,10 +24,12 @@
|
|
24
24
|
|
25
25
|
なお、PBKDF2も反復回数やsaltの設定次第で攻撃耐性が変わります。
|
26
26
|
|
27
|
-
質問文に記載の[string-cryptoの実装](https://github.com/simplyhexagonal/string-crypto/blob/main/src/index.ts#L10-L15) を見ると、
|
27
|
+
質問文に記載の[string-cryptoのデフォルト実装](https://github.com/simplyhexagonal/string-crypto/blob/main/src/index.ts#L10-L15) を見ると、
|
28
28
|
・saltに「s41t」という固定値が使用されている。
|
29
29
|
・iterationが1回
|
30
|
-
ということから、
|
30
|
+
ということから、デフォルトの状態ではあまり意味がありません。
|
31
|
+
実際には [option でカスタマイズして使用](https://github.com/simplyhexagonal/string-crypto#options)すべきです。
|
32
|
+
|
31
33
|
|
32
34
|
ユーザビリティ(パスワードを知っている正規ユーザーがパスワードを使って鍵を開くまでの待ち時間)とのトレードオフになりますが、
|
33
35
|
安全性を高めるならば、iterationをもっと多くするべきでしょう。(例:[iOS4は1万回のストレッチングを行っているとの情報](https://blog.elcomsoft.com/2010/09/smartphone-forensics-cracking-blackberry-backup-passwords/))
|
3
test
CHANGED
@@ -1,83 +1,42 @@
|
|
1
1
|
パスワードをそのまま鍵として用いるよりも、パスワードを鍵導出関数に通して得られた値を鍵として使用した方が、より安全性が高まるからです。
|
2
|
-
|
3
|
-
|
4
|
-
|
5
2
|
|
6
3
|
|
7
4
|
攻撃者は、初期化Vectorとユーザーが使いそうなパスワード(pass、12345、hogehoge等)を手あたり次第使うことによって復号を試みることができます。(辞書攻撃)
|
8
5
|
|
9
|
-
|
10
|
-
|
11
6
|
ここで、パスワードがそのまま鍵として使われている場合と、パスワードを鍵導出関数に反復して通して得た値が鍵として使用されている場合とを比較すると、後者の方が計算負荷が高いため、単位時間あたりの攻撃試行回数を少なくすることができます。
|
12
|
-
|
13
|
-
|
14
|
-
|
15
7
|
|
16
8
|
|
17
9
|
> SHA-256などを使用せず、代わりに鍵導出関数を使う理由
|
18
10
|
|
19
|
-
|
20
|
-
|
21
11
|
PBKDF2は、iteration(反復回数)の設定によって計算負荷を柔軟に変更し、安全性を高めることができるからです。
|
22
|
-
|
23
12
|
(iteration=パスワードに関数を通して出てきた値をもういちど関数に通す、ということを繰り返す回数(「ストレッチング」))
|
24
|
-
|
25
|
-
|
26
13
|
|
27
14
|
SHA-256そのものは単純にハッシュを作るだけであり、**パスワードにSHA-256を通して得られた値をそのまま使う場合は**計算負荷が低いため、鍵導出関数の中で反復して得た値を使用する場合と比較して辞書攻撃に弱いといえます。
|
28
15
|
|
29
16
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
17
|
もちろん独自実装すればSHA-256だけを利用して、PBKDF2と同じようなものはできるでしょう。
|
34
|
-
|
35
|
-
|
36
18
|
|
37
19
|
しかしPBKDF2の方が長い歴史の中で破られておらず、また既に多様なプラットフォームで動くライブラリが存在するという強みがあると考えられます。
|
38
20
|
|
39
|
-
|
40
|
-
|
41
21
|
[RFC8018](https://tools.ietf.org/html/rfc8018)がPBKDF2を推奨していることからも、暗号化関係のソリューションにおいて、鍵導出関数としてPBKDF2を使用することはデファクトスタンダードであり、一種の御作法みたいなイメージなのでしょう。
|
42
|
-
|
43
22
|
(計算機の能力が飛躍的に向上した現状、PKDF2は既に弱いともいわれているらしいですが([wikipedia](https://ja.wikipedia.org/wiki/PBKDF2)中段「PKDF2の代替」参照))
|
44
|
-
|
45
|
-
|
46
|
-
|
47
23
|
|
48
24
|
|
49
25
|
なお、PBKDF2も反復回数やsaltの設定次第で攻撃耐性が変わります。
|
50
26
|
|
51
|
-
|
52
|
-
|
53
|
-
質問文に記載のstring-cryptoの実装
|
27
|
+
質問文に記載の[string-cryptoの実装](https://github.com/simplyhexagonal/string-crypto/blob/main/src/index.ts#L10-L15) を見ると、
|
54
|
-
|
55
28
|
・saltに「s41t」という固定値が使用されている。
|
56
|
-
|
57
29
|
・iterationが1回
|
58
|
-
|
59
30
|
ということから、使わないよりまし、程度だと思われます。
|
60
31
|
|
61
|
-
|
62
|
-
|
63
32
|
ユーザビリティ(パスワードを知っている正規ユーザーがパスワードを使って鍵を開くまでの待ち時間)とのトレードオフになりますが、
|
64
|
-
|
65
33
|
安全性を高めるならば、iterationをもっと多くするべきでしょう。(例:[iOS4は1万回のストレッチングを行っているとの情報](https://blog.elcomsoft.com/2010/09/smartphone-forensics-cracking-blackberry-backup-passwords/))
|
66
|
-
|
67
34
|
さらにsaltをパスワードごとに異なる長いランダム値にすれば、より安全です。
|
68
35
|
|
69
|
-
|
70
|
-
|
71
36
|
(そもそもPBKDF2では使用するハッシュアルゴリズムを指定するようになっていて、そこにSHA-256を指定することも可能です。
|
72
|
-
|
73
37
|
PBKDF2は指定したハッシュアルゴリズムを利用しつつ、saltやiteration等のパラメータに基づいてパスワードを加工し最終的な鍵を作ります。
|
74
|
-
|
75
|
-
|
76
38
|
|
77
39
|
したがってPBKDF2はSHA-256と競合する関係というよりは、料理(鍵)を作るためのシェフとレシピのような関係ともいえるでしょう。
|
78
40
|
|
79
|
-
|
80
|
-
|
81
41
|
パスワードとsaltを材料にして、シェフ(PKDF2)が、レシピ(指定されたハッシュアルゴリズムとiteration)に基ついて料理(鍵)を作る。
|
82
|
-
|
83
42
|
レシピ(SHA-256)だけでも鍵は作れますが、saltとiterationで手間暇をかけるともっとおいしい料理(安全性の高い鍵)が作れます)
|
2
修正
test
CHANGED
@@ -4,11 +4,11 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
|
7
|
+
攻撃者は、初期化Vectorとユーザーが使いそうなパスワード(pass、12345、hogehoge等)を手あたり次第使うことによって復号を試みることができます。(辞書攻撃)
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
ここで、
|
11
|
+
ここで、パスワードがそのまま鍵として使われている場合と、パスワードを鍵導出関数に反復して通して得た値が鍵として使用されている場合とを比較すると、後者の方が計算負荷が高いため、単位時間あたりの攻撃試行回数を少なくすることができます。
|
12
12
|
|
13
13
|
|
14
14
|
|
@@ -18,13 +18,13 @@
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
PBKDF2
|
21
|
+
PBKDF2は、iteration(反復回数)の設定によって計算負荷を柔軟に変更し、安全性を高めることができるからです。
|
22
22
|
|
23
23
|
(iteration=パスワードに関数を通して出てきた値をもういちど関数に通す、ということを繰り返す回数(「ストレッチング」))
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
SHA-256そのものは単純にハッシュを作るだけであり、**パスワードにSHA-256を通して得られた値をそのまま使う場合は**計算負荷が低いため、鍵導出関数の中で反復して得た値を使用する場合と比較して
|
27
|
+
SHA-256そのものは単純にハッシュを作るだけであり、**パスワードにSHA-256を通して得られた値をそのまま使う場合は**計算負荷が低いため、鍵導出関数の中で反復して得た値を使用する場合と比較して辞書攻撃に弱いといえます。
|
28
28
|
|
29
29
|
|
30
30
|
|
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
-
[RFC8018](https://tools.ietf.org/html/rfc8018)がPBKDF2を推奨していることも
|
41
|
+
[RFC8018](https://tools.ietf.org/html/rfc8018)がPBKDF2を推奨していることからも、暗号化関係のソリューションにおいて、鍵導出関数としてPBKDF2を使用することはデファクトスタンダードであり、一種の御作法みたいなイメージなのでしょう。
|
42
42
|
|
43
43
|
(計算機の能力が飛躍的に向上した現状、PKDF2は既に弱いともいわれているらしいですが([wikipedia](https://ja.wikipedia.org/wiki/PBKDF2)中段「PKDF2の代替」参照))
|
44
44
|
|
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
|
48
48
|
|
49
|
-
PBKDF2も反復回数やsaltの設定次第で攻撃耐性が変わります。
|
49
|
+
なお、PBKDF2も反復回数やsaltの設定次第で攻撃耐性が変わります。
|
50
50
|
|
51
51
|
|
52
52
|
|
@@ -56,17 +56,15 @@
|
|
56
56
|
|
57
57
|
・iterationが1回
|
58
58
|
|
59
|
-
ということから、
|
59
|
+
ということから、使わないよりまし、程度だと思われます。
|
60
60
|
|
61
61
|
|
62
62
|
|
63
|
-
ユーザビリティ(パスワードを知っているユーザーがパスワードを使って鍵を開くまでの待ち時間)とのトレードオフになりますが、
|
63
|
+
ユーザビリティ(パスワードを知っている正規ユーザーがパスワードを使って鍵を開くまでの待ち時間)とのトレードオフになりますが、
|
64
64
|
|
65
|
-
安全性を高めるならば、
|
65
|
+
安全性を高めるならば、iterationをもっと多くするべきでしょう。(例:[iOS4は1万回のストレッチングを行っているとの情報](https://blog.elcomsoft.com/2010/09/smartphone-forensics-cracking-blackberry-backup-passwords/))
|
66
66
|
|
67
|
-
|
67
|
+
さらにsaltをパスワードごとに異なる長いランダム値にすれば、より安全です。
|
68
|
-
|
69
|
-
|
70
68
|
|
71
69
|
|
72
70
|
|
@@ -76,7 +74,7 @@
|
|
76
74
|
|
77
75
|
|
78
76
|
|
79
|
-
したがってPBKDF2はSHA-256と競合する関係というよりは、料理(鍵)を作るためのレシピ
|
77
|
+
したがってPBKDF2はSHA-256と競合する関係というよりは、料理(鍵)を作るためのシェフとレシピのような関係ともいえるでしょう。
|
80
78
|
|
81
79
|
|
82
80
|
|
1
修正
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
ここで、鍵にパスワードがそのまま使われている場合と、パスワードを鍵導出関数に通して得た値が使用されている場合とを比較すると、後者の方が計算負荷が高いため、攻撃に時間がかかります。
|
11
|
+
ここで、鍵にパスワードがそのまま使われている場合と、パスワードを鍵導出関数に反復して通して得た値が使用されている場合とを比較すると、後者の方が計算負荷が高いため、総当たり攻撃に時間がかかります。
|
12
12
|
|
13
13
|
|
14
14
|
|
@@ -18,13 +18,15 @@
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
PBKDF2の方が、saltやiteration(反復回数)の設定によって計算負荷を
|
21
|
+
PBKDF2の方が、saltやiteration(反復回数)の設定によって計算負荷を変更し、安全性を高めることができるからです。
|
22
22
|
|
23
23
|
(iteration=パスワードに関数を通して出てきた値をもういちど関数に通す、ということを繰り返す回数(「ストレッチング」))
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
SHA-256そのものは単純にハッシュを作るだけであり、**そのまま使う場合は**計算負荷が低いため、
|
27
|
+
SHA-256そのものは単純にハッシュを作るだけであり、**パスワードにSHA-256を通して得られた値をそのまま使う場合は**計算負荷が低いため、鍵導出関数の中で反復して得た値を使用する場合と比較して総当たり攻撃に弱いといえます。
|
28
|
+
|
29
|
+
|
28
30
|
|
29
31
|
|
30
32
|
|
@@ -36,13 +38,15 @@
|
|
36
38
|
|
37
39
|
|
38
40
|
|
39
|
-
[RFC8018](https://tools.ietf.org/html/rfc8018)がPBKDF2を推奨していることもあり、暗号化関係のソリューションにおいて、鍵導出関数としてPBKDF2を使用することはデファクトスタンダードであり、一種の御作法みたいなイメージ
|
41
|
+
[RFC8018](https://tools.ietf.org/html/rfc8018)がPBKDF2を推奨していることもあり、近年までは暗号化関係のソリューションにおいて、鍵導出関数としてPBKDF2を使用することはデファクトスタンダードであり、一種の御作法みたいなイメージだったのでしょう。
|
42
|
+
|
43
|
+
(計算機の能力が飛躍的に向上した現状、PKDF2は既に弱いともいわれているらしいですが([wikipedia](https://ja.wikipedia.org/wiki/PBKDF2)中段「PKDF2の代替」参照))
|
40
44
|
|
41
45
|
|
42
46
|
|
43
47
|
|
44
48
|
|
45
|
-
|
49
|
+
PBKDF2も反復回数やsaltの設定次第で攻撃耐性が変わります。
|
46
50
|
|
47
51
|
|
48
52
|
|
@@ -59,3 +63,23 @@
|
|
59
63
|
ユーザビリティ(パスワードを知っているユーザーがパスワードを使って鍵を開くまでの待ち時間)とのトレードオフになりますが、
|
60
64
|
|
61
65
|
安全性を高めるならば、saltを長いランダム値にし、iterationをもっと多くするべきでしょう。(例:[iOS4は1万回のストレッチングを行っているとの情報](https://blog.elcomsoft.com/2010/09/smartphone-forensics-cracking-blackberry-backup-passwords/))
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
(そもそもPBKDF2では使用するハッシュアルゴリズムを指定するようになっていて、そこにSHA-256を指定することも可能です。
|
74
|
+
|
75
|
+
PBKDF2は指定したハッシュアルゴリズムを利用しつつ、saltやiteration等のパラメータに基づいてパスワードを加工し最終的な鍵を作ります。
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
したがってPBKDF2はSHA-256と競合する関係というよりは、料理(鍵)を作るためのレシピとシェフのような関係ともいえるでしょう。
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
パスワードとsaltを材料にして、シェフ(PKDF2)が、レシピ(指定されたハッシュアルゴリズムとiteration)に基ついて料理(鍵)を作る。
|
84
|
+
|
85
|
+
レシピ(SHA-256)だけでも鍵は作れますが、saltとiterationで手間暇をかけるともっとおいしい料理(安全性の高い鍵)が作れます)
|