うるふブログ

連載:wolfの仲間たち 第一回:全員集合

さて新しい連載では、「wolfの仲間たち」と題して中核製品のwolfSSL/wolfCrypt、そしてそれをベースにIoTシステムのセキュリティを様々な角度からを支えるwolfSSLの製品群について紹介していきたいと思います。

中核となるのはwolfSSLです。組み込みシステムに安全なネットワーク通信を実現するC言語ライブラリです。小型軽量ながらTLSやDTLSの標準に完全準拠の機能を提供している一方で、特定目的の組込製品のために必要な機能、不要な機能を自由に追加削除できるなど構成の柔軟性も大きな特長です。最新のTLS1.3やDTLS1.2対応バージョンを商用組込向けとしては世界に先駆けて提供を開始しているのも、専門ベンダー製品としての特長です。

そのプロトコルの基盤を支えるのがwolfCrypt暗号エンジン。日々進歩する新しい暗号アルゴリズムをいち早く取り入れつつも、FIPS認証取得など高い信頼性も実証しています。各社のハードウェア暗号エンジンにも対応。大規模なデータの暗号処理も安心です。

もちろん、このSSL/TLS基盤を利用して自社のアプリケーションのためのプロトコルのセキュリティを実現することができるわけですが、この上にIoTのセキュリティで特に重要な役割をはたすアプリケーション層のプロトコル製品をwolfSSL製品としても特別に提供しています。

wolfMQTTが提供するMQTTは小型軽量のパブリッシュ・サブスクライブモデルの通信プロトコルです。小規模のトランザクションを軽量に実現したり、ファームウェア更新のような多数のデバイスに対する不定期なトランザクションの処理をシンプルに実現したりするのを得意としています。

wolfSSHはSSHプロトコルで組込みデバイスに安全なコンソール機能を実現。SSHのサーバ機能、クライアント機能と共にscpやsftpのようなファイル転送機能も提供します。

一方、IoTデバイスの世界ではハードウェアレベルのセキュリティが要求されることも多くなってきています。従来から標準化が進んでいるTPM2.0をサポートするwolfTPMをはじめ、各種のオフチップ型のセキュア・エレメント。また、TrustZone、SGXのようにMPU上に安全な領域やモードを実現する方式など、各種のハードウェア層のセキュリティ機能をベースに統一されたインタフェースでSSL/TLSと統合するwolfSSL セキュアエンクレーブという形で提供しています。

また、実用的なIoTシステムを考えるとき、システムの長いライフサイクルを通じた安全なファームウェア更新は大きな課題です。これまでこの領域はそれぞれの製品ハードウェアへの依存性が強く、個別対応とならざるをえない領域とされてきました。wolfSSLでは、ハードウェア依存性を極限まで局所化して、安全なファームウェア更新を実現するための共通の基盤となる技術コンポーネント、wolfBootを開発しました。これからのIoTシステムのキーコンポーネントの一つとなっていくはずです。

今回の連載では、こうした技術コンポーネントの一つ一つについて次回からもう一歩掘り下げてその役割と効果を紹介して行く予定です。

wolfBootをリリース

wolfSSLは新製品 wolfBootのリリースを発表しました!

wolfBootは、wolfSSLの基盤としても利用されているwolfCrypt暗号モジュールを利用して、実行対象のファームウェアに署名検証機能を提供する安全なブートローダーです。

セキュアブートローダーの役割は、悪意のあるファームウェアや未承認のファームウェアがターゲットにロードされるのを防ぐことです。さらに、wolfBootはフェイルセーフなアップデートメカニズムを提供します。それはいつでも中断でき、次の起動時に再開することができます。

wolfBootは、ファームウェア認証にwolfCryptを利用し、実質的にすべての32ビットマイクロコントローラを対象に、ポータブルでOSに依存しない、安全なブートローダーソリューションとして設計されています。

小型組込みを目標とした設計と小さなハードウェア抽象化レイヤ(HAL)APIにより、wolfBootはどのOSや非OSアプリケーションからも完全に独立しており、簡単に移植して既存の組み込みソフトウェアソリューションに統合することができます。

