web-dev-qa-db-ja.com

Androidモバイルアプリのデータを暗号化する

Android向けのモバイルアプリを作成しています。ちなみにこれは私の最初のモバイルアプリです。

アプリで使用するデータをSQLiteデータベースのターゲットAndroidデバイスに保存することにしました。

私が保存しているデータはユーザーの財務データに関するものなので、データベースに保存する前にデータを暗号化することにしました。しかし、暗号化と復号化を行うためにすべての携帯電話のリソースを使いたくありません。

BouncyCastleがトリックを行います。しかし、誰かがコードを逆コンパイルしてセキュリティキーを取得し、データを復号化するのではないかと心配しています。これに代わるものはありますか?どんなアイデアでも大歓迎です。

9
Thusitha Nuwan

ハードコードされたキーをアプリケーションに埋め込まないでください。これは、アプリケーションをリバースエンジニアリングする人にとって、些細な難読化に過ぎません。

暗号化用のキーを生成するには、 PBKDF2 などのキー導出アルゴリズムを使用します。これは基本的にパスワードに対して何百回ものハッシュ関数を実行し、結果を組み合わせて安全なキーを生成します。 なぜキー導出アルゴリズムが必要なのかを理解するには、 この他の答え を見てください。

PBKDF2の利点は次のとおりです。

  • 構成可能なラウンド数。ブルートフォースに対する妥当なセキュリティマージンを維持しながら、デバイスに合わせて計算速度を調整します。
  • 証明可能なセキュリティ、つまり、基になるハッシュ関数と同じくらい少なくとも強力です。
  • 任意のサイズのキーを作成できます。
  • 実装が簡単(すでにあります a Java実装 あなたのために)

基本的に、ユーザーにパスワードを入力させ、PBKDF2を使用してキーを計算し、そのキーを使用してデータを復号化/暗号化します。

さて、実際の暗号化に関しては、暗号化をこれまで扱ったことがない場合は、簡単なものを使用することを強くお勧めします。ブロック暗号は、動作モードで使用する必要があり、安全を確保するために初期化ベクトル(IV)が必要です。実際に安全にするためには、正確に実行する必要のある実装の詳細がたくさんあるので、この場合、さらに理解するために、この周りの他のさまざまな質問を読むことをお勧めします。

11
Polynomial