してみるテストロゴ
Apache 2.4系でHTTP/2サーバを構築してみるテスト。

OpenSSL3.0.0について

すこし気が早いですが、OpenSSLの次期バージョンの情報が出始めましたので整理しておこうと思います。

更新履歴
2019-02-11   OpenSSLの3.0.0の設計のドラフトが公開されました。
2018-11-29   OpenSSLの次期バージョンが3.0.0になることと、バージョン番号の表記が変更になることが発表されました。

バージョン番号表記とライセンス

次期OpenSSLのバージョン番号が3.0.0になることが発表され、バージョン番号の表記が変更になることが発表されました。

https://www.openssl.org/blog/blog/2018/11/28/version/

バージョン番号の表記の変更は、次期3.0.0からで、既存の1.0.2及び1.1.1は、これまで通りの表記が使われます。

 

これまで、OpenSSLのバージョンは、

MAJOR.MINOR.FIX[PATCH]

(たとえば、1.0.2q)

のよに、ピリオドで区切られた3つの数字に加えて、パッチを識別するアルファベットの4つの要素でバージョンを表記してきました。

 

これを、OpenSSL3.0.0から

MAJOR.MINOR.PATCH

(たとえば、3.0系の一つ目のパッチだと、3.0.1となります。)

のように、ピリオドで区切られた3つの数字の末尾でパッチを識別する表記に変更されます。

この表記は、最も普及しているバージョン表記だと思うので、わかりやすいですね。

また、OpenSSL3.0.0からライセンスがApache License 2.0に変更となるようです。

これもわかりやすくなって良いですね。

OpenSSL 3.0.0の設計

2019年2月11日に次期OpenSSLの3.0.0の設計のドラフトが公開されました。

https://www.openssl.org/docs/OpenSSL300Design.html

個人的に重要だと思ったポイントを紹介します。

今後の議論によっては、変更されることもありますので、最新の情報を確認してください。

多くのアプリケーションソフトは、再コンパイルによって対応可能

OpenSSL 3.0では、既存のアプリケーションソフトへの影響を最小限に抑えます。

ソースレベル互換が目標となっており、多くの行儀の良いアプリケーションは、ソースコードを再コンパイルするだけで動作する予定です。

レガシーAPIは廃止予定

EVP関数群など、アプリケーションソフトからの利用を想定したAPIを経由しなければ、暗号化APIを利用できなくなります。

つまり、アプリケーションソフトからの利用を想定していない、低レベルの暗号化API(レガシーAPI)を廃止します。

これは、暗号アルゴリズムそのものの廃止を意味するものではありません。

例えば、アプリケーションソフトからの利用を想定したEVP経由でAES暗号は利用できますが、AES_encrypt関数群は、低レベルの暗号化APIなので、廃止予定のAPIとなります。

ただし、OpenSSL1.1.1において、非推奨とされるAPIは、OpenSSL 3.0では廃止されません。

これに加えて、OpenSSL 3.0.0では、上記のような低レベル関数の多くが非推奨APIとしてマークされる予定です。そのため、すぐに廃止されるわけでは無なさそうです。

engine APIは廃止予定

ENGINE API関数郡は廃止予定です。

OpenSSL 3.0以降のメジャーリリースで削除される予定です。

代わりに、「プロバイダ」(provider)と呼ばれるプラグインインタフェースが用意されます。

「プロバイダ」によるプラグイン

すべてのアルゴリズムは、プロバイダによって実装されています。

プロバイダは組み込みモジュールでも、動的ロード可能モジュールでもかまいません。

初期状態では、プロバイダがロードされていないため、プロバイダを見つけてロードする必要があります。

例えばこれまで、

EVP_CIPHER *ciph = EVP_aes_128_cbc();

と記載していた暗号アルゴリズムの選択は、

EVP_CIPHER *ciph = EVP_CIPHER_fetch(osslctx, "aes-128-cbc", NULL);

といったようになります。

最初の取得時にプロバイダーがロードされていない場合、デフォルトのプロバイダーが自動的にロードされます。

FIPSモジュールは動的読み込み

OpenSSL FIPS暗号化モジュールは、動的にロードされるプロバイダとして実装されます。

自己完結型になります。例えば、

EVP_set_default_alg_properties(NULL, "fips=yes"); 
…
EVP_CIPHER *ciph = EVP_CIPHER_fetch(osslctx, "aes-128-cbc", NULL);

といった感じで、上記1行目を追加すれば、FIPSのaes-128-cbc暗号プロバイダが選択されます。

上記1行目が無ければ、デフォルトのaes-128-cbc暗号プロバイダが選択されます。

NEXT >> OpenSSL1.1.1について

©Copyrights 2015-2019, non-standard programmer

このサイトは、あくまでも私の個人的体験を、綴ったものです。 軽く参考程度にご利用ください。