暗号はいずれ破られる

暗号は、絶対に破れない壁ではない。暗号が現実に強いのは、破れないからではなく、破るために必要な計算量が現在の計算機、現在の費用、現在の人間の寿命、現在の文明の時間感覚を圧倒的に超えているからである。ここでいう計算量とは、正解に到達するまでに試さなければならない候補の数と、その候補を 1 秒あたり何回試せるかによって決まる時間のことである。暗号が守っているのは、正解が存在しない空間ではない。正解は存在する。ただし、その正解に至る道筋があまりにも広く、現在の計算機では事実上たどり着けないほど遠い。したがって、暗号の強さを考えるときに重要なのは、「破れるか、破れないか」という二分法ではなく、「破るために何秒、何年、何世代、何世紀が必要か」という時間の問題である。

この見方に立つと、暗号は不思議な技術ではなく、有限の秘密を有限の計算機から遠ざけるための仕組みとして理解できる。たとえば、あるパスワードが完全にランダムに作られているなら、攻撃者はその候補を順番に試すしかない。ある暗号鍵が 128 bit や 256 bit の空間から選ばれているなら、攻撃者はその巨大な鍵空間を探索しなければならない。ここでいう探索空間とは、正解になりうる候補全体の集合である。候補が 100 万通りなら高速な計算機で短時間に試せるかもしれないが、候補が 1035 通り、1077 通りという規模になると、話は人間の直感を離れる。暗号の強さは、この直感を超えた候補数と、現実の計算速度との間に生まれる差によって成立している。

しかし、その差は固定されたものではない。現在の計算機では天文学的に長い時間がかかる探索でも、将来の計算機では短くなる可能性がある。1 秒あたりに試せる候補数が増えれば、同じ探索空間を調べる時間は短くなる。将来の計算性能が指数的に伸びると仮定すれば、現在は到底届かない候補空間も、100 年後、150 年後、200 年後には別の見え方になる。さらに、候補を最初から全部試すのではなく、人間が作りそうな候補に絞る、秘密の一部が漏れる、実装の偏りから候補が削れる、量子探索によって探索回数が平方根程度に減る、といった条件を加えると、必要な計算時間はさらに変わる。ここで扱うのは、それらを現実の攻撃手順として説明することではなく、探索空間がどのように縮み、試行速度がどのように効き、時間がどのように変化するかを、単純な数理モデルとして見ることである。

本稿は、暗号を運用手順、媒体保全、バックアップ設計、復旧手順の問題として扱わない。扱うのは、暗号がどれだけ時間を稼ぐのかという思考実験である。完全ランダムなパスワードとは何か、有限の鍵空間とは何か、1 秒あたりの試行回数が何を意味するのか、将来の計算性能をどのように仮定するのか、辞書化、漏洩、サイドチャネル、量子探索を数理モデルではどのように表せるのかを、一つずつ定義し、仮定し、式にし、単純計算する。その反復によって、暗号が現在なぜ強いのか、そしてなぜ「暗号はいずれ破られる」と言えるのかを、印象論ではなく桁の問題として確認する。

この主題は、暗号を悲観的に見るためのものではない。むしろ逆である。暗号は、有限の秘密を有限の計算機から守るために、探索空間を人間の実用時間から遠ざける技術である。Shannon 以来、暗号は情報、鍵、確率、攻撃者の知識、計算可能性の問題として扱われてきた[1]。現代の鍵管理資料でも、鍵長や暗号方式は時間と用途に応じて選ぶ対象として扱われる[2]。AES のような標準暗号も、有限の鍵空間を持つ暗号であり、その強さは鍵空間の大きさと既知の攻撃コストによって評価される[3]。したがって、「暗号はいずれ破られる」という命題は、暗号が無意味だという意味ではなく、暗号の安全性が時間、計算資源、未知情報量に対する相対的な性質であるという意味である。


1. 前提条件と制約事項を先に固定する

本稿の数値は、実際の攻撃成功率を予測するものではない。ここで行うのは、仮定を単純化したうえで、暗号に対する探索がどの程度の桁になるかを見るための思考実験である。現実の攻撃では、実装、並列化効率、電力、冷却、費用、法的制約、データ取得条件、攻撃者の知識、利用できるハードウェア、対象フォーマットの検証方法などが絡む。しかし、それらをすべて現実のまま扱うと、論点が拡散して数理構造が見えにくくなる。そこで本稿では、現実要因を必要に応じて「試行速度を何倍にするか」「候補空間を何分の 1 にするか」「未知の bit 数をどれだけ削るか」という形に押し込む。

完全ランダムなパスワードとは、人間が意味を考えて作った文字列ではなく、乱数によって各文字が独立に選ばれた文字列である。たとえば英大文字、英小文字、数字の 62 種から 20 文字を作る場合、各位置で 62 通りの選択肢があり、1 文字目の結果が 2 文字目を偏らせない、という前提を置く。ここで重要なのは、見た目が複雑であることではない。人間が「読みにくい」と感じることと、数学的に候補空間が広いことは同じではない。暗号で必要なのは、攻撃者から見て候補を予測しにくいことであり、そのためには乱数源の品質とエントロピーが問題になる。NIST SP 800-90B は乱数生成に使うエントロピー源を評価する資料であり、本稿でいう完全ランダム性を理解する背景になる[4]

有限の鍵空間とは、試すべき候補が無限ではなく、個数として数えられるという意味である。英数字 20 文字なら 6220 通り、AES-128 なら 2128 通り、AES-256 なら 2256 通りである。どれも巨大だが、数学的には有限である。有限である以上、すべてを順番に試せばいつか当たる。ただし、候補数が巨大であれば、現在の計算機では現実時間内に終わらない。この「有限だが巨大である」という性質が、暗号を理解する最初の階段である。

1 秒あたりの試行回数とは、攻撃者が 1 秒間にいくつの候補を検証できるかを表す。本稿では基準値として 400 万回/秒を置く。これは特定ツールや特定機械の厳密な性能ではなく、計算を進めるための物差しである。KDF が重くなればこの値は小さくなり、専用ハードウェアや大規模並列化を仮定すれば大きくなる。NIST SP 800-63B はパスワード認証の文脈で長さ、検証、制限、ブロックリストなどを扱うが、本稿ではそうした実運用の推奨ではなく、候補空間と試行速度の関係だけを取り出す[5]

将来の計算性能とは、今より速い計算機が将来使えるという仮定である。ここでは 2026 年を基準年とし、2 年ごとに計算性能が 2 倍になると置く。この仮定は予測ではない。Moore’s Law を厳密な未来予報として採用するのではなく、指数成長を単純に延長した場合に、現在の暗号強度がどのように見え方を変えるかを見るための実験である。NIST SP 800-90A は乱数生成器の設計を扱う資料だが、本稿では乱数生成器そのものの実装評価ではなく、ランダムに選ばれた候補がどれだけの探索空間を作るかに限定する[6]

項目 本稿での扱い
中心命題 暗号は絶対に破れない壁ではなく、有限の探索空間を計算時間によって遠くへ押し出す技術である。
基準パスワード 英大文字、英小文字、数字の 62 種から完全ランダムに選んだ 20 文字とする。
基準試行速度 1 秒あたり 400 万回の候補を試せるものとして置く。これは特定環境の厳密な値ではなく、計算の物差しである。
平均突破 正解が候補空間のどこにあるか分からないため、平均では全候補の半分を試した時点で当たると仮定する。
将来性能 2026 年を基準年とし、計算性能が 2 年ごとに 2 倍になると仮定する。これは予測ではなく、指数成長を延長した場合の思考実験である。
扱わないこと 具体的な攻撃手順、特定ツールの使い方、実際の侵入方法、個別媒体の運用手順は扱わない。

2. 候補空間とは何か

候補空間とは、攻撃者が試す可能性のある候補の集合である。パスワードなら候補文字列の集合、暗号鍵なら候補鍵の集合である。たとえば数字 4 桁の暗証番号では、0000 から 9999 まで 10,000 通りある。これは 1 桁あたり 10 通りで、それが 4 桁あるため、10 × 10 × 10 × 10 = 104 になる。同じ考え方を 20 文字のパスワードへ拡張すると、候補数は一気に巨大になる。

文字種数を \( C \)、文字数を \( L \) とする。各位置で \( C \) 通りの選択肢があり、それが \( L \) 回続くため、候補総数 \( N \) は \( C^L \) になる。ここで \( C \) は指数の底であり、\( L \) は指数である。重要なのは、文字数が 1 増えるたびに候補数が足し算で増えるのではなく、掛け算で増えることである。英数字なら 1 文字増えるたびに 62 倍になる。この指数性が、総当たり攻撃に対する耐性の中心である。

\[
N = C^L
\]

この式は単純だが、暗号強度の直感を大きく変える。数字 20 桁は 1020 通りであり、すでに大きく見える。しかし英数字 20 文字は 6220 通りとなり、数字 20 桁よりはるかに大きくなる。ASCII 表示文字 94 種まで使えば 9420 通りになる。つまり、同じ 20 文字でも、文字集合が違えば候補空間は何桁も変わる。

