Linuxでのさまざまな暗号化システムのパフォーマンスの比較

この記事では、Linuxでのさまざまな暗号化システムのパフォーマンスを比較します。 もちろん、理論的には、どのシステムがより生産的であるかがわかっており、さまざまなシステムのパフォーマンスを計算する試みが( たとえば )行われています。 Truecryptには、組み込みのベンチマークも含まれています(ただし、RAMのパフォーマンスは表示されますが、さまざまな暗号化アルゴリズムの速度を評価するためにのみ使用できます)。 別のことをします-さまざまな手段で暗号化されたファイルシステムの速度を、通常の暗号化されていないファイルシステムと比較した割合として測定します。

画像



各特定のケースでデフォルトで使用されるアルゴリズムを使用して、ルートファイルシステムを含まない別のHDD上の別のパーティションを暗号化します。 普通のユーザーとして、暗号化標準の微妙な違いを理解していません(たとえば、WhirpoolのRIPEMD-160ハッシュと、これらのモードのいずれが高速で、より高い保護に貢献するか)は違います。したがって、各ソフトウェア製品のメーカーが十分な暗号デフォルトのオプション。 さまざまな暗号化アルゴリズムのパフォーマンスが同じではないため、これは完全に正しいとは限りません。 もちろん、暗号化の種類を変更することもできますが、テストされたすべての製品に完全に同一のアルゴリズムセットがあるかどうかはわかりません。 テストします:



1) LUKSはネイティブ暗号化システムであり、理論的には最速でなければなりません。 LUKS暗号化ボリュームは、FreeOTFEを介してWindowsで使用できます。



2) Truecrypt -LUKSとは異なり、コンソールに加えてGUIインターフェースを備えているため、使用が非常に便利です。 マルチプラットフォームソフトウェア。 ユーザーがパスワードを強制的に発見した場合に必要な、暗号化されたデータの存在のもっともらしい拒否の2つのレベルを提供します。 Truecryptボリュームにはヘッダーがなく、ランダムデータセットと区別できません。 理論的には、LUKSよりも低速です。 FUSEを使用します。



3) eCryptfsは、ホームディレクトリを暗号化するためにUbuntuのユーザーに提供されるデフォルトシステムです。このため、このテストに含まれています。 既存のFSの上で動作します。 各ファイルを個別に暗号化するため、誰でも権利、変更日、暗号化されたファイルの数を確認できます。 ファイル名もデフォルトで表示されますが、それらを暗号化するオプションがあります。 提示された最も機能性の低いツール。



4) EncFSはeCryptfsの類似例ですが、FUSEを使用します。



そのため、テストのために、CPU-Intel Celeron 2000Mhz、RAM-512 Mb DDR PC2700、システムHDD-WD Caviar SE 5400 RPM 80Gb、テストHDD-WD Caviar SE 7200 RPM 80Gbの構成で、かなり高齢の別のマシンが割り当てられます。

OS-Ubuntu 12.04 LTS、執筆時点でこのOSのリポジトリに関連するすべてのソフトウェアバージョン(Truecrypt 7.1a-linux-x86はリポジトリのものではありません)。



ほとんどのディストリビューションでデフォルトのext4ファイルシステムをテストします。 パフォーマンステストでは、 iozone3ユーティリティと「膝の上に」書かれたシェルスクリプトを使用して、テストの割合の差を測定します。

