web-dev-qa-db-ja.com

VeraCryptパーティションは遅いですか?

新しい外付けハードドライブを入手しました。 VeraCryptを使用して暗号化されたパーティションを作成したいと思います。私は同様のドライブで同じことをしました。ファイルをコピーしたところ、速度は約100MB /秒でした。暗号化後のもう一方のドライブの速度ははるかに遅く、おそらく10 MB /秒でした。ドライブの元の速度はわかりませんが。

これは、暗号化されたパーティションがマウントされた後でも、暗号化されていない暗号化よりも遅いことを意味しますか?コピー中に、新しくコピーされたファイルを実際に暗号化して、コピー操作を大幅に遅くしていますか?

7
user511405

USB 3.1 Gen 2 Type Cハードディスク(10Gib/s、別名1GiB/sで書き込み可能)を使用したテストは次のとおりです。

  • TrueCrypt、veraCrypt、DiskCryptorなどで暗号化すると、読み取りと書き込みがはるかに遅くなります。私が得た最高のものは、100MiB /秒(暗号化されていないものの1/10)なので、暗号化すると10倍遅くなります。
  • 暗号化されていないフライで巨大な大きな大きなファイル(600GiBファイル以上)をコピーすると、10分弱かかります)、(書き込みキャッシュがオンになっている)非常に小さなファイルを大量にコピーすると、同じ速度になります。書き込みキャッシュのない非常に小さなファイルの膨大な量は永遠にかかります。つまり、速度は1KiB/s(yesキロバイト)に下がり、これらすべてのテストは暗号化なしで行われます。
  • VeraCrypt暗号化では、速度を1GiB/sにすることはできず、約100MiB/sまで低下します。また、CPUは64コアであり、十分な速度ではありません(改善方法については後で説明します)...しかし、小さなコピーファイルを使用すると、書き込みキャッシュがオンの状態で速度が1KiB/s近くまで低下します...これは、VeraCryptの障害です... Windowsで見られるNTFSのキャッシュを許可していないようで、WindowsはHDD自体に対して行われた書き込みのみをキャッシュできます。 。

ああ、そうです、私は(数日だけ)メインボードに4つのソケットと4つのマイクロプロセッサ(それぞれ16コア)を搭載できたので、合計64コア...そしてRAM、すごい!それは4つのセクションで32GiBのRAMであり、それぞれが各プロセッサソケットの近くにあり、各バンクに4つのバンクがあり、各バンクに2GiBのRAMがあります。

言い換えると:

  • Windowsでは書き込みキャッシュが有効になっています(USBデバイスの場合)。暗号化されていない場合、そのキャッシュは小さなファイルの書き込みを大幅に改善します。
  • VeraCryptは、WindowsがNTFSへの書き込みをキャッシュすることを許可していないようです。これは、そのようなキャッシュを有効/無効にする方法がなく、小さなファイルの書き込みが非常に遅いためです。

SASコントローラー(はいシリアルSCSI)全体をエミュレートし、それに接続されたHDD全体をエミュレートする他の暗号化ソフトウェア(非常に高価)でテストしました... Windowsで有効にしてそのソフトウェアで書き込みキャッシュを無効にする...小さなファイルを書き込むソフトウェアは、大きなファイルを書き込むのと同じくらい高速です(そのような書き込みキャッシュがWindowsで有効になっている場合)。

Windows書き込みキャッシュについて話しているので、方法がわからない人のために有効/無効にする方法を説明します。

  1. エクスプローラーを開き、マウントされたパーティションのルートフォルダー、C:、D:などを確認できる場所に移動します。
  2. いずれかを選択し、右クリックしてプロパティに移動します。
  3. ハードウェアに移動し、リストからデバイスを選択します(VeraCryptの問題は、仮想コントローラーを作成しません)。
  4. [プロパティ]ボタンをクリックします。
  5. [全般]タブで、ボタンをクリックして構成を変更します。
  6. 次に、ディレクティブのタブに移動します。
  7. そこで、高速抽出(キャッシュの書き込みオフ)またはパフォーマンスの向上(キャッシュの書き込みオン)を選択できます。

書き込みキャッシュがオンになっている場合は、安全に削除できることを通知するウィンドウなしでプラグを抜かないでください...安全な削除を要求した後。

