Android向けのモバイルアプリを作成しています。ちなみにこれは私の最初のモバイルアプリです。
アプリで使用するデータをSQLiteデータベースのターゲットAndroidデバイスに保存することにしました。
私が保存しているデータはユーザーの財務データに関するものなので、データベースに保存する前にデータを暗号化することにしました。しかし、暗号化と復号化を行うためにすべての携帯電話のリソースを使いたくありません。
BouncyCastleがトリックを行います。しかし、誰かがコードを逆コンパイルしてセキュリティキーを取得し、データを復号化するのではないかと心配しています。これに代わるものはありますか?どんなアイデアでも大歓迎です。
ハードコードされたキーをアプリケーションに埋め込まないでください。これは、アプリケーションをリバースエンジニアリングする人にとって、些細な難読化に過ぎません。
暗号化用のキーを生成するには、 PBKDF2 などのキー導出アルゴリズムを使用します。これは基本的にパスワードに対して何百回ものハッシュ関数を実行し、結果を組み合わせて安全なキーを生成します。 なぜキー導出アルゴリズムが必要なのかを理解するには、 この他の答え を見てください。
PBKDF2の利点は次のとおりです。
基本的に、ユーザーにパスワードを入力させ、PBKDF2を使用してキーを計算し、そのキーを使用してデータを復号化/暗号化します。
さて、実際の暗号化に関しては、暗号化をこれまで扱ったことがない場合は、簡単なものを使用することを強くお勧めします。ブロック暗号は、動作モードで使用する必要があり、安全を確保するために初期化ベクトル(IV)が必要です。実際に安全にするためには、正確に実行する必要のある実装の詳細がたくさんあるので、この場合、さらに理解するために、この周りの他のさまざまな質問を読むことをお勧めします。