本書をご購入いただき、誠にありがとうございます。本書はユーザー認証についてまとめた書籍です。ユーザー認証について概要を理解してもらうことが本書の最終的なゴールになります。また、実際にデモやクラウドサービスを使用して、最新の認証であるパスワードレスを体験してもらえるようになっています。
世の中ではクラウドサービスの利用が進み、オンラインでいろいろなことができるようになってきました。それに伴い、様々な場面でユーザー認証を利用する機会も増えてきています。昔に比べて非常に便利になったと思う反面、認証の仕組みも多種多様になってきており、認証不備が原因でサイバー犯罪に発展する事態も起きています。昔であればITエンジニア/セキュリティーエンジニアだけが知っていればよかったことも、企業のIT部門の方や、それこそ一般の人も理解したほうがいい状況が増えてきていると感じています。このような背景が本書を執筆したきっかけです。
本書を読むことで、次のことについて学習できます。
・認証、認可の違いを理解する
・認証の要素や種類を理解する
・クラウドサービスでよく使われている認証方式を理解する
・認証を強化する方法を理解する
本書を読んだだけでは、次のことは学習できません。
・本書で紹介した認証の歴史的な背景や仕組みの詳細(正確な仕様)
・本書で紹介した認証を活用したサービスの詳細や優劣(特定のサービスのメリット・デメリット)
・クラウドサービス以外のユーザー認証(たとえばActive Directoryによる認証など)
・ユーザー以外の認証(たとえばシステム・デバイスの認証、Wi-Fi認証、IoT機器等の認証など)
・認証の基礎技術となる暗号・デジタル署名・証明書・ハッシュなど1
・Certification(Certificationを日本語に訳すと「認証」「認定」となりますが、本書の対象である「認証」は「Authentication」の方です)
本書を読んで上記にも興味を持たれた方は、別の書籍か参考文献で詳細をご確認ください。
本書は次の方を対象として執筆しております。しかし、実際には誰が読んでも問題ありません。
・認証に興味があるITエンジニア、セキュリティーエンジニア(主に経験の浅い方)
・認証に興味があるITコンサルタント、セキュリティーコンサルタント(認証について語る可能性のある方)
・認証系のシステムや、システムの認証に携わるシステム部門の担当者
※認証系のシステムを開発している方にとって、本書は物足りない内容となっているかもしれませんので、その場合はぜひ本書より専門的な書籍をご利用ください。
本書は次の構成となっております。前から順番に読むことを想定して書いておりますが、興味があるところからお読みいただいても問題ありません。
・はじめに
本章です。本書の概要について説明します。
・第1章「認証とは」
本書の中心テーマである「認証」の用語について説明します。また、認証と関連の深い「認可」の用語についても説明します。さらに、認証・認可の成功・失敗について、図を用いて説明します。
・第2章「認証の構成について」
認証を構成する「認証の要素」と「認証の種類」について説明します。具体的には「認証の要素」は「Something you know」「Something you have」「Something you are」の3つ、「認証の種類」は「記憶シークレット」「帯域外デバイス」「OPTソフトウェア/デバイス」「暗号ソフトウェア/デバイス」「バイオメトリクス」の5つについて説明します。また、MFA/2FAやフィッシング耐性MFAについても説明します。
・第3章「認証方式:パスワード」
パスワードを使用した認証について、図を用いて説明します。
・第4章「認証方式:SAML」
SAMLとは何かについて説明します。また、SAMLの中核となるIdP/SP、IdP-Initiated/SP-Initiatedについて、図を用いて説明します。
・第5章「認証方式:OIDC」
OIDCとは何かについて説明します。また、OIDCの中核となるOP/RP、フローについて、図を用いて説明します。
・第6章「認証方式:FIDO」
FIDOとは何かについて説明します。また、FIDOの中核となるUAF、FIDO2(Platform Authenticator/Roaming Authenticator)について、図を用いて説明します。
・第7章「認証を強化するには」
パスワード認証の問題点を説明し、その対策として認証を強化する方法について説明します。具体的には「パスワードポリシー」「パスワードマネジャー」「ID連携」「MFA/2FA」「パスワードレス」の5つについて説明します。
・第8章「パスワードレス認証を体験しよう」
WebAuthn.ioとOkta(Developer)を使用し、パスワードレス認証を体験します。
・付録A「参考資料」
本書を執筆する際に参考にしたURL、文献の一覧です。
・付録B「公開鍵暗号による暗号と署名」
この次に説明するPasskeysを理解するために必要な公開鍵暗号と署名(デジタル署名)について説明します。
・付録C「Passkeys(パスキー)」
FIDOの新しい形態であるPasskeys(パスキー)について説明します。
・付録D「Passkeysを体験しよう」
Passkeys.ioを使用し、Passkeysによるパスワードレス認証を体験します。
・付録E「IdentificationとIdentity Proofing」
認証・認可と関連が深いIdentificationとIdentity Proofingについて、簡単に説明します。
・付録F「Special Thanks !」
本書作成の際に使用したツール群です。
・おわりに
本書のあとがきです。
本書では大枠を理解してもらうことを優先しているため、仕様の詳細説明を省いたり、簡略化している場合があります。正しい仕様や詳細を知りたい方は、オリジナルの文書や書籍、付録の参考文献をご利用ください。
本書は情報の提供のみを目的としております。本書の内容を用いて何かする場合、必ずお客様ご自身の判断と責任でお願いします。著者はいかなる責任も負いません。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
本書を購入してくれた皆様に感謝いたします。ありがとうございます。
本書の執筆の機会を与えてくれた「技術書典」2に感謝いたします。私が本を書きたいなと思っていたタイミングで技術書典13のサークル参加申し込みが始まり、かつ審査結果が「合格」になったおかげで本書を書くことができました。ありがとうございます。
技術書典版を読んで、SNS等で様々なコメントを頂いた皆様に感謝いたします。知識の間違いや勘違いに気づくことができ、本書を修正することができました。おかげさまで、よりよい書籍に一歩近づけた気がします。ありがとうございます(今後もアップデートを続けますので、引き続きよろしくお願いします)。
本書の商業出版化の機会を与えてくれた「インプレスR&D」3と編集長の山城敬さんに感謝いたします。山城さんが技術書典13で私の本を見つけてくれたおかげで、本書をリリースすることができました。ありがとうございます。
そして最後に、私の執筆を温かく見守ってくれた家族(娘と妻)に感謝いたします。ありがとうございました。
本章では、本書全般で登場する「認証」について説明します。また、認証の説明の際によく登場する「認可」との違いについても説明します。
認証について説明します。デジタルアイデンティティ領域で有名な文書「NIST SP 800-63-3」1のAppendix A-Definitions and Abbreviationsによると、Authentication(認証)は、
Verifying the identity of a user, process, or device, often as a prerequisite to allowing access to a system's resources.
と定義されています。「システムリソースへのアクセスを許可する前提条件として、ユーザー、プロセス、デバイスのアイデンティティを検証する」という意味です。本書ではユーザー認証について説明しますので、「ユーザーのアイデンティティを検証する」という意味合いになります。さて、それではどのように検証するのでしょうか?先ほどの文書には、
Digital authentication establishes that a subject attempting to access a digital service is in control of one or more valid authenticators associated with that subject's digital identity.
という記載があります。「デジタルオーセンティケーションは、デジタルサービスにアクセスしようとしているサブジェクトが、サブジェクトのデジタルアイデンティティに紐づくひとつ以上の有効なオーセンティケーターを制御していることを確立する」という意味です。このままだとわかりにくいため、解説します。最初に「デジタルオーセンティケーション」ですが、これはデジタルな仕組みによる認証(つまりアナログではない認証)という意味です。今回テーマとしているクラウドサービスやインターネットなどはITを駆使したものとなるため、デジタルな世界です。これらの認証は「デジタルオーセンティケーション」に該当します。次に「デジタルサービス」ですが、これもデジタルな仕組みによるサービスという意味で、クラウドサービスやインターネットを利用したサービスが該当します。「サブジェクト」は人や組織、デバイスなどを指します。本書では「ユーザー」とするのが適切です。最後に「オーセンティケーター」ですが、ここではいったん「パスワード」とご理解ください。オーセンティケーターの種類については「2.2 認証の種類」で詳しく説明します。
ここで先ほどの「検証」に戻ります。「ユーザーのアイデンティティを検証する」とは、ユーザーに紐づくパスワードをユーザーが制御できているか確認すること、となります。きちんと制御できていれば、ユーザーのパスワードを知っているのは本人だけになりますので、ユーザーのパスワードが正しいかどうか確認することで、ユーザーのアイデンティティを検証できることになります。これらを踏まえて、本書では「認証」を
(入力したパスワードが正しいかどうか確認し)本人であると判断すること
という意味で使用します。
認可(Authorization)について説明します。先ほどの文書によると、Authorizeとして次のように定義されています。
A decision to grant access, typically automated by evaluating a subject's attributes.
前半部分は「アクセスを許可する決定」という意味です。ユーザーがクラウドサービスにアクセスした際、そのユーザーが(リソースに)アクセスできるかどうか、アクセスできる権利を持っているかどうか、判断することです。そしてその根拠となるものが後半部分の「サブジェクトの属性を評価」です。サブジェクトが持っている属性を確認し、適切であると判断された場合にアクセスが許可されます。これらを踏まえて、本書では「認可」を
(適切な権限を持っているか確認し)リソースアクセスを許可すること
という意味で使用します。
まとめると、認証との認可は次の通りです。
No | 用語 | 本書での定義 |
1 | 認証 | (入力したパスワードが正しいかどうか確認し)本人であると判断すること |
2 | 認可 | (適切な権限を持っているか確認し)リソースアクセスを許可すること |
認証と認可の違いを図を用いて説明します。次の3つのパターンで説明します。
・認証と認可の両方が成功
・認証が失敗
・認可が失敗(認証は成功)
ここでは、あるユーザー(利用者)が、自分のパソコンからクラウドサービスにアクセスしてサービスを利用する場合を例に説明します。
最初のパターンです。ユーザーはパソコンからクラウドサービスにアクセスします(下図①)。次にユーザーはクラウドサービスのログイン画面でIDとパスワードを入力します(下図②)。入力後ログインボタン(あるいはEnterキーなど)を押すと、ID/パスワード/権限等がクラウドサービス側でチェックされ、クラウドサービスの初期ポータル画面(ようこそ画面)が表示されます(下図③)。
次のパターンです。ユーザーはパソコンからクラウドサービスにアクセスします(下図①)。次にユーザーはクラウドサービスのログイン画面でIDとパスワードを入力します(下図②)。今回はパスワードを間違って入力したと仮定します。入力後ログインボタン(あるいはEnterキーなど)を押すと、ID/パスワード/権限等がクラウドサービス側でチェックされ、エラーメッセージが表示されます(下図③)。一般的な場合、パスワードが間違っていたとしても、エラーメッセージは「IDまたはパスワードが間違っています」というような、失敗原因がIDなのかパスワードなのか特定できないような内容になっています(「1.4 認証の失敗原因を詳細に説明しない理由」を参照してください)。
最後のパターンです。ユーザーはパソコンからクラウドサービスにアクセスします(下図①)。次に、ユーザーはクラウドサービスのログイン画面でIDとパスワードを入力します(下図②)。今回は権限がないユーザーであると仮定します。入力後ログインボタン(あるいはEnterキーなど)を押すと、ID/パスワード/権限等がクラウドサービス側でチェックされ、エラーメッセージが表示されます(下図③)。
クラウドサービスのログイン画面でIDとパスワードを入力してログインボタン(あるいはEnterキーなど)を押した際、エラーメッセージとして「IDまたはパスワードが間違っています」と表示されることがあります。このエラーメッセージだと、何が間違っているのかわかりません。なぜIDが間違っているのか、あるいはパスワードが間違っているのか、教えてくれないのでしょうか?
不親切に思えるかもしれませんが、これも立派なセキュリティー対策の一環なのです。サイバー犯罪を行う攻撃者は、不正に入手したIDやパスワードを使用して、クラウドサービス等に不正ログインを試みます。もし彼らが不正ログインを試みた際にエラーメッセージとして「IDが間違っています」あるいは「パスワードが間違っています」と表示されたら、どうなるでしょうか?おそらく攻撃者は「パスワードは合っているかも」「IDは正しいのかも」と考え、より高精度な不正ログインを実施することでしょう。エラーメッセージをユーザーにわかりやすいように親切にすることで、こういった攻撃者に攻撃のヒントを与えてしまう可能性があるのです。このような事態を避けるため、ログイン時のエラーメッセージは多少不親切な内容になっています。なお、昔は「IDが間違っています」あるいは「パスワードが間違っています」と表示するクラウドサービス(当時はホームページとかウェブサイトとか呼んでいました)もありました。今はそんなところは存在しないと思います(が、もし存在したら自分の個人情報を登録するのは控えた方がよいかもしれませんね)。
なお、こういった攻撃に対抗する手段も存在します。「パスワードの入力試行回数を制限する」「パスワードを一定回数入力ミスしたら一定時間間隔を空けないとログイン試行できないようにする」「MFA/2FAを設定する」などです。詳しくは「7.2 認証を強化する方法」をご覧ください。また、最近はパスワードを使用しない認証も対策として有効です。パスワードを使用しない認証のひとつとしてFIDOがあります(第6章「認証方式:FIDO」をご覧ください)。