ログインの仕組みって知ってる?
僕たちは普段、たくさんのネットサービスを何気なく使っている。この世の中にはたくさんのサービスが溢れている。そのサービスの多くにはログインして自分のアカウントで使うことがある。今回は「皆んな、ログインする時に仕組みって知ってる?」って思ったからまとめてみた。
色んな種類の認証
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サイトが判断して、ログインを成功させる。
おしまい
まさかこんなシンプルな方法でアカウントの管理をしているとはね。でもいろんなサービスの裏側の仕組みを理解すると、これから他のサイトを使う時も挙動が理解できるから、いいねっ!ばいばい~。
HTTPとHTTPSの違いって知ってる?
エンジニア業務で分からないことがあると、すぐにGoogleで調べ物をしてしまう。そんな時に、見ているサイトにHTTPとHTTPSの2種類あることに気付いた。この2つの違いが気になってしまったので、それを調べてみた。
そもそもHTTPって何?
なんとなくHTTPSはHTTPの上位互換の何かみたいなイメージがあったから、まずはHTTPについて調べることにした。 HTTPは「HyperText Transfer Protocol」の略で、直訳すると「ハイパーテキストを転送する規約」となる。Transferは転送、Protocolの辞書での意味は儀礼と出てくる。とてもシンプルに言うと、方法や約束って意味と思ってもらっていい。
ハイパーテキストって何よ
「デジタル用語辞典」によると、
文章や画像、音声など、複数のオブジェクトをリンクさせた文書の表現形式のこと。
とある。何がハイパーなのかって言うと、例えばとあるWebページのメニューから「商品一覧」のボタンを押すと、ホーム画面から商品一覧画面にページが遷移したとする。これってハイパーじゃねって話。ただの紙切れの文書ではなく、リンクから別のページに飛べるのってただのテキストを超えたテキストだからハイパーテキストって呼ばれてるんだね。
要は普通のWebサイトとかホームページってイメージで大丈夫。
ハイパーテキストをどうするの?
例えばそのハイパーテキスト(何かのホームページ)を見ようと、パソコンからアクセスするとする。この時、自分のパソコンはそのハイパーテキストのファイルが置いてあるWebサーバに「〇〇のページが見たい」とお願いを出すわけ。このお願いをして、Webサーバに欲しいWebサイトを見せてもらうための方法・約束がHTTPである。
色んなパソコンや環境があるから、それをまとめるために1つ方法を決めましょうって作られた共通のルールってこと。逆に、これさえ守ればどんな環境からでも見たいWebサイトが見れる様になる。
HTTPSって何よ
じゃあHTTPSは何よって話だけど、これは「HyperText Transfer Protocol Secure」の略。Secure=安全なんだね。具体的に言うと、HTTPに対してHTTPSは通信内容を暗号化している。よくされる例え話なのだが、HTTPははがきで、HTTPSは封書って言われる。つまりはHTTPは第三者から見られる可能性があり、一方でHTTPSはその通信をやり取りする人しか内容が分からない様になっていて、安全であるってこと。
ChromeでHTTPSのサイトにアクセスすると、ウィンドウにこの様な鍵マークが表示される様になっている。
おしまい
優秀なエンジニアのお陰で、僕たちユーザが知らなくても道具を扱えることが増えてきた。でもそう言う身近な場所にもたくさんの最新技術が詰まっているんだなぁと感じた、そんな夜でした。ばいばい〜。
Amazon S3について
アプリケーションを開発している時、ファイルを転送する機能に触れることがあったのだが、そのファイルを「Amazon S3に保存する」という仕組みがあった。Amazon S3なんて言葉は聞いたことなかったから気になって調べてみた。
Amazon S3とは何か
正式名称は「Amazon Simple Storage Service」という。それを省略して「Amazon S3」や単に「S3」と呼んだりする。AWSの中のサービスの1つで、AWSのサービス開始当初から存在する。
Amazon Simple Storage Serviceとは
Amazon Simple Storage Service(以下、Amazon S3)はオブジェクトストレージで、データの格納・管理がインターネット上のどこからでも行える。
オブジェクトストレージとは
めっちゃ省略して説明すると、
- オブジェクト = データ(の単位)
- ストレージ = 保管装置
オブジェクトっていう単位でデータを保管する装置ってこと。
3つのポイント
たくさんの性質を持つAmazon S3だが、その中でも大きな3つの特徴をピックアップした。
無制限
Amazon S3は容量に制限がなく、無制限にデータをアップロードできる。
耐久性
AWS公式サイト曰く、Amazon S3は「99.999999999%の耐久性を実現」しており、データが損失する心配がほとんどない。
料金体系
Amazon S3は従量課金制をとっているから、ユーザーが使用した分だけ料金が発生する仕組みになっている。ちなみに料金が発生する箇所は、保存している容量、保存されているデータへの接続、データの転送とデータの管理機能である。やや複雑に見えるかもしてないが、それぞれの料金がとても安く、無料枠もあるから、かなり良心的な価格設定だと思う。
おしまい
普段の生活では全く耳にもしないけど、もしかしたら意外と会社とかで使われてるかも?ITの一般教養として知っとくのは悪くないかもね。ばいばい〜。
よく見るデータのフォーマットについて調べてみた。
プログラミングの参考書を読んでいたら色んなフォーマットが出てきたけど、知らないものも多かったからまとめてみた。
拡張子なら分かる?
wikiから引用すると、
ファイルの種類を識別するためにファイルの名前と末尾につけられる文字列。
とある。シンプルで分かりやすく、端的に説明できていると思う。
あるフォーマットに沿って書かれた文書には対応した拡張子を与えないといけない。
普段からパソコンに触れる機会が多いビジネスマンやエンジニアにはこの程度の説明で十分だろう。よし、次。
様々なフォーマット
今回、この記事を書く経緯となったその参考書にあったフォーマットを調べてみた。
では早速内容に入ろう。
XML
XMLはExtensible Markup Languageの略である。訳すと「拡張性のあるマークアップ言語」となる。1998年にW3Cが勧告したオープンな規格である。どうやらマークアップ言語はHTML以外にXMLや他にもたくさんあるらしい。知らなかった、、、。 XMLはHTMLと同様にマークアップ言語なので、内容をタグで囲ってその内容に対して、「これはこういう意味だよ」と意味付けることができる。しかもHTMLと異なり、そのタグを自分で好きな様に決定することができる。
<member> <people> <name>まこっちゃん</name> <age>23</age> <gender>male</gender> </people> <people> <name>りな</name> <age>23</age> <gender>female</gender> </people> </member>
HTMLとの違い
軽く調べた感じ、1番の差はそれぞれの用途にある。HTMLは皆さんご存知の通り、Webサイトを制作するときに用いられる言語である。 XMLはデータ記述用の言語であるため、その情報にタグによって意味を持たせたデータの集まりとして扱うことができる。しかもW3Cによるオープンな規格であるから、あらゆるマシン(?)に対応していて、なおさらデータのやりとりにはうってつけってわけ。
JSON
データ記述言語の1つで、JavaScript Object Notationの略。直訳すると「JavaScriptのオブジェクトの表記法」となる。直訳過ぎて申し訳ない。
JSONとはデータを記述する際に用いられる記法で、名前に含まれている「JavaScript」は書き方の基となったというだけで、他のあらゆる言語でもサポートされていている。
json形式のデータはコンピュータが読みやすいだけでなく、我々人間も見て直感的に把握できる様な書き方になっている(勿論そのデータによるが)。
"member": { { "name": "まこっちゃん", "age": 23, "gender": "male" }, { "name: "りな", "age": 23, "gender": "female" }
CSV
Comma Separated Valueの略。直訳すると「カンマ(,)で区切られた値」になる。データをカンマで区切って表記する。
ごりごりのエンジニアリングでは用いられる機会は少ない様に思うが、恐らくパソコンでデータを管理する一般のビジネスマンには割と馴染み深い言葉なのではないかと予想する。
名前,性別,年齢 まこっちゃん,23,male りな,23,female
一見すると素っ気ない表記で内容が分かりづらいが、その分メリットもある。ご覧の通り、最低限の書き方しかしてないから、ファイルサイズが小さくできて、他のアプリケーションにも適用しやすい。
おしまい
この記事を書くきっかけになった参考書にはもっと色んなフォーマットが書いてあったが、よく見るXML、JSONとCSVをピックアップしてみた。
パソコン初心者の勉強に少しでもなれば幸いである。ばいばい。