カウント用のスクリプト。 コードの純度には特に注意が払われていませんでした。書くための唯一の基準は正しい結果の存在でした。
#!/bin/sh gendifffile () { #  ,   . -,  #   ; -,       ,  #     ; -,     - #      cat $1 | while read LINE ; do echo $LINE| grep "^[[:space:]]*[[:digit:]]" | awk '{for (i=3;i<=NF;i++) {print $i}}' done >> $2 } getline () { #    $2  $1 head -n $2 "$1" | tail -n 1 } compare () { #    $1  $2,       #    ,       #,    , ,    P=0 MAX=0 L1=`cat "$1" | wc -l` #    L2=`cat "$2" | wc -l` if [ $L1 -ne $L2 ]; then #     ,       echo error return fi STEP=$(( $L1*5/100 )) J=0 for I in `seq 1 $L1`; do J=$(( $J+1 )) if [ $J -eq $STEP ]; then J=0 echo "$(( 100*$I/$L1 ))%  ($I  $L1)" fi A=`getline "$1" $I` B=`getline "$2" $I` if [ `echo $A \> $B|bc -l` -eq 1 ]; then D=`echo "100-($B*100/$A)"|bc -l` if [ `echo $D \> $MAX| bc -l` -eq "1" ]; then MAX=$D sleep 5 fi else D=`echo "100-($A*100/$B)"|bc -l` if [ `echo $D \> $MAX| bc -l` -eq "1" ]; then MAX=$D sleep 5 fi D="-$D" #    "-", ,      #  ,     fi P=`echo "$P+$D"| bc -l` done P=`echo $P/$L1| bc -l` #   echo PERCENT=$P MAX_PERCENT=$MAX } genaverage () { #     ,     #      ,     AVG=`mktemp` F=`ls "$1"|wc -l` #       # ,           #       if [ ! -d "$1" -o $F -lt 2 ]; then echo error >/dev/stderr #        stderr, .. #stdout     rm -f $AVG exit fi TMP=`mktemp` find "$1" -type f| while read FILE; do #    iozone,     I=`mktemp` #  ,    gendifffile "$FILE" "$I" #      "TMP"  echo "$I">>$TMP done L=`cat \`getline "$TMP" 1\`|wc -l` cat "$TMP"| while read LINE; do #    L1=`cat "$LINE"| wc -l` #       if [ $L -ne $L1 ]; then echo error >/dev/stderr exit fi done STEP=$(( $L*5/100 )) J=0 for I in `seq 1 $L`; do J=$(( $J+1 )) if [ $J -eq $STEP ]; then J=0 echo "$(( 100*$I/$L ))%  ($I  $L)" >/dev/stderr fi SUMFILE=`mktemp` #      SUM    SUM=0 cat "$TMP"| while read LINE; do SUM=$(( `getline "$LINE" $I`+$SUM )) echo $SUM > "$SUMFILE" done echo `tail -n 1 "$SUMFILE"`/$F|bc -l >> $AVG #   #      # AVG rm -f "$SUMFILE" done cat "$TMP"| while read LINE; do # e  rm -f "$LINE" done rm -f "$TMP" echo $AVG } printf %b "\\033[1;31m 1/3\n" printf %b "\\033[1;37m" echo      \""$1"\" A=`genaverage "$1"` printf %b "\\033[1;31m 2/3\n" printf %b "\\033[1;37m" echo      \""$2"\" B=`genaverage "$2"` printf %b "\\033[1;31m 3/3\n" printf %b "\\033[1;37m" echo    compare "$A" "$B" rm -f $A $B
      
      





ネタバレの下で、誰もが興味のあるテストを実施できるように、テストアルゴリズムについて詳しく説明します。

テストアルゴリズム
1)テスト済みの暗号化されていないパーティションをマウントポイントに接続し、そこに移動して、iozoneシリーズのテストを実行します

 i=0 while true; do i=$(( $i+1 )) echo i=$i time iozone -a >report$i echo sleeping 180 sleep 180 done
      
      





私たちは同情ではないのと同じくらい多くのサークルを運転します。 数値が大きいほど、結果はより正確になります。 生地の種類によっては(最も遅い場合)、多数の円は重要ではありません。5で十分です。

結果を別のディレクトリに保存します。たとえば、暗号化されていないものと呼びます。

2)パーティションを暗号化し、マウントポイントに接続し、同様に一連のテストを実行し、結果を別のディレクトリに配置します(暗号化など)。

3)計算スクリプトを実行し、両方のディレクトリの名前をパラメーターとして渡します。 スクリプトは、平均して、1番目と2番目のディレクトリのレポート間のパフォーマンスの差である特定の数を出力します。 数値> 0の場合、最初のディレクトリのレポートはこのパーセント数だけ高速です。 逆に、数値が0より小さい場合は、速度が遅くなります。



-aモードに依存します。このモードでは、iozoneは、さまざまなサイズとさまざまな記録長のファイルでのあらゆる種類の操作をカバーする一連のテストを自動的に実行する必要があります(私のバージョンは1638テストを作成しました)。

実験中、一連のiozoneテストのパフォーマンスが5%異なる可能性があることが判明したため、単一のテストセットの結果に依存せずにこれを行います。一連のテストを数回行い、それぞれの平均値を含むファイルを生成しますテストから(この記事のすべての計算で、平均値は算術平均値を意味します)。 その後、この方法で、暗号化されていないファイルシステムでの一連のテストを含む平均ファイルと、暗号化されたファイルシステムでの一連のテストを含む同様のファイルを比較します。算術平均値を受信した場合、最初のテストグループが2番目のグループよりも速いか遅いかをパーセントで示します。

