みなさんこんにちは、ソラコムの熊崎(ニックネーム nao)です。
先日開催した、IoTデバイス内の機密情報を保護できる「セキュアエレメント」をテーマにした勉強会のレポートをお届けします。イベント動画も公開しておりますので、お時間がある方はこちらをご覧ください。
SORACOM IoT Meetupは、これからIoT技術を使い問題解決を検討している皆さまと共にIoT活用を学ぶ勉強会です。
インターネットに繋がるIoTデバイス数の増加に伴い、セキュリティの脅威が話題となることが増えました。近年ではMiraiというマルウェア(悪意のあるソフトウェア)によるIoTデバイスの乗っ取りと、そのデバイスからのサービス妨害攻撃があるなど実害も出てきています。
IoTは今後より一層の活用が見込まれますが、その中でIoTのセキュリティの必要性も高まります。セキュリティに対するアプローチは様々ありますが、今回は特にIoTデバイス内に保存される機密情報を保護できる「セキュアエレメント」に注目してお届けしました。
IoTセキュリティの必要性とは?
まず、ソラコムテクノロジーエバンジェリストの松下(ニックネーム: Max)より、IoTデバイスのセキュリティとは何か、その必要性と考え方を紹介しました。
セキュリティの基本は「企画、設計段階から組み入れる」という考え方です。IoTシステムは様々な技術をつなぎ合わせて実現するため、設計段階から組み入れるとしても、取り掛かりがわかりづらい面があります。そこで、「境界を意識する」という考え方を紹介しました。具体的には、デバイス・ネットワーク・クラウドそれぞれの技術要素内部でセキュリティを完結させ、そして完結しているもの同士をつなげることで、抜け無くセキュリティを実現するものです。
それぞれの技術内では、ベストプラクティス(最善の方法)が確立していたり、マネージド(管理された状態で提供)されることから、セキュアな環境づくりは比較的手間なく実現できます。そのためつなげる部分、すなわち「境界」に集中できます。
IoTデバイスには、センサーデータを送信するために、ネットワーク接続やクラウド連携用の認証情報が保存されています。これらは盗難されると不正利用の温床となるため、漏洩や盗難されてはならない「機密情報」です。これらの機密情報をいかにして保護するのかが、IoTデバイスのセキュリティ対策となります。
機密情報の保護には、2つのアプローチがあります。
まず「難読化」です。これは暗号化等を利用して、デバイス内のデータを読みづらくする手法です。もう1つが「情報の排除」です。これは、そもそもデバイスに情報を保存しない、すなわち「盗みようがない」状態にする手法となります。
今回は、難読化を実現する「セキュアエレメント」について、後半のセッションで解説しました。
必要時に通信を利用して機密情報を取得し、不要になったら破棄することで、機密情報がIoTデバイスに残らないようにする方法があります。
ここで課題となるのが、ネットワーク接続の認証情報という機密情報の保管です。IoTデータ通信「SORACOM Air」の3G/LTE/5G(セルラー通信)で利用されるSIMはSIM自体がセキュアエレメントで、内部にネットワーク接続の認証情報を保持しています。そのため、セルラー通信を用いることで「必要時に通信を利用して機密情報を取得」が実現できます。
必要時に情報を取得する具体的な方法は、IoTデザインパターン「機器や環境に依存する設定情報を外出しする」をご覧ください。
ソラコム松下の資料はこちらです。
デバイスの機密情報を守る「セキュアエレメント」を解説
IoTセキュリティビジネスの会社で働かれている光安氏は、IoTプロトタイピングのデバイスを使う中でセキュリティに興味を持ち、中でも機密情報の保護に役立つ「セキュアエレメント」の調査と情報発信を行っています。
クラウドサービスへの接続認証は、X.509証明書による公開鍵認証がほとんどのケースで採用されています。この仕組みでは「秘密鍵」という機密情報があるため、保護するために「Root-of-Trust」、すなわち保存情報が信頼できるハードウェアが求められており、それが「セキュアエレメント」です。
セキュアエレメントはセキュリティ機能を持ったIC(集積回路)の総称であり、実際には複数のベンダーから提供されています。例えばMicrochip社のATECC608や、NXP社のSE050、Infineon社のOPTIGA Trustファミリーがあります。セキュアエレメントは回路上でCPUやマイコンとつなげて使うのが一般的ですが、CPU内部にセキュアエレメント機能を一体化した専用チップも存在します。例えばArmアーキテクチャーの「TrustZone」がそれです。
総じていえば、デバイス内の機密情報を保護する仕組みは、今後さらに必要性を増すと考えられます。
セキュアエレメントは、ストレージ領域と暗号化処理を等を行うインターフェイス(API)があります。ストレージには「書き込みできるが、読み出しできない領域」があり、ここに秘密鍵を保存します。そしてAPIを通じて暗号化を依頼すると、セキュアエレメントは内部の秘密鍵を使い暗号化し、その結果のみを依頼元に返してくれます。秘密鍵を直接知らなくとも暗号化が可能なのです。
この特性により、通信データの暗号化を行うTLS(トランスポート レイヤー セキュリティ)や、デジタル証明書の検証、その他にはデータそのものを暗号化できるAES暗号化といった用途に利用できます。また、セキュアエレメント自体の信頼性だけでなく、CPUとセキュアエレメント間の通信においても安全性が確認できたと、共有いただきました。
最後に、セキュアエレメントを利用したプロトタイピング(試作)環境である「rainbowtype」プロジェクトを紹介いただきました。これはESP32というIoTでもよく使われるマイコンとセキュアエレメントを組み合わせたデバイスに対して、通信経由でマイコン内のソフトウェア書き換え(FOTA; Firmware Over-The-Air)をセキュアに行える仕組みです。プログラミング環境はArduino IDEやPlatform.IOといったメジャーなツールが利用できることから、学習のハードルを下げつつもFOTAができるサービスです。
規模が小さくともこのような仕組みを作ることが可能となった、そして、デバイス側がセキュアであると信頼できるため、実現できる幅が広がると光安氏は締めくくりました。
光安氏の資料はこちらで公開しています。
ライブデモで解説!セキュアエレメントの設定方法
最後は、ソリューションアーキテクトの横田(ニックネーム: Shun)が、本イベントの集大成として「ラズパイからセキュアエレメントを使ってみる」をライブデモで実演しました。デモの内容は、Raspberry Pi(ラズパイ)上のテキスト文字を、Pythonからセキュアエレメントの暗号化機能を呼び出し、暗号化・復号化するものです。
一般的にはICモジュール形状をしているセキュアエレメントですが、最近はコネクタも実装された試作向けのセキュアエレメントも一般入手できます。今回のデモでも利用しました。
テキストの暗号化には、AES暗号方式を利用しています。これは共通鍵暗号(暗号化と復号化に同じ鍵を使う方式)の一種で、「鍵」が機密情報になります。鍵をmicroSDのような誰でも読み書き可能なストレージに保存すると、コピーされてしまうわけです。そこで、セキュアエレメントの「書き込みできるが、読み出しできない領域」に鍵を保存することで保護しています。
デモでは、暗号化と復号化を行った後、別のセキュアエレメントに入れ替えることで「鍵が入れ替わると復号化に失敗する」こともご紹介しています。実際のデモは動くものを見ていただいた方がわかりやすいので、動画の53:58(YouTube)よりご覧ください。
ソラコム横田の資料では、デモの概要や応用例のアイデアも紹介しています。ご覧ください。
ご質問への回答
イベント当日は、多くのご質問をお寄せいただきました。ありがとうございます!
お答えできなかったものも含め、改めて回答をいたします。少しでもIoTセキュリティの理解にお役立ていただければと思います。
質問:セキュアエレメントがそもそも分かってない状況での参加だったのですが、そもそも何をどうしてくれるモノなのでしょうか?
回答:セキュアエレメントは、「暗号化のための鍵を、盗難しづらいようにする」と「暗号化の機能」を提供してくれるものです。このうち、暗号化の機能はOpenSSL等のソフトウェアでも実現できますが、”盗難しづらいようにする” という点が、特にセキュアエレメントの利用価値の1つでしょう。
質問:セキュアエレメントは、TPM(トラステッド プラットフォーム モジュール)、HSM(ハードウェア セキュリティ モジュール)と呼ばれるものと同じようなものですか?
回答:セキュアエレメントは、Root-of-Trust(信頼の起点)となるハードウェアの総称です。セキュアエレメントの実装形態としてTPMやHSMがあります。また、クレジットカードについているICチップや、LTEや5G(セルラー)通信で使われるSIMもセキュアエレメントです。
質問:パソコンだとディスクの暗号化がありますが、セキュアエレメントで似たようなお話はありますか?
回答:暗号化を行うためには「暗号化のための鍵」と「暗号化の機能」という2つが必要です。セキュアエレメントは「暗号化のための鍵を、盗難しづらいようにする」と「暗号化の機能」を提供します。そして、皆さんが普段使っている最近のパソコンやスマホには、既にセキュアエレメント(TPM等)が入っています。これにより、ディスクのデータを平文(暗号化したい情報)として、そしてパソコンやスマホ内のセキュアエレメントで暗号化(復号化)ができ、また、その暗号化の鍵はセキュアエレメントで保護されているわけです。
質問:公開鍵は使えないのでしょうか?
回答:デモでは共通鍵方式のAES暗号化を利用しましたが、今回利用したMicrochip社製セキュアエレメント(ATECC608B-TNGTLSU)では、公開鍵方式の暗号化も利用可能です。同セキュアエレメント内の別の領域にX.509証明書を格納できます。これは他のセキュアエレメントでも同様です。公開鍵暗号を利用するにあたっては、準備として公開鍵/秘密鍵(キーペア)の発行が必要ですが、セキュアエレメント自体にこの発行機能を持つものもあります。一方で、コンシューマー製品のように大量生産が必要となった場合は、発行の手間が膨大となるため、メーカー出荷時点ですでにキーペアが出来上がっている状態(プロビジョニング済)にしてくれるモデルがあります。Microchip社ですと「Trust Platform」というものです。
質問:セキュアエレメント毎に異なる暗号化キーを持ってるのですか?
回答:本来セキュアエレメント内のストレージ領域には、メーカー出荷時には何も入っていない状態です。秘密鍵の書き込みやキーペアの発行はユーザー(皆さん自身)が行うことです。一方、今回利用したセキュアエレメント(ATECC608B-TNGTLSU)はプロビジョニング済み、すなわちキーペアの発行等の準備が済んでいる状態のセキュアエレメントであり、それぞれ異なる暗号化キーを持っています。そのため、ソラコム横田のデモでは別のセキュアエレメントに入れ替えることで、暗号化キーが変わったため、復号化に(適切に)失敗しています。
質問:余計な部品が増えるのでセキュアエレメント入れたくないと良くお聞きしますが、どのように考えればよいのでしょうか?
回答:セキュリティは「一番もろいところのレベルになる」という性質があります。例えばクラウドのセキュリティを強固にしても、デバイスセキュリティのレベルが低ければ、全体はデバイスのセキュリティレベルになります。逆に、セキュアエレメントを導入してデバイスセキュリティを強固にしても、クラウド側の配慮を怠ればセキュアエレメントの効果が薄くなります。重要なのは、IoTシステム全体で達成したいセキュリティのレベルの中で、セキュアエレメントが必要ならば「余計」では無く「不可欠」な部品となるわけです。実装の方法としては、セキュアエレメント以外にも文中でも紹介した「情報の排除」という考え方もありますが、これも手段の一つにすぎませんし、何が何でもセキュアエレメントを導入する必要もありません。やはり重要なのは、IoTシステム全体で達成したいセキュリティレベルから導き出される必要性と言えるでしょう。
― ソラコム 熊崎(nao)