うるふブログ

走り出した TLS 1.3(4):セキュリティプロトコルの技術と経験を結集

さてここまでTLS1.3の特徴として、性能やスループットの面からのメリットを中心にお話するというセキュリティ屋の説明らしからぬ順序で進めてきた。そろそろ安全性の面からの話もまとめておこう。

実際のところTLS1.2までの経験で、TLSはセキュリティプロトコルとしてはかなり成熟してきていたといってもいいだろう。しかし、最大の課題は、それまで出てきた数々の問題に対応するために数々のつぎはぎ的な対応が重なってきてしまっていたことだろう。それまでのTLS拡張によるTLSレコードのつぎはぎだらけの拡張では早晩破綻をきたしてしまうことは目に見えていた。たくさんの暗号スイートの中には、すでに危殆化したものや、危殆化が見えているものも増えてきていた。ブロック暗号とMACによる真正性の保証も限界のように思われた。

そういう中で、TLS1.3では、まず暗号スイートの大胆な整理が行われた。最終的には共通鍵暗号の方式としては認証タグ付き暗号(いわゆるAEAD)のみを採用することになった。具体的には、現時点でみとめられているのはブロック暗号としてAES-GCMとAES-CCM、ストリーム暗号ではChaCha-Polyのみだ。TLS1.2でもっとも広く使われているAES-CBCは廃止された。

TLS1.3の安全性の議論で、それまでのバージョンでは配慮されていなかった完全前方秘匿性への配慮が新たに加わった。これは、それまでには考えられなかったような大規模で長期間にわたるネットワークトラフィックの盗聴、蓄積が行われるケースがあることがわかってきたためだ。そういう攻撃方法によれば、長い期間をかけた暗号解読や、本来十分管理されるべきプライベート鍵の流出などで過去の秘匿情報が解読されてしまうリスクがある。公開鍵方式といえども鍵交換において長期間にわたり同じ鍵を使用することは危険であることがわかってきて、そうしたリスクに対する秘匿性、「完全前方秘匿性(PFS)」の重要性が認識されはじめた。

具体的対策としては、鍵交換における静的RSAを廃止し、ディフィー・ヘルマン(DH) においても一時鍵(Ephemeral Key) のみを使用するDHEのみが認められることになった。逆に、DHEのみになったおかげでハンドシェイクは単純化され、シリーズ前回でも紹介したように、オーバーヘッドが削減されたというメリットも享受できるという副産物もある。

以下は、TLS1.2と1.3における暗号スイートの例だ。1.3の鍵交換ではDH系しか使用されないので、そのフィールドは廃止された。ECDH(楕円曲線暗号によるDH)での曲線種別はTLS拡張で示される。

TLS1.2の暗号スイートの例:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

TLS1.3の暗号スイートの例:TLS_AES_128_GCM_SHA256

また、鍵合意部分がDH系のみに整理されたことにともない、ハンドシェイク先頭の暗号スイートの合意部分を除いてその後のハンドシェイクはすべて暗号化でき、安全性が大幅に向上した。

図:TLS1.3ではハンドシェイクの大部分が暗号化

そのほかにも、TLS拡張の整理や、暗号スイートの意味の整理がされたことなど、ひとまずのTLSの完成形といえるものに仕上がった。

 連載「走り出したTLS 1.3」
 第一回
 第二回 0-RTTでいきなり暗号化メッセージ
 第三回 一律3割引き !?

さらに詳しい情報は info@wolfssl.jp までお問い合わせください。

wolfSSLホーム:www.wolfssl.jp (English:www.wolfssl.com)

wolfTips: テスト用鍵、証明書 (ファイルシステム有, 無しの場合)

wolfSSLでは、ユーザが作ったプログラムをテストする際にすぐ使えるようなテスト用の鍵や証明書のファイルを製品といっしょに提供しています。certsディレクトリの直下には、サーバー認証、クライアント認証に使用する公開鍵証明書、プライベート鍵(RSA, ECC)がDERとPEMフォーマットで格納されていますのでご利用ください。また、CRLやOCSP用のファイルもそれぞれのディレクトリに格納されています。