形式 文字種数 文字数 候補総数 ビット強度 平均突破時間
数字のみ 20 桁 10 20 約 1.00 × 1020 約 66.4 bit 約 396,101 年
英小文字のみ 20 文字 26 20 約 1.99 × 1028 約 94.0 bit 約 7.89 × 1013
英大小文字 + 数字 20 文字 62 20 約 7.04 × 1035 約 119.1 bit 約 2.79 × 1021
ASCII 表示文字 94 種 20 文字 94 20 約 2.90 × 1039 約 131.1 bit 約 1.15 × 1025

この表で見るべき点は、数字のみ 20 桁でも約 66.4 bit 相当である一方、英数字 20 文字では約 119.1 bit 相当まで増えることである。bit 強度とは、候補総数を 2 の何乗で表せるかという尺度である。たとえば 2128 通りなら 128 bit であり、6220 通りなら約 119.1 bit である。暗号では桁数そのものよりも、この bit 強度で比較したほうが、AES-128 や AES-256 のような鍵空間と同じ物差しに乗せやすい。


3. 平均突破時間はどう計算するのか

総当たり攻撃では、候補を 1 つずつ試す。正解が候補空間の最初にあればすぐ当たるが、最後にあれば全候補を試す必要がある。正解が候補空間のどこにあるか分からないなら、平均では全候補の半分を試した時点で当たると考える。この「平均では半分」という仮定は、総当たり計算の基本的な簡略化である。

候補総数を \( N \)、1 秒あたり試行回数を \( R \) とする。平均試行数は \( N / 2 \) であり、それを 1 秒あたり \( R \) 回で割ると秒数になる。年数に直すには、1 年を 31,557,600 秒として割る。本稿ではうるう年やカレンダー差は扱わず、1 年を固定秒数として扱う。

\[
\text{平均試行数} = \frac{N}{2}
\]
\[
\text{平均突破秒数} = \frac{N}{2R}
\]
\[
\text{平均突破年数} = \frac{N}{2R \times 31,557,600}
\]

ここで重要なのは、\( N \) は指数的に増えるが、\( R \) は割り算で効くという点である。試行速度を 10 倍にすれば突破時間は 10 分の 1 になる。100 万倍にすれば 100 万分の 1 になる。しかし候補空間が 1035 通りある場合、100 万倍速くしても、まだ 1029 級の世界が残る。したがって、総当たり耐性を理解するには、試行速度だけでなく、候補空間の桁を見なければならない。


4. 基準シナリオとして英数字ランダム 20 文字を置く

ここからは、基準シナリオを固定する。英大文字、英小文字、数字の 62 種から、完全ランダムに 20 文字を選ぶ。このとき候補総数は 6220 であり、約 7.04 × 1035 通りになる。平均ではその半分、約 3.52 × 1035 回を試すことになる。

\[
N = 62^{20} \simeq 7.04 \times 10^{35}
\]
\[
\frac{N}{2} \simeq 3.52 \times 10^{35}
\]

ここで 1 秒あたり 400 万回、つまり \( R = 4.0 \times 10^6 \) 回/秒を仮定する。平均突破秒数は約 8.80 × 1028 秒であり、年数に直すと約 2.79 × 1021 年になる。これは「とても長い」という表現では足りない。人間の寿命、文明史、地質年代、宇宙年齢のような通常の時間感覚を超えた桁である。

\[
\text{平均突破年数} =
\frac{62^{20}}{2 \times 4.0 \times 10^6 \times 31,557,600}
\simeq 2.79 \times 10^{21} \text{ 年}
\]

この計算が示しているのは、現在の暗号が魔法のように破れないということではない。候補は有限であり、総当たりは原理的には可能である。しかし、候補空間が大きすぎるため、現在の試行速度では時間が足りない。暗号の強さは、この「時間が足りない」という事実を、どれだけ極端な桁へ押し広げるかにある。


5. 1 秒あたりの試行回数を変える

次に、候補空間を固定し、試行速度だけを変える。これは、同じパスワードに対して、攻撃者が普通のパソコンを使うのか、大量の GPU を使うのか、専用ハードウェアを使うのかを、非常に粗く 1 つの変数へ押し込むモデルである。現実には、対象フォーマット、KDF、メモリ使用量、検証処理、並列化効率によって速度は変わる。しかし思考実験では、まず \( R \) だけを動かす。

\[
T = \frac{62^{20}}{2R}
\]
試行速度 平均突破時間
1.00 回/秒 約 1.12 × 1028
1,000 回/秒 約 1.12 × 1025
1.00 × 106 回/秒 約 1.12 × 1022
4.00 × 106 回/秒 約 2.79 × 1021
1.00 × 109 回/秒 約 1.12 × 1019
1.00 × 1012 回/秒 約 1.12 × 1016
1.00 × 1015 回/秒 約 1.12 × 1013
1.00 × 1018 回/秒 約 1.12 × 1010
1.00 × 1021 回/秒 約 1.12 × 107
1.00 × 1024 回/秒 約 11,161 年
1.00 × 1027 回/秒 約 11.16 年
1.00 × 1030 回/秒 約 4.08 日

この表で注目すべきなのは、試行速度を 1024 回/秒まで上げても平均突破時間は約 1.12 × 104 年であり、1027 回/秒でようやく約 11.17 年になる点である。1 秒あたり 1027 回という値は、現在の日常的な計算機の感覚からは極端である。それでも、英数字 20 文字の候補空間は、単純には一瞬で崩れない。

ただし、この表を「永遠に安全」と読むのは誤りである。試行速度が線形に増えるだけなら時間は線形に短くなるが、将来の計算性能が指数的に伸びると仮定すれば、必要時間は世代をまたいで急速に縮む。したがって、現在の計算機で不可能なことと、将来の計算機でも不可能であり続けることは区別しなければならない。


6. 文字数を増やすと何年分の猶予が増えるのか

今度は試行速度を固定し、文字数だけを変える。英数字では 1 文字ごとに 62 通りの選択肢が増えるため、1 文字追加すると候補空間は 62 倍になる。2 文字追加すると 622 = 3,844 倍になる。これは、1 文字の追加が小さな変更に見えても、総当たり計算では大きな差になることを意味する。

\[
\frac{62^{L+1}}{62^L} = 62
\]

将来性能を 2 年ごとに 2 倍と仮定すると、62 倍の余裕は \( 2 \log_2 62 \) 年ぶんに相当する。\( \log_2 62 \) は約 5.95 なので、1 文字追加は約 11.9 年分である。つまり、英数字ランダムパスワードでは、1 文字増やすだけで、同じ単純モデル上では破られる時期を約 12 年後ろへ押し戻す。

文字数 候補総数 平均突破時間 平均 1 年突破に到達する年
8 文字 約 2.18 × 1014 約 315.89 日 2026 年時点で 1 年未満
10 文字 約 8.39 × 1017 約 3,324 年 約 2049 年
12 文字 約 3.23 × 1021 約 1.28 × 107 約 2073 年
14 文字 約 1.24 × 1025 約 4.91 × 1010 約 2097 年
16 文字 約 4.77 × 1028 約 1.89 × 1014 約 2121 年
18 文字 約 1.83 × 1032 約 7.26 × 1017 約 2145 年
20 文字 約 7.04 × 1035 約 2.79 × 1021 約 2168 年
22 文字 約 2.71 × 1039 約 1.07 × 1025 約 2192 年
24 文字 約 1.04 × 1043 約 4.12 × 1028 約 2216 年
26 文字 約 4.00 × 1046 約 1.58 × 1032 約 2240 年
28 文字 約 1.54 × 1050 約 6.09 × 1035 約 2264 年
30 文字 約 5.91 × 1053 約 2.34 × 1039 約 2288 年
32 文字 約 2.27 × 1057 約 9.00 × 1042 約 2311 年

この表では、8 文字は 2026 年時点でも平均 1 年未満である。12 文字は現在なら約 1,280 万年に見えるが、2 年ごとの性能倍増を仮定すると、2070 年代には平均 1 年突破圏に近づく。20 文字は 2160 年代、24 文字は 2210 年代になる。この計算は未来予測ではないが、文字数が「何世代分の時間を稼ぐか」という見方を与える。


7. 文字種を変えると同じ 20 文字でも意味が変わる

文字数が同じでも、文字種が違えば候補空間は変わる。数字だけなら各位置 10 通り、英小文字だけなら 26 通り、英大小文字と数字なら 62 通り、ASCII の表示可能文字を広く使えば 94 通りになる。ここで誤解しやすいのは、「記号を入れれば必ず安全」という単純な話ではない点である。記号が人間の癖で予測可能な位置に置かれるなら、実効的な候補空間はあまり増えない。ここで扱うのは、各位置が完全ランダムに選ばれる場合である。