まあ、そのキャッシュはデバイスが物理的なものであるため、デバイスで行われた書き込み操作にのみ影響します。これは、暗号化されたデータがHDDに書き込まれることを意味し、暗号化されていないデータはNTFS estructureに書き込まれません。

では、どうなるのでしょうか。 Windowsは書き込みキャッシュなしでNTFSestructureに書き込み、次にVeraCryptが暗号化を実行し(はいパイプライン)、暗号化されたデータをHDDに送信します。次に、Windowsはデバイスに書き込みキャッシュがあることを確認するため、データの書き込みを少し待ちます...ただし変更しますNTFS estructureはキャッシュなしで実行されます...したがって、実際には、ウィンドウはVeraCryptに同じ構造を短時間で何度も(小さなファイルが書き込まれるときに)暗号化するように要求します...したがって、VeraCryptは何度も暗号化する必要がありますディスクのまったく同じクラスタに配置されるもの。

暗号化されていないものと比較すると、それは巨大な、非常に巨大な、スローダウンを引き起こします。

誰が責任を負っていますか?一部はestructureの変更をキャッシュしないWindowsNTFSであり、一部はデバイスをエミュレートしないためのVeraCryptです。

VeraCryptのこのような動作方法(TruCryptなどからのもの)は、SmartDefragがファイルを表示できず、デフラグできるなど、別のまれな原因を引き起こします(Piriform Deflaggerは可能であるため、SmartDrefragのアルゴリズムが悪い可能性があります)... BootIceもそれらを表示しますIFS:としてではなく、HD#:またはRM#:...としてではなく、一部のパーティション管理アプリはそれを表示することさえできません。

別の副作用(Linuxユーザー向け):実際には、Windowsで試してみると、Ext4としてVeraCryptパーティションをフォーマットすることはできません...少なくとも、Ext4パーティションを作成できるすべてのパーティションツール(つまりフォーマット)は、VeraCryptを表示しませんデバイス(VeraCryptはデバイスをエミュレートしないため、これはごく普通のことです)。

このすべての中で...一部のバックアップ(Windows)では、圧縮を有効にしてVeraCryptとNTFSを使用しています...物理デバイスの書き込みキャッシュを有効にしていない(意味がない)ので、暗号化されたデータの書き込みをキャッシュしたいのです。 .. HDDに送信されるデータではなく、NTFSの変更をキャッシュしたい... VeraCryptはそのようなために優れた書き込みキャッシュを使用するので、なぜダブルキャッシュ...恐ろしい部分はWindowsがRAMにNTFSの変更をキャッシュせず、キャッシュするだけです「クラスター」がディスクに送信されました。

そして、veraCrypt暗号化エンジンをより下位のレイヤー(HDDの物理書き込みに最も近い)に配置すると、何かが得られると思う場合...間違っています!問題はこれです:

  1. NTFSへの1つの小さなファイルの書き込みが要求されます
  2. Dirの空のエントリの検索が発生します(RAM内)
  3. Dirに新しいエントリを書き込む(RAM内)
  4. Windowsはデバイスの書き込みキャッシュをチェックします(VeraCryptはデバイスをエミュレートしないため、参照できないため、書き込みキャッシュがないものと解釈されます)
  5. Windowsは(暗号化されていない部分)に書き込みキャッシュがないと考えるため、DIRクラスターをHDDに送信します
  6. VeraCryptはそれを傍受し、暗号化を行います(同じフォルダーに多数の小さなファイルを書き込むときに発生するように、同じクラスターが近い将来に書き換えられる場合、これは不要です)
  7. VeraCryptは暗号化されたデータをHDDに送信します
  8. Windowsは、デバイス(今回は実際のデバイスであるため、参照できます)をチェックし、書き込みキャッシュがオン(またはオフ)になっていることを確認します。
  9. オンの場合、「暗号化された」クラスターを物理ディスクに書き込まず、少し待機します
  10. 次のファイルの手順1に進みます

それが問題です...ステップ5と次のステップ... NTFSに書き込みキャッシュがある場合、それらは実行されません...しかし、VeraCryptは、そのレベルでキャッシュするためのオプションを提示しません。そのためには、エミュレートする必要があります。デバイス全体。

