たとえば、AWSなどのクラウドサーバーでアプリケーションを実行しています。実行時にキーを提供するとします(そのため、コードと一緒に、またはコード内に保存されません)、このキーをメモリ内で保護する方法はありますか?
したがって、攻撃者が後でリモートサーバーにアクセスした場合でも、メモリからキーを抽出することはできません。これを達成する方法はありますか?それとも理論的に不可能であることがわかっていますか?
議論された手法 here 、透過的なランタイムセキュリティは、それを「困難」にすると主張されていますが、それでもまだ計算上実行可能かもしれません。
編集:ハードウェアベースのソリューションも問題ありません。
私は同様の質問に答えました ここ 。通常のハードウェアソリューションの場合、 ハードウェアセキュリティモジュール(HSM) がこれを行います。ソフトウェアの場合、.NETは Secure String メカニズムを提供して、RAM内の機密データを暗号化および保護します。他のプラットフォームでも同様の機能が提供される場合があります。 AWSソリューションの場合、Amazonは CloudHSM を提供して、あなたが求めていることのほとんどを実行すると思います。
AWSから:
HSMは、ハードウェアセキュリティモジュールの略です。これはハードウェアの一部であり、改ざん耐性のあるエンクロージャ内で安全なキーストレージと一連の暗号化操作を提供する専用アプライアンスです。キーをHSM内に保存し、それらを使用してデータを暗号化および復号化し、安全かつ確実に、完全に制御できます。 HSMに保存されているキーにアクセスできるのはあなただけです。
AWS CloudHSMサービスは、HSMのメリットをクラウドにもたらします。ユーザーは、作成したHSMによって実行されるキーと暗号化操作の完全な制御を保持します。これには、各キーへの排他的なシングルテナントアクセスが含まれます。暗号化キーは、NIST FIPS 140-2およびCommon Criteria EAL4 +を含む)の国際および米国政府の多くの基準を満たすように設計された改ざん防止HSMによって保護されています。
他の誰もがハードウェアソリューションを提案してきましたが、ソフトウェアソリューションを提案します(ただし、HSMを使用するよりも良いまたは悪いことを意味するわけではありません。独自のものに基づいて独自に決定する必要があります)ニーズ)。このソリューションは、プロセスを暗号化するカーネルパッチです。
RamCryptは、XEXモードでAES128を使用して個々のプロセスのメモリの大部分を暗号化するプロジェクトであるため、すべてのメモリが法医学的に取得された場合でも、プロセス内のすべてのシークレットはメモリ内で安全です。メモリはTRESORで暗号化されるため、暗号化キーがRAMに存在することはありません。キーをx86デバッグレジスタに保持するため、メモリが不足し、AES-NI、汎用レジスタ、およびSSEレジスタを使用してすべてのAES計算を実行するため、メインメモリに入ることがありません。またはCPUキャッシュ。このキーを使用して、プロセス全体のメモリページを暗号化および復号化します。暗号化されないままにされるのは4ページのみで、他のすべてのページは暗号化されます。暗号化されたページにアクセスする必要がある場合は、AESキーを使用して復号化されます。暗号化されていない4つのページの1つが暗号化されます。RamCryptはカーネルパッチとして提供され、暗号化されていないページの数を調整して、パフォーマンスとセキュリティのトレードオフを選択できます。プロジェクトの メインページ を参照してください=、および関連する 研究論文 。
私があなたを正しく理解しているかどうかはわかりません。しかし、ある時点で、明白な秘密はある種のメモリ(おそらくRAM)にある必要があります。攻撃者がその時点でメモリを読み取ることができ、秘密を見つけることができれば、後でデータを復号化できます。
理論的には、攻撃者がそれを見つけられる可能性がない限り、シークレットをメモリに保存する方法(おそらく、プログラムコードを含む特別なセキュリティモジュールがある)はあり得ないと思います。キーを見つけることができるアルゴリズムは常にあります(独自のコードでキーを使用するために必要です)。しかし、このペーパーで指摘されているように、キーを見つけるのは非常に困難になります。
余談ですが、誰も知らないランダムなシークレットを生成し、それをどこにも保存しないというユースケースも見当たりません。
乾杯
基本的に、この問題を完全に解決できるものはありません。 DRMの問題が発生しています。これは、一部の機能を実行するためにシステム上の一部のデータにプレーンテキストでアクセスする必要があるということですが、そのシステムを信頼できない関係者の制御下に置いています。あなたができる最善のことは、最も決定的で熟練した攻撃者以外のすべてにとって信じられないほど困難にすることであり、本質的にコストと利益のトレードオフとしては不十分です。
それを困難にするソリューションに関しては、 ハードウェアセキュリティモジュール(HSM) などのデバイスがリストのトップにあるはずです。それらは、違法にそれらから情報を回復することを非常に困難にするように設計されたさまざまな機能を利用しています。たとえば、共通の機能は、デバイスの上部ケーシングに物理的に取り付けられた別のボード上の揮発性メモリ(DRAMなど)に格納されたキーでデータを暗号化することです。このボードの電源およびデータ接続は、デバイスの下部ケーシングに物理的に取り付けられているメインボードのパッドを介して、コンタクトコネクタ(多くの場合、導電性polymerまたはフォーム)から作られます)を介して供給されます。 。デバイスを開こうとすると、ボードが分離するため、DRAMから電源が切断され、キーが失われます。光、温度、圧力、加速度、位置(GPSを含む)、さらには磁場や放射線などの追加のセンサーさまざまな種類の改ざんを検出するために存在できます。
いくつかの状況であなたに役立つかもしれないもう一つの潜在的なシステムは、 同型暗号システム の概念です。一般論として、同型は本質的に、最初にデータを復号化する必要なく、特定の操作を暗号化された形式でデータに対して実行できる暗号システムの特性です。利用可能なスキームにはさまざまなものがありますが、その中には特定の種類のシナリオでも実用的なものもありますが、通常は非常に複雑で、特に遅くなる可能性があります。私は、クラウドストレージアプリケーションに役立つ方法で準同型を提供する既存の暗号システムを知りません。
場合によります。
他のポスターはHSMを示唆しています。これは、キーに一時的にアクセスする必要があり、その後アクティブメモリから消去され、HSM自体へのキーが長期間メモリに保存されないという限られた目的のための優れたソリューションです。
シークレットは常にメモリ内でアクティブであり、ほとんどの場合HSMに保存されている必要はないようです。その場合、HSMのキーストレージ機能にはあまり価値がありません。メモリに既に格納されているキーを保護できないためです。
また、HSMはモジュール自体で暗号化機能を実行することもできます。これが役立つかどうかは、アプリケーションによって異なります。