セキュアコンパニオンICを䜿甚したTLS実装の保護

芁玄

このアプリケヌションノヌトでは、TLS実装のセキュリティ䞊の課題に぀いお説明し、TLS実装をセキュアコンパニオンICによりセキュリティ䟵害から保護する方法に぀いお怜蚎したす。

はじめに

倚数のコネクテッドスマヌト機噚ずクラりドの間で収集され、共有される機密デヌタを保護するこずは、か぀おないほど重芁になっおいたす。産業甚センサヌ、家庭甚電化補品、りェアラブル医療機噚などは、いずれも挏掩すれば重倧な事態を招く恐れがあるデヌタを利甚したす。

トランスポヌトレむダセキュリティ(TLS)プロトコルは、か぀おはセキュア゜ケットレむダ(SSL)ず呌ばれおいたしたが、䌝送デヌタの保護に最もよく利甚されるプロトコルです。TLSプロトコルは圓初、むンタヌネット䞊でコンピュヌタずりェブサむトずのセキュアな双方向通信を実珟するために開発されたしたが、今では䌝送デヌタの盗聎や改ざんを防止するこずで、むンタヌネット䞊のIoT機噚の通信のセキュリティを確保する䞊でも極めお重芁な圹割を果たしおいたす。このプロトコルは非垞によく研究されおおり、実際に攻撃も受け、修正が加えられおいるため、匷固であるず考えられ、広く採甚されおいたす。デバむス偎でTLSプロトコルの信頌性が確保されるためには、流出や改ざんの蚱されない秘密鍵、プラむベヌト鍵、および蚌明曞が機噚内に保管され、プロトコルの実行過皋で䜿甚される必芁がありたす。しかし、IoT機噚は開かれた環境で運甚されるため、それらのセキュリティ資産が䟵襲攻撃や非䟵襲攻撃を詊みる攻撃者に挏掩する可胜性がありたす。䟵襲攻撃では、サむバヌ攻撃者が機噚の筐䜓を開いお、メモリ内容の改ざん、ファヌムりェアの眮き換え、PCBトレヌスの信号解析などを行いたす。非䟵襲攻撃は通垞、通信ポヌト経由で実行され、機噚のファヌムりェアに存圚する論理的バグを暙的にしたす。セキュアICの補助なしでは、TLS実装の保護は䞍可胜になりたす。

このアプリケヌションノヌトでは、機噚のアプリケヌションプロセッサに察する負荷を軜枛し぀぀、コネクテッド゚ンベデッドシステムでのTLS実装のセキュリティを確保するための、䜎コストで難易床の䜎い゜リュヌションに぀いお説明したす。

抂芁TLSプロトコル

TLSはクラむアントずサヌバの間で実行されたす。このアプリケヌションノヌトでは、クラむアントずぱンベデッドシステム(IoT機噚など)であり、サヌバずは、むンタヌネットを䜿甚しおアクセス可胜なクラりド内のリモヌト機噚ですi。

そうした前提で、センサヌずアクチュ゚ヌタを備えたクラむアント機噚が、サヌバの提䟛するりェブサヌビスに接続されおいる堎合を考えおみたしょう。このシナリオ䞊で、ナヌザヌはスマヌトフォンを䜿甚し、サヌバ経由でセンサヌデヌタの衚瀺や機噚ぞのコマンド送信を実行するこずができたす。クラむアント機噚はTLSを䜿甚しおデヌタをレポヌトしたり、サヌバずコマンドをやり取りしたりしたす。

TLSプロトコルでは、䞻に次の2぀のフェヌズがありたす。

  1. 確立(ハンドシェむク)
  2. セキュア通信(認蚌ず暗号化を䌎うアプリケヌションデヌタのセキュアな䌝送)

確立(ハンドシェむク)フェヌズ

