Aller au contenu principal
NUKOE

Pythonでパスワード漏洩検出器を作成する方法:実践ガイド

• 6 min •
Capture d'écran d'un vérificateur de fuites de mots de passe en Python

想像してみてください:あなたは何年も複数のサイトで同じパスワードを使い続けています。ある朝、あなたの認証情報がダークウェブで流通しているという警告を受け取ります。これは仮定の話ではありません——毎日何千人ものユーザーに実際に起こっていることです。しかし、ほとんどの開発者は、自分のパスワードが侵害されているかどうかを事前に確認する方法を知りません。

思われるのとは異なり、基本的な保護ツールを作成するためにサイバーセキュリティの専門家である必要はありません。50行未満のPythonコードで、実際の侵害データを使用するパスワード漏洩チェッカーを構築できます。この記事では、そのようなツールを段階的に作成する方法を説明し、なぜこのアプローチが手動チェックよりも効果的なのか、そして開発ワークフローにどのように統合するのかを解説します。

なぜテキストファイルを平文パスワードのためにスキャンするのか?

パスワードがオンラインで漏洩しているかどうかを確認する前に、まずコードや設定ファイルに平文で保存されていないことを確認する必要があります。Spiceworks Communityのユーザーが指摘するように、テキストファイル内のハードコードされたパスワードを検索することは、ITチームにとって現実的な懸念事項です。私たちが開発するPythonスクリプトは、パスワードのような文字列を探してディレクトリをスキャンするように適応できます——これはしばしば見落とされる最初の防御ラインです。

従来のアプローチは特定のパターンを探すことですが、Spiceworksでの議論が指摘するように、この方法には限界があります。「P@ssw0rd2025!」のようなパスワードは、「password」という用語に基づく検索を逃れる可能性があります。そのため、私たちのツールはまず既知の漏洩データベースを介した外部検証に焦点を当てます。

Have I Been Pwned API:漏洩に対するあなたの味方

私たちの検出器の中心は、Troy Huntによって維持され、何十億もの侵害されたアカウントを集約するHave I Been Pwned(HIBP)APIになります。平文でパスワードを送信する代わりに、k匿名性の技術を使用します:パスワードのSHA-1ハッシュの接頭辞のみが送信され、機密性が保たれます。APIはその後、その接頭辞に一致する完全なハッシュのリストを返し、それを完全なハッシュとローカルで比較します。

DEV Communityの記事で説明されているこのアプローチは、元のパスワードを公開せずに漏洩を確認するための推奨方法を表しています。これは効率性とプライバシー尊重を組み合わせたものであり、セキュリティツールにおいてしばしば緊張関係にある2つの重要な側面です。

コード:3つの部分からなるPythonスクリプト

1. 依存関係のインストール

私たちのスクリプトには`requests`ライブラリのみが必要で、pipを介してインストールできます:

pip install requests

2. 安全なハッシュ関数

import hashlib
import requests

def check_password_leak(password):
    # パスワードのSHA-1ハッシュを作成
    sha1_hash = hashlib.sha1(password.encode('utf-8')).hexdigest().upper()
    prefix = sha1_hash[:5]
    suffix = sha1_hash[5:]
    
    # HIBP APIに問い合わせ
    url = f"https://api.pwnedpasswords.com/range/{prefix}"
    response = requests.get(url)
    
    if response.status_code == 200:
        hashes = (line.split(':') for line in response.text.splitlines())
        for h, count in hashes:
            if h == suffix:
                return True, int(count)
        return False, 0
    else:
        raise Exception("APIリクエスト失敗")

3. シンプルなユーザーインターフェース

def main():
    print("=== パスワード漏洩チェッカー ===")
    password = input("確認するパスワードを入力してください:")
    
    try:
        leaked, count = check_password_leak(password)
        if leaked:
            print(f"⚠️  このパスワードは{count}件のデータ漏洩で見つかりました。")
            print("推奨:直ちに変更してください。")
        else:
            print("✅ このパスワードは既知の漏洩では見つかりませんでした。")
            print("注意:これはその強度や安全性を保証するものではありません。")
    except Exception as e:
        print(f"エラー:{e}")

if name == "main":
    main()

検証を超えて:安全な生成と保存

漏洩を確認することは方程式の一部に過ぎません。パスワードが侵害された場合、それを置き換える必要があります——しかし何に?Stack Overflowが指摘するように、Python 3.6+では、暗号的に安全なパスワードを生成するために`secrets`モジュールを使用する必要があります。以下は補足的な例です:

import secrets
import string

def generate_secure_password(length=16):
    alphabet = string.ascii_letters + string.digits + string.punctuation
    return ''.join(secrets.choice(alphabet) for _ in range(length))

新しいパスワードが生成されたら、保存の問題が生じます。別のStack Overflowのスレッドはまさにこの問題を取り上げています:Pythonスクリプトで認証情報を安全に保存するにはどうすればよいですか?解決策は、ローカル暗号化から専用のパスワードボールトの使用、MicrosoftのAzure DevOpsドキュメントで説明されているような個人用アクセストークンまで多岐にわたります。

実用的な応用と制限

この基本的なスクリプトはいくつかの方法で拡張できます:

  • ハードコードされたパスワードを探して設定ファイルを自動的にスキャン(Spiceworks Communityで言及されているように)
  • 機密性の高い認証情報が誤ってコミットされた場合に警告するために、CI/CDパイプラインに検証を統合
  • 非技術チーム向けのシンプルなWebインターフェースの作成

しかし、重要な制限があります。HIBPにすでに文書化されている漏洩に対してのみチェックします。弱いがまだ漏洩していないパスワードはテストを通過します。そのため、KnowledgeHutはサイバーセキュリティプロジェクトのリストにパスワード強度テストプロジェクトを含めています——両方のアプローチは補完的です。

未来:ディープラーニングがパスワードセキュリティに出会うとき

研究側からは魅力的なアプローチが出現しています:ファイルやコード内のパスワードを識別するためにディープラーニングを使用すること。SpecterOpsで紹介されたDeepPassプロジェクトは、さまざまなコンテキストで「パスワード候補」を検出するために深層学習モデルを使用します。私たちのシンプルなスクリプトよりも実装が複雑ですが、この方向性は、AIが将来どのように危険な設定の検出を自動化できるかを示しています。

結論:日常的な実践としてのセキュリティ

Pythonでパスワード漏洩チェッカーを構築することは、単なる技術的な演習ではありません——デジタルリスクに対する積極的な考え方を採用することです。これらのツールがどのように機能するかを理解することで、あなた自身の実践とプロジェクトのセキュリティを評価するためのより良い装備が得られます。

ここで紹介したコードは出発点です。パスワードリストの処理、基本的な強度テストの追加、定期的な監査への統合などに拡張できます。DEV Communityの記事によると、何十億もの認証情報がダークウェブで流通している世界では、これらの数行のPythonコードが、幻想のセキュリティと真の保護の違いを生む可能性があります。

まず自分のパスワードをテストしてみてください——結果に驚くかもしれません。次に、このツールをチームと共有してください。セキュリティは専門家だけのものではありません;それはアクセス可能なツールから始まる共同の責任です。

さらに学ぶために