つまり、ファイルのフォルダリストが格納されているクラスタは、ファイルごとに1つずつ、何度もVeraCryptに送信されます。すべてのファイルがディレクトリに設定された後に一度だけ送信される代わりに。

簡単に言うと、問題は同じフォルダリストを何度も暗号化することです...各文字を書いた後にテキスト全体を暗号化するのではなく、書き終えた後にテキスト全体を暗号化することだと考えてください...非常に遅い(小さなファイルをたくさん追加するなど、同じフォルダに短時間で多くの変更が加えられた場合)。

言うまでもなく、この問題はファイルの削除にも影響します...暗号化されていないディスク(書き込みキャッシュがオンの場合)のフォルダーに1万を超えるファイルを配置すると、削除にかかる時間は1秒未満です(書き込みキャッシュがオフの場合はさらに時間がかかります) 1時間以上)、今は同じことを行いますが、パーティションを暗号化して書き込みキャッシュをオン(はい、アクティブ化)にすると、非常に多くのファイルを削除すると、ファイルのフォルダーリストが暗号化されるのに1万回かかります。また、同じディスクで多くの時間がかかります(書き込みキャッシュなしで暗号化されていないかのように非常に近い)。

したがって、一般的に言えば、暗号化は、CPUの速度低下や他のプロセスによるCPU使用率の高さなどが原因であるだけでなく、NTFS estructureの変更に書き込みキャッシュがなく、暗号化が複数回発生するため、操作が大幅に遅くなる可能性があります。同じ場所に保存される情報。

暗号化について誰かの目を開くことができれば幸いです...そして、VeraCrypt(これまでに見た中で最高のセキュリティ)が暗号化の前にNTFS書き込みキャッシュをアクティブ化することを願っています...それは非常に簡単で、暗号化を変えるだけですクラスターの少し、そのような時間が終了する前にそのクラスターへの別の書き込みが発生した場合は、以前の非暗号化データを無視してください...暗号化は一度だけ行われます...言い換えれば...暗号化の前の動的バッファー。

その悪い部分は...電力の損失、突然のシャットダウンなど...失われた情報のサイズがもう少し大きくなる...バッテリーなしで1GiBキャッシュを備えたHDDを使用するかのように...それは常に速度間の競争であるか、書き込みが行われることを保証します...私はそのために速度を好みます、理由を説明させてください...

1百万の小さなファイル(すべて同じフォルダーにあります。Windowsはそれを本当に嫌っています)をコピーするのにかかる時間はわずか10分(すべてのレベルで書き込みキャッシュがオン)であるのに対し、1週間(すべてのレベルで書き込みキャッシュがオフ)です...自分自身で計算...そのデータは、私が過去にNTFSシステムに対して行った異常なテスト(FAT32の方がはるかに高速でした)で自分が取得した実際の時間です。

計算は次のとおりです。丸1週間ではなく、わずか10分間で電力が必要になるリスクは何ですか。どれくらい失うの?キャッシュがオンの場合、データの1/600を失う可能性があります(多かれ少なかれ)。キャッシュがオフの場合、その時点で作業していたファイルのみを失う可能性があります...しかし、どちらの場合も、比較を行う必要があります(ファイル名はディレクトリにある可能性があるため、完全な比較ですが、内容は異なる場合があります)、したがって、すべてが適切にコピーされるようにするには、ほぼ同時に必要になります...何が欠けているか、または異なるコンテンツなどを比較して確認するために1週間かかるよりも、10分を無駄にすることをお勧めします。

そして、一般的に、あなたのために緩いことが選択肢ではない場合...開始するだけではWindowsを使用せず、FAT32、NTFSなども少なくともLinuxとExt3/4(ジャーナリング)とパワーを使用しません発電機など.

それで、VeraCryptに、NTFSの書き込みバッファをできるだけ早く入れてください。

最後の注意:FAT32は同じ概念の影響を受けます...それはNTFSだけではありません...ファイルが作成または削除されたときにWindowsがディレクトリの変更を要求する方法です。

このテストを実行して、速度がどのように行われるかを確認します... 1か所でZEROサイズの1万のファイルを作成します...最初の100にかかる速度/時間と、途中または他の100にかかる時間をメモします。終了...実際には1分あたり1つのファイルが表示されます(それほど高速ではないCPUもあります)...ああ! ramdriveで実行します(HDDが速度に影響を与えないようにするため)。