例えば、製品に含まれているTLSサーバーとクライアントのサンプルプログラムのデフォルトでは、サーバ認証のためには次の各ファイルが使われていて、RSAによる認証を行います。

サーバー側証明書:./certs/server-cert.pem

サーバー側プライベート鍵;./certs/server-key.pem

クライアント側証明書:./certs/ca-cert.pem

これに対して、例えば次のような各ファイルを指定すれば楕円曲線暗号によるサーバー認証を実行することができます。

./examples/server/server -k ./certs/ecc-key.pem -c ./certs/server-ecc.pem

./examples/client/client -A ./certs/ca-ecc-cert.pem

 

ファイルシステム無しの場合のテスト用には、wolfssl/certs_test.hヘッダーファイルにC 言語によるデータ定義ファイルが提供されています。このファイルには、上記のcerts直下の各ファイルに対応したデータ定義が格納されています。このファイルをインクルードして、あらかじめ定義されたデータを使ってテストすることができるようになっているのでぜひご利用ください。

2018 TRON Symposium出展のご案内

wolfSSL Japanは、12/12 ~ 14に開催されるTRONSHOWに出展いたします。

日時: 2018年12月12日(水)〜12月14日(金) 10:00〜17:00
会場: 東京ミッドタウン ホール(東京都港区赤坂9-7-1)(アクセス)
TRONSHOWサイト: http://www.tronshow.org
wolfSSLブース番号: B2
 
最新TLS 1.3に対応したwolfSSL組み込みシステム向けTLSライブラリのデモをはじめ、TLSとハードウェアセキュリティの連携を可能にするwolfTPMwolfMQTTwolfSSHなどのご紹介を行います。今年最後の展示会出展となります。みなさまのご来場、ご参加を心よりお待ちしております。
 

wolfSSLのESP-IDFとESP32-WROOM-32サポート

組み込み向け SSL/TLS ライブラリwolfSSLESP-IDF(Espressif IoT Development Framework) サポートとサンプルプログラムを公開しました。

ESP-IDF は、IoT デバイスを迅速に開発する為のフレームワークです。Wi-Fi、Bluetooth、電源管理やその他のシステム機能が備わっています。

ESP-IDF についての情報はこちらを参照ください:
https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html

 
wolfSSL を ESP-IDF で使用するには、wolfSSL のソースコードをプロジェクトへ配置する必要があります。配置方法とビルド方法については、 wolfSSL の IDE/Espressif/ESP-IDF/フォルダに含まれる README.md を参照してください。また、TLS サーバー/クライアントを含むサンプルプロジェクトも追加しています。サンプルプログラムのビルドに関しては、各プログラムに含まれる README.md をご参照ください。これらのサンプルプログラムは、ESP-IDF環境でESP32-WROOM-32 IoT デバイス上で動作確認を行っています。

wolfSSLのマスターブランチはこちらにあります:
https://github.com/wolfSSL/wolfssl

ESP-IDFポーティングの README.md はこちらから参照ください:
https://github.com/wolfSSL/wolfssl/blob/master/IDE/Espressif/ESP-IDF/README.md

サンプルプログラムはこちらにあります:
https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF/examples

 
ESP-IDFをサポートしたwolfSSL は、現在 gitHub 上の wolfSSLリポジトリのマスターブランチにあり次期リリースに含まれる予定です。ESP-IDF環境でのwolfSSLを使った開発についてのご質問は、support@wolfssl.com まで日本語でお問い合わせください。

走り出した TLS 1.3(3):一律3割引き !?

と言っても価格の話ではありあせん、すみません!連載第三回はTLS1.3 で大幅に改善されたフルハンドシェイクについて紹介しようと思う。サーバー、クライアントが初めてのTLS通信をしようとするときは、通信に使う暗号スイートの合意、お互いの信頼の確認、メッセージ暗号化に実際に使う鍵を合意するなど、安全なメッセージ通信のためにさまざまな情報を交換しあう。それがフルハンドシェイクだ。そのフルハンドシェイクにTLS1.2までは最低でもTCP通信にして2往復の通信が必要だった。それがTLS1.3では1往復ですむようになった。

