/ dev / urandomに代わるものはありますか?


21

/ dev / [u] randomよりも速い方法はありますか?時々、私は次のようなことをする必要があります

cat / dev / urandom> / dev / sdb

ランダムなデバイスは「あまりにも」安全であり、残念ながら遅すぎます。wipe安全な削除を行うための同様のツールがあることは知っていますが、Linuxにはオンボードの手段もいくつかあると思います。




1
これを行うにはddの方が良い方法ではありません。おそらくUUoC賞の候補ですか。
トム・オコナー

回答:


12

ハードドライブ(またはファイル)の「安全な」消去を行う場合は、shredユーティリティを確認する必要があります。

前のポスターが指摘しているように、/ dev / * randomデバイスは、ランダムなデータの小さな塊のソースとして使用されることを意図しています。


1
マニュアルページによると、「shred」は/ dev / urandomを使用します。したがって、ディスクをワイプするのに適した答えですが、/ dev / urandomから読み取る他の手法よりも高速化することはできません。(「シュレッド」を使用する場合のもう1つのヒント:ほとんどの人はおそらく、巨大なデフォルトカウントではなく1〜2パスで幸せになるので、ワイプに数日はかかりません。)
gojomo

4
実際には、細断処理は/ dev / urandomよりはるかに高速です。私の推測では、/ dev / urandomまたは/ dev / randomをシードとして使用して、独自の擬似ランダムデータを提供します。
thomasrutter

24

残念ながら、Linuxにはurandomの不適切な実装があります。CPUがAES-NI(ハードウェアアクセラレーション)をサポートしている場合、ランダムキーでaes256-ctrを使用し、1秒あたり数百メガバイトの擬似ランダム性を取得できます。同様に、現代的なアプローチへのランダムな切り替えも楽しみにしています。

openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > randomfile.bin

この子犬は私のボックスで1.0 GB / sを実行します(14 MB / sの/ dev / urandomと比較)。ランダムパスワードを作成するためだけにurandomを使用し、そのキーを使用して/ dev / zeroの非常に高速な暗号化を行います。これは暗号で保護されたPRNGである必要がありますが、保証はいたしません。


このすばらしい答えをありがとう、私は/ dev / urandomで9.5 MB / sからopensslで120 MB / s以上に上がることができました。
GDR

Linuxにはurandomの実装が悪いという最初の声明を除いて、私はこの答えを承認します。暗号化の前にハードディスクを消去(またはいっぱいに)するのに十分です。
ヴィクラントショーダリー

5
pvすてきな進行状況インジケーターをパススルーします。openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | pv -pterb > /dev/sdb
ヴィクラントショーダリー

@VikrantChaudhary urandomは確かに高品質の擬似乱数を生成しますが、それは遅いことの言い訳にはなりません。AESカウンターモードははるかに高速であり、/ dev / urandomより安全性が低いと主張するのは困難です。
ペルセウス14

1
pv推奨事項に追加するだけで、パイプを使用pv -pterb -s $(blockdev --getsize64 /dev/sdb) >/sdbしてpv書き込みの完了に向けた進捗状況を表示できます。
asciiphil

7

T2500 CPUを搭載したThinkpad T60pでのUbuntu 8.04での簡単なテストでは、からの1GBのランダムデータopenssl randが3〜4倍高速/dev/urandomでした。あれは、

time cat /dev/urandom | head -c 1000000000 > /dev/null

...約4分でしたが...

time openssl rand 1000000000 | head -c 1000000000 > /dev/null

... 1分強でした。

ランダムな品質に違いがあるかどうかはわかりませんが、どちらかがおそらくHDワイピングには適しています。


5

ランダムデータを使用することは重要ではないという多くの回答があります。ドライブを消去するだけなら、それは事実ですが、ディスク暗号化の準備のために消去する場合はそうではありません。

デバイスにランダムでないデータを入力した場合、暗号化されたパーティションをデバイスに配置すると、問題が発生する可能性があります。暗号化されたデータを保存しているドライブの部分は、暗号化されたデータがランダムに見え、残りはそうではないため、ドライブの残りの部分から目立ちます。これは、暗号化ディスクのクラッキングに使用される可能性のある暗号化ディスクに関する情報を判断するために使用できます。以下のリンクは、より一般的な攻撃のいくつかがどのように機能するか、そしてそれらに対して防御する方法の背後にある理論を説明しています(とにかくLinuxで)。

