fastapple's blog

時系列関係なく、情報を追記・分割・統合などします。ブログに記載の内容のうち、引用ではなく、私自身が記載している文章・コードなどについては、自由にご利用ください。

IoTとPFS (Perfect Forward Security)


IoTという言葉が徐々に言われるようになってきた。

これは、「クラウド」や人工知能のようなバズワードの一つとみることができるだろう。

様々なモノ(Things)がインターネットにつながるようになり、相互に関連を持つ、モノのインターネット(Internet of Things)の時代が来ている。

この潮流は、Googleの自動運転カーや自動車関連企業の遠隔操作への取り組み、そしてそれをハックしてみせるハッカーなど、様々なところでみることができる。www.wired.com

物理的なモノにアクセス可能なIoTの世界では、これまでより深くセキュリティについて考えなければならないだろう。従来のSSL/TLSを使用したサーバ・クライアント型の通信というのは、あくまでのIoTの使われ方の様々なパターンの一部に適合するものでしかなく、IoTの形態に応じた様々なセキュリティのベストプラクティス。IoTにおけるセキュリティのデザインパターンを考えなければなるまい。今回はそのうちの一部を考える。なお、このような記事は英語でもあるので、参考にされたい。ここでもPerfect Forward Securityについて言及しているようである。
SSL isn't enough for Internet of Things


従来のサーバ・クライアントモデルで、モノ側がサーバとなるとき、SSL/TLSを使用するとすれば、モノ側が秘密鍵を持つ。

しかしながら、IoTにおけるデバイスでは、盗難など、秘密鍵が常に危険にさらされている。例えばラズベリーパイをサーバ用のデバイスとして利用する場合を考えよう。デバイスを例えば電力供給が可能な屋外に配置するとする。

このとき、もしデバイスが盗難されると、秘密鍵が破られてしまい、これまでクライアントとの通信を保存していたマメはハッカーは、その秘密鍵を利用して、これまでの通信の内容を読み取ることができる。このような方法が原理的に可能なことはわかるが、実際にNSAが行っていたというのをスノーデンがリークした。ということが言われている。
自堕落な技術者の日記 : TwitterのPerfect Forward Secrecy(PFS)対応 - livedoor Blog(ブログ)

こういった状況なので、もはや将来にわたって秘密鍵、暗号化された通信の双方が白昼の下に晒されないと考えるのは困難だろう。このように秘密鍵が公に出てしまうことを、秘密鍵の危殆化(きたいか)という。IoTに利用されるようなデバイスでは、秘密鍵の危殆化を避けられない。

そこで、題名にもあるPerfect Forward Securityが登場する。これを利用すれば、通信の一回のセッションごとに互いに鍵が生成される。それを一回ごとに使い捨てる。この場合は、セッションごとの秘密鍵のようなものが利用される、これは、互いに別々に生成する乱数が受け持つわけであるが、これは利用したのちすぐ破棄されるため、デバイスを乗っ取られていないかぎりは、その場で複合することができない。もちろん、生成した乱数列を捨てずに取っていたりするとダメなんだろうけど。
この辺の仕組みは、以下の記事に詳しかった。
PFS(Perfect Forward Secrecy) | kim hirokuni

さてPFSを保証する暗号スイートのみを許可するようにすれば、めでたくIoTデバイスの将来的な通信内容の機密性が保証されるわけだが、もう一歩踏み込んで考えてみる。

IoTデバイスが盗難に会い、物理的にのっとられたあと、それを知らないデバイスオーナーは、性懲りもなく通信を行おうとするだろう。つまり、物理的にIoTデバイスが乗っ取られた時にどうにかしないといけない。

認証局の場合は、秘密鍵が物理的に危殆化すると、秘密鍵自身を消去してしまうといったスパイ映画めいたことが行われているとかいないとか、いわれているようだ。
認証局のウラ側教えます!:業界レポート-セキュリティ編 - GMOインターネット株式会社

その他にも様々なサイドチャネル攻撃にも対応しなければならない。まだまだサイドチャネル攻撃については認知度が低いが、そういった攻撃が可能であることはもっと広く今後知られておく必要があるだろう。
サイドチャネル攻撃 - Wikipedia

IoTデバイスの場合も、物理的な危殆化を検知した場合に、秘密鍵を消失させる。といった対策が必要だろう。2つの通信経路をもっておき、例えば物理デバイス接続を検知した場合に即座に秘密鍵を消失させ、危殆化信号をPUSH配信する。もしくは、定期的にハートビート信号を発信しておき、異常の際は発信しないようにする。

物理デバイスの他には、盗難が心配である。盗難された場合のために、物理デバイスないでGPS信号を定期的に受信し、照合を行い、決まった場所を外れた場合に秘密鍵を消失させ危殆化信号を発信する。また、ハートビートを発信しないようにする。GPS信号を受け取れないような場所では、WiFiBlueToothを併用する。

電源消失の際は、秘密鍵をできれば別の方法で消去し、やはり、ハートビートを受け取れないことで検知可能にする。

ここまで書いていて、パターンによって考えるべきポイントは結構違うなあと感じた。つまり、これをまとめるのは一仕事であり、IoTでセキュリティ技術者の需要はますます今後高まっていくだろう。