フルハンドシェイク往復回数の改善

しかし、これで通信時間が半分になるかというと、残念ながら通常のネットワークの状況ではそこまでは速くならない。ネットワーク遅延の状況にもよるが、当社のシミュレーションでは典型的な通信状況で概ね30%程度の改善がみられた。

ネットワーク遅延とハンドシェイク時間

 

TLS1.3に移行するすべてのTLS通信で冒頭一律30%、セッション時間が30%削減されるとしたら、これは大きな恩恵だ。特にサーバー運用コストには直接跳ね返ってくる。いま、ブラウザのTLS1.3対応が進んでいる中、サーバー側の対応が進むのは時間の問題だろう。それにIoTデバイス系もひっぱられる構図がみえてくる。

では、TLS1.3でなぜフルハンドシェイクがそのように大幅に削減が可能になったのか?それはいくつか要因があるが一番大きいのは、鍵交換の方式がDH(ディフィーヘルマン)系に統一されたことだろう。TLS1.3の議論の中で、前方秘匿性の問題が大きくとりあげられ、静的RSAによる鍵交換のリスクが認識され、今までDHとRSAの二つの方式が選択できたものが( ECを含む)DH、それも一時鍵(Ephemeral)方式だけに統一された。そのためハンドシェイクの冒頭から、DH系を想定した鍵合意のためのプロセスを開始できるようになった。

もう一つは、これまでハンドシェイクの最後のフェーズとしてスイートの切り替えフェーズがあったのだが、これをスキップしていきなりFinishedとしても安全上問題ないということになったことがある。

こうした整理のおかげで、TLS1.3のフルハンドシェイクは大幅に整理改善され、利用者は一律にその恩恵を受けることができるようになったのだ。

 連載「走り出したTLS 1.3」
 第一回
 第二回 0-RTTでいきなり暗号化メッセージ

TLS1.3について詳しい情報は弊社問い合わせ窓口info@wolfssl.jp までお問い合わせください。
wolfSSLホーム:www.wolfssl.jp (English:www.wolfssl.com)

Renesas RX、uITRON、TINET 向けデモプロジェクト

組込み向けSSL/TLSライブラリwolfSSLのuITRON サポートに興味をお持ちの方のために、ルネサスCS+向けデモプロジェクトを公開しました。このデモでは、uITRON、TINETで動作するSSL/TLS対応のサーバー、クライアントのサンプルプログラムが含まれています。wolfSSLをBSDソケットなど以外のTCP APIにも簡単に対応できる例としてもご覧いただけると思います。

 

アルファプロジェクト社RX71Mボード
このデモは今回のwolfSSL バージョン3.15.5からリリースに含まれます。

デモファイル一式は、wolfSSLのルートディレクトリ下の “IDE/Renesas/cs+/Projects/t4_demo” に格納されています。デモはアルファプロジェクト社のRX71M, RX65Nボード上でボード付属のファームウェアと共に動作します。

ビルド方法など詳細は同ディレクト下のREADMEファイルを参照してください。

ルネサス エレクトロニクス: https://www.renesas.com/jp/ja/
Renesas RX ファミリ: https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx.html
アルファプロジェクト: https://www.apnet.co.jp/

このプラットフォーム向けのwolfSSL組み込み向けSSL/TLSライブラリについてさらにご質問などありましたらsupport@wolfssl.com まで日本語でお知らせください。またTLS 1.3FIPS 140-2やハードウェア暗号化などについてもお問い合わせもお気軽にご連絡ください。 

wolfSSL 3.15.5ダウンロードの準備が整いました

wolfSSL 3.15.5ダウンロードの準備が整いました。このリリースには、wolfSSL組み込みIoTライブラリへ追加された新機能と、既存機能に対するいくつかの修正が含まれています。 TLS 1.3の変更の一つとして、「TLS 1.3機能のみ」をビルドする機能を追加しました。これに加えて、TLS 1.3でのOCSPステープルサポート、TLS 1.3実装で非同期暗号を使用するためのいくつかの修正も追加しています。

