ログインの仕組みって知ってる?
僕たちは普段、たくさんのネットサービスを何気なく使っている。この世の中にはたくさんのサービスが溢れている。そのサービスの多くにはログインして自分のアカウントで使うことがある。今回は「皆んな、ログインする時に仕組みって知ってる?」って思ったからまとめてみた。
色んな種類の認証
iPhoneの携帯でも、自分の会社のパソコンでも、Facebook(?)でもなんでも、それらを使う前にはログインで「顔認証」だったり「指紋認証」だったりなんらかの方法で、今からそのサービスを使うユーザーが本当に本人なのかというのを確認する仕組みがある。それを「ユーザー管理機能」とか言ったりするんだけど、その中でも
- メールアドレス
- パスワード
を使ってログインする方法が馴染み深いと思うから、今回はそれを扱う。
アカウントの管理方法
Amazonでもなんでも、そのサイトに初めてアクセスする時にする作業は「新規登録」だと思う。一般的にWebサービスでよくあるのは
- 名前
- メールアドレス
- パスワード
を設定して、アカウントを作成すると思う。それらの情報は新規登録の際にデータベースに登録される。正確に言うと、パスワードはそのままデータベースに保存すると第三者にデータベースを覗かれたときに危険なのでパスワードは「ハッシュ化」させることが多い。
ハッシュ化とは
IT用語辞典によると、
元のデータから一定の計算手順に従ってハッシュ値と呼ばれる規則性のない固定長の値を求め、その値によって元のデータを置き換えること。
と書いてある。入力されたパスワードに対して、ある処理をしてランダムな値に変換するってわけ。ちなみに同じ値からは同じハッシュ値が求められるし、少しでも違うと全然違う結果になる。 また、ざっくり言うとハッシュ関数は入力された文字列に対してテキトーな値を返すから、ハッシュ値から元のデータを逆算することはほぼ不可能であり、実質不可能ってわけ。厳密には可能なのかもだけど、リアルには不可能だよねって感じ。だからこういう認証機能やその他たくさんの場所でハッシュ化が用いられているわけ。
超テキトーにデータベースの中身を表現すると、こんな感じ↓。
(ちなみに一般的なデータベースなら作成日や更新日なども同時に記録される。)
id | username | password | created_at | updated_at | |
---|---|---|---|---|---|
1 | すな | sunagawa@sample.com | gedf45tfd939dfj3f02ehfe9f | 2015-06-11 | 2020-04-19 |
2 | まこっちゃん | makoto@example.com | 34tw456ydsfw34red9w23j | 1999-12-31 | 2000-01-01 |
3 | りなぺ | rina@sample.jp | 5f92jh57fg9skche39459jswh28f | 2010-01-01 | 2020-01-01 |
4 | りさ | risa@example.jp | 40fjwnc8w3krnf9wj23i8f9dse | 2018-03-02 | 2100-01-01 |
まとめ:新規登録すると、名前・メールアドレス・パスワード(がハッシュ化されたもの)などがデータベースに保存される。
自分のアカウントにログインする
2回目以降は自分のアカウントにログインすることになるんだけど、ログイン画面には「メールアドレス」と「パスワード」って欄がある。そこに自分のメールアドレスとパスワードを入力すると、まずそのWebサイトは入力されたメールアドレスがデータベースに存在するかを調べる。該当するメールアドレスがあったら、入力されたパスワードをハッシュ化したものが、データベースに登録されているハッシュ化されているパスワードと一致するかを調べる。ハッシュ化されたパスワード同士が一致したら、「こいつは本物だ!」とWebサイトが判断して、ログインを成功させる。
おしまい
まさかこんなシンプルな方法でアカウントの管理をしているとはね。でもいろんなサービスの裏側の仕組みを理解すると、これから他のサイトを使う時も挙動が理解できるから、いいねっ!ばいばい~。