web-dev-qa-db-ja.com

アプリユーザーを認証するためのパスコードを実装する

この質問は これ に関連しています。

アプリ(Android、iPhone)に5桁のパスコード認証を実装するのに忙しいのですが、複雑になっています。アプリがリクエストを送信するデバイスを安全に識別する方法がわかりません。ユーザーにデバイスID(UUID)を送信して登録できますが、そのIDは秘密ではないため、UUIDを知っている人はパスコードを使用してサーバーで認証を試みることができます。

関連する質問の答えには、「デバイスの登録時に、デバイス(電話またはラップトップ)上のアプリケーションが秘密の値を生成し、銀行に送信します。これも保存されます。」

それは理にかなっているように思えますが、どのようにしてその秘密の値を電話に保存するのでしょうか。ローカルストレージを使用することもできますが、どの程度安全ですか。それで十分ですか?

別の方法は、パスコードの登録時に(永続的な)Cookieを設定することです。しかし、それがどれほど安全かはわかりません。

このシステムは多くのアプリに実装されているようですが、ウェブ上で見つけられる情報はあまりありません。

3
Sherlock

ここで特別なことをする必要はありません。

トークンをアプリのストレージにローカルに保存するだけで十分です。

SMSトークン、電子メールトークン、またはユーザー名とパスワードによる)より完全な認証を必要とする定期的なトークンの有効期限を検討することは価値があります。

1
Alain O'Dea

あなたはポーズをとって興味をそそる質問をしますが、これに対する答えは1つではありませんが、私があなたに考えの糧としていくつかの提案をするのを助けることができると思います。

1、ハードウェアシリアルを使用しますか?私はこれが特定の植物形で常に可能であるとは限らないことを知っていますが、私はそれを言及したいと思いました。

2、UUID、これと生成した独自のIDを使用し、データベースでこれを暗号化(またはハッシュ化)して、十分な類似性を作成した場合は、UUIDに基づいて独自のトークンを作成し、安全な接続で送信できます。

3、電話番号、UUIDとデバイスの電話番号を組み合わせて使用​​して、NiceセキュアIDを作成できます。

私が言うことができることから、通常のユーザー名/パスワードの使用からそれほど遠くない非常に標準的な方法を使用しようとしていることがここでの唯一の違いは、それらのユーザー名を作成しようとしていることです。ほとんどの場合、ユーザーはユーザー名を簡単に見つけてブルートフォースを試みることができますが、常にIP fail2banを使用する必要があります。

これに対する潜在的な解決策は無限にありますが、保護しようとしているデータと、情報を転送/保存する方法に依存していると思います。

0
TheHidden

そのため、デバイスに固有の共有シークレットが必要です。デバイスのフィンガープリントはどうですか?つまり、デバイスのハードウェア構成に基づいてハッシュを計算します。これらは、ハードウェアがホットスワップできないデバイスに対して堅牢で信頼できると見なされています。実際、HSMとCAソフトウェアは、これを改ざん防止の一部として使用します。

グーグルで「モバイルデバイスのフィンガープリント」を実行すると、興味深い結果が山積みになります。 この学術論文 特に私の目を引きました。要約から:

スマートフォンの多数のセンサーを使用して、電話の信頼性の高いハードウェアフィンガープリントを作成する方法を示します。このようなフィンガープリントは、モバイルデバイスがWebサイトに接続するとき、およびリモートサーバーに対して正当なユーザーを識別する2番目の要素として、モバイルデバイスの匿名化を解除するために使用できます。 2つの実装を提示します。1つはスピーカーフォンマイクシステムの周波数応答の分析に基づくもの、もう1つはデバイス固有の加速度計のキャリブレーションエラーの分析に基づくものです。加速度計ベースの指紋は特に興味深いものです。加速度計は、アクセス許可を要求したり、ユーザーに通知したりせずに、モバイルWebブラウザーで実行されているJavaScriptを介してアクセスできるためです。

0
Mike Ounsworth