メインコンテンツまでスキップ

認証と認可

認証と認可

認証

本人かどうかを確認する手続きを認証と呼ぶ。

例えば、海外に旅行に行く際には空港でパスポート審査があるが、パスポートと所持している人が一致しているかの確認を行っており、これも認証である。

認証にはいくつかの種類が存在する

  • Basic 認証
  • Digest 認証

Basic 認証

HTTP で定義された認証の 1 つであり、最も基本的な認証である。Basic 認証に暗号化機能はなく、Base64でエンコードされたユーザ名とパスワードをクライアントからサーバへ送信する。

イメージ図

Base64

64 は 64 文字を表しており、全てのデータを英数字(a-z, A-Z, 0-9)(26 + 26 + 10 = 62)と一部記号(+, /)で表すエンコード方式のことをBase64という(文字列が足りない場合は=で補う)。

変換手順としては64文字で表すので26=642^6 = 64となるので6bitあれば十分である。変換するデータを6bitずつに区切って文字を変換していくが、変換するデータが24bitの倍数でない場合は0を付与させ、24の倍数になるよう調整する。つまり、変換後は必ず4の倍数の数だけ文字が生成され(4 * 6bit = 24)、4文字で1つのグループと考える。

24の倍数にするのは元のデータは8bitで表現されている。それを6bitで表現するには過不足なく分割するには6,8の最小公倍数の24の数にすることで過不足なく変換が可能となるためである。

rfc4648でBase64について定義されているが、こちらに書かれている様に24bit単位で考えると3つの状況が考えられる。

  • 入力データがちょうど24の倍数(3byte, 6byte ...)の場合は綺麗に割り切れるため、=はつかない
  • 入力データが2byte(16bit)だけオーバしている(2byte, 5byte ...)場合は後ろに8bit分の0を付与させる。6bit, 6, (4 + 2), 6という形になる。前(6, 6, 4 + 2)はBase64で文字に変換可能なので変換し、残り(6)は=という形になる。
  • 入力データが1byteだけオーバしている(1byte, 4byte ...)場合は後ろに16bit分の0を付与させる。6bit, (2 + 4), 6, 6という形になる。前(6, 2 + 4)はBase64で文字に変換可能なので変換し、残り(6, 6)は==という形になる。

3つの状況全手をBase64形式の文字列を表現することができる。そのため、24bit単位で考えると不都合が起きない。

2進数(10進数)該当文字2進数(10進数)該当文字2進数(10進数)該当文字2進数(10進数)該当文字
000000 (0)A010000 (16)Q100000 (32)g110000 (48)w
000001 (1)B010001 (17)R100001 (33)h110001 (49)x
000010 (2)C010010 (18)S100010 (34)i110010 (50)y
000011 (3)D010011 (19)T100011 (35)j110011 (51)z
000100 (4)E010100 (20)U100100 (36)k110100 (52)0
000101 (5)F010101 (21)V100101 (37)l110101 (53)1
000110 (6)G010110 (22)W100110 (38)m110110 (54)2
000111 (7)H010111 (23)X100111 (39)n110111 (55)3
001000 (8)I011000 (24)Y101000 (40)o111000 (56)4
001001 (9)J011001 (25)Z101001 (41)p111001 (57)5
001010 (10)K011010 (26)a101010 (42)q111010 (58)6
001011 (11)L011011 (27)b101011 (43)r111011 (59)7
001100 (12)M011100 (28)c101100 (44)s111100 (60)8
001101 (13)N011101 (29)d101101 (45)t111101 (61)9
001110 (14)O011110 (30)e101110 (46)u111110 (62)+
001111 (15)P011111 (31)f101111 (47)v111111 (63)/
補完部分=

Digest 認証

Basic 認証とほとんど同じであり、ユーザ名・パスワードをMD5等のハッシュ化アルゴリズムを用いてハッシュ化させてから送信する。

イメージ図

MD5

暗号など情報セキュリティの用途に適する暗号数理的性質をもつものの 1 つであり、理論的な弱点が存在することが明らかされている。

ハッシュ化

ハッシュ化に似た言葉に暗号化というものがある。 この 2 つの違いは不可逆か可逆化の違いがある。

ハッシュ化は不可逆であり、ハッシュ化した結果(A)から元の文章(B)は求めることができない。(A \nrightarrow B)

しかし、暗号化は暗号化した結果(A)から元の文章(B)を求めることが可能である。(A \leftrightarrow B)

セッションベース認証

Cookie を用いて行う認証方式であり、ベーシック認証や Digest 認証のようにリクエストのたびにユーザー ID とパスワードを送受信する必要がない認証方式をセッションベース認証という。

イメージ図

cookie とは Web サイトを閲覧した時に、入力したデータなどの情報をブラウザが記録する仕組みをいう。 入力したデータを保持していることで、2 回目の訪問時にパスワードなどを入力しなくて済む。

訪れたサイト(ドメイン)から発行される cookie をファーストパーティcookieという。

訪ているサイト以外から発行される cookie をサードパーティcookieという。

トークンベース認証

セッションベースで用いた cookie ではなく、トークを用いて認証を行う方法をいうトークンベース認証という。

イメージ図

認可

権限を付加させる手続きを認可と呼ぶ。

例えば、誰かに家に入る時などは暗黙的に家に入る権利を認可されている。もし、家に入る権利がなければ、不法侵入である。 ある人・もの(インターネットの世界ではサービスのアカウント等)に特定の権限を許可・付与することが認可である。