食べる! SSL! ―HTTPS 環境 構築 から 始める SSL 入門

こんにちは、黒糖です。

今回、読みました本はこちら。

それでは、以下要約(個人的)です。

【1】2014年4月、Heartbleed、心臓出血という名称のソフトウェア・バグが話題となった。これはOpenSSLの脆弱性である。

【2】幅広いセキュリティの考え方に共通するのは、機密性(Confidentiality)、完全性(Integrity)、可用性(Availability)からなる’CIA’と呼ばれる3つの要素であり、これらを情報の特性に応じて適切なレベルで維持する必要がある。

【3】機密性(Confidentiality)とは、情報が意図した相手以外に漏れていないことを示す。機密性を担保する考え方の中に、エンドポイント真正性という概念が有り、エンドポイント真正性が保たれているということは、通信の末端(エンドポイント)が確かに意図した相手であることをわかっている状態を指す。

【4】エンドポイントには2つの認証(受信者認証と送信者認証)がある。

【5】完全性(Integrity)とは、情報が誰にも改ざんされていないことを示す。送信者が送ったものが改ざんされずに受信者の元に受信される状態が、完全性が保たれている状態と言える。

【6】可用性(Availability)とは、使用可能であると想定されている状況において使用したいときに使用できることを示す。システムを停止させないことは一見、セキュリティとは関係ないもののように思えるが、サーバに過度な負担をかけてダウンさせる「Denial od Service(DoS)攻撃」は可用性を脅かすものとして広く知られており、セキュリティの観点において対策が不可欠。

【7】脅威モデル(Threat Model)とは、情報を何から守るべきか、攻撃者がどのような攻撃を仕掛けてくるかを理解しやすいようにモデル化する考え方。代表的な脅威モデルの考え方にMicrosoft社の’STRIDE’があり、6つの驚異の頭文字をとっている。

【8】なりすまし(Spoofing)とは、誰かのふりをして、不正に情報に関与することを指す。IPスプーフィング、フィッシング、パスワードクラック、ソーシャルエンジニアリング等がその代表例。

【9】データの改ざん(Tampering)とは、データの書き換えや破壊を指す。特定企業のWebサイトを書き換えて、マルウェアを埋め込むことで、そのWebサイトの閲覧者をマルウェアに感染させることがイメージしやすい。会計帳簿を事実と異なる数字に変えて粉飾決算するなど意図的なものも改ざんに含まれる。

【10】否認(Repudiation)とは、ある行為者が自身がした振る舞いについて認めず否定をすること。これを防止するために「電子署名」やエンドポイント真正性の認証(送信者認証/受信者認証)が活用される。

【11】情報漏洩(Information Disclosure)とは、見せることを意図していない相手に情報が漏れてしまうこと。

【12】サービス不能(Denial of Service)とは、大量のリクエストやデータを送信し、使用できない状態にすること。複数のネットワークに分散するコンピュータからDoS攻撃を仕掛けさせる、分散型サービス不能(Distributed DoS、DDoS)攻撃という手法も一般的。

【13】権限の昇格(Elevation of Privilege)とは、本来はアクセス権限のないユーザにアクセス権が与えられてしまうこと。

【14】情報の特性に合わせて、例えば’CIA’の観点から、’STRIDE’のそれぞれの脅威に対して、どのようにシステムや情報そのものを守るかについて考えることがセキュリティでは肝心。

【15】意図したメンテナンス(例:毎週日曜日の0時~1時)などは、可用性の要件には抵触しない。

【16】データ通信のセキュリティでは以下の4点に気を付ける。<1>盗聴されてもデータが読めないようにする。<2>改ざんされてもそれを検知できるようにする。<3>なりすましされてもそれに気づけるようにする。<4>否認されないように、本人でしか送付できない情報形式にする。

【17】共通鍵暗号方式で必要な鍵数は「n(n-1)/2」、公開鍵暗号方式で必要な鍵数は「2n」。

【18】共通鍵暗号方式と公開鍵暗号方式を組み合わせた「ハイブリッド暗号方式」は、SSLプロトコルで利用されている。

【19】改ざんの対策として、「MAC(Message Authentication Code)、メッセージ認証符号」があり、データの完全性を保証するために使用し、任意のデータと共通鍵を使って、ある関数(MAC関数)を用いて計算した値(MAC値)を合わせて送信する。

【20】MAC関数の性質として、あるデータからMAC値を計算した時には同じMAC値になること、MAC値からあるデータを求めることが計算量的に困難であることが求められる。

