* 署名方式 [CODE(HTTP)@en[RSA-SHA1]] (OAuth 1.0)

[REFS[
- [1] '''[CITE@en[RFC 5849 - The OAuth 1.0 Protocol]] ([TIME[2014-12-28 14:19:21 +09:00]] 版) <http://tools.ietf.org/html/rfc5849#section-3.4.3>'''
- [15] [CITE@en[RFC 5849 - The OAuth 1.0 Protocol]] ([TIME[2014-12-28 14:19:21 +09:00]] 版) <http://tools.ietf.org/html/rfc5849#section-4.11>
]REFS]

[2] [DFN[[CODE(HTTP)@en[[[RSA-SHA1]]]]]] [[署名方式]]の[[署名]]は、[[クライアント]]と[[鯖]]で計算方法が異なります。

[10] [[クライアント]]は、次のように計算します [SRC[>>1]]。
[FIG(steps)[
= [4] [VAR[K]] を[[クライアント]]の [[RFC 3347]] [[RSA秘密鍵]]とします。
= [5] [VAR[M]] を[[署名基底文字列]]とします。
= [6] [VAR[K]] と [VAR[M]] に [[RFC 3447]] 8.2.1節の [[RSASSA-PKCS1-v1_5]] [[署名アルゴリズム]] ([[PKCS#1]])
を適用します。 [[EMSA-PKCS1-v1_5]] の[[ハッシュ関数]]には [[SHA-1]] を使います。
= [7] 結果を [[RFC 2045]] [[Base64]] [[符号化]]します。
]FIG]

[8] こうして得られた文字列を [CODE(URI)@en[[[oauth_signature]]]] [[引数]]の値に使います [SRC[>>1]]。

[3] [[クライアント]]は予め[[鯖]]と [[RSA公開鍵]]を含む[[クライアントcredentials]]を確立しておく必要がありますが、
その方法は [[OAuth]] 仕様としては規定していません [SRC[>>1]]。

[9] [[鯖]]は、次のように[RUBYB[[[検証]]]@en[verify]]します [SRC[>>1]]。
[FIG(steps)[
= [11] ([VAR[n]], [VAR[e]]) を[[クライアント]]の[[RSA公開鍵]]とします。
= [12] [VAR[M]] を[[署名基底文字列]]とします。
= [13] [VAR[S]] を[[クライアント]]から受信した [CODE(URI)@en[[[oauth_signature]]]] [[引数]]の値とします。
= [14] ([VAR[n]], [VAR[e]]) と [VAR[M]] と [VAR[S]] に [[RFC 3447]] 8.2.2節の
[[RSASSA-PKCS1-v1_5]] の[RUBYB[[[検証]]]@en[verify]][[アルゴリズム]]を適用します。
]FIG]

[16] [[SHA-1]] は現在となっては暗号学的に弱いと考えられており、
[[RSA-SHA1]] もその影響を受けます。実用上は喫緊の脅威とはならないと思われますが、
注意はしておくべきでしょう。 [SRC[>>15]]

[17] [[OpenSocial]] の拡張である [CODE(URI)@en[[[xoauth_signature_publickey]]]] / [CODE(URI)@en[[[xoauth_public_key]]]] [[引数]]に対応している実装もあるようです。

[18] [CODE(HTTP)@en[[[RSA-SHA1]]]] はほとんど使われていません。

;; [CODE(HTTP)@en[[[oauth_signature_method]]]] 参照。

[FIG(quote)[
[FIGCAPTION[
[19] [CITE@ja[Firefox 22 での Cookie有効化について << mixi Developer Center (ミクシィ デベロッパーセンター)]]
([TIME[2015-01-09 16:40:08 +09:00]] 版)
<http://developer.mixi.co.jp/appli/ns/pc/firefox_22_cookie/>
]FIGCAPTION]

> 署名方式には RSA-SHA1 を利用しています。

]FIG]
