Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TLS1.3対応のサービスが増えているが、クライアントアプリケーション側で考慮すべきことも考えてみる

iwasa
April 25, 2024
600

 TLS1.3対応のサービスが増えているが、クライアントアプリケーション側で考慮すべきことも考えてみる

iwasa

April 25, 2024
Tweet

More Decks by iwasa

Transcript

  1. 2 自己紹介 岩浅 貴大 (いわさ) クラスメソッド株式会社 ➢ 2020年12月入社 ◦ ソリューションアーキテクト

    ◦ 札幌オフィス ➢ 前職まで ◦ アプリケーションエンジニア ◦ 業務アプリ、モバイルアプリ、Webア プリ、色々 ➢ 得意な領域:アプリケーション ➢ 苦手な領域:ネットワーク、セキュリティ
  2. • 様々なプロトコル、アプリケーションで使われる ◦ HTTP, SMTP, FTP … ◦ 昨今は TLS1.0/1.1

    が非推奨になったこともあり、特にWeb アプリ ケーションで HTTPS を構成する際にはバージョンまで気にすることが 多いのでは 9 多くの人が使っているであろうTLS
  3. • サーバーサイド ◦ どのバージョン、どの暗号スイート? ◦ AWS だと「セキュリティポリシー」どうする? • クライアントサイド ◦

    ライブラリによってはTLSバージョンを指定するオプションあるが? ◦ どのバージョンで接続しにいこうとしているのか? 11 TLS のバージョンどうする?
  4. 14 TLS の歴史 1994年 - SSL 2.0 1995年 - SSL

    3.0 1999年 - TLS 1.0 2006年 - TLS 1.1 2008年 - TLS 1.2 2018年 - TLS 1.3 基本的に、プロトコルのバージョンが後になるほど、以前の攻撃に対する対策が盛り込まれるため、より安全性が高くなる
  5. 15 TLS の歴史 1994年 - SSL 2.0 1995年 - SSL

    3.0 1999年 - TLS 1.0 2006年 - TLS 1.1 2008年 - TLS 1.2 2018年 - TLS 1.3 基本的に、プロトコルのバージョンが後になるほど、以前の攻撃に対する対策が盛り込まれるため、より安全性が高くなる 非推奨 非推奨 非推奨 非推奨
  6. - サポートされている対称暗号化アルゴリズムのリストは、レガシーと見なされるすべてのアルゴリズムから削除されました。 残っているのは、すべて関連データを使用した認証暗号化 (AEAD)アルゴリズムです。 暗号スイートの概念が変更され、認証とキー交換メカニズムをレコード保護アルゴリズム(秘密キーの長さを含む)およびキー派生機能とハンドシェイクメッ セージ認証コード(MAC)の両方で使用されるハッシュから分離しました。 - ゼロラウンドトリップタイム(0-RTT)モードが追加され、特定のセキュリティプロパティを犠牲にして、一部のアプリケーションデータの接続セットアップ時のラウンドトリップが節約され ました。 -

    静的RSAおよびDiffie-Hellman暗号スイートが削除されました。 すべての公開鍵ベースの鍵交換メカニズムは、前方秘密を提供するようになりました。 - ServerHello後のすべてのハンドシェイクメッセージが暗号化されます。 新しく導入されたEncryptedExtensionsメッセージにより、ServerHelloで以前に平文で送信されたさまざまな拡張機能 も機密保護を享受できます。 - 主要な派生関数が再設計されました。 新しい設計により、鍵分離特性が改善されているため、暗号作成者による分析が容易になります。 HMACベースの抽出および拡張キー派生関数(HKDF) は、基になるプリミティブとして使用されます。 - ハンドシェイクステートマシンが大幅に再構築されて、一貫性が向上し、ChangeCipherSpecなどの不要なメッセージが削除されました(ミドルボックスの互換性に必要な場合を除く)。 - 現在、楕円曲線アルゴリズムは基本仕様に含まれており、EdDSAなどの新しい署名アルゴリズムが含まれています。 TLS 1.3は、各曲線の単一のポイント形式を支持して、ポイント形式のネゴ シエーションを削除しました。 - RSA確率的署名スキーム(RSASSA-PSS)を使用するためのRSAパディングの変更、圧縮の削除、デジタル署名アルゴリズム(DSA)、およびカスタムEphemeral Diffie-Hellman(DHE)グルー プを含む、その他の暗号化の改善が行われました。 - TLS 1.2バージョンネゴシエーションメカニズムは、拡張機能のバージョンリストを優先して廃止されました。 これにより、バージョンネゴシエーションを誤って実装した既存のサーバーとの 互換性が向上します。 - サーバー側の状態がある場合とない場合のセッション再開、および以前のTLSバージョンのPSKベースの暗号スイートは、単一の新しいPSK交換に置き換えられました。 - 必要に応じて、RFCの更新されたバージョンを指すように参照が更新されました(RFC 3280ではなくRFC 5280など)。 RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳 より https://tex2e.github.io/rfc-translater/html/rfc8446.html 16 TLS 1.3 は TLS 1.2 から 何が変わったのか
  7. - サポートされている対称暗号化アルゴリズムのリストは、レガシーと見なされるすべてのアルゴリズムから削除されました。 残っているのは、すべて関連データを使用した認証暗号化 (AEAD)アルゴリズムです。 暗号スイートの概念が変更され、認証とキー交換メカニズムをレコード保護アルゴリズム(秘密キーの長さを含む)およびキー派生機能とハンドシェイクメッ セージ認証コード(MAC)の両方で使用されるハッシュから分離しました。 - ゼロラウンドトリップタイム(0-RTT)モードが追加され、特定のセキュリティプロパティを犠牲にして、一部のアプリケーションデータの接続セットアップ時のラウンドトリップが節約され ました。 -

    静的RSAおよびDiffie-Hellman暗号スイートが削除されました。 すべての公開鍵ベースの鍵交換メカニズムは、前方秘密を提供するようになりました。 - ServerHello後のすべてのハンドシェイクメッセージが暗号化されます。 新しく導入されたEncryptedExtensionsメッセージにより、ServerHelloで以前に平文で送信されたさまざまな拡張機能 も機密保護を享受できます。 - 主要な派生関数が再設計されました。 新しい設計により、鍵分離特性が改善されているため、暗号作成者による分析が容易になります。 HMACベースの抽出および拡張キー派生関数(HKDF) は、基になるプリミティブとして使用されます。 - ハンドシェイクステートマシンが大幅に再構築されて、一貫性が向上し、ChangeCipherSpecなどの不要なメッセージが削除されました(ミドルボックスの互換性に必要な場合を除く)。 - 現在、楕円曲線アルゴリズムは基本仕様に含まれており、EdDSAなどの新しい署名アルゴリズムが含まれています。 TLS 1.3は、各曲線の単一のポイント形式を支持して、ポイント形式のネゴ シエーションを削除しました。 - RSA確率的署名スキーム(RSASSA-PSS)を使用するためのRSAパディングの変更、圧縮の削除、デジタル署名アルゴリズム(DSA)、およびカスタムEphemeral Diffie-Hellman(DHE)グルー プを含む、その他の暗号化の改善が行われました。 - TLS 1.2バージョンネゴシエーションメカニズムは、拡張機能のバージョンリストを優先して廃止されました。 これにより、バージョンネゴシエーションを誤って実装した既存のサーバーとの 互換性が向上します。 - サーバー側の状態がある場合とない場合のセッション再開、および以前のTLSバージョンのPSKベースの暗号スイートは、単一の新しいPSK交換に置き換えられました。 - 必要に応じて、RFCの更新されたバージョンを指すように参照が更新されました(RFC 3280ではなくRFC 5280など)。 RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳 より https://tex2e.github.io/rfc-translater/html/rfc8446.html 17 TLS 1.3 の TLS 1.2 からの主な違い よりセキュアで、パフォーマンス良い
  8. - このドキュメントの推奨事項が既知の攻撃を緩和する場合、TLS 1.2の使 用はTLS 1.3の使用と同じくらい安全です - TLS 1.3は、プロトコルの大きなオーバーホールであり、TLS 1.2の多くのセキュリティ問題を解決 します。実装がTLS

    1.2をサポートする限り(TLS 1.3にデフォルトであっても)、このドキュメン トで指定されたTLS 1.2に関する推奨事項に従う必要があります。 - TLSとDTLを再利用するほとんどのアプリケーションプロトコルでは、 TLS 1.3のみに移行する必要はありません。 RFC 9325 - Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) 日本語訳 より https://tex2e.github.io/rfc-translater/html/rfc9325.html 19 本日時点で TLS 1.2 は非推奨ではない
  9. - このドキュメントの推奨事項が既知の攻撃を緩和する場合、TLS 1.2の使 用はTLS 1.3の使用と同じくらい安全です - TLS 1.3は、プロトコルの大きなオーバーホールであり、TLS 1.2の多くのセキュリティ問題を解決 します。実装がTLS

    1.2をサポートする限り(TLS 1.3にデフォルトであっても)、このドキュメ ントで指定されたTLS 1.2に関する推奨事項に従う必要があります。 - TLSとDTLを再利用するほとんどのアプリケーションプロトコルでは、 TLS 1.3のみに移行する必要はありません。 RFC 9325 - Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) 日本語訳 より https://tex2e.github.io/rfc-translater/html/rfc9325.html 20 本日時点で TLS 1.2 は非推奨ではない
  10. 22 AWS サービスで TLS 1.3 AWS サービス サポート時期 DevelopersIO CloudFront

    2020.09.04 TLSv1.3 をサポートしたCloudFrontの動作を弊社のカフェサイトで確認してみた Network Load Balancer 2021.10.18 [アップデート]NLBがTLS1.3に対応しました! Application Load Balancer 2023.03.23 [アップデート] Application Load Balance (ALB) がTLS 1.3をサポートしました RDS for PostgreSQL 2023.11.17 Amazon RDS for PostgreSQL 16.1 から TLS 1.3 がサポートされていたので確認し てみた OpenSearch Service 2023.01.04 Amazon OpenSearch Service と Amazon OpenSearch Serverless が TLS 1.3 を サポートしていたので有効化方法や注意点などを確認してみた OpenSearch Serverless 2023.02.14 API Gateway 2024.02.16 [アップデート] Amazon API Gateway で TLS 1.3 をサポートする API タイプ、エンドポ イントタイプが増えました Lightsail 2024.04.03 [アップデート] Amazon Lightsail でディストリビューションの最低 TLS バージョンを設 定出来るようになりました
  11. 43 クライアントごとの対応状況 クライアント 状況 備考 Web フロントエンド ブラウザバージョンに依存 モバイルアプリ OSバージョンに依存

    独自実装している場合もある その他クライアント クライアントによりバラバラ OSに依存している場合もあれば、依存せずに HTTPクライアントが独 自実装している場合もある Webフロントエンド以外のクライアントは個別に確認を推奨
  12. • 古いOS、古いブラウザバージョン → レガシークライアントと呼ばれる ◦ ブラウザバージョン ◦ モバイルOS(下位バージョンで独自実装による接続も可能) 45 TLS

    1.3 が使えないクライアント ブラウザ デフォルト有効 備考 Chrome 70以上 下位バージョンオプトインあり Edge 79以上 Safari 14以上 macOSバージョンにも依存 Firefox 63以上 モバイルOS デフォルト有効 備考 Android Android 10 (API 29) iOS iOS 12.2以上 ※ SecureTransport API は対象外
  13. • クライアントライブラリに制限がある場合 ◦ .NET HttpClient の MacOSサポートなど ▪ MacOS で

    HttpClient を使う場合は .NET 8 時点では TLS 1.3 がサ ポートされていない 46 TLS 1.3 が使えないクライアント https://dev.classmethod.jp/articles/dotnet-httpclinet-tls-version-macos/
  14. • セキュリティポリシーを TLS 1.3 のみにする場合は注意 ◦ 互換性がなくなるのでクライアントアプリケーションに影響でるかも • TLS 1.2

    = セキュアとは限らない ◦ TLS 1.2 は非推奨ではないが、使う場合は推奨構成に準拠 • クライアント実装 ◦ クライアントでバージョン固定などの独自実装は避けたほうが無難 ◦ レガシーAPIは使わない 51 まとめ
  15. 52