Linuxのハードディスク暗号化設定


1
そうです。比較的新しいディスク(> 20 GB)では、単一パスの上書きで十分に消去されます。NSAなどでも、ドライブから大量のデータを取得することは困難です。そして、それは非常に高価です。メガバイトあたり100.000ドルと考えてください。暗号化についての発言は非常に真実です。ディスクの未使用部分を、使用済み部分と同じように「ランダムに」見えるようにします。
トニー

デバイス暗号化ソフトウェアはディスク全体をランダム化しませんか?
ネイサンガラ


5

巨大なブロックデバイスを消去したい場合ddは、ランダムデータの出力リダイレクトの代わりに、デバイスマッパーを使用する方が堅牢であることがわかりました。以下は、その間の透明な暗号化と復号化にマッピング/dev/sdb/dev/mapper/deviceToBeErasedれます。暗号化された側でデバイスをいっぱいにするために、ゼロがマッパーのプレーンテキスト側にコピーされます(/dev/mapper/deviceToBeErased)。

cryptsetup --cipher aes-xts-plain64 --key-file /dev/random --keyfile-size 32 create deviceToBeErased /dev/sdb
dd if=/dev/zero of=/dev/mapper/deviceToBeErased bs=1M

AESに深刻な脆弱性/dev/sdbがない場合、暗号化されたデータはランダムデータと区別できないことが保証されます。使用されるキーは取得されます(心配しないでください-32バイトしか使用しません)。/dev/random



2

ツールが高速になるほど、結果の安全性は低下します。適切なランダム性を生成するには時間がかかります。

とにかく、dd if = / dev / zero of = / dev / sdbのようなものを使用できますが、明らかにそれはランダムではなく、はるかに速く消去されます。

別のオプションは、この方法を使用することです/ sbin / badblocks -c 10240 -s -w -t random -v / dev / sdbそれはurandomより高速ですが、badblocks PRNGはランダムではありません。


1
そして正直なところ-これはドライブのセキュリティの十分な量です
ウォーレン

シュレッドと同様に、複数の上書きには時間がかかり、「完全に」ランダムなデータを1回上書きするよりもセキュリティが向上します。
追って通知があるまで一時停止します。

「ツールが高速になるほど、結果の安全性は低下します。適切なランダム性の生成には時間がかかります。」- それは真実ではない。AESカウンターモード(擬似)乱数ジェネレーターは、/ dev / urandomよりもはるかに優れた分析と桁違いに高速です。(Tronicの答えを参照。)
ペルセウス14

2

/dev/random 多くのシステムエントロピーを使用するため、遅いデータストリームのみを生成します。

/dev/urandom 安全性は低く、高速ですが、それでもデータの小さなチャンクを対象としています-高速乱数の連続ストリームを提供することを意図したものではありません。

独自のデザインのPRNGを作成し、/dev/randomまたはから何かをシードする必要があり/dev/urandomます。少しランダムにする必要がある場合は、数MB(またはprngの長さ)ごとに定期的にシードしてください。urandomまたはrandomから4バイト(32ビット値)を取得するのは十分に速いので、1kのデータごとにこれを実行し(1kごとにprngを再シード)、非常にランダムに結果を取得できますが、非常に迅速に処理を実行できます。

-アダム


7
既に簡単に入手できるものよりも優れた独自の乱数ジェネレータを誰かが作成できることは非常にまれです。多くの場合、結果は予測可能なパターンであり、誤った安心感です。/ devエントリを介してドライブでシュレッドを使用するか、非常に徹底的な物理的破壊をお勧めします。
追って通知があるまで一時停止します。

同意する。私はデフォルトでurandomを使用するシュレッドを使用します(率直に言って遅くはありません)。注意として、非常に忍耐強い場合は、(-random-source = / dev / randomを指定して)/ dev / randomをshredとともに使用することができます。
マシューフラッシェン09年

2

ハードドライブをすばやく消去する場合は、非ランダムデータを書き込みます。これは、ランダムデータを使用する場合と同じくらい安全です。いずれにしても、コンピューターに接続すると、元のデータを読み取ることができません。ハードドライブデータの上書き:大規模なワイピングの論争は、元のデータも顕微鏡を使用して読み取ることができないことを示しています。


