本文へスキップ
ecdsa.com
web3.py / eth-account / eth-keys (Python)Web3 ウォレットと署名

エラーメッセージ

eth_keys.exceptions.BadSignature: Invalid signature

別の表記

  • BadSignature: Invalid signature

web3.py / eth-account / eth-keys (Python) — BadSignature from public-key recovery

このエラーの意味

署名の長さは正しいものの、その値が有効な secp256k1 署名を表していないため、公開鍵を復元できません。r または s がゼロか位数以上であるか、r が曲線上の点の x 座標ではないかのどちらかです。これは誤った鍵による署名とは異なります。そのような署名からは、例外が送出されることなく別のアドレスが復元されます。BadSignature は、そのバイト列がそもそも署名ではないことを意味します。

発生する理由

修正方法

  1. 1.

    拒否すべき署名として扱う

    BadSignature を長さや値のエラーと一緒に捕捉して、リクエストを拒否してください。別の v の値で再試行してはいけません。

    python
    from eth_keys.exceptions import BadSignature
    from eth_utils.exceptions import ValidationError
    
    def recover_or_none(message, signature) -> str | None:
        try:
            return Account.recover_message(message, signature=signature)
        except (BadSignature, ValidationError, ValueError):
            return None  # reject the request: the signature is malformed

関連するエラー

署名エラーデータベースをすべて見る