1.認証とは
認証とは、人や物などについてその正当性を確認すること。以下の2種類がある。
- ①二者間認証 Authentication
- 被認証者(認証される者)について、認証場所が直接認証をする。
- ②三者間認証 Certification
- 被認証者と認証場所のほかに認証局があり、認証局によって正当性が確認されるような仕組みのことを言う。公開鍵基盤(PKI)は三者間認証の仕組みの一つである。
2.認証の種類
パスワード認証
クリアテキスト認証ともいう。平文でユーザーIDとパスワードを送信し、サーバで認証を行う古典的な方法であり、ネットワーク上をスニファすることによって簡単に解読されてしまうため、危険である。
チャレンジレスポンス認証
ユーザがユーザIDを送ると、サーバがチャレンジコードを送り返す。ユーザはチャレンジコードとパスワードを組み合わせたものをハッシュ値にして、その値を送る。サーバでも同様の処理を行い、送られてきた値が一致 したら認証する。ネットワーク上に流れる情報は不可逆性を持つハッシュ値であるため盗聴されてもパスワードが流出しない。
ワンタイムパスワード
ネットワーク上を流れるパスワードを使い捨てにして毎回変える方式のことをいう。チャレンジレスポンス方式はチャレンジコードは使い捨てになっているが、パスワードは固定である。ワンタイムパスワードはパスワード自体を使い捨てにする。
(1) S/Key
チャレンジレスポンス方式を応用したワンタイムパスワード方式である。ユーザはあらかじめパスフレーズをシーケンス番号の数値分だけハッシュ化した値をサーバに送信しておき、サーバはその値を保持しておく。認証時にユーザーはパスフレーズをシーケンス番号の数値をマイナス1した分だけハッシュ化し、その値をサーバに送る。サーバでは送られてきた数値を一回だけハッシュ化することにより、あらかじめ登録しておいた値
となるか確認し、正しければ認証する。認証後、サーバは認証時に送られて きた値に更新する。
(2) 時刻同期方式
時刻からパスワードを生成するトークン(セキュリティトークン)と呼ばれるデバイスを使用する方式。ユーザはトークン(セキュリティトークン)から生成されたワンタイムパスワードをサーバに送信し、サーバで認証を行う。
バイオメトリクス認証
指紋、光彩、声紋、顔などで認証する方式
3.認証強化方法
2要素認証、多要素認証
記憶、所持、生体の3つを認証の3要素という。これらを組み合わせて認証方法としたものを2要素認証また多要素認証と呼ぶ。
ソルト
利用者が入力したパスワードに追加するランダムな値のこと。
リスクベース認証
ユーザの認証時に普段と異なるかどうか判断し、リスクの高い状況の場合は追加の認証をする方式。
4.ハッシュ関数
入力値に対してハッシュ値と呼ばれる固定長の値を出力する関数。ハッシュ関数は次の性質がある。
- 一方向性
- 暗号化はできても元に戻せないこと。ex.割り算のあまり
- 衝突発見困難性
- ハッシュ値が一致する2つの値を発見することが困難であること。
- 現像計算困難性
- ハッシュ値から入力したデータを推測することが困難であること。
- 第二現像計算困難性
- あるハッシュ値があった場合に、同じハッシュ値となる値を探索・作成することが困難であること(衝突発見困難性と似ている)
ハッシュ関数の種類
- MD5
- 与えられた入力に対して128ビットのハッシュ値を出力する。1991年に作られた古い歴史のあるもので現在でも広く利用されているが、理論的な弱点があり推奨されない。
- SHA-1
- 与えられた入力に対して160ビットのハッシュ値を出力する。NISTが規格化したもので、MD5より復元がしにくいといわれているが、脆弱性が発見され利用は推奨されない。
- SHA-2
- SHA-1の後継で、NISTが規格化している以下のものの総称。
- SHA-224
- SHA-256
- SHA-384
- SHA-512
それぞれSHA-以降の数値のビット数のハッシュ値を出力するもので、ハッシュ値のビット列を伸ばしたものである。SHA-256以上は電子政府推奨暗号リストにも登録されている。
- SHA-3
- SHA-2はコンピュータの性能の向上によりいずれ安全な強度が保てなくなることが見込まれているため、アルゴリズムを抜本的に見直す目論見で公募で選定した。
5.デジタル署名
公開鍵暗号方式の技術をなりすまし、改ざんへの対策のために応用した技術。送信者の秘密鍵で暗号化したものが送信者の公開鍵で復号できるかどうかを検証することで、なりすましや改ざんを検出する。
実際の手順としては、平文をハッシュ化したものを送信者の秘密鍵で暗号化する。そこで作成されるハッシュ値をメッセージダイジェストという。
XMLデジタル署名
XML文書に対してデジタル署名を行う仕組み。2001年にW3C韓国により標準化されている。以下の3種類がある。
- デタッチ署名
- 対象データとは別にXML署名を用意する。
- エンベロープド署名
- 対象データの子要素としてXML署名を埋め込む。
- エンベローピング署名
- XML署名の中に対象データを埋め込む。
公開鍵基盤(PKI)
公開鍵と秘密鍵の鍵ペアが確実に本人のものであることを証明する機構のことを公開鍵基盤(PKI)という。
認証局(CA)
鍵ペアが本人のものであることを証明する第三者機関のこと。ユーザから申請があった認証局は身分証明などで検証を行い、問題がなければデジタル証明書を発行する。認証局内には以下の3つ機関が存在する。
- 登録局(RA)
- デジタル証明書の登録申請を受け付ける。
- 発行局(IA)
- デジタル証明書の発行や執行を行う。
- 検証局(VA)
- デジタル証明書の正当性を検証する。証明書失効リスト(CRL)の管理も行っている。
デジタル証明書
デジタル証明書のフォーマットはITUT勧告 X.509で定義されている。
- バージョン
- X.509証明書のバージョン。現在はv3。
- シリアル番号
- 証明書を発行したCAが割り当てる番号。公開鍵証明の失効確認はシリアル番号で行う。
- 署名アルゴリズム
- 発行者が証明書に署名する際に用いるアルゴリズム。
- ハッシュ関数:MD5、SHA-1、SHA-2など。
- 署名アルゴリズム:RSA、DSA、ECDSAなど。
- 発行者
- CAの名前。
- 有効期間
- 開始時刻と終了時刻が示されている。
- 主体者(サブジェクト)
- 公開鍵を所有する個人や組織の名称。コモンネーム(CN)、国名(C)、組織名(O)などが指定される。
- 公開鍵情報
- 主体者の公開鍵情報。
- 固有の識別子
- 発行者と主体者の識別子が記載される。
- 拡張領域
- v3で規定された各種の識別子が記載される。
出題ポイントとしては、主体者の
公開鍵情報があることと、
有効期間が示されていること。
証明書失効リスト(CRL)
誤発行やセキュリティインシデントなどで無効となったデジタル証明書のリスト。デジタル証明書の有効性はこのリストを確認することによって検証する。証明書失効リスト(CRL)もX.509によるフォーマットが存在し、証明書のシリアル番号や失効日時が記載されている。
OCSP
証明書失効リスト(CRL)を取得するためのプロトコル。
証明書の種類
証明書にはサーバ証明書とクライアント証明書がある。サーバ証明書には認証レベルにより3つの種類がある。
- ドメイン認証(DV)
- ドメイン名とその登録情報だけで審査を行う。
- 企業認証(OV)
- ドメイン名に加えて、組織の実在確認も行われる。
- EV認証
- ドメイン名、組織の実在確認に加え、担当者の在籍確認が行われる。
GPKI
政府認証基盤。PKIはプライベートでも構築できるが、政府も提供している。
6.タイムスタンプ
電子文書に時刻情報を挿入して、その時点で文書が存在していたことを証明するもの。PKIでは他人による改ざんは検知できるが、本人による改ざんは検知できない。タイムスタンプはその点を対応したものである。タイムスタンプの規格は複数存在するが、最も普及しているのはRFC3161によるものである。タイムスタンプで証明されるものは次の二つ。
- 存在証明
- ある時刻に文書が存在していたこと。
- 完全性証明
- ある時刻に存在していた文書が、それ以降書き換えられていないこと。
二つの第三者機関が存在する
手順としては以下の通り
- ユーザーは電子文書のハッシュ値を生成する。
- ハッシュ値を時刻認証局(TSA)に送る。
- 時刻認証局(TSA)は受け取ったハッシュ値と時刻配信局(TA)からの時刻からタイムスタンプトークンを作る。タイムスタンプトークンは時刻認証局(TSA)の秘密鍵で署名される。
- 時刻認証局(TSA)はタイムスタンプトークンをユーザーに返送する。
返送されてきたタイムスタンプトークンは保管し、ユーザーが必要な時に検証する。
検証方法
電子文書から再度ハッシュ値を生成し、タイムスタンプトークンを時刻認証局(TSA)の公開鍵で復号してハッシュ値を取り出す。双方のハッシュ値が一致すれば、タイムスタンプトークンを生成した時刻に文書が存在し、書き換えられていないことが証明される。
7.認証サーバ
認証サーバとは、ユーザIDやパスワードなどを蓄積し、アクセスポイントからの問合せに応じて認証を行う役割を持つサーバのことを言う。
アクセスポイント
無線LANのアクセスポイント、リモートアクセス(RAS)サーバなどを指す。
RADIUS
アクセスサーバと認証サーバを分離した認証プロトコル。古くからダイヤルアップなどで使用されていたが、現在ではIEEE802.1Xなどでの活用がみられる。
- RADIUSサーバ
- 認証サーバのこと。
- RADIUSクライアント
- RASサーバなどのこと。IEEE802.1Xではオーセンティケーターと呼ぶ。
- ユーザー
- 認証してもらうクライアントのこと。IEEE802.1Xではサプリカントと呼ぶ。
Kerberos
1980年代にマサチューセッツ工科大学において開発された認証方式。主にシングルサインオンを実現する認証方式として利用されており、Ver5はRFC1510として登録されている。Kerberosは暗号化アルゴリズムを選択できる点とレルムを構築する点に特徴がある。
- 鍵発行局(KDC)
- 認証システムに参加するコンピュータ(クライアント・サーバ)をあらかじめ登録しておくサーバ。鍵発行局(KDC)は自分の管理しているレルムに所属するプリンシバルとその鍵データを保管している。
- プリンシバル
- KDCが管理する各コンピュータのこと。
- レルム
- プリンシバルの集合体のこと。
鍵発行局(KDC)の構成
鍵発行局(KDC)は以下の3つで構成されている
- 認証サーバ(AS)
- クライアントの認証を行う
- チケット発行サーバ(TGS)
- ユーザーにアクセス許可を行い、チケット(暗号化データ)を発行する。
- 鍵データベース(KDB)
- プリンシバルの共通鍵を管理する。
Kerberosの認証プロセス
- プリンシバルが認証サーバ(AS)にチケット許可チケット(TGT)を要求する。
- 認証サーバ(AS)は鍵データベース(KDB)を調べて、正当なプリンシバルであればTGTを返信する。
- プリンシバルはTGTをチケット発行サーバ(TGS)に送信し、サーバの使用許可チケットを要求する。
- チケット発行サーバ(TGS)TGSはサーバ使用許可チケットとサーバ通信に使う共通鍵を返信する。
- プリンシバルとサーバが通信を始める。
8.SSL/TLS
SSL
SSLはインターネット環境で広く利用されているセキュリティ通信プロトコルで、暗号化と認証の機能を提供する。1990年代にネットスケープ社が開発したもので、SSL1.0は発表前に欠陥が見つかったため、最初に公開されたのはSSL2.0となった。その後、SSL3.0が発表されたが、その次のバージョンはTLSという名前となった。現在では脆弱性が指摘されたためTLSの利用が進んだが、SSLの名前も定着しているため、混同されたり併記されたりしている。
TLS(Transport Layer Security)
SSLの後継として現在普及しているセキュリティ通信プロトコル。1990年代後半にIETFがTLS1.0として標準化し、現在はTLS1.3が最新である。
TLS 1.2の通信の流れ①(TLSハンドシェイクプロトコル)
TLS通信の開始時に使用されているプロトコルがTLSハンドシェイクプロトコルという。
- ①Client Hello
- ブラウザが接続したいサーバに送るメッセージをClient
Helloという。メッセージの中には、以下の情報がある。
- TLSバージョン
- セッションID
- 乱数(クライアント)
- 暗号スイート
- ②Server Hello
- サーバがClient Helloに対して返信するメッセージをServer Helloという。Client
Helloの暗号スイートを確認し、使用する暗号スイートを決定する。メッセージには以下の情報がある。
- TLSバージョン
- セッションID
- 乱数(サーバ)
- 暗号スイート(決定したもの)
- ③サーバ認証
- サーバがクライアントにサーバ証明書を送付する(Server Certificate)。クライアントはその証明書でサーバ認証を行う。
- ④プリマスターシークレット
- クライアントは証明書から公開鍵を取り出し、プリマスターシークレットを作成し、クライアントに送付する(Client
Key Exchange)。
- ⑤マスターシークレット
- この時点で以下の3つの情報がある。
- プリマスターシークレット
- 乱数(クライアント)
- 乱数(サーバ)
この情報をもとにマスターシークレットを生成する。マスターシークレットからは、暗号化鍵、MAC鍵が作成され、以降はこれらの鍵を使用して通信が行われる。
TLS 1.2の通信の流れ②(TLSレコードプロトコル)
TLSハンドシェイクプロトコルが正常に終わり、生成された暗号化鍵で通信を行うプロトコルをTLSレコードプロトコルという。
(クライアント→サーバの場合)
- 送信したいHTTPメッセージにMAC鍵を組み合わせて、ハッシュ関数でMACを作成する。
- HTTPメッセージと①で作成したMACを組み合わせて、暗号化鍵を使用してHTTPSメッセージを生成する。
- HTTPSメッセージをサーバに送信する。
- サーバは暗号化鍵を使用して復号する。復号するとHTTPメッセージとMACを取り出すことができる。
- HTTPメッセージとMAC鍵を組み合わせて、ハッシュ関数でMACを生成する。ここで送信されてきたMACとサーバ側で作成したMACが一致すれば、改ざんがされていないことがわかる。
SSLの脆弱性
- ダウングレード攻撃
- バージョンロールバック攻撃
- POODLE攻撃
9.認証の省力化
クッキー
クライアントが認証情報をクッキーに保存しておくことで、省力化を行う。ただし、クッキーはテキストファイルであるため簡単に窃取できてしまう。そのため、次の対策をとる
- HTTPのSet-CookieヘッダにSecure属性を指定する
- HTTPSを利用している時だけクッキーをサーバに送信するようになる。
- Expires属性を指定する
- 有効期限を指定できる。
リバースプロキシ
認証をリバースプロキシと呼ばれる中継サーバで行い、そこに認証情報を保存することによって、ユーザはWebサーバごとに認証を行う必要がなくなる。ただし、この方式はリバースプロキシサーバに負荷がかかる。
SAML
インターネット上の異なるサービス間で認証情報をやり取りするために設計された技術。シングルサインオンを行うために使用される認証連携技術である。XMLベースのマークアップ言語であり、プロトコルにはHTTPやSOAPが使用される。OASISによって標準化され、現在の最新版は2005年に策定されたSAML v2.0である。
SAML認証の流れ
- ユーザーがサービスを受けたいサーバ(SP)にアクセスする。
- SPはユーザーにIdPにアクセスするように要求する。SPとIdPはあらかじめ信頼関係を結んでいる。
- ユーザーはIdPにアクセスする(リダイレクトされるので自動的にアクセスすることになる)。
- IdPは認証がOKであればアサーションを生成し、ユーザーに送信する。
- ユーザーはSPにアサーションを提示する。
- SPはユーザーにサービスを提供する。
アサーション
SAMLにおける基本概念の一つで、ユーザーの認証情報や属性などをXMLで記述したものである。アサーションにはステートメントと呼ばれる情報が記述されており、以下の3種類がある。
- 属性ステートメント
- サブジェクト(認証される対象、人間やクライアントなど)の属性を記述する。IDや、名前、属性、所属など。
- 認証ステートメント
- 認証を行ったサーバや、認証した時刻などを記述する。
- 認可ステートメント
- サブジェクトに許可した内容を記述する。
SAML認証の構成要素としては以下の2つ。
- アイデンティティプロバイダ(IdP)
- サブジェクトが最初に認証を受けるサイト。認証をするところ。
- サービスプロバイダ(SP)
- サービスを利用させるサイト。
Oauth
複数のWebサービスを連携させるための仕組み。特に、認可を行うことためのプロトコルとして利用される。認可とは、利用者に何をしてよいかという権限を与えることである。Oauthには4つのロールが存在する。
- リソースオーナ
- リソースの所有者。
- リソースサーバ
- リソースが保存されているサーバ。
- クライアント
- リソースを要求するシステム。
- 認可サーバ
- クライアントを認証し、認可を与えるサーバ。認可はトークンの形で発行される。