SSH暗号のベンチマーク:ネットワークに最速の暗号化を選ぶ

scp、ssh、dd、pvを使ってSSH暗号を安全にベンチマークし、実際のハードウェアに基づいてAES-GCMまたはChaCha20を選択します。

SSH暗号のベンチマーク:ネットワークに最速の暗号化を選ぶ

暗号化転送がネットワークの許容速度よりも遅い場合、SSH暗号のベンチマークは有用です。暗号が常にボトルネックになるわけではありませんが、高速リンクや低性能CPUでは、scpsftprsync -e sshが接続を飽和させるかどうかを左右します。

正しい答えは、クライアント、サーバー、CPU機能、OpenSSHのビルド、ネットワーク経路に依存します。フリート全体でデフォルトを変更する前に、自分の環境でテストしてください。

SSH暗号とその役割の理解

SSH暗号は、SSHクライアントとサーバー間で交換されるデータを暗号化および復号化するために使用されるアルゴリズムです。その主な目的は、通信の機密性、整合性、および信頼性を確保することです。SSH接続を開始すると、クライアントとサーバーは両方がサポートするアルゴリズム(暗号、MAC、鍵交換方式)のセットをネゴシエートし、最終的に最も強力で優先度の高いオプションに合意します。このネゴシエーションプロセスは、安全なチャネルを確立するために重要です。

異なる暗号は異なる数学的操作を採用しており、計算要求が異なります。一部の暗号はハードウェアアクセラレーションに最適化され、特殊なCPU命令を活用しますが、他の暗号はより広範囲のプロセッサでソフトウェアベースで効率的に動作するように設計されています。したがって、暗号の選択はCPU使用率と結果のデータ転送速度に直接影響します。

パフォーマンスに優れた主要な最新SSH暗号

最新のSSH環境では、認証付き暗号化の2つのファミリー、AES-GCMとChaCha20-Poly1305が、セキュリティとパフォーマンスの優れたバランスで際立っています。両方とも**関連データを伴う認証付き暗号化(AEAD)**を提供し、データを暗号化すると同時に整合性チェックを1回のパスで行うため、古い暗号化後にMACを付加するアプローチよりも効率的で安全です。

AES-GCM(Advanced Encryption Standard - Galois/Counter Mode)

AES-GCMは、Galois/Counter Modeで動作する非常に人気があり広く採用されているブロック暗号です。強力なセキュリティを提供し、特にAESのハードウェアサポートがあるシステムで高速です。最新のCPU(Intel、AMD、そしてますますARMプロセッサ)には、AES操作を劇的に高速化する専用命令セット(x86/x64アーキテクチャのAES-NIなど)が含まれており、AES-GCMを非常に効率的にします。

  • 利点: ハードウェアアクセラレーション対応CPUでの優れたパフォーマンス、強力なセキュリティ、広くサポートされています。
  • 欠点: ソフトウェアのみの実装(例:AES-NIがない古いCPUや特殊なCPU)では遅くなる可能性があります。

ChaCha20-Poly1305

ChaCha20-Poly1305は、Daniel J. Bernsteinによって開発されたストリーム暗号です。ソフトウェアに優しい設計で知られ、特定の暗号ハードウェアアクセラレーションがないCPUでも非常に優れたパフォーマンスを発揮します。そのため、組み込みシステム、古いプロセッサ、またはハードウェアアクセラレーションが一貫して利用できない、または他のアルゴリズムに最適化されていない環境など、多様なハードウェアに最適な選択肢です。

  • 利点: 優れたソフトウェアパフォーマンス、強力なセキュリティ、タイミングサイドチャネル攻撃に対する耐性。
  • 欠点: 最新のデスクトップ/サーバーCPUでのハードウェアアクセラレーション対応AES-GCMほど一般的には高速ではありません。

暗号パフォーマンスに影響する要因