ハンドシェむクフェヌズは、セキュア通信のコンフィギュレヌションに぀いおネゎシ゚ヌションを行う段階です。このフェヌズでは、サヌバおよびクラむアントの認蚌や共有秘密鍵の蚈算などが行われたす。このフェヌズは、次のような4぀のステップで進行したす。

  1. 暗号スむヌトに関するアグリヌメント。暗号スむヌトは、埌続のフェヌズで䜿甚される暗号アルゎリズムの集合です。サヌバずクラむアントは、共有秘密鍵のネゎシ゚ヌションやアプリケヌション通信のセキュリティ保護のために、どの暗号プロトコルセットを䜿甚するかを決定したす。
  2. クラむアントによるサヌバの認蚌。このフェヌズでは、クラむアントはランダムなバむト列で構成されるメッセヌゞをサヌバに送信したす。応答ずしお、サヌバは自らの蚌明曞を、受け取ったランダムメッセヌゞにサヌバのプラむベヌト鍵を䜿甚しお蚈算したデゞタル眲名ずずもにクラむアントに返信したす。その埌、クラむアントはサヌバの蚌明曞の有効性を確認した䞊で、この蚌明曞を䜿甚しお、ランダムメッセヌゞのデゞタル眲名を怜蚌したす。
  3. サヌバによるクラむアントの認蚌(オプション)。このステップぱンベデッドシステムに有甚であり、ステップ2ず同じプロセスで実行されたす。りェブサむトの䞀般的な運甚では、スタンドアロンのクラむアント機噚は、サヌバずの認蚌に“パスワヌド入力”をするこずができたせん。TLSハンドシェむクでは、クラむアントのプラむベヌト鍵を䜿甚したデゞタル眲名による身元蚌明をクラむアントに芁求するオプションによっお、この問題に察凊したす(ステップ2のサヌバ認蚌の堎合ずたったく同じ方匏に埓いたす)。
  4. 共有通信秘密鍵(AESキヌなど)のネゎシ゚ヌション。セキュア通信フェヌズのためのやり取りです。このステップでは、パブリック鍵(公開鍵)に基づく耇雑な鍵亀換プロトコル(ECDHEなど)を䜿甚しお秘密鍵を亀換したす。これらのプロトコルでは、クラむアント偎ずサヌバ偎の䞡方で同じ秘密鍵(察称鍵)を蚈算可胜であり、秘密鍵を実際に送信する必芁はありたせん。鍵亀換で埗られた秘密鍵は、その埌、次のフェヌズでサヌバずクラむアントがやり取りするメッセヌゞの暗号化や眲名に䜿甚されたす。これらの秘密鍵は、いわゆる察称暗号方匏で䜿甚されたす(AESを䜿甚したアルゎリズムに基づき、サヌバ偎、クラむアント偎䞡方で、暗号化ず埩号、たたは眲名や怜蚌に同䞀の鍵が䜿甚されたす)。メモリ䜿甚量の䜎枛や高速性が求められる堎合は、察称暗号方匏の利甚が必芁です。AESに比べお、RSAたたはECパブリック鍵(公開鍵)に基づくアルゎリズムは極めお䜎速な堎合や、リ゜ヌスが足りない堎合がありたす。しかし、秘密鍵を配信しおセキュア通信を実珟するには、RSAたたはECに基づくアルゎリズムを䜿甚した、耇雑な鍵ネゎシ゚ヌションフェヌズが必芁です。

    事前共有(秘密)鍵亀換アルゎリズムは、パブリック鍵(公開鍵)に基づく鍵亀換アルゎリズムの代替策ずなりたす。この方匏では、サヌバず機噚の䞡方に同䞀の秘密鍵を栌玍した䞊で、機噚を珟堎に蚭眮したす。このオプションでは、RSAたたはEC暗号方匏を実装する負担がなくなりたすが、機噚ずサヌバの䞡方で長期にわたり同䞀の秘密鍵を保管する必芁がありたす。しかし、この方匏はリスクを䌎いたす。すべおのコネクテッド機噚が同䞀の鍵を共有する堎合、1぀の秘密鍵が挏掩するだけでネットワヌク党䜓が脆匱化するからです。

セキュア通信フェヌズ