最後に... Linuxで同じテストを行うことに抵抗できませんでした(VeraCryptボリュームにあるExt4パーティション上で)... Linuxではすべてがデバイスであることを忘れないでください...したがって、VeraCryptはカーネルにデバイスを提示します。 ..したがって、書き込みキャッシュは、Ext4レベルと物理クラスター書き込みの両方のレベルでオンにできます...デフォルトでは、Linuxではすべてが常にオンになっています。

Linuxでは、実際に飛んでいます...書き込みキャッシュがオンになっているため、両方のデバイスで、通常は/ media/veracrypt#にマウントされているデバイスと、物理的な/ dev/sd $#であるデバイス(物理パーティションの暗号化)。

しかし、ねえ、VeraCryptにはExt4の変更用の書き込みバッファーがありません。それは、Linuxがそれを持っているものです...さらに重要です...何かがディスクに送信されない期間は、別のディスクがリセットされるとすぐにリセットされます書き込みはそれに行きます。一部のLinuxには上限があり、その1つを通過したディスクにデータを送信しますが、他のLinuxは、たとえばクラスターが1秒に2回、フルの1秒ごとに書き込まれる場合など、何年もの間データをディスクに送信せず、送信できません。その年、そのような年のそのクラスターは、物理ディスクに書き込まれることはありませんでした。

つまり、Linuxでは、フォルダリスト(コピー時のように同じフォルダに多数のファイルを作成するなど、短時間で変更が加えられた場合など)を複数回送信しないLinuxなので、VeraCryptはすべてのファイルがファイルのフォルダリスト内に設定された後、暗号化を1回だけ実行します...など。各ファイルが追加された後にファイルのディレクトリリスト全体を暗号化するよりもはるかに高速です。

考えてみてください:Windowsは嫌いです、Linuxは大好きです...またはそうではないのですが、Linuxは多くの情報を失う傾向があり、電力が失われます。速度?または安全な書き込みが行われますか?すべてをコピーするのに10分かかりましたか、それとも1週間かかりましたか?ある人は他の人を好む、他の人は他の人を好む...それはあなた次第です。

しかし、少なくとも、暗号化されていない場合の物理デバイスではなく、暗号化されたコンテナ(ディスク、パーティション、ファイルなど)への小さなファイルのコピーが(もちろんWindowsでは)非常に遅くなる理由を明らかにしたと思います。

2
Claudio

最新のCPUは非常に高速です。ハードウェアAESをサポートする前世代のAMD FX-8350でも、VeraCrypt v1.19 AES-256で5Gb/sを実行します。

ほとんどの場合、2番目のUSBドライブのパフォーマンスはよくありません。たとえば、USB2.0ドライブにすることができます。

いずれにせよ、テストに時間をかけて並べることをお勧めします。はるかに多くの情報が得られ、他の誰かを助けることができるでしょう。

1
Maxim

これまでに述べられたことをさらに完了するには:

VeraCryptには、他のいくつかのソリューション( ここ および ここ )と比較して、パフォーマンスに関して重大な欠点があるようです。参照ページのタイトルは主に「... SSD ...」ですが、内容は従来のHDDやより複雑な構成(RAIDなど)でパフォーマンスが低下する複数のケースについて説明しています。深刻なケースseem(a)次善のコーディングまたは(b)セキュリティに精通した構成の決定が原因であるVeraCryptのコミュニティによる。この投稿の残りの部分は(b)についてです。

重要な注意利用可能なさまざまなソリューションを比較する前に、いくつかの重要なパラメータを検討、調査、正規化する必要があります。

  1. 他のソリューションで見られ続けるパフォーマンスの一部は、非常に悪いであるデバイス自体に暗号化操作を(ほぼ?)完全にオフロードしているという事実が原因である可能性があります特に最近のいくつかの報告の後。 this および Microsoftのthis を参照してください。開示された調査はBitLockerに焦点を当てていますが、他のいくつかのソリューションでも同じことが行われている可能性があります。
  2. さらに重要なことに、他の人が指摘しているように、低いセキュリティマージンを使用すると、パフォーマンスの低下の一部またはほとんどの原因となる可能性があります(たとえば、デフォルトのハッシュ反復の減少、デフォルトのキーの長さの短縮、操作モードなど)。