コーヒータイム -Learning Optimism-

本を読むということは、これまで自分のなかになかったものを取りこみ、育ててゆくこと。多読乱読、英語書や中国語書もときどき。

暗号技術を規格という側面から考えてみる~日経NETWORK『暗号と認証 最強の指南書』

本書『暗号と認証 最強の指南書』は、日経NETWORKに掲載した記事をもとに加筆・修正したムック本。今回は読書感想というより学習メモ。

暗号技術の世界では無線LANほどきっちり規格化されているわけではないという印象を受けたけれど(間違いかもしれない)、規格と認証という視点から私なりに読み解いてみる。

用語一覧はこちらのリンクがよい参考。

暗号用語の体系的整理 | オブジェクトの広場

 

コンピュータネットワークで安全に通信するために暗号は欠かせない。通信プロトコル (*1) で使われる暗号方式は大きく【共通鍵暗号方式 (*2) 】と【公開鍵暗号方式 (*3) 】の2種類に分類できる。前者では暗号化と復号に同じ暗号鍵 (*4) を使用するのに対して、後者では異なる暗号鍵を使用するという本質的なちがいがある。

共通鍵暗号は比較的処理の負荷が小さいが、攻撃者に盗まれればただちに暗号を破られてしまう。このため共通鍵暗号は主に通信データの暗号化、公開鍵暗号は主に共通鍵のやりとりに使用される。「公開」された暗号鍵を盗まれても暗号は破られない。

また、復号できないため厳密には暗号とはちがうけれど、パスワードや電子証明書電子署名など「内容がわからなくても同じだとわかればよい」ものは、それ自体を保存するのではなく、ハッシュ値 (*5) を保存することで、同じものかどうか判別できる。

(*1) 通信プロトコルは通信手順及び内容を規定するもので、送信データの形式、パケット構成などが含まれる。機器間交信においては双方で同じ通信プロトコルを用いる必要がある。公の機関や団体が策定するものも多いが、IEEEなどの通信規格とは違い、必ずしも標準化されているとは限らない。暗号を使った通信プロトコルの例としてはHTTPS (TLS/SSL) 、IPsec、WPA2など。

(*2) 暗号化と復号に「共通」の暗号鍵を使用することから「共通鍵暗号」と呼ばれる。通信文そのものの暗号化に使用されるため、暗号化と復号でコンピュータに負荷をかけすぎないよう、公開鍵に比べれば単純な演算になっていることが多い。共通鍵暗号の代表的なアルゴリズムであるAES (Advanced Encryption Standard) はアメリカ国立標準技術研究所の主導により標準化され、政府標準として認められているもので、AES-128 / AES-192 / AES-256の3種類がある。なお、AESは厳密には通信プロトコルの一部として使用される暗号化アルゴリズムであり、通信プロトコルそのものではない。通信プロトコルとしてはSSL/TLSやWPA2などにAESが利用されている。

(*3) 暗号化のためにやりとりする相手にわたす暗号鍵を「公開鍵」、復号のために手元におく暗号鍵を「秘密鍵」と呼ぶ。共通鍵や認証データなど重要情報のやりとりに使用されるため、複雑な演算になっており、コンピュータにかける負荷は共通鍵よりも大きくなる。公開鍵暗号の代表的なアルゴリズムとしては業界標準RSAがあり、SSL/TLSIPsecなどの通信プロトコルに利用されている。

(*4) 鍵とは暗号アルゴリズムの手順を制御するためのデータのこと。同じ暗号方式でも、利用者毎に暗号化の手順を異なるものにするために使用される。同じ暗号鍵を使い続ければ、暗号文を多数入手してよく使われる平文と比較するなどの手法で解読されてしまう危険性が高まるからである(後に出てくる暗号化アルゴリズムRC4はまさに暗号鍵を更新する仕組みがなかったために破られた)。擬似乱数で用いられるシード(Seedは種を意味しており、いわば「鍵のもと」)も鍵の一種。

