4

ここに記載されているように、Python 暗号化ライブラリを使用して署名を検証しようとしています https://cryptography.io/en/latest/hazmat/primitives/asymmetric/rsa/ ここに画像の説明を入力

これはクライアント サーバー TCP チャット アプリのコンテキストであり、クライアントは署名を計算し、それをクライアントに送信して、それが実際に正しいサーバーであることを確認します。署名は検証のために関数に渡されます。

def VerifySignature(signature):
    with open("server_publickey.pem", "rb") as key_file:
        public_key = serialization.load_pem_public_key(
            key_file.read(),
            #password=None,
            backend=default_backend()
        )
        verifier = public_key.verifier(
            signature,
            padding.PSS(
                mgf=padding.MGF1(hashes.SHA256()),
                salt_length=padding.PSS.MAX_LENGTH
            ),
            hashes.SHA256()
        )

        message = b"the message that the server verified"
        verifier.update(message)
        if verifier.verify():
            return 1
        else:
            return 0

0 が返されていることに気付きました。Cryptography の仕様によると、verifier.verify() が失敗すると例外が返されるように見えるため、これをテストする他の方法がわかりません。

4

1 に答える 1

5

verify例外を発生させるか、 を返しますNone。したがって、このコード

if verifier.verify():
    return 1
else:
    return 0

実際には検証チェックに合格した場合でも、常に 0 を返します。適切な使用方法verifyは、それを try ブロックでラップし、InvalidSignature失敗した場合に例外を処理することです。

于 2016-09-20T04:12:43.757 に答える