Webユーザーログイン時のパスワードのハッシュ化と検証

Deeplからの自動翻訳

ビジネスアプリケーションがウェブからアクセスされることが多くなり、その結果、脅威に対してより脆弱になるため、セキュリティはますます重要なトピックになってきています。4Dは、セキュリティに細心の注意を払っており、4D v16 R5では、いくつかのセキュリティの改善を提供しています

ところで、4Dがどのようにデータ保護や一般的なセキュリティに役立っているか、もっと知りたい方は、こちらのブログ記事をご覧になることをお勧めします。

なぜパスワードはハッシュ化されるべきなのか?

具体的な例を挙げましょう。あるビジネス・アプリケーションがあり、ユーザーは名前とパスワードをダイアログに入力することでサインインします。一度サインインすると、ユーザは他のテーブルやフィールドを読み書きするような「特別な権利」を得ることができます(例えば、人事部は従業員の給与テーブルにアクセスできますが、従業員自身にはアクセスできません)

サーバーは、ユーザーのパスワードを検証するために使用できる「何か」を保存しておく必要があります。最も基本的な “何か “は、パスワードそのものです。データベースに保存された安全でないパスワードは、盗まれ、アプリケーションとデータを危険にさらすために使用される可能性があります。ユーザーのパスワードをデータベースに保存する前にハッシュ化すると、元のパスワードは見つからず、復号化もできません。しかし、ハッシュと元のパスワードを比較することで、有効性を確認することはできます。

ハッシュ化か暗号化か?

まず注意すべきは、暗号化されたパスワードと言いながら、実際にはハッシュ化されたパスワードを意味する人が多いということです。

暗号化はアルゴリズムを使ってデータを暗号化し、鍵によって復号化することで元のデータを取り出します。ハッシュ化では、一度データが暗号化されると、元のデータを取り出す方法はありません。したがって、パスワードは暗号化せず、ハッシュ化する必要があります。

パスワードのハッシュ化の結果、パスワードそのものを保存しないので(復元できないままパスワードを検証するのに十分なデータの一部だけを保存する)、パスワードを忘れたユーザーにそのパスワードを送り返すことができません。その代わりに、新しいランダムなパスワードを選択するか、ユーザーに新しいパスワードを選択させる必要があります。

ハッシュ化にはどんなアルゴリズムを使うの?

MD5やSHAなどのアルゴリズムは非常に高速ですが、ブルートフォース攻撃に弱いので、パスワードのハッシュ化には使用しないでください。bcryptのアルゴリズムは、設計上、低速であることを目的としているので、パスワードのハッシュ化には最適です。より詳しい情報は、Coda Haleの記事「How to safely store a password」をご覧ください。

パスワードのハッシュ化コマンド

ハッシュ化されたパスワードを生成し、検証するための新しいコマンドが2つ作成されました。これらのコマンドは、bcryptアルゴリズムをベースにしています。

  • 新しいユーザーがパスワード“myPassword“でアカウントを作成します。newコマンドでハッシュパスワードを生成し Generate password hashコマンドで生成し、そのハッシュパスワードをデータベースに保存しました。

$varHash:=Generate password hash("myPassword")
[User]Login:=$varLogin
[User]HashPassword:=$varHash
SAVE RECORD ([User])

  • ユーザーが接続しようとしたとき、パスワードを入力します。そして、ユーザーが入力したパスワードとデータベースに保存されているハッシュパスワードの有効性をnewコマンドでチェックする。 Verify password hash コマンドでチェックします。

C_TEXT // Compare the password to the hash password ($varLogin;$varPassword)// information entered by user
QUERY ([User];[User]Login;=;$varLogin)
If (Records in selection([User])=1)

If (Verify password hash($varPassword;[User]HashPassword))
SendToUser("You are connected. Welcome "+$varLogin+".")
Else
SendToUser("パスワードの入力を間違えました。")
End if

Else
SendToUser("ログインの入力を間違えました。")
End if

Vanessa Talbot
- プロダクトオーナー - Vanessa Talbotは、2014年6月に4Dプログラムチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。入社以来、4Dにおける主要機能の定義に関わってきました。プリエンプティブ/マルチスレッドの新機能の大部分と、非常に複雑なテーマである組み込みアプリケーションの新アーキテクチャに取り組んできました。VanessaはTelecom Saint-Etienneで学位を取得後、Criminal Research Institute でオーディオビジュアル部門の開発者としてキャリアをスタートさせました。また、メディアや医療の分野でも、技術サポートやプロダクションの分野で働いてきました。