以下、今回の修正変更点をまとめます。

 

PKCS解析のための拡張と修正:

– wc_PKCS7_Newおよびwc_PKCS7_Free関数を使用したPKCS7構造体の動的割り当てのサポート
– “–enable-pkcs11″が追加されたPKCS#11のサポート
– KEKRI、PWRI、ORIとのPKCS#7 CMSサポートの拡張
– PKCS#7デコードおよび署名検証のストリーミング機能の追加
– PKCS#7の署名付きデータを使用して構築されたOCTET_STRINGのサポート
– 暗号化によるPKCS8パッディングの修正
– PKCS8解析による汎用ECC PEMヘッダ/フッタのサポート

 

新たなプラットフォームへのポーティングを追加しました。また、いくつかの既存のポーティングを更新し、新しい環境でwolfSSLが使いやすくなりました。

– ASIOのポーティングに ” – enable-asio”設定フラグを追加
– wolfssl-3.15.5 / IDE / mynewt / *ディレクトリに追加されたapache mynewtへのポーティング
– Atollic TrueSTUDIO用のwolfSSL静的ライブラリプロジェクトの追加
– ContikiへのポーティングがマクロWOLFSSL_CONTIKIで追加
– AF_ALGとcryptodev-linux暗号サポート
– STM32L4で AES / SHAハードウェアアクセラレーションをサポート
– Renesas E2Studioプロジェクトファイルの追加
– ルネサスRXサンプルプロジェクトを追加
– STSAFE-A100のTLSサポートのために公開鍵参照コールバックの追加
– ATECC508A / ATECC608AのTLSサポートのために公開鍵参照用のコールバックの追加

 

既存のポーティングの更新:

– インテル®SGXポート、WOLFSSL_SGX使用時に定義されたWindowsバージョンおよびマクロに含まれるファイルへのアップデート
– 最新のCryptoAuthLibのサポートを更新(10/25/2018)
– IAR-EWARMを使用したMQX classic 4.0の修正
– サポートされているNucleusバージョンのアップデート
– CMSIS 4のRowley-Crossworks設定の更新
– Lighttpdをサポートするためのアップデート
– NGINXポートでOCSPを使用するための修正
– wolfSSLによるXCODEビルドの更新
– PIC32MZハードウェアアクセラレーションバッファアラインメント修正
– NXP K82サポートの修正と強化
– OpenSSHポートの更新のための互換レイヤー機能の再配置
– GCC-ARMサンプルの更新と拡張
– wolfcrypt JNIラッパーの更新

 

追加機能:

– DTLSの追加(サーバー/クライアント)側の初期設定
– TLSにてAES-CBCを無効にし暗号スイートのみを有効化するフラグ “–disable-aescbc”の追加
– 証明書のみの解析サポートに “–enable-asn = nocrypt”を追加
– ベンチマーク結果をCSV形式出力する機能とメッセージの日本語化機能を拡張
– サンプルサーバーとクライアントに日本語メッセージ機能(-l 1オプション)を追加
– エフェメラルキーサイズに一致するダイジェストサイズを使用するビルド用のUSE_ECDSA_KEYSZ_HASH_ALGOマクロを追加
– wolfSSL_X509_CA_numやwolfSSL_PEM_read_X509_CRLなどの機能を含む追加の互換性APIを追加
– 証明書Auth IDのクリティカルな拡張をチェックする機能と、チェックをオーバーライドするために、マクロWOLFSSL_ALLOW_CRIT_SKIDを追加
– ConfirmSignature関数に公開鍵コールバックを追加、公開鍵コールバックサポートを拡張
– ECCとCurve25519の鍵生成コールバックのサポートを追加
– 証明書対象OID((businessCategory, jurisdiction of incorporation country,  およびjurisdiction of incorporation state:ビジネスカテゴリ、所在国の管轄および法人設立の管轄)を解析するための追加サポート
– ECCの16進文字列によるエクスポートのためにwc_ecc_ecport_ex APIとwc_export_inti APIを追加
– 関数wc_ParseCertPIVおよびマクロWOLFSSL_CERT_PIVを使用してPIV形式の証明書を解析するサポートの追加
– GZIPをサポートするAPIの追加
– Windows DLLビルド用に追加されたバージョンリソース

 

最適化:

– 可能なかぎり、freeをまとめる最適化
– ALT_ECC_SIZEをSP整数演算で使用
– enable-smallstack (WOLFSSL_SMALLSTACK) オプションにおけるスタックサイズの削減
–  Curve25519のアセンブリ最適化バージョンの改善
– ARMアセンブリでSP整数演算を使用する場合のDHアルゴリズムの修正

 

マクロと動作の変更:

– インライン関数のINLINEマクロをWC_INLINEに変更
– 素数検査に修正を加え、Miller-Rabin検定において小さな素数の固定リストではなく最大40個の乱数を検査するよう改善
– SOCKET_PEER_CLOSED_Eを送信時と受信時で一貫性をもたせる

 

変更点の全部リストはChangelog(英語)に記載しています。

さらに詳しい情報は弊社問い合わせ窓口 info@wolfssl.jp までお問い合わせください。
原文: https://www.wolfssl.com/wolfssl-3-15-5-now-available/

wolfSSLホーム:www.wolfssl.jp (English:www.wolfssl.com)

Arm Tech Symposia 2018 Japan出展と担当セミナーのご案内

wolfSSLは、12/6に開催されるArm Tech Symposiaに出展いたします。TLS 1.3に対応したwolfSSL組み込みシステム向けTLSライブラリのご紹介を行います。また、IoTデバイスからの視点で、TLS 1.3についてのセミナーを一枠担当いたします。ぜひみなさまのご来場、ご参加をお待ちしております。

日時: 2018年12月6日(木) 10:00〜19:00
会場: JPタワー ホール&カンファレンス 〒100-0005 東京都千代田区丸の内二丁目7番2号 KITTE 4,5階
特設Webサイト: https://www.armkk-event.com/ts/
wolfSSLブース番号: 22

wolfSSLセミナー:

14:10-14:40 Track D
TLS1.3がやってきた!
今年8月に全面改版されたインターネットセキュリティプロトコルの標準 TLS1.3について、IoTデバイスからの視点で解説します。これまでと一変、1.3 への移行が着々と進む理由。何が変わるのか、何が変わらないのか。自社製品の競争力としていくためには。

wolfSSL 技術統括 古城 隆

wolfTips: サンプルプログラム集

wolfSSL ライブラリにはたくさんのAPIがありますが、ユーザマニュアルやAPIドキュメントだけではなかなかその使い方がわからない、ということも多いと思います。そんなときにはぜひwolfSSLサンプルプログラムのレポジトリーをご覧になってみてください。 https://github.com/wolfssl/wolfssl-examples の下には、ディレクトリ毎にたくさんのサンプルプログラムがあります。

TLSの基本的な使用例は tls ディレクトリを参照してください。tls_server.c, tls_client.cはサーバー・クライアントが基本的なSSL通信を行うためのサンプルプログラムで、TLS接続を確立したあと、サーバーとクライアントの間で1往復のメッセージ通信を行います。比較対象としてプレーンなTCP通信を行うtcp_server.c、tcp_client.cも用意してあるので、すでにTCPによるアプリケーションをもっているお客さまにとってTLSで何を追加、変更しなければいけないか、簡単に理解できるかと思います。

tlsディレクトリの下には、そのほかBSDソケットやライブラリがすでにサポート対象としていないメッセージ通信を行う場合のメッセージコールバックの使用例、非RTOS環境などで使うノンブロッキングの使用例など各種の例が格納されています。

また、DTLS事前共有鍵証明書の管理や生成などの各種の使用例も参照できますので、ぜひご覧になってください。

 

Posts navigation

1 2 3 4 27 28 29