形式 文字種数 文字数 候補総数 ビット強度 平均突破時間
数字のみ 20 桁 10 20 約 1.00 × 1020 約 66.4 bit 約 396,101 年
英小文字のみ 20 文字 26 20 約 1.99 × 1028 約 94.0 bit 約 7.89 × 1013
英大小文字 + 数字 20 文字 62 20 約 7.04 × 1035 約 119.1 bit 約 2.79 × 1021
ASCII 表示文字 94 種 20 文字 94 20 約 2.90 × 1039 約 131.1 bit 約 1.15 × 1025

数字のみ 20 桁は約 66 bit 相当であり、2026 年時点の基準速度でも約 39.6 万年である。これは短くはないが、英数字 20 文字の約 2.79 × 1021 年とは桁がまったく違う。ASCII 94 種 20 文字は約 131 bit 相当になり、AES-128 の 128 bit に近い領域へ入る。文字種の効果は、単に見た目の複雑さではなく、各位置の選択肢が何通りあるかとして理解すべきである。


8. 必要な文字数を逆算する

ここまでは文字数を決めて突破時間を計算した。逆に、目標とする平均突破時間から必要な文字数を逆算することもできる。文字種数を \( C \)、試行速度を \( R \)、目標年数を \( T \) とすると、必要な候補総数は \( 2R \times 31,557,600 \times T \) である。これを \( C^L \) に等しいと置き、両辺の対数を取れば、必要文字数 \( L \) が求まる。

\[
C^L = 2R \times 31,557,600 \times T
\]
\[
L = \frac{\log(2R \times 31,557,600 \times T)}{\log C}
\]

この逆算は、現在の計算速度だけを見た場合に、どれくらいの長さがどれくらいの時間を稼ぐかを理解するのに役立つ。ただし、これは将来性能を入れない静的な見積もりである。長期保護を考えるなら、後の章で扱う将来性能モデルを重ねる必要がある。

目標平均突破時間 必要な英数字ランダム文字数 実際に選ぶなら
約 1.00 年 約 8.04 文字 切り上げると 9 文字
約 10.00 年 約 8.59 文字 切り上げると 9 文字
約 100 年 約 9.15 文字 切り上げると 10 文字
約 1,000 年 約 9.71 文字 切り上げると 10 文字
約 1.00 × 106 約 11.38 文字 切り上げると 12 文字
約 1.00 × 109 約 13.06 文字 切り上げると 14 文字
約 1.00 × 1012 約 14.73 文字 切り上げると 15 文字
約 1.00 × 1015 約 16.40 文字 切り上げると 17 文字
約 1.00 × 1021 約 19.75 文字 切り上げると 20 文字

現在の 400 万回/秒という仮定だけなら、英数字 10 文字でも平均 1,000 年を超える。しかし、これは現在時点の速度で固定した場合の話である。計算性能が伸びる世界では、10 文字の余裕は数十年単位で削られる。したがって、この表は「今だけを見た必要文字数」であり、「長期的に十分な文字数」ではない。


9. KDF は試行速度を下げる装置として効く

KDF は Key Derivation Function、つまり鍵導出関数である。パスワードをそのまま暗号鍵として使うのではなく、ソルト、反復、ハッシュ、メモリ使用量などを組み合わせて、暗号鍵として使える値へ変換する。ここでの役割は 2 つある。第一に、同じパスワードでもソルトが違えば別の導出結果になるようにする。第二に、1 回の候補検証を意図的に重くし、攻撃者が大量の候補を高速に試せないようにする。PBKDF2 は RFC 8018 で扱われ、NIST SP 800-132 でもパスワードベース鍵導出として位置づけられている[7][8]

PBKDF2 などでは、内部で HMAC が使われることが多い。HMAC は鍵付きハッシュの仕組みであり、基礎となるハッシュ関数の性質に依存する[9]。SHA-256 や SHA-512 は SHA-2 ファミリーとして NIST FIPS 180-4 に定義される[10]。ここで注意すべきなのは、PRF やハッシュ関数の名前が出てきても、それは「暗号化本文に使う鍵長がそのまま RIPEMD-160 の 160 bit になる」という意味ではないことである。多くの場合、PRF はパスワードからヘッダーキーや鍵材料を導くための内部部品であり、候補 1 回の検証コストや互換性に関わる。

単純モデルでは、KDF の違いを「1 回の候補検証が何倍重いか」として扱う。KDF が 100 倍重ければ、1 秒あたり試行回数は 100 分の 1 になり、平均突破時間は 100 倍になる。これは強い効果だが、線形の効果である。文字数の増加のように候補空間を指数的に増やすわけではない。

\[
T_{\text{KDF}} = kT
\]
KDF の重さ 平均突破時間 2 年倍増モデルでの後ろ倒し
1.00 倍重い 約 2.79 × 1021 約 0.0 年
10.00 倍重い 約 2.79 × 1022 約 6.6 年
100 倍重い 約 2.79 × 1023 約 13.3 年
1,000 倍重い 約 2.79 × 1024 約 19.9 年
10,000 倍重い 約 2.79 × 1025 約 26.6 年
1.00 × 106 倍重い 約 2.79 × 1027 約 39.9 年
1.00 × 109 倍重い 約 2.79 × 1030 約 59.8 年

KDF を 100 万倍重くすると、2026 年時点の平均突破時間は 100 万倍になる。しかし、2 年ごとに性能が 2 倍になるモデルでは、100 万倍は約 40 年分の後ろ倒しである。これは大きいが、永遠ではない。KDF は総当たり速度を下げる重要な防壁だが、候補空間そのものの大きさ、つまりパスワードのランダム性と長さを置き換えるものではない。


10. TrueCrypt、VeraCrypt、LUKS を試行速度差として読む

TrueCrypt、VeraCrypt、LUKS は、本来であればフォーマット、ヘッダー、鍵スロット、暗号モード、互換性、実装史まで含めて比較する対象である。しかし本稿では、あえてそれらを「総当たり 1 回あたりの重さがどれだけ違うか」という軸に単純化する。TrueCrypt ではヘッダーキー導出に HMAC-SHA-512、HMAC-RIPEMD-160、HMAC-Whirlpool などが使われる[11]。VeraCrypt ではヘッダーキー導出が強化され、近年の資料では Argon2id も扱われる[12][13]。Argon2 は RFC 9106 で定義されるメモリハード関数であり、単に CPU を回すだけでなく、メモリ使用量もコストに入れる設計である[14]

LUKS は Linux のディスク暗号化で広く使われる形式であり、cryptsetup の man page でも LUKS1、LUKS2、PBKDF、Argon2id などのオプションが扱われる[15]。また、ディスク暗号化では AES-XTS がよく使われ、XTS-AES は NIST SP 800-38E でストレージ向けモードとして扱われる[16]。ただし、本稿の思考実験では、これらの詳細は「候補 1 回の検証コスト」と「鍵空間の大きさ」に分解する。

対象 本稿での単純化 総当たり計算への効き方
TrueCrypt ヘッダーキー導出に使う PRF と反復回数が、候補 1 回の検証コストを決める要素として働く。 候補空間そのものではなく、1 秒あたり試行回数 \( R \) を変える。
VeraCrypt PBKDF2 や Argon2id によって、候補 1 回の検証をより重くできる対象として扱う。 KDF の重さ \( k \) によって平均突破時間を \( k \) 倍にする。
LUKS1 主に PBKDF2 系の鍵導出を使う暗号化ディスク形式として扱う。 ヘッダーや鍵スロットの構造ではなく、試行速度差として読む。
LUKS2 Argon2id などのメモリハード KDF を使える形式として扱う。 CPU だけでなくメモリコストを含むため、大規模並列化に対する単純な速度上昇を抑える方向に働く。

この単純化では、方式差は「候補を 1 回試すのにどれくらい時間がかかるか」という違いとして現れる。パスワード候補の総数を \( N \)、1 秒あたり試行回数を \( R \) とすれば、平均突破時間は \( N / 2R \) である。したがって、候補空間 \( N \) が同じでも、TrueCrypt では \( R \) が大きく、VeraCrypt や LUKS2 Argon2id では \( R \) が小さくなる、という形で比較できる。ここで重要なのは、方式差が候補空間を直接増やすのではなく、主に候補 1 回あたりの検証コストを通じて試行速度を変えるという点である。

以下では、基準パスワードをこれまでと同じく英大小文字 + 数字 62 種から完全ランダムに選んだ 20 文字とする。候補総数は \( 62^{20} \)、平均試行数は \( 62^{20} / 2 \) である。各方式の試行速度は、厳密なベンチマーク値ではなく、本文全体の思考実験で使う代表値として置く。実際の速度は GPU、CPU、実装、暗号モード、ヘッダー形式、メモリ設定、並列化効率によって変わるが、ここでは「方式が重くなると平均突破時間がどの程度伸びるか」を見る。

