Appearance
作って学ぶTLS 1.3
TLS(Transport Layer Security)は、暗号技術を用いて通信の機密性・完全性・認証を実現するプロトコルであり、現代のインターネットを支える基盤技術の1つです。 Webサイトの閲覧、オンラインバンキング、メールの送受信など、インターネットを介したさまざまなやり取りを安心して行える背景には、TLSによる通信の保護があります。
一方で、TLSが内部でどのように動作しているのかを詳しく知る機会は多くありません。 また、TLSの動作を理解するには、暗号技術だけでなく、ネットワークプロトコルや通信の仕組みなど、複数の分野にまたがる知識が必要です。 そのため、TLSがどのような仕組みで通信を守っているのか、通信のどこまでがTLSで守られているのかを把握するのは容易ではありません。
それでも、TLSの仕組みを理解しておくことは、安全なシステムを構築・運用するうえで重要であり、暗号技術やネットワーク、セキュリティの知識を深めることにもつながります。
そこで本書では、TLS 1.3クライアントをGo言語でゼロから実装しながら、TLSの構造や処理の流れ、それらを支える要素技術を学びます。 実装を通じて、TLSが通信を保護する仕組みをプロトコルの内部動作のレベルから理解することを目指します。
注意事項
- TLSクライアントのみを実装します。
- 暗号プリミティブは、Goの標準パッケージを利用して補います。
- Goの基本的な文法は習得している前提で進めます。
- 学習用の実装のため、エラーを
panicで落とすなど、実運用のコードでは使わない書き方をしている箇所があります。 - 本書のクライアントでは起こり得ない条件の検査は省いています。受け取ったデータの検査は省いていません。
- テストの網羅性は扱わず、実際のサーバーに接続して動作を確認します。
- 例ではexample.comに接続しますが、TLS 1.3に対応したサイトであれば任意のホストに置き換えられます。
- 文章の作成には一部LLMを利用しています。誤りに気づいた場合は、RFCなどの原典を優先してください。
- 誤字脱字や技術的な誤りを見つけたときは、issueを立てるか、プルリクエストを送っていただけると幸いです。
- 本書の文章と図はCC BY 4.0、コードはMIT Licenseで公開しています。MIT Licenseの対象は、リポジトリの
listings/にあるソースコードと、本文中のコードブロックです。 - RFCの文章や他者の資料の図など、出典を示して引用しているものと、著者以外が作成したものは、本書のライセンスの対象外です。それぞれの権利者の条件に従います。
今後の更新予定
12月末までに、次の内容を追加する予定です。
- 英語・中国語等への翻訳
- 暗号技術の仕組みに関する解説の追加
- 解説動画の作成
謝辞
本書は、サイボウズ・ラボユースの川合ゼミの活動の一環として作成されました。
このような貴重な学びと開発の機会を提供してくださったサイボウズ株式会社ならびにサイボウズ・ラボ株式会社、そして設計や実装に関する相談に乗ってくださったメンターやOBの皆様に、心より感謝申し上げます。
また、本書の執筆にあたっては、RFCをはじめ、書籍や解説記事など、多くの資料を参考にしました。参考にした資料は参考文献にまとめています。貴重な知見を公開してくださった著者の皆様に、心より感謝申し上げます。