- 研究では、1,024ビット未満の公開DKIMキーが1,700件以上見つかっている。RSAキーは1,024ビット未満の場合、セキュリティが脆弱であり、2018年のRFC 8301以降は使用が中止されている。
- 実験の目的:公開された512ビットRSA公開鍵から秘密鍵を抽出し、主要なメールサービス(Gmail、Outlook、Yahoo Mailなど)でDKIM検証が通るかを確認すること
- メールを本来の送信者になりすまして署名できるかを実験した
RSA公開鍵のデコードと鍵生成
- 公開鍵は
Redfin.comドメインの512ビットRSAキーで、ASN.1 DER形式でエンコードされ、Base64で追加エンコードされている
- 鍵のデコード手順
pタグに含まれるBase64エンコードされた公開鍵をPythonでデコード
n(モジュラス)とe(公開指数)を抽出
- RSAモジュラスの素因数分解
- CADO-NFS使用:Number Field Sieveアルゴリズムベース
- クラウドサーバー仕様:8 vCPU、32GB RAM(Hetznerを利用)
- 追加で32GBのスワップ領域を設定し、CADO-NFSを実行
- 結果:約86時間後に、
nを2つの素因数pとqへ分解することに成功
- RSA秘密鍵の生成
pとqからRSA秘密鍵を生成
- PythonとPyCryptodomeライブラリを使って秘密鍵をPEM形式で出力
DKIM署名テスト
- OpenDKIMに秘密鍵を統合してからメールを送信
- 複数のメールホスティングサービスでDKIM検証結果を確認
- テスト結果:
- DKIM通過:Yahoo Mail、Mailfence、Tuta
- DKIM失敗:Gmail、Outlook、Zoho、Fastmailなど
- Yahoo、Mailfence、Tutaは512ビットキーの脆弱性を検出せず、通過扱いにした
最終結論
- 512ビットRSAキーの脆弱性
- 30年前はスーパーコンピュータで可能だった作業が、現在はクラウドサーバーで数時間かつ8ドル以下で可能
- DKIM署名では1,024ビット未満のキーを絶対に使用すべきではない
- 推奨事項
- メール事業者は、1,024ビット未満のRSAキーを使うDKIM署名を自動的に拒否するべき
- ドメイン所有者はDKIMレコードを点検し、1,024ビット以上に更新する必要がある
- Base64文字列長でDKIMキーを確認可能:1,024ビットキーは最小216文字
1件のコメント
Hacker Newsコメント
14年前、512ビット鍵でも可能だった作業についての記事を書いた。人々が素数やビットコインを探索する際に、探索空間を縮小するための「近道」ライブラリがあるかどうかを示したかった。こうしたライブラリが暗号化サービス設計にどのような影響を与えるかは疑問として挙げられた。
4096ビットDKIM鍵を設定して試してみるという提案が興味深い。ほとんどのオンラインDKIM/SPFチェッカーはDNS照合時には問題ないとするが、テストメールを送ると失敗として表示される。2048ビット以上の鍵の使用は許可されているが、対処する必要はないことを学んだ。
暗号化全般において鍵サイズを急激に増やさない理由に対する疑問がある。計算性能は急速に向上し、量子計算への議論が続いているにもかかわらず、防御面からより大きい鍵を採用しない理由が知りたい。
CADO-NFSを使って、512ビットRSA DKIM鍵をデスクトップPCで28時間で解読した。1024ビット鍵は依然として趣味レベルでは難しいが、学術的には可能だろうと述べている。
タイトルは少し変更されている。元のタイトルは「How We Cracked a 512-Bit DKIM Key for Less Than $8 in the Cloud」だった。
一部のDNS事業者は1024ビット鍵のみを設定できるよう制限している。例えばwordpress.comがそうである。
Hoverは255文字を超えるTXTレコードをサポートしないため、DNS運用を中断せざるを得なかった。Digital Oceanを使って問題を解決した。楕円曲線暗号が標準になることを望む。
大半のプロバイダが512ビット鍵を安全でないと認識し、DKIM署名を拒否したが、Yahoo Mail、Mailfence、Tutaはdkim=passの結果を報告した。GoogleがDKIM署名のために失敗したのか、SPF失敗のためなのかは不明である。
実践的なアプローチを評価する声がある。この記事がどれほど古いものかは不明だが、投稿者の過去の提出内容に基づいて今日書かれたものと見なされる。