2

LUKSでフォーマットし、暗号化されたボリュームをddします。次に、/ dev / urandomを使用してLUKSヘッダーを消去します。

ハードウェアAESサポートがある場合、これは非常に高速なソリューションです。

簡単に:

cryptsetup luksFormat /dev/sdX
cryptsetup luksOpen /dev/sdX cryptodev
dd if=/dev/zero bs=1M of=/dev/mapper/cryptodev
cryptsetup luksClose cryptodev
# wipe the luks header.  Yes, it uses /dev/urandom but only for 2MB of data:
dd if=/dev/urandom bs=1M count=2 of=/dev/sdX

できた!

私のブログをご覧ください: ディスクをランダムビットで(/ dev / urandomなしで)すばやく埋めます


デバイスを上書きするだけの場合にLUKSを使用するのはなぜですか?プレーンdm-crypt(cryptsetupの「プレーンモード」)の方がはるかに使いやすいです。
ペルセウス14

2

ハードドライブを消去する場合、ddは再割り当てされたセクターのコンテンツを削除せず、ハードドライブが死にかけている場合は非常に遅くなります。代わりに、長い間標準化されているドライブビルドの消去機能を使用できます。

この例では、わずか102分で500GBの機械式ハードドライブを消去しています。再割り当てされたセクターでいっぱいの場合でも:

root@ubuntu:~# hdparm --security-set-pass Eins /dev/sdaj
security_password="Eins"

/dev/sdaj:
 Issuing SECURITY_SET_PASS command, password="Eins", user=user, mode=high
root@ubuntu:~# time hdparm --security-erase-enhanced Eins /dev/sdaj
security_password="Eins"

/dev/sdaj:
 Issuing SECURITY_ERASE command, password="Eins", user=user

real    102m22.395s
user    0m0.001s
sys     0m0.010s

root@ubuntu:~# smartctl --all /dev/sdaj | grep Reallocated
  5 Reallocated_Sector_Ct   0x0033   036   036   036    Pre-fail Always   FAILING_NOW 1327 

で詳細を見ることができます ata.wiki.kernel.orgで、その例では--security-erase-enhancedを使用していません。これは、前述の再割り当てセクターを削除するために必要です。


1

実際には、連続したランダムなストリームからディスク全体をシードする必要はおそらくないでしょう。

適度なサイズのランダムデータのチャンクを作成し、それをディスク上で何度も繰り返します。

データのチャンクがディスクの通常のブロックサイズの倍数ではないことを確認してください。これにより、データの相関ブロックがまったく同じビットのランダムデータで上書きされないようにすることができます。〜1MBの範囲の素数であるチャンクサイズが適切に機能します。

セキュリティを強化するために、毎回異なるチャンクサイズを使用して、さらに数回実行します。


1

「シュレッド」ユーティリティは簡単で高速です。ドライブのSMART属性が、再割り当てされたセクターがゼロであることを示している場合、「シュレッド」はおそらく十分に安全です。

ただし、ドライブにセクターが再割り当てされている場合、破損したセクターデータは上書きされません。破損した場所に再割り当てされる前に機密データが含まれていた場合、「シュレッド」では十分でない可能性があります。「不良」セクターは、ドライブの割り当てマップをリセットし、(繰り返し)読み取ることで読み取ることができます。

不良セクタ割り当てマップをリセットする機能は、製造元とドライブモデルによって異なります。


0

ディスクを上書きするだけなら、フォレンジックラボに勝るものは何もありません。そのレベルのリソースを停止するためにドライブをスラッギングする以外には何も信用しません。 。

すべてゼロまたは1のような非ランダムソースまたは次のような繰り返しパターンを使用します(これはうまくいくと思います)

(head -c 4096 /dev/urandom; cat /dev/sdb/) > /dev/sdb

それは事実かもしれませんが、データを回復するために必要な技術レベルが両方のシナリオで同じである場合、ランダム書き込みによって与えられるセキュリティは実際にはすべてゼロを使用するよりも大きくないことを経営者に納得させることができない場合があります。この場合、多くの場合、独自の高速乱数ジェネレーターを作成して要件を満たすことをお勧めします。
アダムデイビス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.