(*5) ハッシュ関数を使用することで、どのような長いメッセージからでもあらかじめ決められた長さのハッシュ値を算出できる。ハッシュ長ごとに規格化されている。ハッシュ値から復号することはできず、元のメッセージが1文字異なるだけでもハッシュ値が大きく変わるという特徴がある。強度をあげるためにハッシュ長を上げるという手法がとられるため、ハッシュ長が上がればその分処理負荷が大きくなる。32ビット演算系CPUにはSHA-224とSHA-256、64ビット演算系CPUにはSHA-384とSHA-512の使用が想定されている。なおSHAはSecure Hash Algorithmの略で、アメリカ国立標準技術研究所 (NIST) によって標準のハッシュ関数Secure Hash Standardに指定された一群のハッシュ関数。数字はハッシュ値のビット数。認証のためにある特定文書のハッシュ値を暗号化したものが電子署名である。

 

企業ネットワークの場合は、相手との間に「トンネル」と呼ばれる仮想的な専用通信路を構築して、通信の秘密を保つ。やりとりする相手が正当かどうかを認証 (*6) し、通信データを暗号化することでトンネルを構築する。Webサーバー (*7) との通信ではHTTPSプロトコルであるTLS/SSL (*8) を、インターネットVPN (*9) ではIPsec (*10) などを使用する。

TLS/SSLは❶認証 ❷鍵交換 ❸暗号通信 の3つのステップですすむ。

