OpenSSH, OpenVPN の公開鍵アルゴリズムとして RSA を長らく使用してきましたが、最近 EdDSA に移行しました。
まず、一般的な公開鍵アルゴリズムを比較してみましょう。
暗号方式 | 特徴 | 利点 | 注意点 | 推奨 |
---|---|---|---|---|
RSA | 1977 年に登場した歴史ある公開鍵暗号。大きな半素数の素因数分解が難しい性質を利用。 | 主要なプログラミング言語でライブラリが豊富。 | 鍵の長さが増大し、パフォーマンスに課題。 | 実装や互換性を優先するなら 2048, 4096bit の RSA を使用。 |
DSA | 離散対数問題に基づく暗号。乱数を使ってメッセージに署名。 | 無し | 完全なセキュリティを持たず、OpenSSH 7.0 からはデフォルトで無効化。 | セキュリティ観点から使用を避ける。 |
ECDSA (ECC) | 楕円曲線暗号を利用した DSA の派生。エドワーズ曲線ではなく楕円曲線を使用。 | 鍵の長さが短くても RSA と同等以上のセキュリティを提供。 | 互換性には比較的制約がある。 | 要件に応じて使用を検討。 |
EdDSA (ECC) | 比較的新しい暗号で、エドワーズ曲線を使用。高いパフォーマンスとセキュリティ。 | 高い計算効率、セキュリティの向上、エドワーズ曲線の採用によるシンプルな実装。 | 互換性に制約があり、古いプロトコルやシステムとの互換性が検討が必要。 | パフォーマンスとセキュリティを優先するなら EdDSA。 |
最初に結論を言ってしまうと、限定された通信において EdDSA が利用可能であれば EdDSA を使用し、一般的に公開するサービスでは RSA を使用するか、要件に応じて ECDSA を検討する。DSA は絶対に使用しない。というようにまとめられるかと思います。
また、OpenVPN で RSA を使用する際は Diffie-Hellman (DH) グループパラメータを作成してセットで使用していましたが、EdDSA を使用する場合はそれが不要となります( ECC 自体に鍵交換の仕組みが組み込まれている)。
ここからは、具体的な EdDSA に対応した鍵や証明書の作成方法を見ていきましょう。
SSH で EdDSA に対応した鍵は、-t オプションで指定して作成します。ここで選択できるのは前述の表に記載した内容とマッピングできますね。
ssh-keygen [-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa]
EdDSA の場合は、ed25519 を指定して鍵を作成します。
ssh-keygen -t ed25519
次に OpenVPN の場合です。OpenVPN の証明書作成には easy-rsa を使用しています。余談ですが、easy-rsa はかなり便利なので、OpenVPN 以外でも使っています。easy-rsa では vars ファイルに必要な設定を記載します(以下はコメント行などを除いています)。EdDSA に関する設定は 13, 14 行目です。
if [ -z "$EASYRSA_CALLER" ]; then
echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2
echo "This is no longer necessary and is disallowed. See the section called" >&2
echo "'How to use this file' near the top comments for more details." >&2
return 1
fi
set_var EASYRSA_REQ_COUNTRY "JP"
set_var EASYRSA_REQ_PROVINCE "Province"
set_var EASYRSA_REQ_CITY "City"
set_var EASYRSA_REQ_ORG "si1230.com"
set_var EASYRSA_REQ_EMAIL "myadmin@si1230.com"
set_var EASYRSA_REQ_OU "administrator"
set_var EASYRSA_ALGO ed
set_var EASYRSA_CURVE ed25519
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_CRL_DAYS 3650
set_var EASYRSA_CERT_RENEW 30
set_var EASYRSA_DIGEST "sha512"
最後に、EdDSA はパフォーマンスとセキュリティに優れており、体感として SSH 接続も VPN 接続も RSA と比較して速くなった気がします。また鍵長が短くなったことにより設定として扱いやすくなったと思います。セキュリティの検証は暗号化という仕組み上、難しいですが、パフォーマンス測定などは今後実施しても良いかなと思いました。
EdDSA を選択することによる問題(例えばクライアントが対応していない等)が予想されない環境であれば、現時点では EdDSA を選択することは推奨と考えて良いでしょう。