カスタム N-Factor 認証メカニズムの提供についてはどうですか?
利用可能なメソッドを組み合わせる前に、次のことを実行できると仮定しましょう。
1) Java プログラム内のハードコード
2) .properties ファイルに保存する
3)コマンドラインからパスワードを入力するようにユーザーに依頼します
4) フォームからパスワードを入力するようにユーザーに依頼する
5) コマンドラインまたはフォームからパスワードファイルをロードするようにユーザーに依頼する
6) ネットワーク経由でパスワードを提供する
7) 多くの選択肢 (例: Draw A Secret、Fingerprint、IP 固有、bla bla bla)
第 1 のオプション:難読化を使用することで、攻撃者にとって状況をより複雑にすることができますが、これは適切な対策とは見なされません。優れたコーダーは、ファイルにアクセスできれば、それがどのように機能するかを簡単に理解できます。ユーザーごとのバイナリ (または難読化部分またはキー部分のみ) をエクスポートすることもできるため、攻撃者は別のディストリビューションではなく、このユーザー固有のファイルにアクセスできる必要があります。繰り返しますが、パスワードを変更する方法を見つける必要があります。たとえば、再コンパイルするか、リフレクションを使用してオンザフライでクラスの動作を変更します。
2 番目のオプション:パスワードを暗号化された形式で .properties ファイルに保存できるため、攻撃者から直接見ることはできません ( jasyptと同様)。パスワード マネージャーが必要な場合は、マスター パスワードも必要になります。マスター パスワードも、.class ファイル、キーストア、カーネル、別のファイル、さらにはメモリ内など、どこかに保存する必要があります。すべてに長所と短所があります。
ただし、ユーザーはパスワード変更のために .properties ファイルを編集するだけです。
3 番目のオプション:コマンド ラインから実行するときにパスワードを入力しますjava -jar /myprogram.jar -p sdflhjkiweHIUHIU8976hyd
。
これにより、パスワードを保存する必要がなくなり、メモリに残ります。ただし、history
ここではコマンドと OS ログが最大の敵になる可能性があります。オンザフライでパスワードを変更するには、いくつかのメソッドを実装する必要があります (コンソール入力、RMI、ソケット、REST bla bla bla をリッスンするなど) が、パスワードは常にメモリに残ります。
必要な場合にのみ一時的に復号化することもできます->復号化されたものを削除しますが、暗号化されたパスワードは常にメモリに保持します。残念ながら、前述の方法では不正なメモリ内アクセスに対するセキュリティは向上しません。これを達成した人は、使用されているアルゴリズム、salt、およびその他の秘密にアクセスできる可能性があるためです。
4 番目のオプション:コマンド ラインではなく、カスタム フォームからパスワードを指定します。これにより、ログの公開の問題を回避できます。
5 番目のオプション:別のメディアに以前に保存されたパスワードとしてファイルを提供します -> 次に、ファイルを完全に削除します。これにより、ログの露出の問題が回避され、さらに、ショルダー サーフィンを盗まれる可能性のあるタイピングが不要になります。変更が必要な場合は、別のファイルを提供してから、再度削除してください。
6 番目のオプション:再びショルダー サーフィンを回避するために、RMI メソッド呼び出しを実装して、別のデバイス (たとえば携帯電話) から (暗号化されたチャネルを介して) パスワードを提供することができます。ただし、ネットワーク チャネルと他のデバイスへのアクセスを保護する必要があります。
上記の方法の組み合わせを選択して最大限のセキュリティを実現すると、.class ファイル、プロパティ ファイル、ログ、ネットワーク チャネル、ショルダー サーフィン、man in the middle、その他のファイル bla bla bla にアクセスする必要があります。これは、実際のパスワードを生成するために、すべての sub_passwords 間の XOR 演算を使用して簡単に実装できます。
ただし、不正なインメモリ アクセスから保護することはできません。これは、アクセスが制限されたハードウェア (スマートカード、HSM、SGX など) を使用することによってのみ実現できます。復号化キーまたはアルゴリズムにアクセスできます。繰り返しになりますが、このハードウェアも盗むことができます。サイドチャネル攻撃が報告されており、攻撃者がキーを抽出するのに役立つ可能性があり、場合によっては別のパーティを信頼する必要があります (たとえば、SGX では Intel を信頼します)。もちろん、セキュア エンクレーブ クローニング (分解) が可能になると状況は悪化する可能性がありますが、これが実用化されるまでには数年かかると思います。
また、完全なキーが異なるサーバー間で分割されるキー共有ソリューションを検討することもできます。ただし、再構築すると、完全なキーが盗まれる可能性があります。前述の問題を軽減する唯一の方法は、安全なマルチパーティ計算です。
入力方法が何であれ、ネットワーク スニッフィング (MITM 攻撃) やキーロガーから脆弱にならないようにする必要があることを常に心に留めておく必要があります。