まず❶ではクライアントはWebサーバーにTLS/SSLによる通信を要求し(https://から始まるアドレスを打ち込めばよい)、サーバーはこの応答としてサーバー証明書を送り返す。クライアントはサーバー証明書から電子署名を取り出し、自分が保持する認証局証明書 (*11) にある公開鍵で復号する。電子署名にはハッシュ値が含まれる。これをサーバー証明書から算出されたハッシュ値と比較し、一致すれば、認証成功である。

❷では、クライアントは鍵のもととなるランダムな値 (*12) を生成し、サーバー証明書に含まれるWebサーバーの公開鍵で暗号化する。これを受け取ったWebサーバーは自らの秘密鍵で復号して、鍵のもとを得る。共有された鍵のもとを用いて、サーバー証明書に記載された方法で、クライアントとWebサーバーの双方で共通鍵暗号に使用される暗号鍵を生成する (*13) 。

❸の暗号通信では、メッセージ自体を暗号化するだけではなく、メッセージのハッシュ値を署名として通信相手に送付する。通信相手はこれを復号し、メッセージのハッシュ値を自分で算出し、署名にあるハッシュ値と比較対照することで、正当性、完全性 (*14) を確認する。

(*6) 認証とは通信の相手が「誰であるのか」を確認・特定することで、英語ではAuthenticationまたはAuthNと表記される。大きく分けて①知識情報(対象のみが知るパスワードなど)、②生体情報(対象の顔認証など)、③所持情報(対象が所有するスマホにSMSを送るなど)の3種類がある。2段階認証はこれらのいずれかを組み合わせる(たとえばパスワード+SMS)。ちなみに認可という似た言葉があるが、特定条件下において対象物(リソース)を利用可能にする(アクセス)権限を与えることであり、認証とは別物。認可は英語ではAuthorizationまたはAuthZと表記される。証明書を発行する認証局は、アメリカ国立標準技術研究所 (NIST)の指定に準じて証明書仕様を定めている。ちなみにNISTはセキュリティについてNIST SP800-171というガイドラインを発行しており、アメリカ政府が情報機器を調達する際にはガイドライン準拠が求められる(逆にいえば、これを満たさなければアメリカ政府と取引はできない)。

(*7) Webサーバとは、クライアントに対してネットワークを通じて情報及び機能を提供するコンピュータやソフトウェアのことで、Webページ運営には必須。クライアントからの要求に応えて管理下にあるデータ(HTMLファイルや画像などWebページを構成するファイル)を送信する。通信にはHTTP (HyperText Transfer Protocol) と呼ばれる通信プロトコルが用いられ、ファイル所在指定にはhttp://~で始まるいわゆるURL (Uniform Resource Locator) が用いられる。個別ユーザー向けにカスタマイズされた情報を提供したり、SSL/TLSなどによるデータの送受信を暗号化するなどの機能を備えたものが多い。

(*8) 厳密にいえばHTTPS (Hypertext Transfer Protocol Secure) はプロトコルではなく、SSL/TLSプロトコルにより提供されるセキュアな接続の上でHTTP通信を行うことを指す。URLはhttps://〜で始まる。また、厳密にいえばプロトコル名はTLS (Transport Layer Security) であるが、SSL (Secure Sockets Layer) と呼ばれることも多い。TLSの元になったプロトコルSSLであり、その名称が広く普及しているための慣習的表記である(本家本元のSSL 3.0は脆弱性が見つかったことにより、RFC7568で使用禁止にされた)。TLSIETF(The Internet Engineering Task Force /インターネット技術特別調査委員会。米政府の後援を受けたインターネット、とくにインターネット・プロトコル・スイート (TCP/IP) の技術面に関するNPOで標準化団体)によって策定された。2022年現在の最新版はTLS 1.3。なお、IETFTLS脆弱性についても報告書を発行しており、TLS1.1以前のバージョンは使用しないよう呼びかけている。SSL/TLSでは複数の暗号化アルゴリズムを選ぶことができるが、IETFは推奨する暗号化アルゴリズムを公表している。

(*9) VPN (Virtual Private Network) は、通信事業者の提供する公衆回線上に、企業拠点間をつなぐ仮想専用回線を構築する技術及びサービスの呼称。専用回線であるから当然第三者が情報を読み取れないものでなければならず、暗号化技術使用が大前提。VPNSSLを使用するものとIPsecを使用するものに大別されるが、IPsec方式ではクライアントにVPN Clientのソフトをインストールする必要があるのに対して、SSLの場合はWebブラウザさえあれば通信可能。

(*10) IPsec (Security Architecture for Internet Protocol) は、データストリームの各IPパケットを認証/暗号化するためのプロトコル群(複数のプロトコルの組み合わせ)。IPsecの規格はIETFのワーキンググループにて策定し、RFCとして公開している。

(*11) Webサーバー側がTLS/SSL証明書をあらかじめ認証局に登録しておく必要がある。証明書には、Webサーバーを運営する法人名や登録住所などの企業情報、次の段階の鍵交換で使用される公開鍵、これらのデータのハッシュ値認証局秘密鍵で暗号化した電子署名が入っている。クライアントは認証局の公開鍵を使用して、秘密鍵で暗号化された認証局のデジタル署名部分の復号を行い、Webサーバーの公開鍵のハッシュ値と比較し、同じなら正当な公開鍵であると判断する。ちなみに代表的な認証局のデジタル証明書はクライアントのブラウザにインストールされており、インストールされていない場合、ブラウザで警告表示されるのが一般的。

(*12) 鍵交換方式により異なるが、RSA方式であればクライアントで生成した一定バイトの初期乱数。

(*13) SSL/TLSの共通鍵はセッションごとに一時的に作る使い捨てで、セッションごとに共通鍵を変えることで機密性を高めている。

(*14) 元のメッセージが1文字異なるだけでもハッシュ値が大きく変わるという特徴を利用したもの。


インターネットVPNで使用されるプロトコルであるIPsecはこれとは異なるやり方をする。IPsecでは、拠点同士をつなぐルーターなどのゲートウェイ機器間で、あらかじめ同じフレーズを登録し、これを利用してトンネルを確立する。最初に❶制御用トンネル、次に❷通信用トンネルを確立する。

❶制御用トンネルでは、ゲートウェイ機器間で通信に使う暗号やハッシュの種類、公開鍵(ここではDiffie-Hellman (*15) と呼ぶ公開鍵暗号の公開鍵)をやりとりする。一方がフレーズと互いの公開鍵、自身に割り振られたIPアドレスを他方に送り、他方は同じフレーズをもつ相手として認証し、制御用トンネルを確立させる。

❷制御用トンネルを確立させたら、通信用トンネルの確立に必要な情報をやりとりする。通信用トンネルの識別子となるSPI (*16) やトンネルの寿命、さらに共通鍵生成に必要なランダムな値(鍵のもと)をやり取りする。最後に鍵のもと、SPI、ランダムな値を使用して共通鍵を生成する。

(*15) 共通鍵暗号方式における鍵の共有方法の1つで、IETFによってRFC 2539として規格化されている。基本的流れはRSAと同様だが、「鍵のもと」として初期乱数ではなく素数を利用する。

(*16) Security Parameters Indexの略。

 

無線LANの場合は、クライアントとアクセスポイントの間だけしか暗号化しないため、アクセスポイントとインターネットの接続にはTLS/SSLなど別の暗号化方式が必要になる。

無線LANではWPA2-CCMP (*17) を使用するべきで、WEP (*18) は絶対に使用してはいけない。WEPやTKIP (*19) で使用される暗号化アルゴリズムRC4は、短時間で解読されてしまう危険性がある。TKIPはパケットごとに暗号鍵を変化させるため多少マシだが、パケットを認識する仕組みな脆弱性があるため、やはり使用してはならない。

無線LANの認証方式にはPSK (*20)EAP (*21) の2種類がある。とくにPSKを使うWPA/WPA2を「WPA/WPA2パーソナル」、EAPを使ってIEEE 802.1X (*22) 認証を行うWPA/WPA2を「WPA/WPA2エンタープライズ」と呼ぶ。WPA/WPA2は「4ウェイハンドシェイク」と呼ばれる4回のやり取りで2種類の暗号鍵を共有する。一つは暗号通信に使う共通鍵を含むテンポラリキー(PTK (*23) )もう一つはアクセスポイントがブロードキャスト/マルチキャスト (*24) するときに使うグループキー(GTK (*25) )である。

(*17) WPA、WPA2、WEPはいずれも無線LANの暗号化規格であり、選択できる暗号化方式及び認証方式が決まっている。WPA/WPA2においてはCCMP(Counter mode with Cipher-block chaining Message authentication code Protocol、あるいはCounter mode with CBC-MAC Protocol。IEEE 802.11で規定される無線LANのための暗号化プロトコルであり、AESを暗号化アルゴリズムとして使用している)、またはTKIPを暗号化方式として選択できるが、脆弱性が確認されているWEPは選択できない。認証方式としてはEAPとPSKを選択できる。EAPとPSKについては後述。

(*18) Wired Equivalent Privacyの略。暗号化方式のひとつ。暗号化アルゴリズムRC4

(*19) Temporary Key Integrity Protokol の略。暗号化方式のひとつ。暗号化アルゴリズムRC4

(*20) PSKはPre-Shared Key、すなわち事前共有鍵。PSKからPMK (Pairwise Master Key) という鍵を生成し、さらにそこからPTK (Pairwise Transient Key) を生成し、PTKを使用して端末およびアクセスポイントを認証する。キーが変わらないWEPとは違い、認証ごと異なる鍵を使用することでセキュリティ強度を上げているが、大元のPSKが漏洩するリスクがある。ちなみにPSK方式ではユーザーIDはなくパスワード認証のみなので、誰がログインしているのかわかりづらいという特徴があるため、ユーザー情報を紐付けで管理したいのであればPSK方式は選ばれない。

(*21) EAPはExtensible Authentication Protocolの略であり、IEEE802.1X認証に使用される。各種の拡張認証方式を利用するための手続きをまとめたものであり、実際に使用される認証プロトコルと組み合わせてEAP-xxxxと呼称される。主にEAP-TLSEAP-TTLS、EAP-PEAPがよく使用される。TLSはHTTPの暗号化プロトコルと同じもの。TTLSとPEAPはほぼ同一であり、PEAPMicrosoftに標準実装されている。ちなみにTTLSの仕様はRFC5281(2008) として公開されているが、PEAPRFC化されていない。このあたりは大手企業にあまり仕様について強い影響力をもたせたくないIETFとの政治的紛糾があったとか。なお、RFCはRequest for Commentsの略で、インターネットについて共有すべきさまざまな事柄(仕様とは限らない)を共有・議論するシステム。学術界における論文のようなものといえるだろうか。

(*22) 認証にはRADIUS(Remote Authentication Dial-In User Service)サーバーを利用する。EAP (RFC2284) よりも RADIUS (RFC2059) のほうが先に制定されたという歴史的経緯があり、EAP の前身である、電話回線用のダイヤルアップのために設計されたPPP (RFC1661) の認証プロトコルをベースに RADIUS が設計されている。このためEAPが認証プロトコルとして広く使用されるようになってからは、RADIUS側の認証機能はしだいに使用されなくなった。

(*23) Pairwise Transient Keyの略。

(*24) ブロードキャストは同じデータリンク内の全宛先を指定して1対多数で行われるデータ通信。マルチキャストは特定のアドレスを指定して、1対複数で行われるデータ通信。

(*25) Group Temporar Keyの略。