対象 仮定する試行速度 平均突破時間 読み取り
TrueCrypt SHA-512 系 約 379 万回/秒と置く。 約 2.94 × 1021 年である。 TrueCrypt は現代的な KDF と比べると軽いが、完全ランダム英数字 20 文字という前提では、正面総当たりはなお宇宙年齢をはるかに超える。
TrueCrypt RIPEMD-160 系 約 244 万回/秒と置く。 約 4.57 × 1021 年である。 SHA-512 系より試行速度が遅い想定なので、平均突破時間はやや長くなるが、桁としては同じ 1021 年級である。
TrueCrypt Whirlpool 系 約 91 万回/秒と置く。 約 1.22 × 1022 年である。 TrueCrypt の中では重い側として扱えるが、ここでも差は候補空間ではなく試行速度差として現れる。
LUKS1 PBKDF2 速めの想定 約 18.8 万回/秒と置く。 約 5.94 × 1022 年である。 TrueCrypt SHA-512 系より約 16 倍ほど時間が伸びる。KDF が重いほど、同じ候補空間でも総当たり時間は線形に伸びる。
LUKS1 PBKDF2 遅めの想定 約 6.1 万回/秒と置く。 約 1.83 × 1023 年である。 試行速度がさらに低い想定では、平均突破時間は 1023 年級になる。ただし、これも候補空間を指数的に増やしたのではなく、試行速度を下げた結果である。
VeraCrypt PBKDF2 速めの想定 約 1.1 万回/秒と置く。 約 1.01 × 1024 年である。 TrueCrypt 系より大きく重くなり、平均突破時間は 1024 年級に入る。候補 1 回の検証を重くすることは、総当たりの速度を強く抑える。
VeraCrypt PBKDF2 遅めの想定 約 1,400 回/秒と置く。 約 7.96 × 1024 年である。 さらに重い設定では、平均突破時間は TrueCrypt SHA-512 系の約 2,700 倍になる。ただし、2,700 倍は大きいが、指数成長モデルでは永遠ではない。
LUKS2 Argon2id 低速想定 1 回/秒と置く。 約 1.12 × 1028 年である。 メモリハード KDF を極端に単純化して 1 回/秒と置くと、平均突破時間は 1028 年級になる。これは KDF の重さが試行速度を直接下げることを示すための思考実験である。

この表でまず分かるのは、TrueCrypt、VeraCrypt、LUKS の差は、完全ランダム英数字 20 文字という前提では「破れるか破れないか」の違いとしては見えにくいということである。どの方式でも、2026 年時点の単純計算では平均突破時間が宇宙年齢をはるかに超える。しかし、方式差は無意味ではない。TrueCrypt SHA-512 系を約 2.94 × 1021 年と置いたとき、VeraCrypt PBKDF2 速めの想定は約 1.01 × 1024 年であり、約 344 倍長い。LUKS2 Argon2id を 1 回/秒と置けば約 1.12 × 1028 年となり、TrueCrypt SHA-512 系の約 380 万倍長い。

比較対象 TrueCrypt SHA-512 系に対する倍率 比較から言えること
TrueCrypt RIPEMD-160 系 約 1.55 倍長い。 同じ TrueCrypt 系の内部差は存在するが、長期の桁感では大きな世代差というより試行速度の差として読むのがよい。
TrueCrypt Whirlpool 系 約 4.15 倍長い。 Whirlpool 系はこの想定では重いが、完全ランダム 20 文字の支配要因はなお候補空間の大きさである。
LUKS1 PBKDF2 速めの想定 約 20.2 倍長い。 PBKDF2 の設定や実装差によって、総当たりの速度は 1 桁以上変わりうる。
LUKS1 PBKDF2 遅めの想定 約 62.2 倍長い。 同じ LUKS1 系でも想定速度の違いにより、平均突破時間は大きく変わる。
VeraCrypt PBKDF2 速めの想定 約 344 倍長い。 VeraCrypt 系の重い鍵導出は、総当たり速度を明確に押し下げる。
VeraCrypt PBKDF2 遅めの想定 約 2,710 倍長い。 候補 1 回の検証が重いほど、同じ候補空間でも必要時間は線形に伸びる。
LUKS2 Argon2id 低速想定 約 381 万倍長い。 メモリハード KDF を強く効かせると、総当たりの試行速度を大きく落とせる。ただし、これは候補空間を増やす効果ではなく、候補 1 回あたりの検証コストを増やす効果である。

次に、この差を将来性能モデルに入れる。2026 年を基準として、計算性能が 2 年ごとに 2 倍になると仮定する。この場合、平均突破時間が 1 年になる時期は、現在の平均突破年数 \( T_0 \) に対して \( 2026 + 2 \log_2(T_0) \) で近似できる。これは未来予測ではなく、同じ候補空間を試す速度だけが指数的に伸びると仮定した場合の単純計算である。

対象 2026 年時点の平均突破時間 平均 1 年突破に到達する時期 読み取り
TrueCrypt SHA-512 系 約 2.94 × 1021 年である。 約 2169 年である。 古い方式に見えても、完全ランダム 20 文字では 22 世紀後半まで平均 1 年突破には届かないという単純結果になる。
TrueCrypt RIPEMD-160 系 約 4.57 × 1021 年である。 約 2170 年である。 SHA-512 系との差は約 1 年程度の後ろ倒しとして見える。
TrueCrypt Whirlpool 系 約 1.22 × 1022 年である。 約 2173 年である。 TrueCrypt 内の重い想定でも、将来到達年の差は数年程度に圧縮される。
LUKS1 PBKDF2 速めの想定 約 5.94 × 1022 年である。 約 2177 年である。 TrueCrypt SHA-512 系より約 8 年後ろにずれる。20 倍程度の重さは、2 年倍増モデルでは数年分の差として現れる。
LUKS1 PBKDF2 遅めの想定 約 1.83 × 1023 年である。 約 2181 年である。 試行速度差は突破時期を後ろへ押すが、指数成長を仮定すると差は対数的に縮む。
VeraCrypt PBKDF2 速めの想定 約 1.01 × 1024 年である。 約 2185 年である。 TrueCrypt SHA-512 系より約 16 年後ろにずれる。KDF を数百倍重くする効果は、世代で見ると半世代程度の押し戻しになる。
VeraCrypt PBKDF2 遅めの想定 約 7.96 × 1024 年である。 約 2191 年である。 TrueCrypt SHA-512 系より約 22 年後ろにずれる。大きな試行速度差でも、指数成長モデルでは到達年の差は対数で効く。
LUKS2 Argon2id 低速想定 約 1.12 × 1028 年である。 約 2212 年である。 TrueCrypt SHA-512 系より約 43 年後ろにずれる。メモリハード KDF の重さは長期安全期間を押し出すが、それでも有限の探索空間であることは変わらない。

この比較で見える背後構造は二つある。第一に、KDF や方式差は総当たりの試行速度を大きく変えるため、現在時点の平均突破時間を何倍、何百倍、何百万倍にも伸ばせる。第二に、将来性能を 2 年ごとに 2 倍と仮定すると、その倍率は到達年に対して対数的に効く。たとえば、100 万倍重くしても、2 年倍増モデルでは約 40 年分の後ろ倒しである。これは小さくないが、永遠ではない。したがって、方式差は重要だが、暗号の長期的な見え方を決めるのは、候補空間、KDF の重さ、将来性能の伸び方を合わせた関数である。

この章の結論は、方式名だけで安全性を語らないということである。総当たり耐性だけを見れば、重要なのは候補空間 \( N \)、1 回の検証コスト、1 秒あたり試行回数 \( R \)、そして未知情報量である。方式差は確かに重要だが、数理モデルではまず \( R \) と \( k \) に分解できる。TrueCrypt は古いからただちに破れる、VeraCrypt や LUKS2 は新しいから永遠に破れない、という話ではない。完全ランダムな 20 文字という前提では、どの方式も現在の正面総当たりには極端に強い。一方で、方式が重いほど未来の到達時期を後ろへ押し出す。ここに、暗号方式の違いを時間の差として読むための基本構造がある。


11. AES-128、AES-192、AES-256 とパスワード空間を比較する

AES-128、AES-192、AES-256 の違いは、鍵空間の大きさとして表せる。AES-128 は 2128 通り、AES-192 は 2192 通り、AES-256 は 2256 通りである。ここで 128、192、256 は bit 数であり、候補数を 2 の指数で表した値である。パスワード空間も同じように \( \log_2 N \) を取れば bit 強度として表せる。

\[
B = \log_2 N
\]

英数字 20 文字は 6220 通りなので、bit 強度は \( 20 \log_2 62 \) であり、約 119.1 bit になる。ASCII 94 種 20 文字なら約 131.1 bit で、AES-128 に近いか少し超える領域になる。ただし、これは完全ランダムに選ばれた場合である。人間が意味のある語、日付、置換規則、パターンを使った場合、この bit 強度は大きく下がる。

対象 ビット強度 平均突破時間 平均 1 年突破に到達する年
数字のみ 20 桁 約 66.4 bit 約 396,101 年 約 2063 年
英小文字のみ 20 文字 約 94.0 bit 約 7.89 × 1013 約 2118 年
英数字 20 文字 約 119.1 bit 約 2.79 × 1021 約 2168 年
ASCII 94 種 20 文字 約 131.1 bit 約 1.15 × 1025 約 2192 年
AES-128 約 128.0 bit 約 1.35 × 1024 約 2186 年
AES-192 約 192.0 bit 約 2.49 × 1043 約 2314 年
AES-256 約 256.0 bit 約 4.59 × 1062 約 2442 年