【21】なりすまし、否認防止の対策としてデジタル署名を用いる。これは公開鍵暗号方式の逆であり、秘密鍵でデータを暗号化し、公開鍵で復号する。

【22】SSLプロトコルでは以下の3つの機能を提供する。<1>ハイブリッド暗号方式による情報の暗号化、<2>MAC関数による改ざん検知、<3>デジタル署名による通信相手の認証

【23】SSL通信を実現する為のプログラムでメジャーなのはオープンソースのOpenSSL。通信を保護するプロトコルはSSLだけではなく、他にもSSH、IPsecなども存在するが、保護できるデータの層や、内容、用途が異なる。

【24】SSLの流れは大きく分けると、前半がハンドシェイク、後半がデータ転送である。

【25】ハンドシェイクフェーズの目的は3つ(「暗号化アルゴリズムの同意」、「鍵の確立」、「認証」)であり、以下の4ステップで実現している。<1>使用するアルゴリズムの同意、<2>サーバの認証、<3>データ転送で使用する鍵の確率、<4>ハンドシェイクが正しく行われたことの確認

【26】合意するアルゴリズムは「SSLのバージョン」、「サーバ認証アルゴリズム」、「鍵交換アルゴリズム」、「データ転送で使用するデータ保護用の共通鍵暗号方式アルゴリズム」、「データ転送で使用するデータの完全性を確認するためのMACアルゴリズム」、「圧縮アルゴリズム」であり、これらを「暗号化スイート」というひとまとまりで管理する。

【27】SSLプロトコルは「SSL Handshake Protocol」と「SSL Record Protocol」という二層から構成され、ハンドシェイクの完了後は「SSL Record Protocol」は一定の長さごとに分割される。

【28】SSLプロトコルはOSI参照モデルのセッション層(第5層)に位置するため、それより階層は暗号化もしなければ保証もしない。

【29】SSLはNetscape Communications社(現 AOL Inc.)によって、開発された「通信上のセキュリティを実現するためのプロトコル」であり、SSL3.0以降はRFCにも掲載があり、通信上のセキュリティとして、デファクトスタンダードとなっている。

【30】SSL1.0は、完全性がないRC4を使用すると攻撃者が平文で改ざん可能で再送攻撃への耐性がなかった。また、SSL1.0にシーケンスナンバーとチェックサムを付けた設計が考えられたが、チェックサムがCRC(Cyclic Redundancy Cheek)という不可逆でも衝突回避型でもないものが使用されていた。

【31】SSL2.0はSSL1.0の複数個の問題を改善(チェックサムをMD5にする等)したもので、大方の機能を充足できているが、チェーン証明書が使用できなかったり、ハンドシェイク時の提示アルゴリズムで最弱のアルゴリズムを選択させる攻撃が検知できなかったりと問題はあった。

【32】SSL3.0は、1995年にSSL2.0の問題解消と機能追加を実施して発表された。

【33】TLS1.0は、1999年にRFC2246としてIETFから発表された。SSL3.0とあまり変更がないとも言われがちだが、暗号化アルゴリズムとして、DH、DSS、3DESのサポートを必須としたことは大きな変更であった。

【34】TLS1.1は、2006年にRFC4346として策定。

【35】TLS1.2は、2008年にRFC5246として策定されており、いずれも暗号の強度を高めるなど、変化し進化し続ける攻撃手法への対応が主であった。

【36】FTPS(FTP over TLS/SSL)は、データ転送で使用されるFTPプロトコルをTLS/SSLプロトコルで安全を保証して使用するプロトコル。FTPのwell-knownポートはデータ転送ポートが20、制御ポートが21だが、FTPSでは、データ転送ポートが989、制御ポートが990となっている。

【37】SMTPS(SMTP over TLS/SSL)は、メール送信で使用されるSMTPプロトコルをTLS/SSLプロトコルで安全を保証して使用するプロトコル。SMTPSは「ポートの分離」、「上方向交渉」と実装方法が2種類あり、前者はSMTPS、後者はSTLS/STARTTLSと呼ばれる。前者の場合はSMTPSのwell-knownポートは465だが、後者の場合は通常のSMTPと同様に25/587である。

【38】SSL-VPNは、VPN(Virtual Private Network)をTLS/SSLプロトコルで実現するプロトコル。SSL-VPNでは、IPsecと異なり、専用ソフトが必要なくSSLが実装されている通常のブラウザで使用できるため、導入コストが安く、様々な環境で使用できる特徴がある。

【39】IPsecはセッション層(第5層)よりも下位のネットワーク層(第3層)で共通鍵暗号方式を採用している。そのためSSLと比べて暗号化・復号化が高速なため、VPNなどではよくIPsecが利用される。

