カーネル内で暗号ライブラリwolfCryptを使用できるのか、よくご質問をいただきます。主に高速なネットワークやディスクI/Oを求められるユースケースのためです。
単刀直入にお答えすると、可能です。
カーネル内で暗号化操作を実行することには、パフォーマンスとセキュリティの利点があります。ユーザーモードアプリケーションやデーモンから、透過的に使用することもできます。
カーネルモード暗号化が適切な解決策となるのはどのような場合で、どのような利点が期待できるでしょうか?
カーネルモード暗号化の一般的なユースケースとして、ネットワークパケットフロー(VPN、IPsec、MACsec、TLSオフロード、TCP-AOなどのパケット認証)とディスク暗号化(dm-crypt/LUKS、fscrypt)の2つがあります。
ネットワークパケットとブロックデバイスI/Oの処理のほとんどは、必要な暗号化操作もカーネルモードで実行された場合でのみ、完全にカーネルモードに閉じた処理を実現できます。
デフォルト設定のStrongSwanのようなユーザーモードVPNや、EncFSのようなFUSEベースの暗号化ファイルシステムのように、その処理がユーザーモードプロセスを通過しなければならない場合、パフォーマンスは大幅に低下します。
パフォーマンス重視のカーネル暗号化ユースケースに共通するのは、カーネルがすでにクリティカルパス上にあるということです。
クリティカルパスの操作をユーザーモードで実行すると、コンテキストスイッチが発生し、強制的にデータのコピーが発生します。
カーネルモード暗号化は関数呼び出しとポインタ渡しのわずかなオーバーヘッドだけで、既存のデータフローを活用します。
特にハードウェア暗号アクセラレータを使用する設計においては、カーネルはメモリマップされた物理リソースに直接アクセスできるため、カーネルモードは良い選択肢となります。
カーネルモード暗号化は、特殊なアプリケーションにおいて、非常に高いレベルのセキュリティも実現します。秘密鍵やその他の高度な機密データを完全にカーネル内に保持し、漏洩を防ぐことができます。
例えば、ARM TrustZone、Intel SGX、AMD SEV-SNPなどのTEE(Trusted Execution Envinronment)を使用することで、データを他のカーネルデータからも分離して保持し、エンドポイントが侵害された場合でもソフトウェアによる攻撃を効果的に防ぐことができます。
wolfSSLは、XTS、CBC、CFB、GCM、OFB、CTR、CCMなどのサポートしているすべてのFIPS AESモードとキーサイズに対して、Linuxカーネル暗号システムのプラグアンドプレイ機能を実装し、dm-crypt/LUKSディスク暗号化やその他のカーネルモードアプリケーションに対する完全なターンキー(コード不要)サポートを提供しています。
またamd64環境においては、私たちのカーネルAES実装はAESNIとAVXを徹底的に活用し、最先端のパフォーマンスを提供しています。
そして、WireGuardカーネルモジュールのwolfCryptへの再ターゲティングもサポートし、カーネルモードWireGuardがwolfCrypt FIPS認証取得済み暗号アルゴリズムを直接実行することもできます。
このほかにもAVX-accelaretedのポスト量子実装など、さらに多くのカーネルモード暗号アルゴリズムの実装を進めています。これらはまもなく使用できるようになります。
すでにwolfCryptネイティブAPIの全機能を、カーネル内で他のカーネルモジュールに提供しています。もちろん、FIPS 140-3の完全サポートも含みます。
また、完全なTLSスタックをカーネルに移植し、カーネル空間にTLS1.3およびDTLS1.3エンドポイントを常駐させる特殊なユースケースを可能にしました。カーネル内のTLS 1.3実装により、カーネルスレッドへの直接的な暗号化通信リンクを実現し、最大のセキュリティを確保できるようになります。
そのアプリケーションのスループットやセキュリティ性能をさらに強化するために、カーネルモード暗号化・TLSは最適な選択でしょうか。
ご質問がございましたら、ぜひ info@wolfssl.jp までお問い合わせください。