kdnakt blog

hello there.

今週気になったTLS関連のニュース

2023年8月14日~2023年8月20日に読んだ中で気になったニュースとメモ書き(TLSらじお*1第119回の原稿)です。
全文を公開している投銭スタイルです。

[chrome: HTTPSファーストモードへ]

こちらのツイートから。

リンク先はこちら。

blog.chromium.org

Chromeユーザーの接続のうち、5-10%程度がHTTPSでなくプレーンなHTTPを利用しているらしい。デフォルトで安全であるために、HTTPSファーストモードをデフォルトにしていく予定とのこと。

HSTSと類似した形で、HTTPSへの自動アップグレード機能が既に実験中。サーバ側でHSTSの設定をミスると、セルフDoSになってしまう懸念があったが、クライアント側でHTTPへのフォールバックを実装してくれているので、こちらの方が良さそう。

また、2023年9月中旬以降、混合ダウンロード(HTTPSサイト上でのHTTPダウンロード)の実行時に警告を表示予定とのこと。でも悪意のあるファイルをHTTPSサイト上で公開されたらあまり意味ないしな...と思ったけどその場合はサイト本体のCSP(Content Security Policy)設定で回避可能か。

開発者向け、ということでちらっと触れられていたのが、HTTPの場合にアクセスできるCookieの寿命を減らすことでリスク削減を検討中とのこと。色々やってるなあ...。

[ハッシュ関数の衝突]

こちらのツイートから。

リンク先はこちら。

tamakino.hatenablog.com

騒ぎの元になったパスワードハッシュの流出の件は置いておくとして...。

piyolog.hatenadiary.jp

『プロフェッショナルSSL/TLS』p.86でも触れられている、ハッシュ関数MD5の世界初の完全な衝突事例を示したWang氏に関する記事。SHA-1についても衝突事例を発見したほか、中国独自のハッシュ関数SM3を開発したことでも知られているとのこと。
『プロフェッショナルSSL/TLS』ではなぜかSHA-1の衝突についてはWang氏に触れず、2017年のMarc Stevens氏らの事例を紹介している。

developers-jp.googleblog.com

SM3については2021年8月21日のニュースでちらっと触れたことがある。これもWang氏だったのか...。

そういえば、SHA-2はまだ大丈夫なのかな。

[その他のニュース]

▼Cloudflareのホスト名別TLS設定

こちらのツイートから。

リンク先はこちら。

blog.cloudflare.com

設定できるようになったらしい。今までできなかったんだ...意外。
サポートされる暗号スイートのリストについては、modern/compatible/legacyの3パターンから選べるほか、個別に設定することもできるらしい。AWSのALBの設定より柔軟だ。

developers.cloudflare.com

▼step-ca(smallstep)で自前認証局構築

こちらの記事から。

gihyo.jp

2022年6月27日のニュースで取り上げたSmallstepを実際に使うとこういう感じ、というのが分かる。
サーバー証明書のデフォルトの有効期限が24時間(変更は可能)だったりするのが大変かも。certbot使ってれば大丈夫なのかな...何らかの問題でcertbot実行できなかった時のために有効期限はせめて数日は欲しい気もする。

認証局を気軽に作れるのは便利かもしれないけど、ルート認証局のようにしっかりしたサーバの管理も同時に要求されるようになるわけで、あまり気軽には使えない気もする。SSL化するだけならmkcertとかでもできるし...。

github.com

Fiddler Classicの起動失敗

こちらのツイートから。

Fiddler ClassicはWindows用のプロキシ。新しいバージョンのFiddler EverywhereがあるためかTLS設定が更新されておらず、サーバ側のTLS設定とズレがあるため、起動時のバージョンチェックに失敗するらしい。

提供してるサービスのクライアントとサーバのデフォルトの設定はきちんと把握しておかないとな...。

▼nginx/njs-acme

こちらのツイートから。

リンク先はこちら。

github.com