wolfBootは遠隔ブート時のセキュアファームウェアアップデート(OTA)の基本機能を提供し、アップデートを処理するために必要なメカニズムを実装し検証するために必要な開発コストを削減します。アプリケーション/ OS内の安全なチャネルを使用してファームウェアイメージを受信するだけで開発を可能にします。盗聴を防ぐために、wolfSSLを使用してTLSを介したファームウェア転送を暗号化することをお勧めします。イメージが更新パーティションに転送されて保存されると、wolfBootは次回の起動時に更新手順の面倒を見ます。

誤ったファームウェアにつながる可能性のあるリモートアップデートは、最初の「テスト」起動後にwolfBootによって自動的に元に戻されます。アップデートが正常に起動しなかったときはいつでも元のファームウェアイメージを復元します。このメカニズムは、現場での偶発的な更新からターゲットデバイスを保護します。

wolfBootオープンソース版は、こちらのwolfSSLダウンロードページからダウンロードできます:https://www.wolfssl.jp/download/
wolfBootについての詳細:https://www.wolfssl.jp/products/wolfboot/
wolfCryptについての詳細:https://www.wolfssl.jp/products/wolfCrypt/
ブートローダーについての詳細はこちらをご参照ください:https://ja.wikipedia.org/wiki/ブート#ブートローダ

ご質問や詳細についてはinfo@wolfssl.jpにお問い合わせください。

 

wolfTips: ベンチマーク・プログラム

wolfSSLの処理時間が気になりますか?

wolfSSLサイトのベンチマークページには、さまざまな異なる条件でのベンチマーク結果を掲載しています。しかし、TLSは使われる暗号化スイートや個別のアルゴリズム、ネットワークの諸条件によって処理時間が大きく異なってきます。wolfSSLの使用される実際の対象ハードウェア、ネットワークや開発環境は多様であるため、一般的な処理性能を提示することはなかなか難しいことです。そのために、wolfSSLではお客さまの実際の環境でベンチマークテストができるように製品と同梱でベンチマークプログラムを提供しています。

ここでは、製品に含まれている二つのベンチマーク機能とその使い方について紹介します。

一つ目は、暗号アルゴリズムレイヤーでのベンチマークプログラムです。このプログラムではTLSで使われる個々の暗号アルゴリズムについて、実機での処理性能を評価することができます。このベンチマークプログラムは、もちろん各アルゴリズムが目標通りの性能を発揮しているかどうか確認するために利用できますが、そのほかにも以下のような色々な目的で使用することができます。

  • コンパイラーの最適化レベルが暗号処理の性能にどのくらい影響するか知りたい
  • wolfSSLの持っている整数演算ライブラリーのうちどれが目的のシステムに一番有効か知りたい
  • ハードウェア暗号アクセラレータとソフトウェア暗号化の性能を比較したい
  • 暗号スイートを選択するときのアルゴリズム個別の基本的な性能データが知りたい

もう一つは、TLSプロトコル層とそれ以下のネットワーク層を含めた通信全体の性能をベンチマークするための機能です。このベンチマークはTLSサーバとクライアントのサンプルプログラムの中のオプション機能を使って評価します。

 

1. /wolfcrypt/benchmark/benchmark

暗号アルゴリズム毎のベンチマークを測定するプログラムです。暗号アルゴリズム単位の性能を知るのに有効で、性能評価の最初のステップのツールとしてお勧めです。

ブロック暗号及びストリーム暗号は、ブロック単位で測定時間以上、暗号化・復号化を繰り返し行いその回数から性能を計算します。公開鍵暗号は測定時間以上、鍵生成・合意・認証・証明操作を何回行えたかで性能を計算します。出力結果と各部位の意味するところを出力例で次の図に示します。

2./examples/client and server

benchmark プログラムは暗号アルゴリズム単独でのパフォーマンス測定するのに対して、次のステップでは、より実環境に近い状態で速度性能を測定したいとの要求もあります。

