web-dev-qa-db-ja.com

安全な識別子を生成するために、名前と生年月日を何らかの方法でハッシュできますか?

私は開発途上国向けに立ち上げる予定のプロジェクトに取り組んでいるため、個人のプライバシーとセキュリティを維持しながら、ログインと識別に必要な情報の量を制限したいと考えています。

チームに言えば、ユーザーがインターネットにアクセスする機会を提供しているサードパーティがいる場合に限り、ユーザーがサービスにアクセスすることになるため、パスワードは絶対に必要ないことが明らかになりました(年に1回または2回)。パスワードを覚えたり、電子メールを使用したりすることは、そのようなシナリオでは機能しません。

全体としては、各ユーザーに関するいくつかのデータを保存する必要があり、それが誰のデータであるかを知りたくありません。これは特に機密性の高いデータではありませんが、プライバシーをできる限り保護するものを構築しようとしています。

したがって、ユーザーを知っているの情報でユーザーを識別する方法を知り、追加の労力を覚えておく必要がないようにしています。

その結果、使用できる情報を次のように絞り込みました:氏名と生年月日(DoBでさえ問題になる場合があります)。直感的には、そのデータで非常に安全なものを構築できるようには見えません。名前とDoBの主な欠点の1つは、「John Smith」のすべての組み合わせを可能なすべての生年月日で簡単に調べ、一致するハッシュを見つけることができることです。

したがって、私たちが念頭に置いている大まかな解決策は、名前とDoBをハッシュして「ユーザー名」として使用することです(すべてバックグラウンドで行われます)。いくつかの追加の対策は、生年月日をスクランブルし、ハッシュにソルトを追加することです。

認証は、顔認識を介して行われます。名前とDoBを組み合わせてユーザーの写真を暗号化することも考えられているため、少なくともデータベース管理者は簡単にアクセスできません。

ユーザーは、最初にハッシュを検索して一致が見つかるまでシステムで自分の名前DoBと画像のみを使用してログインし、次に対応する画像を復号化して2つの画像を比較し、ログインを許可するかどうかを決定します。

要約すると、ユーザー資格情報は次のようになります。

_SHA256(NAME + SCRAMBLED_DOB + SALT) => AES(PICTURE_DATA, (NAME+SCRAMBLED_DOB))
_

また、ログイン時に画像の暗号化にソルトを追加することもできます。

  1. SCRAMBLED_DOBのすべての潜在的なバージョンは、データベースに含まれるハッシュが見つかるまで、複数のソルトでテストされます
  2. 手順1で見つかったDoBからの特定のハッシュと数字のシーケンスを使用して、画像を復号化します。
  3. 画像はログイン時に送信された画像と比較され、その後破棄されます

このプロセスは長くなる可能性がありますが、どのくらいによっては、プライバシーの名の下で許容される場合があります。

だから、本質的に、私が思っているのは:

  1. プロジェクトの要件を考えると、SHA256(NAME + SCRAMBLED_DOB + SALT)は十分安全でしょうか?
  2. 画像を暗号化するより良い方法について何か提案はありますか?
  3. このシステム全体に対する提案はありますか?

前もって感謝します!

5
Yakko Majuri

ログイン段階でインターネットにアクセスする機会を提供するサードパーティを信頼しない場合は、どの段階でも信頼すべきではありません。顔認識に関連するデータを含め、入力したデータを保存できます。また、ユーザーがサーバーから受信したデータを保存することもできます。このようなデータには費用がかかるため、このような誤用のリスクは高くなります。

NAME + SCRAMBLED_DOB + SALTのブルートフォーシングは、誕生日の数が非常に少ないため、簡単です。過去100年間のすべての可能な誕生日を表すために必要なのは15ビットだけです。データベースに1 000 000人がいる場合、これは20ビットを意味します。これは合計で35ビットです。つまり、データベースは総当たり攻撃を簡単に実行できます。 SHA256の代わりにArgon2などを使用することで、速度を遅くすることができます。しかし、それでも総当たりするのは簡単すぎるでしょう。その理由は、可能な秘密はランダムではなく、非常に簡単に推測できるためです。

誰かが特定の人のデータを解読することに興味がある場合、それはさらに簡単です。このような復号化は、ブルートフォースなしですぐに実行できます。

あなたの言葉データベースに含まれるハッシュが見つかるまでは、データベースにハッシュを保存することを意味します。これにより、総当たり攻撃がさらに簡単になります。攻撃者は名前で異なる生年月日を検索する必要さえありません。代わりに、攻撃者は保存したハッシュを取得して反復するだけで、使用されている暗号化データのハッシュを簡単に見つけることができます。

あなたは何を気にする必要がありますか?多くのポイントがあります。ここに幾つかあります:

  1. ユーザーからシステムへの接続が安全であることを確認してください。安全でない場合、遅かれ早かれ、それを悪用し、ユーザーに関するデータを収集する人や企業が存在するようになります。あなたが彼らにそれを説明しないならば、あなたはユーザーをだますでしょう。また、安全でないチャネルを介してある種の情報を要求することは、多くの発展途上国においてさえ法的問題となり得る。
  2. 通信チャネルが安全でない場合、データベースのデータを暗号化するなどの対策はほとんど意味がありません。
  3. 信頼できる認証を確立します。開発途上国の多くの人々は携帯電話を持っています。そのため、パスワードに加えて、SMSごとにワンタイムパスワードを送信することを検討してください。
4
mentallurg

256ビットの数値を含むプラスチックチップに印刷されたQRコードから始めます。 QRコード、名前、生年月日から、QRコードを識別できるような方法でハッシュコードを計算します。そしてそれが鍵です。

ログインするには、チップ、名前、生年月日が必要です。チップがなければハッキングできません。あなたの夫/妻/子供がチップを盗んだ場合、ゲームオーバー。チップを紛失してハッカーが見つけた場合、ハッカーは名前とDoBを推測することができますが、QRコードは識別可能であるため、すぐにロックアウトされます。

チップを紛失した場合は、アクセスが完全に失われるか、パスポートまたはその他の現実のIDを信頼できる当事者に渡して新しいチップを入手できるように何かを設定する必要があります。明らかなリスクがあります。

誰かがこれに穴を開けると確信しています:-(

3
gnasher729