この表では、英数字 20 文字は AES-128 より少し弱いが、同じ 100 bit 超の領域にいる。一方、AES-256 はまったく別の桁にある。400 万回/秒という同じ物差しで乱暴に比べると、AES-256 の平均突破時間は約 4.59 × 1062 年である。これは、AES-128 と AES-256 の差が単なる 2 倍ではなく、2128 倍の差であることを示している。


12. 将来性能を入れると現在の天文学的時間は縮む

ここから、将来の計算性能を入れる。Moore’s Law は、集積回路上のトランジスタ数が約 2 年ごとに倍増するという経験則として知られる[17]。現実には、トランジスタ数、クロック、電力効率、並列性、専用回路、クラウド規模、量子計算などは同じではない。本稿では、それらをすべて乱暴にまとめ、総当たりに使える実効性能が 2 年ごとに 2 倍になると仮定する。

2026 年時点の平均突破年数を \( T_0 \) とする。\( t \) 年後には性能が \( 2^{t/2} \) 倍になるため、平均突破時間は \( T_0 / 2^{t/2} \) になる。これは、計算性能が指数的に伸びるなら、固定された候補空間に対する探索時間が指数的に短くなることを意味する。

\[
T(t) = \frac{T_0}{2^{t/2}}
\]
時期 性能倍率 英数字 20 文字の平均突破時間
2026 年 20 ≒ 1.00 倍 約 2.79 × 1021
2056 年 215 ≒ 32,768 倍 約 8.52 × 1016
2086 年 230 ≒ 1.07 × 109 約 2.60 × 1012
2116 年 245 ≒ 3.52 × 1013 約 7.93 × 107
2126 年 250 ≒ 1.13 × 1015 約 2.48 × 106
2146 年 260 ≒ 1.15 × 1018 約 2,420 年
2176 年 275 ≒ 3.78 × 1022 約 26.98 日
2226 年 2100 ≒ 1.27 × 1030 約 0.0695 秒

この表では、2026 年時点で約 2.79 × 1021 年だった平均突破時間が、100 年後には約 248 万年、150 年後には約 27 日、200 年後には約 0.069 秒まで縮む。これは現実予測ではない。しかし、有限の候補空間と指数的性能上昇を組み合わせると、現在の暗号強度が将来にはまったく違って見えることを示す。

暗号アルゴリズムや鍵長は、時代に応じて移行が必要になる。NIST SP 800-131A は、より強い暗号アルゴリズムや鍵長への移行を扱う資料であり、暗号強度を固定的なものではなく更新対象として見る背景になる[18]。ECRYPT-CSA や Lenstra と Verheul の鍵サイズ議論も、長期的な計算能力や安全期間を考えながら鍵長を評価する資料である[19][20]


13. 辞書化とは候補空間を人間の癖で圧縮することである

辞書攻撃という語は、必ずしも国語辞典の単語だけを試す攻撃を意味しない。ここでは、攻撃者が人間の作りがちな候補を優先して試すことで、候補空間を小さくするモデルとして扱う。完全ランダムな英数字 20 文字なら 6220 通りだが、人間が作ったパスワードが実質的に 1010 個、1012 個、1015 個程度の候補集合に入るなら、探索対象はその集合 \( D \) へ置き換わる。

\[
T_{\text{dictionary}} = \frac{D}{2R}
\]

ここでの \( D \) は辞書サイズである。単語、名前、日付、語尾の数字、記号置換、大文字化、サービス名、キーボード配列、過去漏洩データから作られる候補集合を、まとめて \( D \) と呼ぶ。重要なのは、辞書化が試行速度を少し上げるのではなく、探索空間そのものを 1035 級から 1012 級へ落としうることである。

候補集合 実効ビット強度 平均突破時間
1.00 × 106 候補 約 19.9 bit 約 0.125 秒
1.00 × 108 候補 約 26.6 bit 約 12.50 秒
1.00 × 1010 候補 約 33.2 bit 約 20.83 分
1.00 × 1012 候補 約 39.9 bit 約 1.45 日
1.00 × 1015 候補 約 49.8 bit 約 3.96 年
1.00 × 1018 候補 約 59.8 bit 約 3,961 年
1.00 × 1020 候補 約 66.4 bit 約 396,101 年
1.00 × 1024 候補 約 79.7 bit 約 3.96 × 109
7.04 × 1035 候補 約 119.1 bit 約 2.79 × 1021

1012 候補なら平均突破時間は約 1.45 日、1015 候補でも約 3.96 年である。完全ランダム 20 文字の約 2.79 × 1021 年と比べると、差は天文学的である。したがって、「20 文字だから強い」という判断は、完全ランダムである場合に限って成立する。人間が作った 20 文字は、数学的には 20 文字でも、実効的な探索空間が大幅に小さい可能性がある。


14. 部分漏洩は未知文字数を減らす

漏洩には 2 種類の見方がある。完全漏洩は、正解そのものが攻撃者に渡ることであり、その場合、総当たり計算は不要になる。部分漏洩は、正解の一部や制約だけが分かることである。たとえば 20 文字のうち 10 文字が分かる、先頭 4 文字が固定である、末尾が年月日である、使っていない文字種が分かる、といった場合、攻撃者が探索すべき未知部分は小さくなる。

ここでは最も単純に、20 文字のうち \( m \) 文字が漏洩し、残り \( U = 20 – m \) 文字だけが未知だとする。未知部分が英数字 62 種から完全ランダムに選ばれているなら、候補総数は 62U になる。

\[
U = 20 – m
\]
\[
N_{\text{remaining}} = 62^U
\]
既知文字数 未知文字数 残候補総数 平均突破時間
0 文字 20 文字 6220 約 2.79 × 1021
2 文字 18 文字 6218 約 7.26 × 1017
4 文字 16 文字 6216 約 1.89 × 1014
6 文字 14 文字 6214 約 4.91 × 1010
8 文字 12 文字 6212 約 1.28 × 107
10 文字 10 文字 6210 約 3,324 年
12 文字 8 文字 628 約 315.89 日
14 文字 6 文字 626 約 1.97 時間
16 文字 4 文字 624 約 1.85 秒
18 文字 2 文字 622 約 0.000481 秒

20 文字のうち 10 文字が既知になると、未知部分は 10 文字になり、平均突破時間は約 3,324 年になる。12 文字が既知で残り 8 文字なら、平均突破時間は約 316 日である。14 文字が既知で残り 6 文字なら、約 1.97 時間になる。漏洩は、強い暗号を「弱くする」のではなく、未知として残る探索空間を直接削る。


15. bit 漏洩は探索空間を指数的に削る

部分漏洩は文字数で考えることもできるが、より一般には bit 数で考えられる。候補空間が約 119.1 bit あり、攻撃者が何らかの観測によって \( s \) bit 分の情報を得たとする。このとき残りの実効強度は \( 119.1 – s \) bit になる。bit は 2 の指数なので、10 bit 漏洩は 210 = 1,024 倍の削減、20 bit 漏洩は約 100 万倍の削減、40 bit 漏洩は約 1 兆倍の削減である。

\[
B’ = B – s
\]
\[
T’ = \frac{T}{2^s}
\]
漏洩情報量 残ビット強度 平均突破時間
0 bit 約 119.1 bit 約 2.79 × 1021
10 bit 約 109.1 bit 約 2.72 × 1018
20 bit 約 99.1 bit 約 2.66 × 1015
30 bit 約 89.1 bit 約 2.60 × 1012
40 bit 約 79.1 bit 約 2.54 × 109
50 bit 約 69.1 bit 約 2.48 × 106
60 bit 約 59.1 bit 約 2,420 年
70 bit 約 49.1 bit 約 2.36 年
80 bit 約 39.1 bit 約 20.23 時間
90 bit 約 29.1 bit 約 1.19 分
100 bit 約 19.1 bit 約 0.0695 秒

60 bit の情報漏洩があると、英数字 20 文字の平均突破時間は約 2,420 年まで落ちる。80 bit 漏洩なら約 20.23 時間である。ここでの 60 bit や 80 bit は、実際の攻撃で簡単に得られるという意味ではない。思考実験として、漏洩がどれほど指数的に効くかを見るための値である。暗号における情報漏洩の怖さは、少量に見える情報が候補空間を指数的に削る点にある。


16. サイドチャネルを候補削減率として扱う

サイドチャネルとは、暗号そのものの数学的弱点ではなく、実行時間、電力消費、キャッシュ挙動、エラー応答、発熱、音、電磁波など、処理の周辺に現れる情報から秘密を推定する考え方である。本稿では攻撃手順を扱わないため、サイドチャネルを単純に「候補空間を何倍削れるか」という係数 \( q \) として表す。候補空間が \( q \) 倍削れるなら、平均突破時間は \( q \) 分の 1 になる。

