この記事は、インテル® デベロッパー・ゾーンに公開されている「Configuring the Apache Web server to use RDRAND in SSL sessions」(https://software.intel.com/en-us/blogs/2015/03/12/configuring-the-apache-web-server-to-use-rdrand-in-ssl-sessions) の日本語参考訳です。
OpenSSL* のリリース 1.0.2 以降、乱数ソースとしての RDRAND は一時的に削除されました。OpenSSL* の将来のリリースでは、RDRAND が再実装される予定ですが、OpenSSL* 独自のソフトウェア・ベースの PRNG と組み合わせた暗号が採用される見込みです。OpenSSL* の乱数は RDRAND の特性を受け継いでいますが、RDRAND 単独と同じパフォーマンスにはなりません。
ハイボリュームの SSL Web サーバーを運用しているのであれば、RDRAND の速度は利点になります。RDRAND が単独の RNG ソースだった場合の OpenSSL* パフォーマンスのケーススタディー (https://software.intel.com/en-us/articles/performance-impact-of-intel-secure-key-on-openssl) では、SSL ハンドシェークのスピードアップにより、SSL コンセントレーターで制御できる接続数/秒が最大 1% 増加することが示されました。インテル® Xeon® プロセッサー v3 ファミリーにおける内部テストは、乱数が IV を生成するために使用されるため、RDRAND も AES の大量の暗号化に役立っていることを示しています。
幸い、OpenSSL* は、API をオンにすることで、単独の乱数ソースとして RDRAND にまだアクセスできます。Apache* 2.4 Web サーバーを mod_ssl で実行している場合、この設定は非常に簡単です。設定ディレクティブ SSLCryptoDevice は、OpenSSL* の内部で初期化するエンジンを mod_ssl に伝えます。単独の乱数ソースとして RDRAND を有効にするには、次のディレクティブを使用します。
SSLCryptoDevice rdrand
この設定を行う別の利点は、RDRAND をフィードするデジタル乱数ジェネレーターが自律型でセルフシードできるため、OpenSSL* にエントロピーを提供する必要がないことです。つまり、ソースにより生成されるエントロピーは無視されるため、最も CPU 負荷が低く最も単純化された ‘builtin’ エントロピー・メソッドを mod_ssl で使用できることを意味します。
SSLRandomSeed startup builtin SSLRandomSeed connect builtin
システム・アーキテクチャーによっては、/dev/zero のような特別なデバイスファイルの 1 つでわずかに高いパフォーマンスが見られることもあります。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。