はい、これは非常に一般的な質問ですが、機密データをアプリに配信するウェブサーバーを使用して、ベースに触れるアプリを処理する最良の方法を感じようとしています。すべてのリンク、一般的な情報のアドバイスなどをいただければ幸いです。
アプリはデータベースから取得した永続データを一定時間保存するため、すべてがやや扱いにくいものになります。
それは視聴者に大きく依存します。通常、Android OSは、実績のあるLinuxファイルのアクセス許可を通じて、アプリが互いのファイル(データベース、設定ファイル、アプリのプライベートディレクトリに保存された通常ファイル)にアクセスすることを禁止します。ルートアクセスを取得し、すべてを読み取ることができます。
結論として、もしあなたの情報が極度に過敏なものでなければ(例えばクレジットカード情報)、Android(つまり、すべてをプレーンテキストで保存し、他のアプリはアクセスできません)。
それ以外の場合、暗号化が道です。 100%安全ではありません(ハッカーがアプリを逆コンパイルし、データを復号化する方法を見つけ出す可能性があります)が、クラックすることは大きな苦痛であり、ほとんどのハッカーを阻止します。特に ProGuard のようなコードでコードを難読化する場合。
ここにはいくつかのオプションがあります。まず、常にHTTPSを使用します。 HTTPSを有効にした後、私が提案する2つの追加のセキュリティ対策を以下に示します。
time=1321802432&key=[generated-key]
_generated-key
_は、time
パラメーターから生成されます。例:md5(time + salt)
。サーバーはこの要求を受信すると、次の2つのことを実行できます。key
が実際にmd5(time + salt)
と等しいことを確認します(クライアントとサーバーのみがソルトを知っており、上記のAPIキーと同様に難読化できることに注意してください)。time
が過去にさかのぼっていないことを確認します(たとえば、過去1〜2分以上の場合は、リクエストが無効であると見なします)。2番目の方法は、送信されているパラメーターを全員が見ることができるプレーンなHTTP要求も実行している場合に便利です。また、逆コンパイルされたコードを理解するのははるかに困難です。特に、キー計算ロジックを複数のクラスに分散している場合。
ただし、、nothingはアプリのクラッキングを不可能にすることに注意してください。ハッカーが本当にデータを取得することに決めている場合、アプリケーションを逆コンパイルすることで、ハッカーが難読化できるようになります。多くの眠れない夜をコードを通り抜けて、リクエストがどのように形成されるかを考えます。データを保護する唯一のreal方法は、上記で書いたすべての作業を行う以外に、ユーザーにパスワードを要求することです。逆コンパイルされたコードから誰か(ユーザー)の頭にしか存在しないパスワードを取得することはできません:)。
(Google検索のおかげでここに来ました)
私は最近これを多く研究しており、このページはGoogleとBingの検索のおかげでたくさん出てきました。デバイスにデータを安全に保存するために広く受け入れられている手順は、AESのような強力な暗号化アルゴリズムを使用することです。難しい質問は、「AESには安全なキーが必要です。キーで何をしますか?」です。
Googleは最近、アプリ用のクラウドベースのストレージソリューションを発表しました。状況が許せば、そこにキーを保存することを検討できます。そうでなければ、サーバーのように、デバイスの外部でキーを取得する方が良いようです。ユーザーにPINを入力させることができれば、実際には最適に機能します。パスワードを保存するためにパスワードの導出を行うことができ、パスワードを検証するために導出をやり直すことができます
「ユーザーがPINを入力する」部分がないと、その質問に対する多くの良い答えが見つかりませんでした。ただし、アプリでキーを1つ保存する必要がある場合は、キーをハードコードしないでください。少なくとも、安全なパスワードジェネレーターおよび/またはPBKDF2(パスワードベースの派生関数2)などの派生関数を使用してキーを生成します。
投稿を正しく読んだ場合、Googleは、アプリの初回起動時にキーを生成し、MODE_PRIVATEフラグを介して多くのファイルI/O操作にキーを保存し、それをキーとして使用する方法の1つだと言いました。また、そのマスターキーに基づいて他のキーを派生させることもでき、NISTは実際にその行に沿って何かを提案します。
マスターキー方式を信頼するかどうかにかかわらず、私はあなたにお任せします。このキーは、ルート化されたデバイスで公開されます。また、私はまだ問題を調査していることを認めます
Android上のすべてのアプリケーションは安全なサンドボックス環境で実行されるため、システム上の他のプロセスは適切なハンドシェイクなしではコードまたはプライベートデータにアクセスできません。しかし、多くの脆弱性は、アプリ。このリンクからAndroid開発者サイトは、セキュリティのための良いヒントのいくつかをアドバイスします- https://developer.Android.com/training/articles/security-tips.html
HTTPの代わりにHTTPSでSSLを使用してデータを転送するには、Webサーバーで証明書をセットアップする必要があります。
データが本当に心配な場合は、送信する前に一意のアルゴリズムでさらに暗号化し、アプリに到達したときに解読します。本当に強力なものが必要でない限り、TCPに基づいて独自のプロトコルを開発するか、別のポートを使用するか..
http://en.wikipedia.org/wiki/Secure_Sockets_Layer http://developer.Android.com/reference/javax/net/ssl/package-summary.html http:/ /blog.synyx.de/2010/06/Android-and-self-signed-ssl-certificates/
アプリにデータを保存するには、保存する前にデータを暗号化するか、ブラウザを使用してsqliteデータベースを簡単に表示できるため、SQLite以外の別の形式を使用してセキュリティを強化できます。
電話がルート化されていない限り、電話からデータを抽出する方法はありません。
アプリを見る以外にユーザーがデータを見ることができないようにしたい場合は、暗号化が本当に唯一の方法です。デバイスがルート化されている場合、ユーザーは「保護された」ストレージにもアクセスできます。データを表示するには、ある時点でデータを復号化する必要があるため、暗号化さえ完全に安全ではありません。カジュアルなブラウザを非表示にしますが、ハッカーを非表示にしません。