\[
T_{\text{side}} = \frac{T}{q}
\]
候補削減率 平均突破時間
10.00 倍削減 約 2.79 × 1020
1,000 倍削減 約 2.79 × 1018
1.00 × 106 倍削減 約 2.79 × 1015
1.00 × 109 倍削減 約 2.79 × 1012
1.00 × 1012 倍削減 約 2.79 × 109
1.00 × 1015 倍削減 約 2.79 × 106
1.00 × 1018 倍削減 約 2,790 年
1.00 × 1021 倍削減 約 2.79 年
1.00 × 1024 倍削減 約 1.02 日
1.00 × 1027 倍削減 約 1.47 分
1.00 × 1030 倍削減 約 0.0881 秒

1012 倍削っても、基準シナリオではまだ約 27.9 億年である。しかし 1021 倍削れば約 2.79 年、1024 倍削れば約 1.02 日になる。サイドチャネルの本質は、暗号の鍵空間を正面から全部試すのではなく、観測情報によって探索範囲を縮める点にある。したがって、理論上の鍵長が十分でも、実装が情報を漏らせば、実効的な安全性は大きく落ちる。


17. 量子探索を平方根モデルとして見る

量子計算機については、ここでは工学的実現可能性、誤り訂正、量子ビット数、ゲート深さ、コストを扱わない。扱うのは、Grover 型探索を極端に単純化し、候補空間 \( N \) を探索するコストが \( \sqrt{N} \) になるというモデルだけである。NIST の post-quantum cryptography FAQ でも、Grover のアルゴリズムは対称鍵探索に対して二次的な高速化を与えるものとして説明される[21]。Grover の原論文と AES に対する量子鍵探索の研究も、この平方根型の見方を支える参照点になる[22][23]

\[
\text{古典探索} \simeq N
\]
\[
\text{量子探索} \simeq \sqrt{N}
\]

英数字 20 文字は約 2119.1 通りなので、平方根を取ると約 259.6 相当になる。これは bit 強度が半分になるという直感に近い。ただし、ここでの「相当」は数学的な探索回数の目安であり、実際にその速度で量子計算機が動くという意味ではない。

有効量子試行速度 英数字 20 文字の探索時間目安
1.00 回/秒 約 2.66 × 1010
1,000 回/秒 約 2.66 × 107
1.00 × 106 回/秒 約 26,596 年
1.00 × 109 回/秒 約 26.60 年
1.00 × 1012 回/秒 約 9.71 日
1.00 × 1015 回/秒 約 13.99 分

有効量子試行速度を 109 回/秒と置けば、英数字 20 文字は約 26.6 年になる。1012 回/秒なら約 9.71 日になる。これは、量子探索が実用化されると英数字 20 文字がすぐ破られるという予測ではない。量子探索が「探索空間の指数を半分にする」と仮定した場合に、見え方がどれほど変わるかを示す思考実験である。

対象 古典ビット強度 Grover 目安
数字のみ 20 桁 約 66.4 bit 約 33.2 bit
英小文字のみ 20 文字 約 94.0 bit 約 47.0 bit
英数字 20 文字 約 119.1 bit 約 59.5 bit
ASCII 94 種 20 文字 約 131.1 bit 約 65.5 bit
AES-128 約 128.0 bit 約 64.0 bit
AES-192 約 192.0 bit 約 96.0 bit
AES-256 約 256.0 bit 約 128.0 bit

AES-128 は Grover 型探索では 64 bit 相当、AES-256 は 128 bit 相当として見える。したがって、長期視点では AES-256 の余裕が重要になる。BSI の技術ガイドラインのような鍵長推奨資料も、暗号機構と鍵長を時間軸の中で評価する参照点になる[24]


18. 複合シナリオでは要素が掛け合わされる

現実に近づけるなら、要素は 1 つだけではない。KDF が重い、将来性能が伸びる、辞書化で候補が減る、部分漏洩がある、サイドチャネルで bit が漏れる、量子探索が使える、といった要素が重なる。ここでも攻撃手順は扱わず、単純に係数として掛け合わせる。

たとえば KDF が \( k \) 倍重く、サイドチャネルで \( s \) bit 漏洩し、将来性能が \( 2^{t/2} \) 倍になったとすると、平均突破時間は次のように書ける。分子の \( k \) は防御側に効き、分母の \( 2^s \) と \( 2^{t/2} \) は攻撃側に効く。

\[
T’ = \frac{kT_0}{2^s \times 2^{t/2}}
\]

辞書化の場合は、元の \( N \) を辞書候補数 \( D \) に置き換える。量子探索の場合は、\( N \) を \( \sqrt{N} \) に置き換える。これらをすべて厳密に合成するには現実の攻撃モデルが必要だが、本稿の目的は桁感なので、単純化した比較で十分である。

シナリオ 平均突破時間
完全ランダム 20 文字 約 2.79 × 1021
KDF 100 倍重い 約 2.79 × 1023
KDF 100 万倍重い 約 2.79 × 1027
辞書候補 10^12 約 1.45 日
辞書候補 10^15 約 3.96 年
10 文字既知 約 3,324 年
12 文字既知 約 315.89 日
60 bit 漏洩 約 2,420 年
80 bit 漏洩 約 20.23 時間
150 年後の古典性能 約 26.98 日
200 年後の古典性能 約 0.0695 秒
量子平方根探索 10^9 回/秒 約 26.60 年
量子平方根探索 10^12 回/秒 約 9.71 日
150 年後 + 60 bit 漏洩 約 2.02e-12 秒
量子平方根探索 + 40 bit 漏洩 + 10^9 回/秒 約 13.34 分

この表では、KDF を 100 万倍重くしても、完全ランダム 20 文字なら依然として巨大である。一方、辞書候補 1012 なら約 1.45 日になる。60 bit 漏洩なら約 2,420 年、80 bit 漏洩なら約 20.23 時間である。さらに 150 年後の古典性能を入れると約 27 日、200 年後なら約 0.069 秒になる。つまり、暗号強度は単一の数字ではなく、探索空間、KDF、情報漏洩、計算性能、量子探索の関数である。


19. 今回の思考実験が既稿と違う位置にあること

本稿は、これまでの暗号化ディスク運用やレジリエンスの議論とは位置づけが違う。TrueCrypt 資産保全の記事では、古い暗号化資産を将来も読めるようにするため、互換環境、読み出し手順、移行先、媒体複製を扱った[25]。LUKS 暗号化の手順と運用では、暗号化対象の確認、luksFormat、open、ファイルシステム作成、マウント、ヘッダーバックアップ、復元確認を運用手順として整理した[26]。未来の自分に意味を残すという文脈では、暗号化バックアップは鍵、ヘッダー、対応ソフトウェア、手順が揃って初めて読めるという復元可能性の問題として扱った[27]。さらに、2.5-inch HDD で LUKS + ext4 が遅くなった問題では、暗号化方式だけでなくファイルシステム、媒体性能、I/O パターンの差を扱った[28]。暗号化ディスクを長期運用するための設計では、暗号化媒体を一度作って終わりにせず、将来も開けること、状態を確認できること、鍵を更新できること、ヘッダーを保全できること、起動設定とマウント設定を再現できること、古くなった構成を移行し、役割が終わった媒体を退役できることまで含めて整理した[29]。暗号化ディスク運用手順を整理する記事では、LUKS1 / LUKS2、CBC-ESSIV / XTS、PBKDF2 / Argon2id、TrueCrypt / VeraCrypt / LUKS、ヘッダー保全、鍵更新、マウント設定、退役手順を、実際の運用手順として再構成した[30]

それに対して本稿は、復元可能性や運用設計をいったん外し、暗号強度を数理モデルとして見る。扱っているのは、暗号化媒体をどう保全するかではなく、暗号がどれだけの時間を稼ぐかである。既稿群では、暗号化ディスクが読めなくなる原因を、鍵の喪失、ヘッダー破損、対応ソフトウェアの消失、媒体劣化、手順喪失、性能劣化、移行不能性として扱った。つまり、暗号が数学的に破られなくても、運用上は読めなくなる可能性があるという問題を中心に置いた。本稿では、その方向を反転させる。手順、媒体、互換環境がすべて残っていたとしても、暗号そのものは有限の候補空間を持ち、計算性能が伸びれば、いずれ正面から探索可能な対象になる。この違いを明確にするため、本稿では復元可能性ではなく、探索空間、試行速度、将来性能、未知情報量だけを抽出して扱う。

この区別は重要である。暗号化ディスクの長期運用では、「読める状態を維持すること」が中心課題になる。鍵があり、ヘッダーがあり、対応ツールがあり、手順があり、媒体が生きていれば、暗号は正しく開ける。一方、本稿の思考実験では、「読める状態が完全に維持されている」と仮定したうえで、それでも暗号は有限の探索空間として表せる、という別の問題を扱う。前者は保存と復元の問題であり、後者は計算量と時間の問題である。どちらも暗号化ディスクの長期的な意味に関わるが、問いの方向が違う。

