web-dev-qa-db-ja.com

パスワードは本当に必要ですか?

セキュリティ上の理由から、50文字のランダムに生成されたシークレットユーザー名に50文字のランダムに生成されたシークレットパスワードが付いているのに対して、100文字のランダムに生成されたパスワードなしのシークレットユーザー名に違いはありますか?

5
RockPaperLizard

単一の「トークン」(または「ユーザー名」)を認証することの主な欠点は、ユーザーを認証するために、次の2つのいずれかを実行する必要があることです。

  1. トークンをプレーンテキストや暗号化などの取得可能な形式でデータベースに保存します。これは、DBが危険にさらされている場合、攻撃者は全員のトークンを知っていることを意味します。
  2. トークンをハッシュします。ただし、これを行う場合は、ユーザーごとに一意のソルトを使用するのが最適ですが、この場合は使用できません。すべてのハッシュに同じソルトを使用する必要があります。これにより、レインボーテーブル攻撃の可能性が広がります。
7
TTT

「ユーザー名」の定義次第だと思います。通常、ユーザー名はユーザーの名前から派生したものです。ですから推測できます。

多くの場合、ユーザー名は何らかの種類のユーザー設定でアプリケーションに表示されます。したがって、ユーザー名は表示されます。

次に、ユーザー名を使用してパスワードをリセットすることがあり、ユーザー名はネットワーク経由で送信される可能性があります(おそらくsmtp経由)。したがって、ユーザー名はトラフィックからフェッチできます。

ユーザーが互いに通信する必要がある場合があるため、ユーザー名は公開データになります。

ただし、ある種の認証トークンをユーザー名と考える場合、100文字の「文字列」を認証に使用することができます。ただし、それを「ユーザー名」とは考えないでください。

10
cornelinux

2つの概念identityおよびauthenticationを1つのエンティティに結合します。次に、結果を「ユーザー名」と呼びます。この名前は、それがアイデンティティを具体化するだけであることを読者に誤って示唆し、認証の側面を保護するために秘密にしておくべきであるという事実を隠しています。アイデンティティは通常、人々が秘密にしておくものではないことを覚えておいてください。

「推測不可能性」は、認証に使用される秘密の重要な属性です。しかし、セキュリティは、推測できない秘密を持っていることだけから来るのではありません。それはまた、その秘密を適切に扱っている人々から来ています。それを違うものと呼ぶと、ユーザーがメールアドレスと同じようにこの秘密を処理するのを混乱させるリスクがあります。

これは理論上の問題ではありません。これは、今日、世界が受けているクレジットカードの盗難に関するすべての問題の基礎となっています。クレジットカード番号は常に認証ではなくIDに関連付けられていましたが、両方の目的を果たして泥棒にとって貴重なものにしています。

この問題を回避するために、100文字の文字列を「ユーザー名」または「パスワード」と呼ぶことはしません。代わりに、それを「トークン」と呼ぶことは、人々がそれを処理する方法を理解するのに役立つかもしれません。

7
John Deters

パスワードの代わりに別の形式の認証がない場合、ユーザーの認証にユーザー名のみを使用する理由がわかりません。 悪い

*ユーザー名とパスワードは、セキュリティに関してはばらばらの関係にあり、ユーザーの認証にのみ一緒に使用されることも付け加えておきます。

4
Azxdreuwa

パスワードの最も重要な側面は秘密です。ユーザー名がユーザー以外の誰からも完全に秘密である場合は、パスワードは必要ありません。ユーザー名が他のユーザーと共有された場合は、共有します。

さらに、秘密のユーザー名を持つことはUXの悪夢になります-ユーザーはユーザー名が秘密であることを期待せず、そのように扱いません。

「ユーザー名」が他のユーザーに表示されない自動生成された長いアカウント識別子を意味し、アカウントの復旧にメール/ユーザー名が不要な場合、それは理にかなっています。たとえば、Resilio/BitTorrent Syncの「ID」や暗号通貨の秘密鍵などです。この回答では、この秘密を「ユーザー名」ではなく「パスワード」と呼びます。

実際、あるサービスが(ユーザーのパスワードと共に)パブリックユーザー名を使用して認証できる場合、基本的には1つのシークレット(パスワード)だけを認証に使用しています。

認証に使用するパスワードが1つしかない場合、ユーザーが既に使用しているパスワードを使用しようとするとどうなりますか? 「そのパスワードは既に使用されています」という警告をユーザーに出すことはできません。このシナリオを回避するには、アプリ自体が長く一意のパスワードを生成する必要があり、そのため、おそらくパスワードマネージャーの使用が義務付けられます。

もう1つの問題はアカウントの復旧です。パスワードをリセットするには、ユーザーにメールをアカウントに関連付ける必要がある場合があります。この場合は、ユーザー名とパスワードの両方を使用してログインすることもできます。

1
not22