長い Blowfish 鍵が 64 ビットブロックを直せない理由
Blowfish の鍵は 448 ビットまで到達できますが、ブロックは 64 ビットのままです。ネゴシエートされた暗号を確認し、長い鍵ではなくサポートされた置き換えを計画してください。
ある VPN プロファイルは 448 ビット鍵の Blowfish を提供しており、暗号を維持するために最も長い鍵を使おうという提案があります。鍵の長さは実在しますが、最適化すべき数はそこではありません。Blowfish は鍵の長さにかかわらず 64 ビットのブロックを変換し、一つの鍵が安全に保護できる通信量を制限するのはブロック幅です。後の手順は前の手順を修復できないので、以下のチェックを順に実行し、サービスを容疑から外せる最初のチェックで止めてください。
ピアが実際に何をネゴシエートしているかを確認する
データチャネルの暗号を、導入しようとしているプロファイルからではなく両端から読み取ります。クライアント設定は複数の暗号を列挙でき、選ばれるものは 二つの実装とそのバージョンの間のネゴシエーションの結果です。テスト接続でログの詳細度を上げ、実際に初期化された暗号と鍵サイズを示すデータチャネルの行を読みます。
ネゴシエートされた暗号が AES-GCM または ChaCha20-Poly1305 なら、ここで止めてください。これらの構成は 128 ビットブロックを使い、ペイロードを認証するため、以下の 64 ビット衝突の議論は当てはまりません。
鍵の長さとブロック幅を切り離す
Blowfish は 32 から 448 ビットの鍵を受け付け、アルゴリズム作者の文書は 二つの数を別々に示しています。鍵は秘密であり、ブロックは変換の単位です。秘密を長くしても推測は難しくなりますが、暗号が処理するブロック幅には何の影響もありません。
CBC モードでは、暗号は固定幅のブロックに適用され、前の暗号文ブロックと連鎖し、末尾でパディングされます。Blowfish ではその幅は 64 ビット、つまり八バイトです。鍵スケジュールはいくら大きくてもかまいませんが、連鎖は一回につき八バイトずつ進みます。
だから鍵を長くすることは緩和策ではありません。それは鍵に対する総当たりを扱うもので、以下の衝突リスクはブロック幅とモードの性質です。
誕生日の算術をブロックサイズに適用する
64 ビットブロックの誕生日の目安は、一つの鍵で暗号化される約 2^32 ブロックで衝突が現実的になります。各ブロックは八バイトを運ぶため、同じ目安は約 2^35 バイト、つまり一つの鍵あたり 32 GiB のデータです。
これは割当量ではなく目安として扱ってください。衝突は確率的で、何かが漏れるかどうかはモード、トラフィックの形、そして攻撃者が周囲の平文を認識または影響できるかどうかに依存します。32 GiB を超えた最初のバイトは復号の出来事ではなく、最初の 32 GiB も安全だと証明されているわけではありません。
Sweet32 の研究者たちは 2016 年に、観察とトラフィック生成を必要とする条件下で、OpenVPN のシナリオを含む 64 ビットブロック暗号への実用的な攻撃を示しました。彼らが公開した既定値とソフトウェアのバージョンは歴史的な文脈であり、あなたの導入の説明ではありません。
CBC の再利用がここで重要かを判断する
CBC では、暗号文ブロックが繰り返されるということは、連鎖 XOR が打ち消し合うため、二つの平文ブロックが既知の関係で異なるということです。暗号文を観察でき、平文の一方を知っているか影響を与えられる攻撃者は、もう一方についての情報を回復できる可能性があります。そのために Blowfish の鍵は決して必要ありません。
したがって重要な問いは、鍵がどれだけの期間使われるか、その下をどれだけの通信が通るか、誰かがその通信を観察して誘導できるかです。鍵の更新は鍵あたりのブロック数を減らしますが、時間間隔はバイトの上限ではないので、同じ一時間で、混雑したトンネルはアイドルのトンネルよりはるかに多くのデータを運べます。古い暗号を残すなら、上限は構造と実際の量から導き、切りのよい数から取らないでください。
鍵あたりの実測量が誕生日の目安を大きく下回るなら、露出は小さくなります。それでもゼロではなく、心配をやめるのではなく移行を計画する理由になります。
鍵ではなく暗号を置き換える
サービスをサポートされた AEAD 暗号に移し、両方のピア、そのバージョン、そしてそれぞれの暗号ライブラリがそれをネゴシエートできることを確認します。Blowfish の鍵を長くしても重要なことは何も変わらず、一つのクライアントで新しいディレクティブを推測することが、動いているトンネルを壊す方法です。残りのフリートに触れる前に、一つのクライアントと 一つのサーバーで変更をテストしてください。新しい暗号が完全な接続サイクルを通過するまで、古いプロファイルをロールバック用に残します。
変更の間は証明書の検証とアカウント認証を維持します。これらは別の問いに答えます、ログインの成功はブロックを広げられず、より良いデータ暗号は間違ったサーバーを信頼する言い訳にはなりません。
新しい接続でネゴシエートされた暗号をもう一度読み、古い暗号がもう受け入れられないことを確認してチェックを終えます。ピアがまだそれを提供しているなら、向こう側のプロファイルが何と言おうと移行は完了していません。