Android アプリケーションの SQLCipher はどのように機能しますか? http://sqlcipher.net/design/
私が理解したように、それはすべてPRAGMAキーに依存しており、このキーはおそらくバイナリでアプリに保存する必要があります。
ただし、ルート化された電話で誰もが .apk ファイルを逆コンパイルできる可能性があるため、これは安全ではありません。多分私は何かを逃した?
ありがとうございました。
Android アプリケーションの SQLCipher はどのように機能しますか? http://sqlcipher.net/design/
私が理解したように、それはすべてPRAGMAキーに依存しており、このキーはおそらくバイナリでアプリに保存する必要があります。
ただし、ルート化された電話で誰もが .apk ファイルを逆コンパイルできる可能性があるため、これは安全ではありません。多分私は何かを逃した?
ありがとうございました。
私が理解したように、それはすべてPRAGMAキーに依存しており、このキーはおそらくバイナリでアプリに保存する必要があります。
いいえ。
多分私は何かを逃した?
キーは、ユーザーが入力するパスフレーズの形式で、ユーザーから取得されます。Android 用の SQLCipher では、このパスフレーズはgetReadableDatabase()
の改訂版のようなメソッドに渡されますSQLiteOpenHelper
。
SQLCipher チームは、アプリケーション バイナリに固定キーを埋め込まないように広く推奨しています。アプリケーションが埋め込まれたキーを隠蔽することについてどれほど創造的であっても、十分に決定された攻撃者は、アプリケーション パッケージからキーを抽出してデータベースを開くことができます。
残念なことに、一部のアプリケーションは依然として DRM の初歩的な形式として埋め込みキーを使用して SQLCipher を使用しています。ただし、これでは実質的なセキュリティは提供されません。
機密データを保護する必要がある場合、最善の方法は、ユーザーが入力した強力なパスフレーズから派生したキーを使用することです。SQLCipher は強力なキー派生を自動的に提供するため、必要なのは、PRAGMA キーまたは SQLCipher ラッパー ライブラリで提供される同等のキーイング メカニズムの 1 つを介してユーザー パスフレーズを提供することだけです。
はい、キーを保護することはトリッキーな部分です。理想的には、ユーザーがアプリにサインオンするときに入力するパスワードによって (部分的に) 提供されますが、常に理想的であるとは限りません。そしてピースがあちこちに隠されています。
鍵フォーム secureRandom を生成し、鍵を KeyStore (BKS) に保存します。KeyStore の場合、ランダム、ユーザー情報、デバイス情報、およびパスワードを使用してパスワードを生成します。