
暗号公開鍵における一般的な脆弱性を見つけるツール
既知の脆弱性について暗号公開鍵を確認するためのツールとライブラリ
badkeysは、様々な形式の公開鍵を既知の脆弱性に対してチェックします。Web版はbadkeys.infoで利用できます。
badkeysはpip経由でインストールできます:
pip3 install badkeys
仮想環境を使用することをお勧めします。様々なインストールオプションの詳細については、公式Pythonドキュメントを確認してください。あるいは、gitリポジトリから直接 ./badkeys-cli を直接呼び出すこともできます。
Linuxディストリビューションやその他のオペレーティングシステム向けのbadkeysパッケージの概要はRepologyで確認できます。
badkeysを使用する前に、ブロックリストデータをダウンロードする必要があります:
badkeys --update-bl
その後、badkeys を呼び出し、暗号公開鍵を含むファイルをパラメータとして渡すことができます:
badkeys test.crt my.key
自動的にファイル形式を検出しようとします。対応しているのは、PEM形式(PKCS#1とPKCS#8の両方)の公開鍵と秘密鍵、X.509証明書、証明書署名要求(CSR)、SSH公開鍵です。tests/data ディレクトリにいくつかのテスト鍵があります。
デフォルトでは、badkeysは脆弱な鍵に関する情報のみを出力するため、脆弱性が見つからなければ出力は生成されません。-a パラメータはすべての鍵に対して出力を作成します。
コマンドラインツールは、鍵がスキャンされ、エラーが発生せず、脆弱性が検出されなかった場合に0を返します。アプリケーションエラーの場合は1、入力がスキャンできなかった場合(パーサーエラー、サポートされていない鍵タイプ、鍵のないファイル)は2、脆弱な鍵が見つかった場合は4を返します。戻りコードはビットマスクとして組み合わせることができます(例:2|4=6 は、一部の鍵が脆弱で、一部はスキャンできなかったことを示します)。
badkeysはSSHおよびTLSホストをスキャンし、その公開鍵を自動的にチェックできます。これはパラメータ -s(SSH)と -t(TLS)で有効にできます。デフォルトでは、SSHはポート22でスキャンされ、TLSは一般的なプロトコル用にいくつかのポート(https/443、smtps/465、ldaps/636、ftps/990、imaps/993、pop3s/995、および非標準のhttpsポートとしてよく使われる8443)でスキャンされます。
代替ポートは --tls-ports および --ssh-ports で設定できます。
TLSとSSHのスキャンは組み合わせることができます:
badkeys -ts example.org
スキャンモードには制限があることに注意してください。TLS/SSHキーを収集し、badkeysでローカルにスキャンするには、他のツールを使用する方が望ましいことがよくあります。
SSHスキャンには追加の依存関係としてparamikoが必要です。
TLSスキャンは1つのホスト上の複数の証明書(例:ECDSAとRSA)を検出できません。これはPythonのssl.get_server_certificate()関数の制限です。
badkeysはPythonモジュールとしても使用できます。ただし、現在このソフトウェアはベータ版であり、APIは定期的に変更される可能性があります。
badkeysはHanno Böckによって作成されました。
この作業は、2022年にIndustriens FondからCIDIプロジェクト(デンマーク産業におけるサイバーセキュアIoT)およびデンマーク・コペンハーゲンIT大学のCenter for Information Security and Trust (CISAT)を通じて初期資金提供を受けました。2025/2026年には、badkeysはNLnetのNGI0 Core Fundから支援を受けました。