アプリ開発を始めて、最初のアプリのログインフローについて考えています。 WhatsappやClash of Clansなどの他のアプリは、接続するためにサインアップまたはログインプロセスを必要としません。だから、私はこの方法論について学びました:
すべての接続プロセスは、TLSを介してsocket.ioサーバーに送信されます。
これはリモートまたはローカルの攻撃者に対して安全ですか?アクセストークンをローカルに保存する最良の方法は何ですか?ローカルで暗号化する必要がありますか?暗号化するにはどうすればよいですか?サーバーデータベースで暗号化する必要がありますか?
私はITセキュリティの専門家(IT監査人)として働いているので、経験から答えることができます。
まず、安全なトークンを定義します。アクセストークンを保護するには、次の条件を満たす必要があります。
トークンがいつか期限切れになる
この要件は最も簡単です。サーバー側で、このトークンが無効になる日付を指定します。ログインの日付>トークンの有効期限の場合、トークンが期限切れであることを拒否します。
トークンはクライアントとサーバー間で転送中に変更できません
TLSを使用しているので(できればバージョン1.2で、ファイナライズ時に1.3に更新してください)、この問題はすでに解決されているはずです。 TLSは機密性を提供し、アクセストークンが許可なしに開示されないでないことを第三者に保証します。
ユーザーはトークンを変更できません
この要件は最も困難です。これに伴うには、PKIでデジタル署名を使用する必要があります。 このアルゴリズムは安全でないため、ハッシュ関数としてSHA 1を使用しないでください。アクセストークンにハッシュ関数を適用すると、メッセージダイジェストが生成されます。メッセージダイジェストはユーザーのみが知っている秘密鍵を使用して暗号化されます。ユーザーの公開鍵を使用してサーバー上で資格情報が復号化されると、結果のメッセージがサーバー上の資格情報と一致する場合、アクセストークンの変更が行われないことが保証されます。ユーザーが行われた。
上記の方法は、C-機密性、およびI-セキュリティCIAトライアドの整合性要件を保証します。受信した暗号化されたメッセージをユーザーの公開鍵で復号化できるため、否認防止(ユーザーが自分の資格情報であることを否定できない)も保証されます。
他のいくつかの質問に答えるには:
保存時にアクセストークンをローカルで暗号化する必要がありますか?
はい、そうする必要があります。上記は転送中のデータに関するものですが、静止していないです。ハッカーがローカルクライアントマシンを危険にさらした場合、彼または彼女は簡単にプレーンテキストトークンを盗み、正当な所有者になりすますことができます。
暗号化するにはどうすればよいですか?
AESやRSAなどの強力な暗号化アルゴリズムを使用する必要があります。セキュリティを最大化するには、長いキー(例:256)を選択します。
これはリモートまたはローカルの攻撃者に対して安全ですか?
考えられることの1つは、悪意のあるユーザーがアクセストークンを再生して、有効なクライアントになりすますことです。
これを軽減するために、タイムスタンプを使用できます。別のオプションは、すべてのリクエストの後にサーバーから新しいアクセストークンを取得することです。
アクセストークンをローカルに保存する最良の方法は何ですか?ローカルで暗号化する必要がありますか?暗号化するにはどうすればよいですか?サーバーデータベースで暗号化する必要がありますか?
アクセストークンを暗号化された値としてローカルストレージに保持することで機能します。私はモバイルアプリの専門家ではありませんが、モバイルアプリのデータベースにアクセスできると思います。そこに暗号化されたデータを保存できます。同時に、サーバー上でトークンを暗号化しておくこともお勧めします。
これはリモートまたはローカルの攻撃者に対して安全ですか?
あなたが述べた目標を達成するために、あなたは本当にトークンがサーバーのみのキーでサーバー側で暗号化されることを望みます。長い話を短くするために、これは初心者の開発者として適切に行うことは非常に困難です。
これを正しく行うには、以下に対する保護を検討する必要があります。
また、サーバーキーを定期的にローテーションし、生成したトークンの下位互換性を維持し(たとえば、アプリの古いバージョンの場合)、妥協があった場合(たとえば、取り消したいか)この場合、すべての未処理のトークン?)。
独自のスキームを作成したい場合は、確かな(そして最新の)暗号化の背景を持つ誰かと協力することをお勧めします。私は缶詰のソリューションをお勧めしますが、私は自由に利用でき、本当にプラグアンドプレイで安全なものは何も知りません。