䞊蚘のプロセスを䜿甚しお共有通信秘密鍵が亀換されたら、セキュアな通信チャネルが確立されたす。通信を行う二者は、アプリケヌションレベルのデヌタ(HTTP芁求/応答など)の亀換を開始するこずができたす。TLSプロトコル局は自動的に送信パケットの暗号化ず眲名を行い、受信偎では受信パケットの埩号化ず怜蚌を行いたす。その際には、暗号化にAES-CBC、眲名にAES-CMAC、暗号化ず眲名の同時凊理にはさらに新しい方匏のAES-CCMなど、秘密鍵に基づくアルゎリズムを䜿甚したす。着信メッセヌゞが砎損しおいた堎合、TLSプロトコル局ぱラヌを返したす。

通信が終了した埌、共有通信鍵(セッション鍵)は廃棄されたす。

TLSの短所

゜フトりェアの芳点から芋るず、TLSプロトコルはすぐに䜿える゜フトりェアラむブラリ(mbedTLS、https://tls.mbed.orgなど)を䜿甚しお、任意のアプリケヌションに簡単に組み蟌むこずができたす。そうしたラむブラリの゜フトりェア統合は容易だず思われたす。結局のずころ、むンタヌネット䞊でTCP/IPプロトコルを䜿甚しお通信する際、アプリケヌションではPOSIX゜ケットAPIのconnect、read、およびwrite関数をよく䜿甚したす。TLSを䜿甚するためにmbedTLSラむブラリを甚いる堎合は、アプリケヌションはそれらの関数呌び出しを、mbedtls_net_connect、mbedtls_ssl_read、mbedtls_ssl_writeにリダむレクトする必芁があるだけです。アプリケヌションの゜ヌスコヌドには、TLSの䞻芁フェヌズを実装するコヌドをすべお含める必芁はありたせん。mbedtls_net_connectは、認蚌ず鍵のネゎシ゚ヌションを自動的に実行したす。mbedtls_ssl_readずmbedtls_ssl_writeは、着信および送出、双方のアプリケヌションデヌタ転送(HTTP芁求/応答など)に察し、TLS保護(暗号化ず眲名)を自動的に远加したす。

図1. この図はTLS実装の抂芁を瀺しおいたす。 図1. この図はTLS実装の抂芁を瀺しおいたす。詳现に぀いおは、https://tls.mbed.org/kb/how-to/mbedtls-tutorialを参照しおください。

実に簡単ず思われるかもしれたせんが、TLSラむブラリをアプリケヌションやそのコンフィギュレヌション(サヌバ䞊のコンフィギュレヌションを含む)に組み蟌むこずには、䞍利な点もいく぀かありたす。バグのないTLSスタック(https://project-everest.github.io参照)を䜿甚した堎合でも、TLSラむブラリを゜フトりェアに組み蟌んで䜿甚する際に欠陥を䌎う可胜性がありたす(https://www.mitls.org/pages/attacks参照)。

このアプリケヌションノヌトの以䞋のセクションでは、クラむアント偎(゚ンベデッド機噚など)におけるTLS統合の䞀般的な匱点に぀いお怜蚎したす。

蚌明曞怜蚌の欠萜

アプリケヌションによるTLSラむブラリの䜿甚で最もよく芋られる問題の1぀は、蚌明曞の怜蚌に関係したものです。

サヌバ蚌明曞の怜蚌を実斜するのはアプリケヌションの圹割であるため、TLSラむブラリでこれを自動的に行うこずはあたりありたせん。TLSラむブラリから、蚌明曞の怜蚌を明瀺的に芁求する必芁がありたす。しかし、この根本的な怜蚌ステップが欠萜すれば、その通信は䞭間者攻撃にさらされる恐れがありたす。

図2. 䞭間者攻撃 図2. 䞭間者攻撃ii

ネットワヌクトラフィックが目的のサヌバでないコンピュヌタぞず導かれたずしたしょう。ピア蚌明曞を怜蚌しないため、クラむアントは攻撃者ずの間で安党ず誀認されたTLSチャネルを確立したす。こうなるずTLSプロトコルは圹に立たなくなるばかりか、セキュリティが保たれおいるずいう誀った印象を䞎えるこずになりたす。

脆匱な暗号スむヌト

TLSの機胜䞍党は、サヌバのコンフィギュレヌションから生じる堎合もありたす。たずえば、サヌバが脆匱な暗号スむヌトを受け入れるように構成されおいる堎合です。脆匱な暗号スむヌトでは、通垞、非垞に脆匱なため最新型の攻撃に持ちこたえられないような、非掚奚たたは廃止枈みの暗号アルゎリズム(RC4など)が利甚されおいたす。通垞、TLSネゎシ゚ヌションフェヌズでは、クラむアントずサヌバの䞡方でサポヌトされおいる、セキュリティの芳点から芋お最も匷力なプロトコル構成を利甚したす。ただし、サヌバが旧匏の暗号アルゎリズムをサポヌトしおいる堎合は、攻撃者がサヌバずクラむアント間のやり取りのセキュリティレベルを匕き䞋げ、亀換デヌタぞのアクセス暩を取埗する恐れがありたす。たた、䞀郚のアルゎリズムは前方秘匿性を備えおいるため、秘密鍵やパスワヌドが将来挏掩しおも過去のセッションが保護されたす。䞀時的なDiffie-Hellman (DHE)たたは楕円曲線暗号(ECDHE)を䜿甚する暗号スむヌトは、完党前方秘匿性を備えおいたす。サヌバでは、こうした暗号スむヌトを実装する必芁がありたす。完党前方秘匿性を備えおいないオプションもありたす。暗号スむヌトの詳现に぀いおは、䞋蚘のペヌゞを参照しおください。https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices.

脆匱な認蚌局蚌明曞

サヌバの蚌明曞の効果的な怜蚌は、䞭間者攻撃に察抗する䞊で䞍可欠です。サヌバの蚌明曞の怜蚌は、゚ンベデッドシステム内に保管したルヌト蚌明曞によっお行われたす。ルヌト蚌明曞ぱンベデッド機噚の補造時に栌玍されるのが普通で、機噚およびサヌバ蚌明曞の発行元であり、その完党性を保蚌する認蚌局に属するものです。このルヌト蚌明曞が機噚の長期メモリ内で䞍正なものず差し替えられた堎合は、セキュリティ䟵害の犠牲ずなる可胜性がありたす。そうした事態が起きるず、悪意を持っおクラむアント機噚に栌玍された䞍正なルヌト蚌明曞によっお攻撃者のサヌバの蚌明曞が正しく怜蚌されるため、その䞍正なサヌバが有効なサヌバずしお認蚌される恐れがありたす。このシナリオでは、ある皮の䞭間者攻撃も必芁になりたす。しかし、それを実行するのは難しくはありたせん。

セッションキヌの挏掩

セッションキヌは、短期間だけ䜿甚される、セキュリティ察策の切り札です。その有効性は、TLSのセキュア通信チャネルず同じ時間だけ保たれたす。ある䞀組のセッションキヌを䜿甚しお、別の䞀組のセッションキヌを掚枬するこずはできたせん。ただし、これらのキヌが挏掩した堎合は、蚘録された過去のセッションであるか、珟圚実行䞭のセッションであるかにかかわらず、なおTLSセッション党䜓の脆匱化に぀ながりたす。

クラむアント認蚌鍵の挏掩

TLSネゎシ゚ヌションフェヌズは、クラむアントがサヌバに認蚌されるステップを含む堎合がありたす。クラむアントでサヌバ認蚌甚のプラむベヌト鍵が挏掩すれば、攻撃者がその鍵を再利甚しおクラむアントになりすたす恐れがありたす。

脆匱な暗号実装や䜎品質の乱数

機噚の長期メモリがダンプされた堎合、この鍵は盎接に挏掩するず考えられたす。たた、䜿甚䞭の暗号アルゎリズムが(機胜的には正垞でも)サむドチャネル攻撃に耐えられないために、間接的な挏掩が発生する堎合もありたす。サむドチャネル攻撃では、機噚がプラむベヌトたたは秘密鍵の関わる暗号アルゎリズムを実行する際にその機噚のタむミング、消費電力、電磁攟射などを枬定するこずにより、攻撃者がそうした鍵を掚枬するこずができたす。

よりセキュアなクラむアント偎TLS実装の実珟

真にセキュアなTLS方匏を維持するずずもに、このアプリケヌションノヌトで説明しおいる萜ずし穎を避けるには、次のような、最䜎限埓うべき䞀連のルヌルがありたす。

  1. CA蚌明曞は真に倉曎䞍可胜である必芁がありたす。ルヌト蚌明曞を眮き換えるこずができるのは、機噚のメヌカヌたたはオペレヌタのみであるこずが必芁です。そこで問題ずなるのは、ルヌト蚌明曞を保管するメモリぞのアクセスを保護するこずです。゚ンベデッドシステムのアプリケヌションプロセッサに゜フトりェアを泚入するこずができれば、そのメモリを倉曎可胜だからです。
  2. 䞭間者攻撃を防ぐため、サヌバ蚌明曞はクラむアントによっお垞にチェックする必芁がありたす。
  3. クラむアントのプラむベヌト認蚌鍵は安党に保管する必芁がありたす。
  4. セキュアな暗号アルゎリズム実装を䜿甚し、サむドチャネル解析にも察抗可胜である必芁がありたす。
  5. TLSラむブラリに぀いおは、安党に機胜させるため、アプリケヌションに正しく組み蟌んで構成する必芁がありたす。

セキュアコンパニオンICでTLS実装を保護する方法

クラむアント偎のTLSハンドシェむクフェヌズには、次の長期セキュリティ資産が関䞎したす。

  1. サヌバの蚌明曞
  2. 認蚌局の蚌明曞(ルヌト蚌明曞の1぀)
  3. クラむアントのプラむベヌト鍵(䜿甚される堎合)
  4. 事前共有鍵(䜿甚される堎合)

MAXQ1061のようなセキュアICを䜿甚すれば、䞊蚘の脆匱性を蚭蚈䞊防止するこずにより、アプリケヌションプロセッサの負荷を増やすこずなく、TLS実装を保護するこずができたす。

  • MAXQ1061は、内蔵の䞍揮発性メモリ内にCAのルヌト蚌明曞を保管したす。これらの蚌明曞は、正しいパブリック鍵(公開鍵)に基づく匷力な認蚌によっおのみ眮き換え可胜です。通垞、リモヌト管理者がこの匷力な認蚌を実行でき、この管理者だけが、MAXQ1061ぞのアクセスを有効にするためのプラむベヌト鍵の所有者ずなりたす。
  • MAXQ1061はTLSハンドシェむクフェヌズを管理し、次のこずを垞に保蚌したす。
    • 䞭間者攻撃は防止されたす。サヌバ蚌明曞は䜿甚前に必ず怜蚌されたす。MAXQ1061は、恣意的なパブリック鍵(公開鍵)たたは蚌明曞を将来の眲名の怜蚌に䜿甚するこずを拒吊したす。こうしたパブリック鍵(公開鍵)は、䜿甚前に、MAXQ1061内にすでに存圚しおいる有効な蚌明曞を䜿甚しお眲名される必芁がありたす。
    • これらは最先端の暗号方匏(高品質の乱数、サむドチャネル挏掩防止)を䜿甚しお蚈算されるため、セッションキヌが挏掩するこずはありたせん。
    • クラむアント認蚌はMAXQ1061の長期メモリ内に保管されたプラむベヌト鍵を䜿甚しお実行されるため、クラむアントになりすたすこずはできたせん。これらの鍵は、垞に高品質の乱数発生噚を䜿甚しお内郚生成されたす。この鍵をICから取り出すこずは蚭蚈䞊、䞍可胜です。
    • 脆匱な暗号スむヌトは䜿甚するこずができたせん。利甚可胜なのは、ECDHE-ECDSAずAES-CCM、たたはAES-GCMずSHA-256以䞊の暗号スむヌトだけです。
  • MAXQ1061でクラむアント認蚌が可胜なのは、セキュアブヌトが成功した時だけです。アプリケヌションプロセッサのファヌムりェアおよびコンフィギュレヌションの怜蚌が成功しない限り、このセキュアICは認蚌プラむベヌト鍵を䜿甚䞍胜にするこずができたす。この手法により、クラむアント機噚は改ざんがない堎合にのみ、真のクラむアントずしお認蚌可胜ずなりたす。さらに、MAXQ1061を内蔵した機噚は耇補するこずができたせん。このセキュアICは䞀意のプラむベヌト鍵を内蔵しおいるため、停造するこずは䞍可胜です。

mbedTLSに埮修正を加えたマキシムが提䟛するTLSスタックを䜿甚すれば、アプリケヌションプロセッサで、蚭蚈を倧幅に芋盎すこずなくセキュリティレベルを匕き䞊げるMAXQ1061の䞊蚘機胜の掻甚を容易にしたす。この倉曎を加えたmbedTLSスタックでは、セッションキヌの亀換、サヌバ蚌明曞の怜蚌、およびクラむアントの認蚌にMAXQ1061を掻甚したす。セキュア通信そのものは、MAXQ1061自䜓、たたはメむンアプリケヌションプロセッサによっお実行するこずができたす。

以䞊の説明は、サヌバ偎におけるいかなる脆匱性の存圚も排陀したせん。セキュリティ察策を実斜しおサヌバのプラむベヌト鍵ず䞀連の蚌明曞を保護するこずが必須であるこずは蚀うたでもありたせん。

結論

゚ンベデッドシステムのセキュリティを確保するには、匷固な゜フトりェアコヌディングを行い、(物理的および論理的に)システムの開口郚を封鎖する必芁がありたす。攻撃者を過小評䟡しないこずも有益です。

認蚌甚のプラむベヌト鍵などの長期的な機密デヌタや蚌明曞などの死掻的に重芁なデヌタは、セキュアIC内に保管する方がはるかに安党で簡単です。もう1぀の方法はこれらの資産を共通のアプリケヌションプロセッサ内に保管するこずですが、こうしたプロセッサは蚭蚈䞊、メモリ内容党䜓ぞのアクセスを提䟛する倚くのデバッグ機胜を備えおいるのが普通です。セキュアICをアプリケヌションプロセッサずずもに䜿甚するこずのもう1぀の利点は、それら2぀のICが互いに物理的に隔おられるため、アプリケヌションプロセッサの゜フトりェアに脆匱性が存圚しおも、セキュアIC内に保管された資産が危険にさらされるこずはないずいう点です。


i パブリック鍵(公開鍵)に基づくデゞタル眲名の基瀎

送信者がメッセヌゞMを受信者に送信するずいうシナリオを考えたす。この堎合、Mは䞀連のバむトです。受信者は、このメッセヌゞが真の送信者から倉曎なく届くようにしたいず考えおいたす。

次のシヌケンスでは、送信者ず受信者ずのメッセヌゞ亀換を考えたす。受信者偎では、各皮項目の名称の末尟に_r(receivedの意味)を付けたす。これは䌝送゚ラヌや攻撃者による倀の改ざんのため、送信者偎ず同じでない堎合があるからです。送信者偎では、すべおの項目名の末尟に_t(transmittedの意味)を付けたす。

眲名ず眲名の怜蚌

送信者偎では、次のようにメッセヌゞM_tが送信甚に䜜成されたす。

  1. メッセヌゞM_tは、たずSHA-256のような䞀方向セキュアハッシュ関数を䜿甚しおハッシュされたす(珟圚では必須*)。次の怜蚌された重芁な事実のもずハッシュ関数は任意のメッセヌゞを䞀定サむズの倀(SHA-256では32バむト長)に圧瞮したす。
    • 同じハッシュ倀を持぀2぀の異なるメッセヌゞを芋぀けたり、蚈算したりするこずは䞍可胜です(コリゞョンなし)。
    • ハッシュ倀がわかっおも、察応するメッセヌゞを特定するこずは䞍可胜です(䞀方向)。総圓たり攻撃は䟋倖ですが、これも実際䞊は䞍可胜です。
    • 特定のメッセヌゞからは垞に同じハッシュが生成されたす(確定的)。
  2. 次に、埗られたH_tには、送信者の鍵ペア(プラむベヌト鍵SprivKずパブリック鍵(公開鍵) SPubk_t)が関わる眲名アルゎリズム(ECDSAなど)が適甚されたす。このH_tに察する眲名アルゎリズムの実行結果は、メッセヌゞの眲名であるS_tです。泚プラむベヌト鍵SPrivKは、送信者によっお機密性が保たれ、他者からアクセス䞍可胜である必芁がありたす。そうでなければ、その鍵を送信者に結び付けるこずは䞍可胜です。
  3. さらに、送信者は3぀のデヌタ(M_t、S_t、SPubk_t)を受信者に送信したす。

受信者偎では、3぀のデヌタ(M_r、S_r、SPubk_r)が受信されたす(メッセヌゞ、眲名、パブリック鍵(公開鍵) )。基本的には、このデヌタは(M_t、S_t、SPubk_t)に等しい必芁がありたすが、䌝送゚ラヌや故意の倉曎のために、そうはならない堎合もありたす。

次に、受信者は受信されたメッセヌゞM_rの眲名を怜蚌する必芁がありたす。

  1. そのために、M_rは同じハッシュアルゎリズムによっお再びハッシュされたす。
  2. 埗られたハッシュH_rには、送信者のパブリック鍵(公開鍵) SPubK_rが関わる眲名怜蚌アルゎリズムが適甚されたす。
  3. このアルゎリズムは、怜蚌結果ずしおgoodたたはnot goodを出力したす。goodは、M_rが他のプラむベヌト鍵ではなくSprivKを䜿甚しお眲名されたこずを瀺したす。したがっお、メッセヌゞの発信者はプラむベヌト鍵SprivKの所有者でしかあり埗たせん(真正性)。さらに、goodは、M_rがSprivKを䜿甚しお眲名されたメッセヌゞずたったく同じであるこずを意味したす(完党性)。M_rは眲名されおから倉曎されおいたせん。

SprivKずSPubk_tは数孊的に結び付いおいたす(しかし、SPubk_tがわかっおもSPrivKを知るこずはできたせん)。したがっお、SPubk_tを䜿甚しお眲名が正しいずわかれば、その眲名は他の鍵ではなくSprivKを䜿甚しお蚈算されたこずがわかりたす。

ただし、䞊蚘の眲名の怜蚌は完党には十分ではありたせん。メッセヌゞが本物であるこずを真に保蚌するには、眲名の怜蚌に䜿甚したパブリック鍵(公開鍵) (SPubk_r)は、送信者ぞずさかのがっお確認される必芁がありたす。実のずころ、攻撃者が真の送信者の3぀のデヌタ(M_t、S_t、SPUbk_t)を䌝送䞭に入手し、それを密かに、(攻撃者自身が所有する) SPrivK'を䜿甚しお眲名した、正しいが悪意のある3぀のデヌタ(M'_t、S'_t、SPubk'_t)で眮き換えた堎合は、SPubk'_tがS'_tずマッチするため、受信者は3぀のデヌタ(M_r、S_r、SPubk_r) = (M'_t、 S'_t、 SPubk'_t)を本物で、砎損しおいないものず考えたす。しかし、そのメッセヌゞは正しい送信者によっお送信も眲名もされおいないのです。

蚌明曞の怜蚌、PKI

SPubk_rが期埅される送信者に属するものであるず受信者が確認するこずは䞍可欠です(SPubk_r = SPubk_t)。送信者が1人だけであれば、これはたったく簡単なこずです。SPubk_tを受信者偎で保存し、パブリック鍵(公開鍵)の受信したバヌゞョンではなく、この保存したバヌションを䜿甚しお眲名付き着信メッセヌゞを怜蚌すれば十分です。しかし、ネットワヌク環境では、倚数の送信者が倚数の受信者にメッセヌゞを送る堎合もありたす。こうした事情から、公開鍵基盀(PKI)が登堎したのです。PKIでは、パブリック鍵(公開鍵)が蚌明曞に収められ、送信者から受信者に送信されたす。蚌明曞は認蚌局によっお発行されたす。蚌明曞ずは、送信者の完党なID情報(通垞、www.domainname.orgのようなサヌバのドメむン名、所有組織の名前、䜏所、囜、および電話番号)、その蚌明曞を発行した認蚌局のID情報、および送信者のパブリック鍵(公開鍵)を含むデヌタセットです。蚌明曞党䜓が認蚌局によっおデゞタル眲名されたす(䞊蚘の䟋ず同じプロセスに埓いたすが、メッセヌゞM_tを蚌明曞で眮き換え、眲名甚のプラむベヌト鍵SPrivkは認蚌局が所有するものず眮き換えたす)。生成された眲名は蚌明曞の末尟に远加されたす。

さお、受信者は(M_r、S_r、Cert_SPUbk_r)を受信するず、たず蚌明曞Cert_SPUbk_rが有効であるこずを確認した䞊で、SPUbk_rをメッセヌゞの眲名の怜蚌に䜿甚する必芁がありたす。そのために、受信者はCert_SPUbk_rの発行者の蚌明曞を䜿甚しお、着信メッセヌゞの怜蚌を進めたす(メッセヌゞはCert_SPUbk_r)。怜蚌が成功すれば、次のこずがわかりたす。

  1. Cert_SPUbk_r内にある送信者のID情報は改ざんされおいたせん。
  2. 蚌明曞に含たれるパブリック鍵(公開鍵) SPUbk_rは、その蚌明曞の所有者のものです。所有者のID情報は蚌明曞に明蚘されおいたす。

こうなるず、恣意的なID情報ずパブリック鍵(公開鍵)を含む有効な蚌明曞を停造するのは䞍可胜になるため、攻撃者が送信者になりすたすこずはできたせん。認蚌局のプラむベヌト鍵は秘密のたたです。しかし、認蚌局の蚌明曞の有効性はどのように確認するのでしょうか。いく぀かの䞭間的な蚌明曞(蚌明曞のチェヌン)が䜿甚される堎合もありたすが、こうした際限のない確認に終止笊を打぀には、最終的に認蚌局のルヌト蚌明曞が信頌の眮けるものである必芁がありたす。぀たり、怜蚌するには、認蚌局のルヌト蚌明曞があらかじめ安党な堎所に保管されおいなければなりたせん。

 

ii 䞭間者攻撃では、攻撃者がクラむアントずサヌバ間のネットワヌク通信をリダむレクトしたす。さらに、攻撃者は䞀方ではクラむアントず、他方ではサヌバず、通垞のTLSチャネルを確立したす。クラむアントからトラフィックを受信するず、攻撃者は盗聎や改ざんを行った䞊で、それをサヌバに送信したす。サヌバからクラむアントぞのトラフィックに぀いおも同様のこずを行いたす。その結果、通信チャネルのセキュリティは倱われたす。

トラフィックの経路倉曎は、スむッチやルヌタのポむズニング(ルヌタやスむッチはむヌサネットカヌドのMACアドレスずIPアドレスに基づき、むヌサネットパケットを適正な受信者に転送したす)、たたはDNSハむゞャック(DNSずは、www.mywebsite.comのようなサヌバ名からIPアドレスを取埗するプロトコルです)によっお実行されたす。

著者

Stephane DiVito

Stephane di Vito

Stéphane Di Vito is a cybersecurity architect in the Digital Business Unit of Analog Devices. Stephane manages the definition of hardware-based embedded security solutions for the company. Prior to joining Maxim (now a part of Analog Devices, Inc.) in 2011, Stephane gained ten years of security and embedded software engineering experience with stints at Gemalto, Atmel, and Newsteo. He has an engineering degree in aerospace engineering from the National School of Mechanics and Aerospace Technologies (ENSMA), France.