TLSの処理性能には接続時のハンドシェイク処理とアプリケーションメッセージ転送の二つのファクターがあります。接続時のハンドシェイク処理は、アプリケーションメッセージの長さに依存せず一定の時間がかかります。それに対して、メッセージ転送時間は概ね転送するメッセージのサイズに比例した時間がかかります。

そのような計測には、/examples/client/client及び/examples/server/server の両プログラムを使用することが出来ます。それぞれについて、次のようなオプションを使用します。

  • 接続時間の計測:client の -b <num>オプション、serverの -C <num> オプション, -iオプション
  • メッセージ転送時間の計測:server / client の -B <data size>オプション

client -b <num> は、TLSハンドシェークをnum回数実施しその平均値を出力します。下記は、10 回 TLS 1.3 ハンドシェークを実施したその平均値を出力する例です。

クライアント側:
$ ./examples/client/client -v 4 -h 192.168.11.18 -d -b 10
wolfSSL_connect avg took:  970.207 milliseconds

サーバ側:
$ ./examples/server/server -v 4 -C 10
または
$ ./examples/server/server -v 4 -i

外部のサーバーに対しても行うことが出来ます。下記の例では、www.googld.com のポート443に対して10回TLS接続を行いその平均値を出力します。

$ ./examples/client/client -h www.google.com -p 443 -d -b 10
wolfSSL_connect avg took:  108.224 milliseconds

 

メッセージ送受信部分の速度性能を知りたい場合には server/client -B オプションを次のように使います。

  1. 転送メッセージ・サイズを設定します。例:1M Byte(≒1048576 byte)
  2. 注目する開発環境でビルドした ./examples/server/server を起動します。
    $ ./examples/server/server -b -d -i -B 1048576
    他の引数は次のような意味を持ちます
    -b : ローカルホスト以外のインターフェースへもバインドする
    -d : クライアント認証を無効とする
    -i : 無期限にループする(繰り返し接続を許可)
  3. 計測したいネットワーク環境で接続された別ターミナルで./examples/client/client を起動します。
    $ ./examples/client/client -h 192.168.11.24 -B 1048576
  4. 出力を確認します。

    client サイドの出力例は次のようになります。

更に暗号スイートをいくつか変更し、そのスイート毎の性能を比較したいという場合、client プログラムの “-e” 及び “-l” を使用します。次の例のように行います。

  1. client プログラムの “-e” でサポートする暗号スイートを調べます。
    $ ./examples/client/client -e
    DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-
    AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-
    SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-
    SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-
    POLY1305-OLD:ECDHE-ECDSA-CHACHA20-POLY1305-OLD:DHE-RSA-CHACHA20-POLY1305-OLD:TLS13-AES128-GCM-SHA256:TLS13-AES256-GCM-SHA384:TLS13-
    CHACHA20-POLY1305-SHA256
    
  2. client プログラムの “-l” オプションで、使用したい暗号スイートを選択します。
    $ ./examples/client/client -h 192.168.11.25 -l ECDHE-ECDSA-AES128-GCM-SHA256 -d
    “-l”オプションで指定する暗号スイートは、”-e”オプションで得た文字列をそのまま入力として使用します。前述の “-d” 及び “-B” オプションと組み合わせてご使用下さい。

wolfSSL: NCES人材育成プログラム(NEP) を応援します

今年もまもなく、名古屋大学 組込みシステム研究センター(NCES)によるNCES人材育成プログラム(NEP) の組込み/自動車セキュリティ中級編が開催されます。wolfSSLは教材開発や当日講師として一部お手伝いさせていただいています。

日程:2019年02月27日(水曜日)および28日(木曜日)の2日間
時間:9時30分から17時00分
場所:名古屋大学 IB電子情報館南棟285講義室

プログラム詳細とお申し込み:
https://www.nces.i.nagoya-u.ac.jp/NEP/courses/H30/T09.html

 

Japan IT Week【春】前期内、組込みシステム開発技術展出展のご案内

wolfSSL Japanは、Japan IT Week【春】前期内、第22回 組込みシステム開発技術展に出展いたします。