「最速」の暗号は普遍的に固定されているわけではなく、いくつかの主要な要因に依存します。

  1. CPUアーキテクチャとハードウェアアクセラレーション: これが最も重要な要因です。CPUにAES-NIまたは類似の命令がある場合、AES-GCMはほぼ確実にChaCha20-Poly1305を上回ります。それがない場合、ChaCha20-Poly1305がリードする可能性があります。
  2. SSHクライアントとサーバーの実装: SSHソフトウェア(例:OpenSSH)とそれが使用する暗号ライブラリ(例:OpenSSL)の効率は、実際のパフォーマンスに影響を与える可能性があります。新しいバージョンには最適化が含まれていることがよくあります。
  3. ネットワーク条件: 暗号速度に直接関係するわけではありませんが、ネットワークレイテンシと利用可能な帯域幅は、暗号パフォーマンスの認識される差を隠したり増幅したりする可能性があります。非常に遅いネットワークでは、暗号化のCPUコストはネットワークの制限に比べて無視できるかもしれません。非常に高速なネットワーク(例:10 Gbps以上)では、CPUバウンドの暗号化がボトルネックになる可能性があります。
  4. データ量とタイプ: 異なるデータサイズ(小さいファイル対大きいファイル)とタイプ(圧縮可能対非圧縮)でのベンチマークは、異なるパフォーマンス特性を明らかにする可能性があります。例えば、非常に小さい転送では、暗号速度よりも接続設定のオーバーヘッドが支配的になる可能性があります。

SSH暗号パフォーマンスのベンチマーク方法

ベンチマークには、SSHに特定の暗号を明示的に使用するよう指示し、既知の量のデータを転送するのにかかる時間を測定します。これにより、直接比較が可能になります。

1. サポートされている暗号を特定する

開始する前に、SSHクライアントがサポートする暗号を確認します。

ssh -Q cipher

次に、詳細なSSH出力を使用して、実際の接続が何をネゴシエートするかを確認します。

ssh -vvv user@your_server

debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none のような行を探します。サーバーポリシーはsshd_configCiphersで制御されますが、実際のサポートはクライアントとサーバーの両方に依存します。

2. ssh -cで暗号を指定する

sshクライアントでは、-cフラグを使用して目的の暗号を指定できます。カンマ区切りのリストを指定でき、クライアントはリストから最初にサポートされた暗号を使用しようとします。

テストする一般的な暗号:

3. 転送方法とデータソースを選択する

一貫したベンチマークのために、既知の量のデータを転送する方法が必要です。

  • scp (Secure Copy): ファイル転送に最適です。暗号がボトルネックになるように、圧縮やディスクI/Oではなく、大きくて非圧縮のファイルを使用します。
  • sftp (SSH File Transfer Protocol): scpと似ており、そのプロトコルを好む場合に便利です。
  • dd (Data Duplicator): SSH経由でパイプするデータストリームを生成でき、クライアント側のファイルシステムオーバーヘッドなしで純粋なスループットテストに便利です。

実践的なベンチマーク手順

クライアントからサーバーへの転送をベンチマークするとします。クライアント(またはサーバー)上に、意味のある測定を可能にするのに十分な大きさ(例:1GB)でありながら、テストに時間がかかりすぎないテストファイルが必要です。非圧縮のテストファイルを作成する良い方法は、/dev/urandomを使用することです。SSH圧縮が無効になっている場合にのみ/dev/zeroを使用してください。すべてゼロのデータは非常に圧縮可能だからです。

クライアント上(1GBのダミーファイルを作成する場合):

pwd=$(pwd)
dd if=/dev/urandom of=$pwd/dummy_1GB.bin bs=1M count=1024 iflag=fullblock

scpを使用したベンチマーク:

  1. AES256-GCMのテスト:

    echo "Testing AES256-GCM..."
    time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_gcm.bin
    
  2. ChaCha20-Poly1305のテスト:

    echo "Testing ChaCha20-Poly1305..."
    time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_chacha.bin
    
  3. AES128-GCMのテスト(多くの場合最速):

    echo "Testing AES128-GCM..."
    time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_aes128_gcm.bin
    

ddpvを使用したベンチマーク(リアルタイムスループット表示):

この方法はSSH経由でデータをパイプし、リアルタイムの速度を表示できるため、ディスクI/Oをボトルネックとして減らします。pv(Pipe Viewer)は進行状況とスループット情報を提供します。

pvのインストール(まだインストールされていない場合):

