TLS1.3のgo実装 Mintを触ってみる

関連記事
20160607 FirefoxのTLS1.3対応が来たので通信させてみました
Firefox Nightly がTLS1.3対応したので試す


TLS1.3

TLS1.3は、TLS1.2より様々な改善が行なわれています。


個人的には、大きな所で

  • ハンドシェイクのRTT削減
  • セキュリティーの改善。不要な機能の削除・よりセキュアな暗号の使用

が挙げられるかと思います。


TLS1.3の詳細については、PKI Day 2016の「TLS1.3とは何か?」が非常に詳しいかと思います。
http://www.jnsa.org/seminar/pki-day/2016/


既存実装

仕様としてはWGラストコールに向けて議論が続いておりますが、すでに試験実装が行なわれています。
実装一覧については、TLS WGのgithub wikiから確認することが出来ます。
https://github.com/tlswg/tls13-spec/wiki/Implementations


また、これらの幾つかは相互通信のテストも行なわれており、4月頃に開催されたIETF95のハッカソンでは、FirefoxとCloudFlareで通信テストが行なわれています。


具体的には、TLS1.3対応を行ったNSSを組み込んだFirefoxと、Goで実装されたMintを使用したCloudFlareのサーバでの通信テストでした。


詳細については、下記URLにてレポートされています。
https://www.ietf.org/blog/2016/04/ietf-hackathon-getting-tls-1-3-working-in-the-browser/

Mintを動かしてみる

TLS1.3のGO実装であるMint( https://github.com/bifurcation/mint )は、サクッと動くので簡単に動かしてみた。

$ go get github.com/bifurcation/mint

# サーバ側
$ cd ~/Work/go/src/github.com/bifurcation/mint/bin
$ cat ~/test
it works

$ go run mint-server-https/main.go -host localhost -cert ~/server.crt -key ~/server.key  -response ~/test

# クライアント側
$ cd ~/Work/go/src/github.com/bifurcation/mint/bin
$ go run ./mint-client-https/main.go -url https://localhost:4430
it works

パケットキャプチャ

上記だけだと、通信されているか分かりづらいのでパケットキャプチャをする。



TLS1.3のスペックの通りClient HelloのVersionが{ 3, 4 }になっていることが確認できる
(もちろんWiresharkはまだTLS1.3をサポートしていないため、正しくパースすることは出来無い)