Javaデスクトップアプリケーションでの秘密鍵の格納

私は、API、Google Analyticsなどのためのシステム秘密鍵について話しています...

Where is the best place to store it? (Java class, properties, hidden file, preferences) (Cross-platform Win, Mac and Linux)

Do I need to encrypt theses keys? I probably will need to decrypt before we start to use with third party service.

3
nl ru de
サーバーを無人で起動できるようにしたいですか(自動スケーリングを許可します)。
追加された 著者 Areca,
起動時に秘密を自動的にロードしたいのであれば、外部の助けを借りずにそれらを復号化できるようにする必要があるため、暗号化できる方法が制限されます。
追加された 著者 Areca,
その場合は、これを見てみるとよいでしょう。 title = "保存したパスワードをローカルに保存できますが、安全にjavaに保存できます"> stackoverflow.com/questions/29116087/…
追加された 著者 Areca,
Javaアプリケーションがそれらを格納するための良い方法はありません。 Windows NGC(この機能はプロセスの分離をサポートしています)もサポートしていません。これらの秘密を保護する必要がある場合は、ハードウェア暗号化にPKCS11を使用する必要があります。
追加された 著者 Panther,
@ jrtapsell、Sryしかし質問はサーバーと自動スケーリングについて何も尋ねない
追加された 著者 moonblade,
サーバー向けではなく、デスクトップアプリケーション向けJavaについて話しています
追加された 著者 moonblade,
@ jrtapsell、ここでの質問はHow Toではありません。秘密鍵をキーチェーンに保存するのがベストプラチスですか?私はあなたにそれをするもっと多くの方法を言うことができます。しかし、何が最高ですか?
追加された 著者 moonblade,

4 答え

これから始めましょう:

これらの鍵を暗号化する必要がありますか?

1: if you have communication machine to machine or application to application you can use encryption combine with HMAC and initialization vector ( iv ) in this way you can make your keys safe from MITM and similar attack .

2: but if you need to authentication to a server side with a none-encrypted key in this way you can't protected them.

3: protection your application from revers engineering -> you can't sorry , but i can give you a list of technique to make it very very hard to reverse it :

・アンチAPIスパイ

・アンチブレークポイント

・アンチクラックツール

・アンチダンパープロ

・コード暗号化

・コード置換

・デバッガガード

・動的暗号化

・ガベージコード

・int DebugShield

・メモリガード

・ミューテーターエンジン

・多相レイヤ

・セキュアAPIラッパー

・安全なエントリポイント

・圧縮

・変身

・スレッドエンジンモニター

このテクニックの詳細については、Googleで検索できます。

保存するのに最適な場所はどこですか?

アプリケーションを逆から保護するために上記の方法を使用する場合は、それらをクラス内のプライベートフィールドに配置することをお勧めします。

LinuxやUNIXで許可されているものはすべて600のファイルです。

Windowsでは、レジストリにそれらを置きます。

--> you can use steganography(watermarking) technique

2
追加された

これはデスクトップアプリケーション用であると述べたので、何をしても、決心した攻撃者/リバースエンジニア がこれらのキーを回復することができます。それらを難読化することが重要な場合(これを簡単にするため)、それらを暗号化してから実行時に復号化することを検討できます。もちろん、その場合はそのキーをどこかに保存する必要があるので、ちょっとした鶏と卵の問題があります。

これらのキーに実際に敏感なもの(Google Analyticsだけではないなど)がある場合は、ユーザーごとにキーを生成し、そのユーザー用にローカルに保存します。 (サーバーサイドコンポーネントと共有する必要がある場合は、TLS接続を介してキーをアップロードできます。)

1
追加された
Amen ...そしてファイルモードを 600 または同等のものに設定します。
追加された 著者 CFreiner,
@ Drux、私は私がファイルの所有者としてアプリケーションを設定することはできませんWindowsの変更ファイルのアクセス許可は意味をなさないと思う。管理者アクセス権を持つユーザーは、ファイルのアクセス権をフルコントロールに変更できません。あなたが思うこと?
追加された 著者 moonblade,

Davidが述べているように、クライアントにアクセスを許可したくないデータはクライアントデバイス上では使用できません。あなたのアプリケーションがユーザーがそれを抽出することができればあなたが何をしても関係ありません。

承認されたユーザーのみにアクセスを制限する必要がある場合は、ユーザーを認証する必要があります。承認されたユーザーごとにAPIキーが必要か、クライアントマシンと(想定されるサードパーティの)APIの間でユーザーを認証するミドルウェアサービスを配置する必要があります。

1
追加された

TL;DR:

  1. 暗号化キーとしてユーザー固有のパスワードを持つ暗号化されたデータベース/ファイル。
  2. 一般的にはい(アプリのセキュリティによって異なります);

Longer version: When answering such a question you need to consider:

  • 誰からあなたを保護しています;
  • 破損の危険性
  • この問題はすでに他の人によって解決されていますか。

私はあなたがユーザーから保護されているとは思わない(他人が想定しているように)。あなたは不正な意図を持った、アプリケーションの不正な、不正使用者から保護しています。

リスク:キーが盗まれた場合、悪用されたユーザーはデータを取得したり、アカウントを盗んだり、データを侵害したり、ユーザーの公開画像を侵害したりする可能性があります。

これを解決するための古典的な方法は、認証/承認(記憶されたデータの文字列(「ユーザーが知っていること」)、バイオメトリクス(「ユーザーのプロパティ」)または所有権(「ユーザーが持っているもの」)これにより、正当なユーザーと違法なユーザーを区別することができます。

この問題はすでに他の人によって解決されています - keepassXのようなパスワードマネージャはどうやってそれをしていると思いますか? KeepassXは、パスワード、キーファイル、その他の機密データのローカルデータベースです - 本質的にあなたの問題です。

それらは3つの方法(そしてそれらのいくつかの組み合わせ)を使用します:パスワード、キー、または既存の認証手段(Windowsアカウントのような)との結びつき。実装の安全性に応じて、選択して選択します。パスワードのみを選択した場合(私はほとんどの場合これを行います)、 sha512 + saltbcrypt <�などの暗号化機能を使ってハッシュします。/em> 悪意のある俳優がハッシュを知っていても、元の文字列を推測するための作業をしなければなりません。このパスワードを使用してキーを暗号化すると、必要な保護が得られます。

Windowsの認証情報のみを使用することはお勧めしません。セキュリティを重視するアプリケーションの場合は、起動時に顧客にパスワードを要求しないことをお勧めします(これもkeepassXによるものです)。

0
追加された