日時: 2019年4月10日(水)~12日(金)10:00~18:00(最終日のみ17:00終了)
会場: 東京ビッグサイト 西ホール
wolfSSLブース番号: 6-9
展示会ウェブサイト: https://www.japan-it-spring.jp

ご紹介製品:

wolfSSL – 世界で初めてTLS 1.3に対応した、IoTデバイス向けSSL/TLS商用版セキュリティライブラリ
wolfCryptとFIPSモジュール – メモリ制限の厳しい環境に適した暗号ライブラリとFIPS140-2認証を取得したFIPSモジュール
wolfBoot – 【新製品】安全なファームウェアアップデートを実現するセキュアブートローダー
wolfMQTT – MQTT v5.0に準拠したMQTTクライアント
wolfTPM – エッジノードのセキュリティを実現する軽量TPM2.0ライブラリ

みなさまのご来場を心よりお待ちしております。
現地での個別打ち合わせをご希望の方は、info@wolfssl.jp までご連絡ください。

Medtec Japan 2019出展のご案内

wolfSSL Japanは、2019年3月18日(月)から20日(水)まで開催されるMedtec Japan 2019に出展いたします。

日時: 2019年3月18日(月)〜20日(水) 10:00~17:00
会場: 東京ビッグサイト 東ホール
wolfSSLブース番号: 3105
展示会ウェブサイト: http://www.medtecjapan.com

IoT、組込みシステム向けTLSライブラリのwolfSSLは、1,000社を超えるお客様の製品で使われており、医療業界でも多くの採用事例がございます。世界ではじめてTLS 1.3に対応した商用版ライブラリをはじめ、TLSとハードウェアセキュリティの連携を可能にするwolfTPM、wolfMQTT、wolfSSHなどの製品紹介を行います。ぜひお気軽にwolfSSLのブースへもお立ち寄りください。また本展示会では、IoTデバイスのセキュリティをより強固にする新製品のご紹介を予定しております。

みなさまのご来場を心よりお待ちしております。
現地での個別打ち合わせをご希望の方は、info@wolfssl.jp までご連絡ください。

ET/IoT Technology 名古屋 2019出展、セミナー開催のご案内

wolfSSL Japanは、2019/2/6 ~ 7に開催されるET/IoT Technology 名古屋 2019に出展いたします。

日時: 2019年 2月6日(水)〜2月7日(木)10:00〜17:00(最終日のは16時まで)
会場: 吹上ホール(名古屋市中小企業振興会館)
wolfSSLブース番号: K25
展示会ウェブサイト: http://www.jasa.or.jp/etnagoya/
同時開催展:TECH Biz EXPO 2019 / フロンティア21エレクトロニクスショー2019

また今年初となるセミナーも、期間中会場内で開催いたします。

【E-1】動き出したTLS1.3とハードウェア・セキュリティ <<事前登録制>>
〜IoTデバイス開発エンジニアのためのセキュリティ教室〜

日時: 2019年2月 6日(水)15:15~16:00

IoTソリューションも実用期に入り、本格的セキュリティが求められています。刷新された新バージョンのTLSでは何が変わるのか、自社の製品競争力にどのように生かしていけるのか。また、さまざまな形態が提案されているハードウェア・セキュリティをどのようにTLSと連携させていくのか、本格的なIoTセキュリティの実現について解説いたします。

こちらから<<事前登録>>いただけます。

 

みなさまのご来場を心よりお待ちしております。
現地での個別打ち合わせをご希望の方は、info@wolfssl.jp までご連絡ください。

走り出した TLS 1.3(5、最終回):TLS 1.3をフルサポートするwolfSSL

さて、連載最後はwolfSSLのサポートするTLS1.3について紹介して締めくくることにしよう。

今まで紹介してきたようにTLS1.3では、プロトコルの内部的には大幅な改定、改善強化となっている。しかし、wolfSSL ライブラリの使用方法という面からは、今までに対して最小の変更で新しいバージョンのプロトコル機能を追加することができるように配慮されている。例えばビルド方法では、

