DISQUS

Tender Surrender: OAuthの署名方式を掘り下げる

  • kazu · 1 year ago
    公開鍵の扱いが中途半端な実装になっているのは、RSA署名方式自体が、署名の潜在的偽造の可能性があるからかもしれないのか? HMAC方式はお互いに秘密鍵を保有することで、すでに秘匿性が担保されていると考えてもいいのか。

    コンシューマーがリクエストする際に公開鍵を指定する仕様なら、誰でもなりすましができてしまう。
    ハードコーディングは、公開鍵を事前に渡しておくことと捉えるなら、それなりに納得できる気もするが。
  • Eiji · 1 year ago
    > 公開鍵の扱いが中途半端な実装になっているのは、RSA署名方式自体が、署名の潜在的偽造の可能性があるからかもしれないのか?

    これは単純に、まだ内輪で話が済んでいるからでしょう。もっと一般的になってくると、厳密に仕様を作り、乗っ取っていなければならなくなると思います。

    > HMAC方式はお互いに秘密鍵を保有することで、すでに秘匿性が担保されていると考えてもいいのか。

    秘匿性とはなんでしょうか?署名はあくまで自分が名乗っている通りである事を証明するものであり、リクエストの内容を隠すものではありません。リクエストの内容を隠したい場合はSSLなどを利用します。

    > コンシューマーがリクエストする際に公開鍵を指定する仕様なら、誰でもなりすましができてしまう。
    ハードコーディングは、公開鍵を事前に渡しておくことと捉えるなら、それなりに納得できる気もするが。

    公開鍵は誰が見ても、誰が使っても、なりすましには利用できません。
    署名の目的は、自分が名乗っている通りの者である事を証明すること。RSA秘密鍵を使って作られた署名は、RSA公開鍵を使ってのみ可逆なので、公開鍵で開けらる署名は秘密鍵の持ち主だと判断できます。また、その公開鍵で開けられる署名は、対となる秘密鍵でしか作る事ができません。

    というわけで、秘密鍵が漏洩することさえなければ、公開鍵をハードコーディングする事も、動的に公開鍵を渡す事も特に問題はありません。