市販のハードウェアHSMの大部分はonlyであり、認証されたユーザーがHSMのファームウェア内に実装されたさまざまな暗号化アルゴリズムで暗号化キーを生成、保存、使用できるように設計されています。
データシートを読むと、提供されたAPIを使用して(外部)アプリケーションをHSMと対話させ、その暗号筋を使用できます(おそらくHSM内で生成/保存されたキーを使用)。しかし、HSMによってHSM境界内で暗号処理されたデータ/オブジェクトの長期保存は利用できないようです。
HSMの物理的に保護されたメモリスペース内にユーザーコードとユーザーデータを永続的に保存および管理できるHSMがないのはなぜですか?
誰かがHSMの経験があり、少なくとも暗号化キーを超えていくつかのレジスターを格納できる市販のハードウェアHSMソリューションに私を向けることができますか?
理想的には、アプリケーションをHSMの境界に保存し、HSMが提供する暗号を実行するのと同じプロセッサで実行し、HSMの保護領域内にいくつかのレジスタを永続的に保存することを望みます。
Thales nShield HSM (以前のnCipher)では、一般的なプログラミングが可能です。これはかなり高価なオプションです。最初にHSMで有効にする必要があります(Thalesによって署名され、HSMのシリアル番号に固有の「機能ファイル」を介して)。次に、既知のキーで署名されている限り、追加のコードを実行できます。そのような使用法のためのHSM。
このオプションを使用すると、Cライブラリが削減されたCコンパイラと、HSM機能にアクセスできるいくつかのAPIが得られます。内部OSでは、oneプロセス(マルチスレッド)が可能で、暗号化操作はトランザクションで実行されます。外部の世界(ホストPC)と任意のバイナリBLOBを交換するトランザクションもあります。コアCPUはそれほど強力ではありません(60 MHz ARMまたはPowerPC)と考えてください)が、かなりのRAM(メガバイト、数十メガバイトでも))あります。
Thales/nCipher HSMには多くの永続的なストレージ機能がありません(EEPROMは数キロバイトですが、それだけです)。実際には、HSMはマスターキー(アクセスできない)のみを格納し、「HSM内」にある「キー」を含むすべてが暗号化されてオフロードされます。同じことができます。ホストに保存されたデータを保存し、内部モジュールに送り返します。データはいずれかのキー(事実上「HSM内」にあります)で暗号化され、HSM内のコードが復号化を行います。
timaco/Sophos HSM は、(たとえば)PKCS#11インターフェースを介して管理できるキーの内部ストレージ用に十分なフラッシュを備えています。
独自の暗号化アルゴリズムやセキュリティプロトコルを開発したい場合は、 SDKが利用可能 もあります。 CPUは少しエキゾチック(Texas Instruments DSP)ですが、Cで完全にプログラム可能で、シミュレータが付属しています。コードの読み込みはシンプルで非常によく考えられており、適切な認証とコードの暗号化が可能です。
ボーナスポイント:特定のモデルでは、FIPS 140-2レベル4を部分的にサポートしています(つまり、ルートのアクティブなゼロ化)物理的な攻撃の場合の秘密)、そのようなものがあなたのボートを浮かせる場合。もちろん、独自のファームウェアを開発する場合、FIPS認定はもはや有効ではありません。
ほとんどのHSMはカスタムコードの使用を許可していますが、一般的には特定のベンダーに問い合わせる必要があります。それは彼らが宣伝するものではありません。しばしばそれは認証を破ります。一方、たとえば、入力を検証して、より安全なエクスペリエンスを実現できます。通常、これらのアプリケーションはサンドボックス化されており、署名する必要があります。もちろん、十分に大きな顧客であれば、ベンダー自身によるカスタマイズについて話すことも可能です。
ベンダー固有のAPIと奇妙なアーキテクチャーを期待する必要があります。
Java SafeNetのJava $ ===ベースのHSMがあり、HSMで実行するための署名付きアプリケーションの開発を特にターゲットとしていましたが、中止されたことがわかりました(私が敷設したこともないほど高価でした)その目)。
SafeNet HSMs カスタムコードをモジュールにロードできます。要件に応じて、さまざまなオプションを利用できます。