$ ./configure –-enable-tls13

のようにTLS1.3機能追加のためのビルドオプションを一つ指定するだけでアプリケーションから使用することができる。今までと同じように make コマンドを実行すると、一連のコンパイル、リンクによってwolfSSLライブラリと基本的なサンプルプログラムが出来上がる。

ビルドをした同じパソコン上で、二つウィンドウを開いて、簡単にローカルなTLSサーバー、クライアント間通信を試してみよう。TLS1.2との違いがわかるようにWiresharkなどのパケットキャプチャツールでその内容を見ることができる。プロトコルバージョンオプションに “-v 4” とTLS1.3を指定して、

サーバ側ウインドウ:$ ./examples/server/server -v 4

クライアント側ウインドウ:$ ./examples/client/client -v 4

と実行すると、

SSL version is TLSv1.3
SSL cipher suite is TLS_AES_128_GCM_SHA256
SSL curve name is SECP256R1
I hear you fa shizzle!

のように、TLS1.3のハンドシェイク情報と簡単なサーバクライアント間のアプリケーションメッセージが表示される。Wireshark ならこんな風にローカルホスト同士のハンドシェイクとメッセージのやりとりが表示される。ハンドシェイクでは、最初のClientHello と ServerHello 以降はすべて暗号化されていることがわかるはずだ。ClientHelloのレコード詳細を見てみれば、Cipher Suiteリスト中のTLS1.3独自の暗号スイートやSupportedVersion TLS拡張の内容を見ることもできる。

 

TLS1.3のパケットキャプチャ

 

比較のために、サーバー、クライアントをオプションなしで実行させてみると、このようにデフォルトのTLS1.2でのパケットがキャプチャできる。ハンドシェイクは暗号化されていないので、レコードの種別がきちんと表示されるはずだ。

 

TLS1.2のパケットキャプチャ

 

では、次にアプリケーションから使用する際のAPIについて見てみよう。wolfSSLを使用した典型的なクライアントアプリケーションのコードは概ね次のようになっているはずだ。単純にそれをTLS1.3とするだけであれば、異なるのは最初のプロトコルバージョン指定の部分だけで、その他はまったく変更なく先ほどのような結果を得ることができる。

method = wolfTLSv1_3_client_method(); /* プロトコルバージョン指定 */
ctx = wolfSSL_CTX_new(method); /* コンテクストディスクリプタ確保 */
ssl = wolfSSL_new(ctx); /* セッションディスクリプタ確保 */

/* TCP層の接続処理 */

wolfSSL_connect(ssl); /* TLSセッション確立 */

wolfSSL_write(ssl, buff, size); /* メッセージ送信 */
wolfSSL_read(ssl, buff, size); /* メッセージ受信 */

wolfSSL_free(ssl); /* TLSセッション解放 */
wolfSSL_CTX_free(ctx); /* コンテクスト解放 */

もちろん、TLS1.3で新たに加わった新機能をもっと積極的に利用することも可能だ。この連載の最初でも紹介したような、Early Data (0-RTT)や鍵の明示的更新、また、ハンドシェイク後の認証、セッション再開時DHEなしやセッションチケットを送らないためのオプション指定など各種の新機能に対応したAPIが追加されている。

wolfSSLのTLS1.3機能は昨年夏のIETFによるRFC8446の正式サブミッションとほぼ同時に正式サポートを開始している。無償のGPLv2版はこちらからダウンロードできるので、ぜひ実機で評価してみて欲しい。また、商用版でのTLS1.3についてはinfo@wolfssl.jpまでお知らせください。

連載のご購読ありがとうございました。

wolfSSL Japan 技術サポートチーム

 連載「走り出したTLS 1.3」
 第一回
 第二回 0-RTTでいきなり暗号化メッセージ
 第三回 一律3割引き !?
 第四回 セキュリティプロトコルの技術と経験を結集
 第五回 TLS 1.3をフルサポートするwolfSSL (最終回、本ページ)

Posts navigation

1 2 3 4 5 6 31 32 33