LoginSignup
1
2

More than 5 years have passed since last update.

PerlでBase64エンコードされたmodulus, exponentお値からRSA署名検証に使われる公開鍵を取り出す方法

Last updated at Posted at 2013-02-17

OpenID ConnectではRSA関連アルゴリズムで生成された署名検証のために、OPは以下の2つの方法で公開鍵を提示する。

  1. PEM形式のX.509証明書を提供
  2. JSON Web Key(JWK)形式でmodulusとexponentの値を提供

今回はRP側が(2)の形式で与えられた情報から署名検証のための公開鍵を取得するまでの手順をまとめる。

必要なモジュール

手順

次のような形式でModulusとExponentを取得する。

{"keys":
    [
        {
            "kty":"RSA",
            "n": "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx
4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMs
tn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2
QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbI
SD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqb
w0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
            "e":"AQAB",
            "alg":"RS256",
            "kid":"2011-04-29"
        }
    ]
}
  1. modulus(n), exponent(e)をそれぞれBase64 decodeする
  2. Crypt::OpenSSL::Bignum->new_from_binによりBignumを生成
  3. Crypt::OpenSSL::RSA->new_key_from_parametersにnとeの値を指定
  4. Crypt::OpenSSL::RSA->get_public_key_x509_stringにより公開鍵を取得

Crypt::OpenSSL::RSAを利用するモジュールであればこの公開鍵を署名検証メソッドに利用できる

詳細

gistを参照 openssl-rsa-pubkey-handling.pl

コメントアウトされているがCrypt::OpenSSL::Bignum->new_from_binを使っている部分に注目。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2