sudo apt-get install pv # Debian/Ubuntu
sudo yum install pv     # RHEL/CentOS
sudo brew install pv    # macOS
  1. ddpvを使用したAES256-GCMのテスト:

    echo "Testing AES256-GCM with dd..."
    dd if=/dev/zero bs=1M count=1024 | pv | ssh -o Compression=no -c [email protected] user@your_server "cat > /dev/null"
    
  2. ddpvを使用したChaCha20-Poly1305のテスト:

    echo "Testing ChaCha20-Poly1305 with dd..."
    dd if=/dev/zero bs=1M count=1024 | pv | ssh -o Compression=no -c [email protected] user@your_server "cat > /dev/null"
    

ヒント: 各テストを複数回(例:3〜5回)実行し、平均を取ってネットワークの変動やシステム負荷を考慮します。

結果の解釈と推奨事項

ベンチマークを実行した後、timeコマンドの出力からのreal時間、またはpvによって報告された平均スループットを比較します。おそらく明確なパターンが観察されるでしょう。

  • AES-NI搭載の最新CPU: [email protected][email protected]が最も高いスループットを提供することがほぼ確実にわかります。AES-128はラウンド数が少ないため、AES-256よりもわずかに高速なことがよくありますが、ハードウェアアクセラレーション対応システムではその差は無視できるかもしれません。
  • 古いCPU、ARM(特定の暗号拡張なし)、または仮想マシン: ChaCha20-Poly1305は、AES-GCMと同等か、それを上回るパフォーマンスを発揮する可能性があります。そのソフトウェア最適化設計がこれらのシナリオで輝くためです。

推奨事項:

  • 最新のIntel/AMD CPU(およびAES-NI)を搭載した高性能サーバーの場合: **AES-GCM(特に[email protected])**を優先します。ハードウェアアクセラレーションを活用して、優れた速度とセキュリティを実現します。
  • 多様な環境、古いハードウェア、ARMベースのシステム、またはソフトウェアパフォーマンスが有利な状況の場合: ChaCha20-Poly1305は優れた選択肢であり、ハードウェア固有の機能に依存せず、さまざまなアーキテクチャで一貫した高性能を提供します。
  • セキュリティ第一: 常に認証付き暗号化(AEAD)を提供する暗号を選択します。AES-GCMとChaCha20-Poly1305はどちらもAEAD暗号であり、強力と見なされます。可能であれば、aes*-cbcのような古い非AEAD暗号は避けてください。

その他のSSHパフォーマンスに関する考慮事項

暗号の選択は重要ですが、それはより広範なパフォーマンスの一部であることを忘れないでください。

  • 圧縮: SSHは暗号化前にデータを圧縮できます(-o Compression=yesまたは~/.ssh/configCompression yes)。低速リンク上の圧縮可能なデータの場合、これにより認識される速度が劇的に向上する可能性があります(わずかなCPUオーバーヘッドが追加されますが)。すでに圧縮されたデータや非常に高速なリンクの場合、パフォーマンスが低下する可能性があります。
  • 接続多重化: OpenSSHのControlMasterなどの機能により、複数のSSHセッションが単一の基盤となるTCP接続を再利用でき、後続の接続のハンドシェイクオーバーヘッドを削減します。
  • MTU(Maximum Transmission Unit): ネットワークのMTUが最適化され、断片化を防ぎ、パフォーマンスの低下を防ぐようにしてください。
  • SSHクライアント/サーバーバージョン: SSHクライアントとサーバーソフトウェアを最新の状態に保ってください。新しいバージョンには、パフォーマンスの改善や新しい高速暗号のサポートが含まれていることがよくあります。

自分の測定結果から選択する

SSH暗号の選択を最適化すると、安全な転送パフォーマンスを向上させることができますが、それは暗号化が制限要因である場合に限ります。いくつかのテストを実行し、圧縮とファイルサイズを一定に保ち、転送時間だけでなくCPU使用率も比較してください。

多くの最新サーバーでは、ハードウェアアクセラレーションによりAES-GCMが優れたパフォーマンスを発揮します。古いシステム、組み込みハードウェア、および一部の仮想化環境では、ChaCha20-Poly1305の方が良い選択かもしれません。互換性要件があり、それを分離して文書化できる場合を除き、古いCBC暗号を通常の使用から遠ざけてください。