2012-02-28 27 views
0

私はかなりこれに取り組んでいます。私は、Javamailに使用されているアプリケーション内の文字列としてユーザー名とパスワードを持っています。しかし、私はもちろんこれらをプレーンテキストとして残しておき、自分のアプリケーションをデコンパイルしてコーディネートするリスクを冒すことは望ましくありません。実行時に情報を暗号化/復号化する

私は非対称暗号化(おそらくBouncyCastleの使用)を調べることを示唆していました。しかし、私はそれが全面的にどのように役立つのかまだ気づいていません。

私は公開鍵/秘密鍵のペアを使用していて、自分のアプリケーションがその文字列を読むことができるようにしたいのであれば、暗号化の経験はあまりありません。鍵は「公開鍵」になりますが、それは暗号化の目的を完全に打破しているため、実際に私には意味をなさないのです。私が "公開鍵"として暗号化キーを持っているなら、私のアプリケーションができることは、その文字列を暗号化することです - 復号化しないでください。

だからここに私の質問は以下のとおりです。

  • 1)は、この上の欠陥が私の推論ですか?
  • 2)このジレンマを解決するにはどうすればよいですか?
+0

興味深い。個人的には、私が理解しているように、主な暗号化原則に違反しているので、1つのアプリ内に「秘密」と「暗号化」の両方の部分を保持する方法はありません。しかし、答えを待つことができます。 –

答えて

1

アプリに保存したい場合は、難読化するのが最適です。暗号化はこれを行う1つの方法ですが、カジュアルな「ハッカー」だけを停止します。暗号化された文字列をリソース(またはクラスフィールド)として使用している場合、それらを復号化するには、アプリケーションにキーが必要です。誰かがあなたのアプリケーションを逆コンパイルすると、キーを見つけるのもかなり簡単になります。コード内のさまざまな場所からキーを動的に生成することで、これを少し難しくすることができます。しかし、前述のように、攻撃者は秘密が使用されている場所を見つけて、すでに解読されたコードをダンプすることができます。これは本当に簡単な方法はありません。

Googleアカウント(ほとんどすべてのAndroidユーザーが端末に搭載している)を使用して認証する必要のある簡単なWebサービスを構築して、ユーザーに代わってメールを送信することができます。そうすれば、誰がメールを送信しているかを知っていて、迷惑メールやクォータなどに使用しようとするとブロックします。もちろん、新しいGoogleアカウントを手軽に手に入れることはできますが、あなたはそれをより大きな問題にするでしょう。もう1つの欠点は、デバイス上のアカウントにアクセスするためのアクセス権がアプリに必要になることです。一部のユーザーはプライバシーに関する懸念事項があります。

+0

ありがとうございました。それは私が推測していたものです。私が見てみる方法は、もし私がおそらく何とか私のポートフォリオに追加するコードをオープンソースすればどうなるでしょうか?私はちょうど短いPHPスクリプトを書いて、私が望むことをするためにmail()関数を使うことにしました。単にAndroidのHttpClientを使って情報を渡すだけです。 –

1

あなたの質問に言い換えれば、あなたのユーザーはアクセスできない機密情報にアクセスする必要があります。短い答え:これはあなたの秘密を確保しようとしないので、作業する別のプロジェクトを見つける。あなたの最善の選択肢は、確実なマシンにあるプロキシサービスを提供することです。あなたの秘密を保持して、アプリケーションが必要なすべてのプロキシにコンタクトするようにしましょう。

あなたは、あなたの秘密を発見するために分解の第一の懸念を表明しました。暗号化はここで実行可能であったと言いましょう(そうではありません)。私が黒い帽子をかぶっていると、私は逆コンパイルし、解読されたデータをそのパラメータで受け取るAPI呼び出しを見つけ出し、このデータを出力するためにコードを追加するか、ここにブレークポイントを設定するだけです。

+0

ありがとうございます。それは私のオリジナルの思考をかなり確認してくれました。私が推測していることは、あまりにも多くのことをしていないので、私の推論には間違いがありませんでした。 –