Nginxで利用する証明書変更などの際には、HUPシグナルを送信してNginxに設定ファイルの再読み込みが必要だったが、njs-acmeを利用するとACMEプロトコルを利用して自動化できるらしい。

そもそもnginxをJavaScriptで拡張できるnjsを知らなかった...luaで拡張できるのは知ってたけどこっちの方がとっつきやすそう。

nginx.org

▼OpenSSLのQUIC実装

こちらのツイートから。

リンク先はこちら。

github.com

進んできているらしい。v3.1.0がリリースされたのが2023年3月なので、来年の春あたりにリリースされるんだろうか。

2022年8月の段階では、curlの作者さんはOpenSSLでQUICが使えないのでwolfSSL推しだったっぽい。

daniel.haxx.se

Internet Explorer 28周年

こちらのツイートから。

リンク先はこちら。

www.neowin.net

アドレスバーが全部http://始まりで、確かに90年代はこんな感じだったな、と思う。学校にあったPCがWindows 95だったか98だったか思い出せない...。

[暗認本:18 鍵共有]

引き続き、ニュース以外のメインコンテンツとして『暗号と認証のしくみと理論がこれ1冊でしっかりわかる教科書』を読んでいく。
今週はChapter 4 公開鍵暗号から、セクション18をざっとまとめた。

  • 現代暗号の始まり
    • 共通鍵暗号秘密鍵をどうやって共有するか問題
    • 1970年代に発展
      • 1975年Merkleのパズル
      • 1976年DiffieとHellmanの鍵共有
  • ベキ乗
    • 鍵共有の仕組みの説明の前におさらい
    • (g^a)^b=(g^b)^a=g^(ab)
    • r = x mod n または x ≡ r (mod n)
      • 例) (107 * 108) mod 100 = (107 mod 100) * (108 mod 100) = 56
      • 例) 104^4 mod 100 = (104 mod 100)^4 mod 100 = 56
    • A = g^a mod n, B = g^b mod nとするとA^b ≡ B^a (mod n)
  • DH鍵共有(ディフィー・ヘルマン鍵共有)
    • g、nは公開して共有
    • アリスはaを決めて、Aの値をボブに送信
    • ボブはbを決めて、Bの値をアリスに送信
    • それぞれ秘密鍵sを計算:s = B^a mod n = A^b mod n
    • 共通鍵暗号秘密鍵などに利用
  • DH鍵共有の安全性
    • 攻撃者:g、n、A、Bを入手可能
    • DH Problem:g^(ab) mod nを計算できるか?
    • nが10進数で600桁以上(2048ビット)の素数などの条件があれば解けないはず(今後20年くらいは)
  • DLP一方向性関数
    • g、n、A (g^a mod n)からaが計算できるDHPが解ける
      • B^a = g^(ab) mod n = s
    • →離散対数問題(DLP, Discrete Logarithm Problem)
      • g,n,Aが与えられた時A=g^a mod nとなるaを求めよ
      • nが600桁以上の素数なら解けないはず
      • aからA = g^a mod nを求めるのは簡単(一方向性関数
    • 公開鍵暗号DLPのような良い一方向性関数が重要
      • f(x) = x^2+3x+5はどちらの計算も簡単なのでNG
  • ベキ乗の計算方法
    • x^a mod nの効率良い計算方法を考える
    • a=100だと99回掛け算が必要
      • aが2048ビットだと計算が終わらない
    • 2進数表記を使う
      • 100は0b1100100なので
      • x^100=x^64 * x^32 * x^4
      • x^4は2乗の2乗で計算2回、x^32はその8乗なので計算3回..
      • 最終的に8回の計算でx^100が求められる
    • この方法なら2000ビットのaでも高々4000回の掛け算で計算可能

[まとめ]

TLSしゃべれないので門前払いだ...。TLSっていうかECDHEとかAES-128-GCMとかが無理。

※以降に文章はありません。投銭スタイルです。

*1:TLSらじおは社内勉強会です。このブログを読み上げつつ弊社サービスの実情を語ったりします。

この続きはcodocで購入