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

TLS 1.3 で学ぶ暗号技術

TLS 1.3 で学ぶ暗号技術

2023/3/11 情報科学若手の会春の陣2023

松本直樹

March 11, 2023
Tweet

More Decks by 松本直樹

Other Decks in Technology

Transcript

  1. TLS (Transport Layer Security) TLS (Transport Layer Security) • 通信における認証及び暗号化を提供するプロトコル

    → なりすましや、第三者が盗み見できない • HTTPS や QUIC において利用されている • TLS 1.3 (RFC 8446) が最新 • TLS 1.2 はまだ使える • TLS 1.1 以前は脆弱性が存在するため利用してはならない 5
  2. TLS 1.3 における通信の大まかな流れ お互いに鍵を交換→認証→ハンドシェイク完了→データ交換 クライアント サーバー 通信しましょう パラメータこんな感じで 承知しました パラメータと

    正しいサーバーであること の証明を共に送ります 正しいサーバーだね パラメタから鍵の生成した OKです! じゃ、通信開始で! 暗号化したデータです (データを復号し) なるほど (データを復号し) へー 暗号化したデータです 6
  3. TLS 1.3 の詳細な特徴 • ハンドシェイクの整理・機能追加 • 通常ハンドシェイクにおけるメッセージ往復回数の削減 TLS 1.2 まで

    → 2往復、 TLS 1.3 → 1.5 往復 • セッション再開ハンドシェイクの整理 • 0-RTT ハンドシェイクの追加 • 利用できる暗号スキーマの整理 • 危殆化した暗号スキーマの廃止(RC4, MD5等) • 楕円曲線暗号や認証付き暗号(AES-GCM 等)の利用が標準となる • 前方秘匿性(PFS) を担保する鍵交換のみサポート ※PFS: ある時点で鍵交換における秘密鍵の情報の漏洩が生じても、それ以前の暗号化されたデータは復号できない こと • 安全性自体が形式的に検証された有名なプロトコルとしては初めて 7
  4. つまり? TLS 1.3 の直接的な嬉しさ • ハンドシェイクに必要なメッセージ往復回数の削減 → TLS のハンドシェイクに要する時間が短くなる =

    UX の改善 • 利用されるアルゴリズムの整理 → 危殆化したアルゴリズムは含まれないため、より安全に • PFS のサポート → 秘密鍵漏洩時の被害を最小限にできるため、より安全に 8
  5. 利用される暗号技術 • 鍵交換アルゴリズム • TLSセッションで利用される鍵の交換に利用するアルゴリズム • TLS 1.3 ではDiffie-Hellmanを利用する(=PFSを実現) •

    署名アルゴリズム(デジタル署名) • メッセージの真正性を検証するためのアルゴリズム • TLS 1.3 では楕円曲線やRSA暗号による署名を用いる • 暗号化アルゴリズム • アプリケーションのデータを暗号化するアルゴリズム • TLS1.3 では改ざんを検出できる認証付き暗号(AEAD)を利用 9
  6. Diffie-Hellman(DH) による鍵の交換 Diffie-Hellman: 2者間で鍵自体を共有することなく鍵を共有する手法 • 𝑔𝑎 𝑚𝑜𝑑 𝑝から 𝑎 を求めることは困難である(離散対数問題)

    • 中間者攻撃には脆弱であり、認証を行う仕組みが必要 12 Alice Bob 公開パラメータ: g, p(素数) を共有 秘密鍵: a 秘密鍵: b 𝑔𝑎 𝑚𝑜𝑑 𝑝 𝑔𝑏 𝑚𝑜𝑑 𝑝 𝑔𝑎𝑏 𝑚𝑜𝑑 𝑝 𝑔𝑎𝑏 𝑚𝑜𝑑 𝑝 𝑔𝑎𝑏 𝑚𝑜𝑑 𝑝が共有される
  7. DH だと何が嬉しい? • 別の秘密鍵を利用することなく鍵を共有できる • 盗聴する第三者は共有された鍵を得ることが困難である → PFS を担保できる •

    中間者攻撃に対しては脆弱 → 正しい相手であるか検証する必要がある Alice Bob 秘密鍵: a 秘密鍵: b 𝑔𝑎 𝑚𝑜𝑑 𝑝 𝑔𝑒 𝑚𝑜𝑑 𝑝 𝑔𝑎𝑒 𝑚𝑜𝑑 𝑝 𝑔𝑏𝑒 𝑚𝑜𝑑 𝑝 𝑔𝑎𝑒 𝑚𝑜𝑑 𝑝が共有される Mallory 𝑔𝑏 𝑚𝑜𝑑 𝑝 𝑔𝑒 𝑚𝑜𝑑 𝑝 𝑔𝑏𝑒 𝑚𝑜𝑑 𝑝が共有される e で書き換え 13
  8. RSA暗号による署名(RFC 8017) 公開鍵暗号である RSA暗号を用いたデジタル署名が有名 (注: 署名 ≠ 暗号化) • 署名手法にはいくつかあり、RSASSA-PKCS1-v1_5

    を取り上げる メッセージ 暗号学的 ハッシュ関数 エンコード 𝑥: 入力, 𝑦: 出力 𝑦 = 𝑥𝑑 𝑚𝑜𝑑 𝑛 𝑑: 秘密鍵, 𝑒: 公開鍵, 𝑛: 法 (𝑒 と 𝑛 は公開) とする 署名 署名 EMSA-PKCS1-V1_5-ENCODE RSASP1 検証 𝑥: 入力, 𝑦: 出力 𝑦 = 𝑥𝑒 𝑚𝑜𝑑 𝑛 RSAVP1 メッセージ 暗号学的 ハッシュ関数 エンコード EMSA-PKCS1-V1_5-ENCODE 署名 一致すれば 検証成功 15
  9. 公開鍵基盤(PKI) 署名の検証には相手の公開鍵(と n)が必要 → 本人の正しい公開鍵を手に入れるにはどうすればよいのか? 公開鍵基盤(Public Key Infrastructure): 正しい公開鍵であることを担保する基盤 •

    署名の検証に必要な情報一式を「証明書」として配布 • 「認証局(CA)」が証明書に署名する • CA の証明書はさらに上位のCAにより署名される(最上位のCAはルートCAと呼ばれる) サーバー証明書 認証局 発行 自分の秘密鍵で 証明書を署名 16
  10. 認証付き暗号(AEAD) Authenticated Encryption with Associated Data(AEAD) • データの機密性と完全性(正しさ)を担保する • 普通の共通鍵暗号では、復号結果が正しいか判断できない

    • 復号時に認証を行い、失敗すると復号失敗とする cipher, tag = AEAD_Enc(plain, ad, key, nonce) tag: 認証用のタグ, ad: 暗号化はされないが認証はされるデータ plain = AEAD_Dec(cipher, tag, ad, key, nonce) • TLS 1.3 では AES-GCM と Chacha20-Poly1305 が主に利用される 19
  11. まとめ TLS 1.3 には以下の暗号技術が用いられている • 鍵交換アルゴリズム: 鍵の安全な共有 • 署名アルゴリズム: データの真正性の担保

    • 暗号化アルゴリズム: データの機密性の担保 複数の暗号技術を組み合わせることで安全性を担保 それぞれの「何を保証できるのか/できないのか」の理解が重要 20