【40】S/MIMEはメールにデジタル署名を付加した上でメッセージを暗号化し、エンドトゥエンドでの通信を保護する。エンドトゥエンドというところがSMTPSとの大きな違い。

【41】SSLプロトコルで暗号化されるのは2点のマシンで通信している間の情報だけであり、マシンに到着し復号化されて保存された情報に対しては、SSLで保護できない。

【42】鍵生成関数(Key Derivation Function)は、KDFと表現される。

【43】IETF(Internet Engineering Task Force)は、インターネット技術の標準化を策定・推進する組織。

【44】DES(Data Encryption Standard)は、「データ標準規格」というその名の通り、アメリカ合衆国の旧国家暗号規格であった。1970年代初めに規格が考えられはじめ、1976年に標準となった。ブロック暗号型と呼ばれる、固定長の平文を入力とし、平文と同じ長さの暗号文を出力する方式である。ただし鍵長が短いため1999年には総当たり攻撃によって22時間で解析できることが示された。

【45】3DESはDESを強固とするために、DESを3回繰り返す。3回暗号化(復号化)を行うためDESの約3倍の時間がかかる。解読されにくい暗号方式となっており、現在の主流。

【46】AES(Advanced Encryption Standard)は、記述の進歩により安全性の低下したDESを継ぐアメリカ合衆国の新暗号規格として公募された共通鍵暗号方式。鍵長は128、192、256ビットから選ぶことができ、DESより強固で3DESより高速。

【47】RC4(Rivest Cipher4)は、1987年に開発されたストリーム暗号。2013年には中間者攻撃を受けると情報を復号化されてしまう恐れが指摘されている。

【48】RSAは桁数が大きい2つの素数を掛け合わせた数からその2つの素数を求めるという「素因数分解問題」が答えを求めるのに現実的な時間では困難であることを安全性の根拠とした方式。

【49】DH/DSS(Diffie-Hellman key exchange、DH鍵交換/Digital Signature Standard、デジタル署名標準)は、DHが鍵合意のために、DSSがデジタル署名のために使用される。二つを組み合わせることでRSAと同じ公開鍵暗号方式の働きをする。

【50】ある入力に対して常に同じ(基本的には入力よりも短い)値を出力し(決定性)、入力に対して結果が偏ったりせず一様に分布する(一様性)などの性質を持った関数を「ハッシュ関数」もしくは「ハッシュアルゴリズム」と呼ぶ。

【51】SSL通信においては、MACアルゴリズムとしてハッシュアルゴリズムが用いられる。

【52】ハッシュアルゴリズムとしては、ハッシュ値から入力値が求められないこと(一方向性)や、同じハッシュ値を得られる入力値を求めることが困難であること(原像計算困難性、第二原像計算困難性)や、異なる入力値から同じハッシュ値が得られにくいこと(衝突困難性)で安全性を評価する。

【53】MD5(Message Digest 5)は、ハッシュアルゴリズムの1つで、主要なLinuxディストリビューションに標準で含まれていることから、手軽に扱えるが、脆弱性があるので推奨されない。

【54】SHA-1(Secure Hash Algorithm)は、ハッシュアルゴリズムの1つで、米国の国立標準技術研究所(NIST、National Institute of Standards and Technology)によって1995年に提案された。2005年に衝突困難性に対しての脆弱性が発見されている。

【55】SHA-2は、ハッシュアルゴリズムの1つで、米国の国家安全保障局(NSA、National Secure Authority)によって設計され、2001年にNISTによって標準化された。SHA-256、SHA-384、SHA-512などがあり、出力するハッシュ値のビット数を示している。

【56】GnuTLSは、OpenSSLがGPL非互換であるため、GPLのソフトウェアで使用することを目的として開発された。LGPLライセンスだが、GPLライセンスの部分も存在する。

【57】NSS(Network Security Service)は、クライアントやサーバアプリケーションのクロスプラットフォーム開発をサポートする目的で設計されたライブラリの一式。OpenSSLよりもサイズが大きい。

【58】証明書には「何を」証明するかで、ドメイン証明・実在証明という種類があり、「誰に」証明してもらうかで、自己証明書・パブリック証明書・プライベート証明書がある。

【59】証明書は、「公開鍵」と「CSR(証明書署名要求)」を持って申請する。

【60】HTTPS環境構築に必要な秘密鍵、CSRなどのファイルはOpenSSLを使用して作成する。証明書の作成は、自己証明書とパブリック証明書で異なる。

以上、よろしくお願いいたします。

You May Also Like

About the Author: kokutoh

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA