私が間違っている場合は修正してください:ファイルを暗号化するとき、GPGは1回限りのAES暗号化キーを作成し、RSAを使用してthatキーを暗号化します。これは、大量のデータを処理するときにAESの優れたパフォーマンスを利用するためと考えられます。
それが本当である場合、なぜgpg --encrypt
は、たとえばp7Zip
のAES-256暗号化よりもはるかに遅いのですか?
やってみよう...
まず、ランダムなバイトでいっぱいの500 MBytesファイルを作成します。
dd if=/dev/urandom of=/tmp/foo bs=1000000 count=500
次に、GnuPGを使用して暗号化し、そのプロセスにかかる時間を測定します( "keyID
"は、使用している公開鍵のUIDです):
time gpg -r "keyID" --cipher-algo AES256 --compress-algo none -o /tmp/bar --encrypt /tmp/foo
私のマシンの合計時間(2.7 GHzのIntel i7、64ビットモード、GnuPG 2.0.22):
3.77s user 0.55s system 99% cpu 4.328 total
つまり、毎秒115メガバイトの暗号化帯域幅です。それほど悪くはありません。もう一度試してみましょうが、今回は圧縮を無効にせずに(つまり、「--compress-algo none
"オプション):
20.99s user 0.79s system 98% cpu 22.038 total
これは5倍遅いです。 「遅い」のは暗号化ではなく、圧縮です(ただし、20 MB/sを超えると、多くの用途でかなり高速になる可能性があります)。
115 MB /秒は、AESの「ポータブル」実装と一致しています。 専用AESオペコード (私のi7で利用可能)を使用するコードは、300 MBから400 MB/sまで高速です(AES-NIオペコードのスループットは非常に高いですが、また、無視できないほどのレイテンシがあります。つまり、最高のパフォーマンスには並列処理が必要です。つまり、 CTRモード ; OpenPGP標準 必須 [〜#〜] cfb [〜#〜] 、順次)。
とにかく、優れた機械的ハードディスクは約120 MB/sであり、非常に優れたインターネットアクセス(光ファイバー)は10 MB/sを下回るので、生の暗号化速度は115 MB/sで十分です。