OpenSSLとクラウドHSMやYubiKeyを連携可能にするOpenSSL Engine APIとは
OpenSSLのEngine APIとは
OpenSSLは暗号化や署名などの基本的な暗号処理を自ら実装している一方で、Engine APIと呼ばれるプラグインのような仕組みを使うことでこれらの処理を外部ハードウェア等に委譲することができる。つまり、Engine APIを利用すると、クラウド上のHSM(Hardware Security Module)や外部ハードウェアが提供する暗号処理をOpenSSLから透過的に呼び出すことが可能になる。
暗号処理をHSMといったセキュアなハードウェアに委譲することで、OpenSSLを使用しながらもセキュアなハードウェア上で秘密鍵を保持したまま署名などの処理を行えるようになる。
Engine APIの利用例
Engine APIの利用例としてはpkcs11 engine pluginというものがある。これを利用するとOpenSSLからPKCS#11というインターフェイスを実装した暗号化デバイスにアクセスできるようになる。
そして、GoogleはGoogle Cloud上のHSMをPKCS#11経由で操作できるようにするGoogle PKCS #11 Cloud KMS Libraryを公開しており、これを利用することで暗号化や署名処理をGoogle CloudのHSM上で実行できるようになる。
同じようにYubiKeyはYubiKeyハードウェアをPKCS#11経由で操作できるようにするYKCS11を公開していて、これを通じてYubiKeyハードウェア上に格納された非対称秘密鍵を用いた処理をOpenSSLから呼び出すことが可能となる。
Engine APIを利用して署名等の処理を外部化することのメリット
OpenSSLのEngine APIを利用することで、署名などの暗号処理自体をGoogle Cloud HSMといったFIPS 140-2 Level 3準拠のハードウェア上で実行することが可能となる。その結果、秘密鍵がHSMの外に出ることなく処理が行えるため、鍵の漏洩リスクを大幅に低減できる。
実際に鍵が漏洩した事による重大なセキュリティーインシデントとして、Nvidia社のコード署名証明書がマルウェアの署名に使われているのが2022年に見つかったというものがある。
このようなコード署名用鍵の流出インシデントは度々発生していることから、『2023年6月1日以降はコード署名に利用する秘密鍵はFIPS 140-2 level 2準拠のハードウェアに格納する必要がある[1][2]』といった業界ルールができた。こういった業界の要件を満たす手段としてもEngine APIが必要となっている。
Discussion