web-dev-qa-db-ja.com

SharedPreferencesのデータを暗号化する

私は現在、oAuth 1および2のWebサービスへのアクセスのためのフレームワークを開発しています。私の質問は、oAuthアクセスキーのような機密データを安全に保存する方法です。方法?このキーの問題は、Twitterのような一部のプラットフォームが永続的なキーを使用し、誰かがこのキーにアクセスした場合、ユーザーのTwitterアカウントで好きなように操作できることです。

それで、共有設定に保存される前にデータを自動的に暗号化することは可能ですか?または、非常に重要なデータを保存するためのより良い方法/場所はありますか?

更新-また読む: Android application にユーザー設定を保存する最も適切な方法は何ですか?

32
Simon

1)。暗号化する方法は?

Androidで暗号化はJava暗号化アーキテクチャ(JCA)を介して行われます。主にjavax.crypto.* パッケージ。

JCAリファレンスガイド

以下は、JCA APIの使用法の です(特にAESアルゴリズム)。

2)。どこに保存しますか?

暗号化APIは、バイト配列(文字列ではない)で操作します。つまり、SharedPreferencesを使用できますが、SharedPreferencesに入れる前に暗号化されたバイト配列にBase-64エンコーディングを適用する必要があります(そうしないと、XMLパーサーが共有設定ファイルを読み取れなくなります)。次に読み取るには、Base-64デコードを使用する必要があります。デフォルトでは、ほとんどのAndroid OSバージョンには、組み込みのBase-64 APIがありません(UPDATEセクションを参照してください)。したがって、このBase-64オーバーヘッドを削除するには、バイトをa プライベートファイル

UPDATE:APIレベル8以降、APIにはAndroid.util.Base64

32
Vit Khudenko

これを正確に行うために私が作成したこのクラスを確認することもできます: https://github.com/sveinungkb/encrypted-userprefs

廃止予定の代わりにAESを使用し、他の提案では弱いDES=を使用しています。

50

Androidほぼ毎回の暗号化に Facebook Conceal を使用することをお勧めします-これは高速Androidライブラリであり、本当に健全な決定を行います実際に作業を行うためのいくつかのシンプルなインターフェースが残ります。

ボーナス!私は最近、Xamarinからそれを使用する方法のパズルをまとめました-詳細については、私の記事 concealを使用したC#アプリのデータの保護 を参照してください。

3
instantiator

Slink をご覧ください。ほとんどのSharedPreferences暗号化ツールは、実行するアクションごとに暗号化を使用することに気付きました。つまり、各キーと値のペアは、キーと値の両方が別々に暗号化された後にのみ保存されます。これにより、パフォーマンスのオーバーヘッドが大きくなります。

そこで、より効率的な暗号化プロセスを提供するライブラリを検索し、Slinkを見つけました。 SlinkはFacbookのConcealライブラリを使用してオブジェクトのマップ全体を全体として保存し、最も効率的で高速なSharedPreferences暗号化ソリューションにします。また、一般的なAndroidのSharedPreferencesインターフェイスを使用しているため、使用が非常に簡単でほぼシームレスです。免責事項:私はこのライブラリを開発している開発チームの一員です。

3
Σrez Lankri

重複を参照: Obfuscate/Encrypt SharedPreferencesファイルは可能ですか?

こんにちは、AES暗号化を使用してSharedPreferences実装を作成しました。プロジェクトはMavenモジュールです。必要な場合は、ご覧ください。 https://github.com/kovmarci86/Android-secure-preferences

2
Marcell

facebookで紹介する新しい暗号化-非表示の暗号化..使いやすい

https://github.com/afiqiqmal/ConcealSharedPreference-Android

1
ZeroOne

https://github.com/BottleRocketStudios/Android-Vault Vaultコンポーネントを使用してみてください。これは、Androidのキーストア(サポートされているデバイス上)または難読化手法を使用してSharedPreferenceファイルの値を暗号化し、SharedPreferenceインターフェースを実装するので、ほとんどがドロップイン置換です。

1
caller9

Android Facebook Concealを使用してデータを暗号化するライブラリがあります。

https://github.com/rtoshiro/SecureSharedPreferences

Maven Central:

compile 'com.github.rtoshiro.securesharedpreferences:securesharedpreferences:1.0.+'

0
Hamiseixas

この記事 codeprojectには、共有設定のニースラッパーが含まれています。ただし、クラス名SecurePreferencesは、ObfuscatedPreferencesのような誤解を招くものの方が適切です。

0
scottyab

環境設定でデータを暗号化し、暗号化キーをAndroid Keystore システムに保持できます。このようにすると、暗号化キーも安全になります。

これを行うライブラリを調べることができます https://github.com/ophio/secure-preferences

0
Gaurav Vashisth