私はバックエンドレールアプリに接続するアンドロイドアプリを持っています。私は、デバイスとサーバーの間で送信しているデータを暗号化します。私は秘密鍵で基本的な暗号化を使用しています。キーは本当に秘密ではありません。なぜなら、私はそれをapkに保存しています。逆のエンジニアリングとapkの逆コンパイル技術を使って簡単に扱うことができます。これは "まともな"暗号化アプローチですか?
私が思いついたのは、ユーザーのパスワードに基づいて秘密鍵を生成することです。キーは固定長でなければならず、ユーザーがスーパーロングパスワードをどのように使って強制的にオプションにするのかを見て、私がやっているのは文字を追加することです(基本的には古いハードコーディングされたキーで使用していたものです)文字列(パスワード+文字)は必要な長さです。次に、ユーザ名(技術的には暗号化すべきではないので大したことではない)以外のすべてのパラメータを暗号化しています(私はJSONをサーバとクライアントの通信に使用しています)。 JSONリクエストがサーバーに到達すると、usernameパラメータを使用してデータベースからユーザーのパスワードを取得し(サーバーベース)、キーを作成します。受信したデータを「暗号化解除/暗号化」する必要があります。送信。この方法では、キーは常にServer/Client間で同じですが、すべてのユーザーに固有のものであり、簡単に入手できる、ハードコードされたキーをAPKに保存する必要はありません。また、パスワードはデバイスに保存されていないため、ユーザーはサーバーにログインするたびにパスワードを入力する必要があります。
私が知りたいことは、このアプローチが「適切に保護されている」と考えられるかどうかです。
ユーザー名は一意ですか?そうでない場合は、ユーザー名を使用してパスワードを取得すると、同じ使用名のインスタンスが複数ある場合に問題が発生します。また、ユーザーがパスワードを変更するとどうなりますか?すべてのデータを暗号化し直しますか? – Tim
ええ、ユーザー名はユニークです。 –
なぜhttpsを使用しないのですか? – nasch