また、簡単な速度推定のために、上記の計算に加えて、簡単なテストを行います-ddでコピーすると、デフォルトのext4クラスターサイズ(4キロバイト)に等しいブロックを持つ暗号化されたファイルシステムにurandomから500メガバイトを意味します。 dd if = / dev / urandom of = testfile bs = 4k count = 128000 パーティション全体が暗号化されます(これを行う方法がわからないeCryptfsを除く)。 特定のケースごとにチームを提供するのではなく、結果のみを表示します。

それでは始めましょう:



1)暗号化システム:いいえ

実施された一連のテストの数:14

同じテストシリーズ間の平均パフォーマンスの違い:1.3%

ddの結果:524288000バイト(524 MB)がコピーされ、187.82秒、2.8 MB /秒



2)暗号化システム:LUKS。 デフォルトでキーを使用すると、ボリュームは次のように暗号化されます。

暗号名:aes

暗号モード:cbc-essiv:sha256

ハッシュ仕様:sha1

実施された一連のテストの数:8

同じテストシリーズ間の平均パフォーマンスの違い:1.4%

ddの結果:524288000バイト(524 MB)がコピーされ、199.505秒、2.6 MB /秒

暗号化されていないFSと比較した生産性の低下: 7.9%



3)暗号化システム:Truecrypt。 すべてのデフォルトパラメータを使用して、ボリュームはRIPEMD-160ハッシュアルゴリズムを使用してAESによって暗号化されます。

実行されたテストシリーズの数:22

同じテストシリーズ間の平均パフォーマンスの違い:3.2%

ddの結果:524288000バイト(524 MB)がコピーされ、199.719秒、2.6 MB /秒

暗号化されていないFSと比較したパフォーマンスの低下: 7%



4)暗号化システム:eCryptfs

aes:ブロックサイズ= 16; キーサイズ= 16

実施された一連のテストの数:9

同じテストシリーズ間の平均パフォーマンスの違い:0.9%

ddの結果:524288000バイト(524 MB)がコピーされ、199.624秒、2.6 MB /秒

暗号化されていないFSと比較したパフォーマンスの低下: 49.5%



5)暗号化システム:EncFS

事前定義されたパラノイアモードを使用すると、次の設定が使用されます。

暗号:AES

キーサイズ:256ビット

3秒のランタイム、160ビットのソルトを備えたPBKDF2

ファイルシステムのブロックサイズ:1024バイト

ファイル名エンコーディング:IVチェーンを使用したブロックエンコーディング

一意の初期化ベクトルファイルヘッダー

メッセージ認証コードブロックヘッダー

外部IVチェーン

実施された一連のテストの数:5

同じテストシリーズ間の平均パフォーマンスの差:0.7%

ddの結果:コピーされた524288000バイト(524 MB)、293.656秒、1.8 MB /秒

暗号化されていないFSと比較したパフォーマンスの低下: 94.5%



結論:EncFSは最悪の結果を示しました。 あらゆる種類のファイル操作でのeCryptfsのパフォーマンスには、多くの要望が残されていますが、最適なブロックサイズでの通常のddテストは、他の暗号化システムと同様の速度を示します。 ホームディレクトリ全体を完全に暗号化するわけではありません。 個々のサブディレクトリを暗号化する場合にのみ使用すると便利です。 FUSEの使用によりTruecryptのパフォーマンスが低下するという期待は実現しませんでしたが、私の場合はLUKSよりも少し高速でした。



さらに、ボーナスとして、TruecryptおよびLUKSに対して同様のddテストを行いますが、ファイルホストコンテナーに対して(すべての暗号化パラメーターは同様です)。

1)ルークス

524288000バイト(524 MB)コピー、207.07秒、2.5 MB /秒

2)Truecrypt

524288000バイト(524 MB)コピー、205.046秒、2.6 MB /秒

パフォーマンスの低下は、セクションに直接アクセスする代わりに、既存のファイルシステムからコンテナファイルを読み取るための追加のオーバーヘッドがあるという事実によって説明できます。



PS EncFSが追加されました。

PPSテストアルゴリズムの詳細な説明を追加しました。



All Articles