9

アプリ内に秘密の文字列キーを保存する必要があります。その値は決して変更されず、コードで手動で設定されます。String難読化を適用しても、リバースエンジニアリングの方法で明らかになるように、それを単に保存することはできません。

この秘密鍵を保護することをどのように提案しますか?

私はそれをデータベースに保存しようと思っていますが、データベースを電話から引き出すこともできます。

PS。このキーは特別なパラメータであるため、重要な方法であり、誰にも知られていないことが重要です。復号化キーではありません。この文字列は暗号化方式(md5など)のパラメータとして使用され、結果がインターネットサービスに送信されます。

編集

とても複雑にしてすみません。できるだけ少ない情報で答えが出せると思いました。

このアプリを使用すると、ユーザーはインターネットサービスにテキストを送信して、そのテキストをWebサイトに投稿できます。WebロボットスクリプトはAndroid携帯を模倣してスパムを投稿する可能性があるため、テキストがAndroid携帯経由で送信されることを確認する必要があります。キャプチャのような方法は携帯電話では歓迎されないため、ハッシュコードを生成するためにmd5を介して(他のいくつかのものとともに)渡される秘密鍵があります。このハッシュはインターネットサービスに送信されます。インターネットサービスは同じキーを使用してmd5の結果を取得し、それを比較して、送信者が携帯電話なのかロボットなのかを確認します。

これは本当に私が言うことが許されている最大値です。十分だといいのですが。

4

2 に答える 2

11

セキュリティアーキテクチャを再考することをお勧めします。アプリに付属しているものはすべて検出可能です。(たとえば、Androidのライセンス検証ライブラリは、公開鍵がアプリに付属するように設計されています。)

1つの可能性は、アプリがサーバーから(安全なソケットまたはhttps接続を介して)キーを取得することです。これには明らかに、アプリがサーバーに何らかの識別/検証を送信する必要があります(おそらくユーザー入力に基づく)。

暗号化にキーを使用している場合は、公開キーの暗号化がどのように機能するかをもう一度確認してください。アプリには公開鍵が必要です。その後、インターネットサービスは一致する秘密鍵を使用して復号化できます。

于 2012-04-18T06:36:18.090 に答える
4

@Adamのコメントで解決できる場合は、電話で文字列値を永続化するための解決策が少なくとも1つあります。これは、値がアンインストール/再インストール後も存続することを意味します。アプリの(工場出荷時のリセットでは削除されます)が、ユーザーには「非表示」のままです(つまり、SDカードではなくシステムのプライベートストレージに保存されます)。

システム設定コンテンツプロバイダーを使用して、次のように値を保存できます。

final String myKey = "verySecretKey";
final String myValue = "verySecretValue";
final boolean isSuccess = System.putString(getContentResolver(), myKey, myValue);

そしてそれを取得するには、次のことができます。

myValue = System.getString(getContentResolver(), myKey);

そして、はい、ルート化された電話では、便利なユーザーが永続化された値を取得する可能性がありますが、その場合、もはや聖なるものはなく、@Adamのコメントが有効になります:データをデバイスに保存しないでください。

于 2012-04-18T06:45:00.560 に答える