観点 既稿の中心 本稿の中心
暗号化ディスク運用 将来も開けること、ヘッダーを保全すること、手順を再現できることを扱う。 フォーマット差を、試行速度や候補検証コストの差として抽象化する。
レジリエンス 媒体、手順、復元環境、互換性を含めて保全する。 保全ではなく、有限探索空間と計算時間の関係だけを見る。
長期運用設計 作成、確認、鍵更新、ヘッダー保全、マウント設定、移行、退役までを一連の運用設計として扱う。 運用工程をいったん外し、暗号がどれだけ時間を稼ぐかという数理的側面に限定する。
性能問題 ファイルシステム、媒体、I/O パターン、暗号化層の組み合わせを見る。 実測性能ではなく、仮定した試行速度による総当たり時間を見る。
今回の結論 暗号化資産は、破られなくても読めなくなる可能性がある。 暗号は、正面から見れば有限であり、十分な時間と計算性能があればいずれ破られる。

したがって、本稿は既稿の延長ではあるが、同じ種類の記事ではない。既稿が扱ったのは、暗号化資産を時間の中で失わないための設計である。本稿が扱うのは、暗号強度そのものが時間の中でどのように相対化されるかである。前者では、暗号が強すぎることによって本人も読めなくなる問題が現れる。後者では、暗号が有限であることによって、十分な未来の計算機には読まれうる問題が現れる。この二つは矛盾しない。暗号化ディスクは、短期には本人の復元可能性を脅かし、長期には第三者の計算性能に晒される。今回の思考実験は、その後者だけを切り出して、数式と単純計算によって眺めるための記事である。


20. 暗号はいずれ破られる

ここまでの計算から見えてくる結論は、暗号が「破れないもの」ではなく、「破るための時間を極端に長くするもの」だということである。これは暗号を弱く見るという意味ではない。むしろ、暗号の強さを正しく見るということである。暗号は、正解が存在しない問題を作っているのではない。パスワードにも鍵にも正解は存在する。ただし、その正解が含まれる候補空間が巨大であり、現在の計算機が 1 秒あたりに試せる候補数では、正解へ到達するまでの時間が人間の寿命、組織の存続期間、国家の政策期間、文明の時間感覚をはるかに超える。暗号の現実的な安全性は、この「正解はあるが、そこまでの道のりが長すぎる」という構造によって成立している。

基準シナリオとして置いた完全ランダムな英数字 20 文字は、この構造をよく示している。英大文字、英小文字、数字の 62 種類から 20 文字を完全ランダムに選ぶと、候補総数は 6220、すなわち約 7.04 × 1035 通りになる。平均ではその半分、約 3.52 × 1035 回を試す必要がある。仮に 1 秒あたり 400 万回の候補を試せるとしても、平均突破時間は約 2.79 × 1021 年になる。これは約 27.9 垓年である。宇宙の年齢を約 138 億年、すなわち 1.38 × 1010 年程度と見れば、その約 2,000 億倍の時間である。したがって、現在の時間感覚では、これは単に「長い」のではなく、「人間社会の実用的な時間尺度から完全に外れている」と言うべき規模である。

ケース 単純計算の結果 そこから言えること
完全ランダム英数字 20 文字 2026 年時点の 400 万回/秒という基準では、平均約 2.79 × 1021 年を要求する。 現在の計算機に対しては、正面総当たりは実質的に不可能である。これは安全性が絶対だからではなく、必要時間が文明の時間尺度を大きく超えているからである。
100 年後 計算性能が 2 年ごとに 2 倍になると仮定すると、同じ探索は約 248 万年まで短くなる。 100 年後でも、完全ランダム英数字 20 文字はまだ人間の実用時間からは遠い。ただし、現在の 2.79 × 1021 年から見ると、すでに 15 桁以上短くなっている。
150 年後 同じ仮定を 150 年まで延長すると、平均突破時間は約 27 日になる。 指数的な性能向上をそのまま延長すると、現在は天文学的に見える探索空間でも、数世代後には月単位の計算へ落ちる可能性があることを示している。
200 年後 同じ仮定を 200 年まで延長すると、平均突破時間は約 0.069 秒になる。 この値は現実予測ではなく、指数成長を機械的に延長した思考実験である。それでも、有限の探索空間と指数的な計算性能上昇を組み合わせると、暗号強度が時間とともに相対化されることが分かる。

この時間変化は、暗号が現在強いことと矛盾しない。むしろ、現在強いものが将来も同じ意味で強いとは限らない、というだけである。現在の計算機にとって 2.79 × 1021 年という時間は、事実上の不可能性を意味する。しかし、計算性能が増え続けるという仮定を置けば、同じ候補空間を調べる時間は短くなる。暗号の強さは、鍵空間やパスワード空間の大きさだけで決まるのではなく、その時代の計算機がどれだけ速く試せるかによっても決まる。したがって、暗号の安全性は固定された属性ではなく、探索空間と計算性能の比として時間の中で変化する性質である。

文字数を変えた場合も、同じ構造が見える。英数字ランダム 16 文字は、2026 年時点では平均約 1.89 × 1014 年という十分に大きな値を示す。しかし、100 年後の単純モデルでは約 61 日まで短くなる。一方、英数字ランダム 20 文字は 100 年後でも約 248 万年に残る。さらに 24 文字まで伸ばすと、200 年後でも約 1 年程度にとどまる。ここから言えるのは、文字数の増加は単なる足し算ではないということである。英数字では 1 文字増えるごとに候補空間は 62 倍になり、2 文字増えると 3,844 倍になる。2 年ごとに性能が 2 倍になるという仮定では、英数字 1 文字の追加は、おおむね 12 年分の将来性能上昇を押し返す効果を持つ。

英数字ランダム長 2026 年時点の平均突破時間 100 年後の単純モデル 200 年後の単純モデル
16 文字 約 1.89 × 1014 年であり、現在の感覚では十分に長い。 約 61 日まで短くなり、長期の指数成長モデルでは現実的な時間に近づく。 約 0.05 秒になり、同じ仮定の下では完全に短時間化する。
20 文字 約 2.79 × 1021 年であり、宇宙年齢を大きく超える。 約 248 万年であり、まだ人間社会の時間尺度から遠い。 約 0.069 秒になり、200 年の指数成長を仮定すると現在の強度感は消える。
24 文字 約 4.13 × 1028 年であり、20 文字よりさらに約 1,478 万倍大きい。 約 3.67 × 1013 年であり、100 年後でもなお宇宙年齢を大きく超える。 約 1.03 年になり、200 年後にようやく年単位の探索へ近づく。
30 文字 約 2.34 × 1039 年であり、20 文字とは別の桁に入る。 約 2.08 × 1024 年であり、100 年後でも極端に大きい。 約 18.5 億年であり、200 年後でもなお地質学的時間を超える。

辞書化のシナリオは、完全ランダムとはまったく違う結果を生む。完全ランダムな英数字 20 文字では、候補空間は約 7.04 × 1035 通りである。しかし、人間の癖、単語、日付、置換規則、命名規則などによって、試すべき候補が 1012 通り程度に圧縮されると、平均突破時間は約 1.45 日になる。1015 候補でも約 3.96 年である。ここで起きているのは、計算機が少し速くなったという話ではない。探索空間そのものが、1035 級から 1012 級や 1015 級へ落ちている。つまり、辞書化は「速く試す」技術ではなく、「試すべき候補を何十桁も減らす」効果として理解できる。

候補集合 平均突破時間 意味
1012 候補 400 万回/秒なら約 1.45 日である。 候補がここまで絞られると、もはや天文学的な問題ではなく、短期間の計算問題になる。
1015 候補 400 万回/秒なら約 3.96 年である。 数年級であり、個人の時間感覚では長いが、組織や国家の時間感覚では現実的な範囲に近づく。
1018 候補 400 万回/秒なら約 3,960 年である。 人間個人には長すぎるが、完全ランダム英数字 20 文字の 2.79 × 1021 年と比べると、すでに 18 桁近く短い。
6220 候補 400 万回/秒なら約 2.79 × 1021 年である。 完全ランダム性が保たれると、探索空間が人間の時間尺度から離れる。

漏洩やサイドチャネルのシナリオでは、さらに別の見方が必要になる。秘密の一部が分かるということは、候補を試す速度が上がることではなく、最初から探索しなくてよい範囲が消えるということである。20 文字中 10 文字が既知になれば、残りは 10 文字であり、候補空間は 6210 になる。これは平均約 3,324 年である。20 文字中 12 文字が既知になれば、残り 8 文字となり、平均約 0.86 年になる。さらに、情報漏洩を bit で見ると、60 bit の情報が漏れれば平均突破時間は約 2,420 年へ、80 bit の情報が漏れれば約 20.23 時間へ落ちる。少量に見える情報でも、bit は指数に作用するため、漏洩量が増えるほど時間は急激に縮む。

情報が削るもの 単純計算の結果 読み取り
20 文字中 10 文字が既知 未知部分は 10 文字になり、平均突破時間は約 3,324 年になる。 現在の個人時間では長いが、完全ランダム 20 文字の天文学的時間からは大幅に落ちている。
20 文字中 12 文字が既知 未知部分は 8 文字になり、平均突破時間は約 0.86 年になる。 探索空間がここまで削られると、現在の計算機でも年単位の問題になる。
60 bit の情報漏洩 119 bit 相当の空間が約 59 bit 相当まで落ち、平均突破時間は約 2,420 年になる。 まだ短時間ではないが、2.79 × 1021 年から見ると、18 桁以上短くなっている。
80 bit の情報漏洩 平均突破時間は約 20.23 時間になる。 候補空間が指数的に削られると、暗号の見え方は天文学的時間から日常的時間へ変わる。

量子探索を入れると、結論はさらに構造的になる。ここでは Grover 型探索を極端に単純化し、探索回数が候補総数 N から平方根の √N 程度へ落ちるものとして扱った。この単純化では、英数字 20 文字は約 119 bit 相当から約 60 bit 相当へ、AES-128 は 64 bit 相当へ、AES-256 は 128 bit 相当へ見え方が変わる。これは、量子計算機がすぐにすべての暗号を破るという意味ではない。ここで重要なのは、十分な量子探索が使える世界では、探索空間の指数そのものが半分に見えるということである。128 bit 級と 256 bit 級の差は、この長期視点で大きな意味を持つ。

対象 古典的な見え方 量子探索を単純化した見え方 言えること
英数字 20 文字 約 119 bit 相当である。 約 60 bit 相当として見える。 古典計算では強いが、平方根探索を仮定すると長期的な余裕はかなり削られる。
AES-128 128 bit の鍵空間を持つ。 64 bit 相当として見える。 古典的には非常に大きいが、量子探索を単純に入れると余裕は半分になる。
AES-256 256 bit の鍵空間を持つ。 128 bit 相当として見える。 量子探索で半分に見えても、なお 128 bit 級が残るため、長期安全性の余裕が大きい。

これらのケースを並べると、暗号の強さを支える要素がどこにあるのかが見えてくる。完全ランダム性は探索空間を最大化する。文字数は候補空間を指数的に増やす。鍵長は bit 単位で探索空間を定義する。KDF の重さは 1 回あたりの試行コストを増やし、試行速度を下げる。辞書化、漏洩、サイドチャネルは探索空間を削る。量子探索は探索空間の指数を半分に見せる。つまり、暗号の安全性は一つの部品で決まるのではない。候補空間の大きさ、未知情報量、試行速度、計算性能の時間発展が組み合わさって決まる。

したがって、最終的な命題は単純である。暗号は、現在の計算機に対して十分な時間を稼ぐ技術である。強い暗号は、破る時間を人間の実用時間、組織の運用期間、国家の政策期間、文明の時間感覚の外側へ押し出す。現在の条件では、その押し出しは非常に強力であり、完全ランダム英数字 20 文字ですら宇宙年齢をはるかに超える時間を要求する。しかし、有限の鍵空間や有限のパスワード空間を前提にする限り、それは絶対的な壁ではない。すでに正面総当たりに対して実用上十分な時間を稼げている場合、より現代的な方式へ移ることの暗号強度上の利益は、破れるものを破れなくするというより、破る時間をさらに遠くへ押し出す追加的な利益として現れる。そのため、既存資産の移行判断では、追加的に得られる暗号強度の差が、移行に必要な作業時間、検証負荷、媒体負荷、作業ミスのリスクに見合うかを比較する必要がある。計算性能が伸び、探索空間を削る情報が入り、探索方法が変われば、現在の暗号強度もいずれ再評価される。

「暗号はいずれ破られる」という結論は、暗号が無意味だという主張ではない。むしろ、暗号の役割を正確に言い直したものである。暗号は永遠を保証するものではなく、必要な安全期間を確保するために、破る時間を未来へ押し出す技術である。孫の代か、ひ孫の代か、さらに先かは、鍵長、パスワード長、KDF、計算性能、量子探索の成立条件によって変わる。それでも、有限の探索空間を使う限り、暗号はいずれ破られる。だからこそ暗号の歴史は、より大きな鍵空間、より重い鍵導出、よりよい乱数、より堅い実装、より長い安全期間へ更新され続けるのである。


参考文献

  1. Claude E. Shannon, Communication Theory of Secrecy Systems, 1949. https://pages.cs.wisc.edu/~rist/642-spring-2014/shannon-secrecy.pdf
  2. National Institute of Standards and Technology, SP 800-57 Part 1 Rev. 5: Recommendation for Key Management, 2020. https://csrc.nist.gov/pubs/sp/800/57/pt1/r5/final
  3. National Institute of Standards and Technology, FIPS 197: Advanced Encryption Standard (AES), updated 2023. https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197-upd1.pdf
  4. National Institute of Standards and Technology, SP 800-90B: Recommendation for the Entropy Sources Used for Random Bit Generation, 2018. https://nvlpubs.nist.gov/nistpubs/specialpublications/nist.sp.800-90b.pdf
  5. National Institute of Standards and Technology, SP 800-63B: Digital Identity Guidelines, Authentication and Lifecycle Management. https://pages.nist.gov/800-63-4/sp800-63b.html
  6. National Institute of Standards and Technology, SP 800-90A Rev. 1: Recommendation for Random Number Generation Using Deterministic Random Bit Generators, 2015. https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf
  7. Internet Engineering Task Force, RFC 8018: PKCS #5: Password-Based Cryptography Specification Version 2.1, 2017. https://datatracker.ietf.org/doc/html/rfc8018
  8. National Institute of Standards and Technology, SP 800-132: Recommendation for Password-Based Key Derivation, 2010. https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf
  9. Internet Engineering Task Force, RFC 2104: HMAC: Keyed-Hashing for Message Authentication, 1997. https://datatracker.ietf.org/doc/html/rfc2104
  10. National Institute of Standards and Technology, FIPS 180-4: Secure Hash Standard (SHS), 2015. https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
  11. TrueCrypt Documentation, Header Key Derivation, Salt, and Iteration Count. https://www.truecrypt.org/docs/header-key-derivation
  12. VeraCrypt Documentation, Header Key Derivation. https://veracrypt.io/en/Header%20Key%20Derivation.html
  13. VeraCrypt Documentation, Argon2id. https://veracrypt.io/en/Argon2id.html
  14. Internet Research Task Force, RFC 9106: Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications, 2021. https://www.rfc-editor.org/rfc/rfc9106.html
  15. cryptsetup-luksFormat(8), Linux manual page. https://man7.org/linux/man-pages/man8/cryptsetup-luksFormat.8.html
  16. National Institute of Standards and Technology, SP 800-38E: Recommendation for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on Storage Devices, 2010. https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-38e.pdf
  17. Intel, Press Kit: Moore’s Law. https://newsroom.intel.com/press-kit/moores-law
  18. National Institute of Standards and Technology, SP 800-131A Rev. 2: Transitioning the Use of Cryptographic Algorithms and Key Lengths, 2019. https://csrc.nist.gov/pubs/sp/800/131/a/r2/final
  19. ECRYPT-CSA, Algorithms, Key Size and Protocols Report, 2018. https://www.keylength.com/en/3/
  20. Arjen K. Lenstra and Eric R. Verheul, Selecting Cryptographic Key Sizes, Journal of Cryptology, 2001. https://research.tue.nl/en/publications/selecting-cryptographic-key-sizes/
  21. National Institute of Standards and Technology, Post-Quantum Cryptography FAQ. https://csrc.nist.gov/projects/post-quantum-cryptography/faqs
  22. Lov K. Grover, A Fast Quantum Mechanical Algorithm for Database Search, 1996. https://arxiv.org/abs/quant-ph/9605043
  23. Samuel Jaques, Michael Naehrig, Martin Roetteler, Fernando Virdia, Implementing Grover oracles for quantum key search on AES and LowMC, 2019. https://arxiv.org/abs/1910.01700
  24. Bundesamt für Sicherheit in der Informationstechnik, BSI TR-02102-1: Cryptographic Mechanisms: Recommendations and Key Lengths, Version 2026-01. https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf?__blob=publicationFile
  25. id774, TrueCrypt 資産を GNU/Linux で保全する(2026-05-16). https://blog.id774.net/entry/2026/05/16/4773/
  26. id774, LUKS 暗号化の手順と運用(2026-05-11). https://blog.id774.net/entry/2026/05/11/4746/
  27. id774, 未来の自分に意味を残す(2026-05-12). https://blog.id774.net/entry/2026/05/12/4750/
  28. id774, 2.5-inch HDD で LUKS + ext4 が遅くなった理由(2026-05-24). https://blog.id774.net/entry/2026/05/24/4801/
  29. id774, 暗号化ディスクを長期運用するための設計(2026-05-30). https://blog.id774.net/entry/2026/05/30/4818/
  30. id774, 暗号化ディスク運用手順を整理する(2026-05-31). https://blog.id774.net/entry/2026/05/31/4829/