スキップしてメイン コンテンツに移動

【暗号】OAuth 2.0より考察



最近はログインスクリプトを書くとき、いろいろなソーシャルプラットフォームに対応できるようにしてほしいという要望が多くあるため、OpenIDのみを使ってきたのですが、OAuth(オープンプロトコル)を学んで、おもしろいダイアグラムを見つけました。


参照:http://tools.ietf.org/html/rfc6749

ユーザーが認証を与えると、アクセストークンとリフレッシュトークンのペアをもらいます。そうすることでユーザーはアクセストークンを使ってリソースにアクセスできるようになります。

ここで最も重要なポイントは、アクセストークンはすぐに有効期限切れになってしまう点です。アクセストークンが切れると、リフレッシュトークンを使って新しいトークンのペアをもらいます。そうすることでセッションが常に新しく、乗っ取りが難しくなります(ちゃんと実装していれば。)

そこで、OAuth 2.0は安全ななメッセージ交換をするのにこれは非常にいい方法だと考えました。というのもOAuth 2.0は1.0よりもよくないのですが、参考として
It took IETF about 31 draft versions and the resignation of the lead author/developer Eran Hammer from the committee to finally publish the spec. Eran sparked a controversy by calling the spec "a bad protocol and a case of death by a thousand cuts".
参照:http://code.tutsplus.com/articles/oauth-20-the-good-the-bad-the-ugly--net-33216

自分がこれはとてもよい方法だと思う理由に入る前に、まずは基本的な暗号化方式と鍵交換をおさらいしたいと思います。



▼対称鍵暗号
最も簡単な暗号化/復号化方式で、暗号文は送信者と受信者の両方に、メッセージを相互変換するための共通鍵(ルール)を作ることです。



しかしこの方法だと、第三者に鍵を盗まれてしまう可能性があったため、ジェームズH.エリス、またはホイットフィールド・ディフィーとマーティン・ヘルマンは鍵配布のための非対称鍵技術を発明しました。



▼非対称鍵暗号


これは、受信者が公開鍵と秘密鍵の2つの鍵を作ります。公開鍵は送信者がメッセージ(平文)を暗号する用のもので、受信者は秘密鍵を使って公開鍵で暗号化された暗号文を復号します。

非対称鍵の配布によって、対称鍵のときに鍵が盗まれる危険性を回避したのですが、大きなメッセージの復号には、非常に時間がかかってしまいます。



▼PGP
PGPでは、平文を対称鍵で暗号化し、その対称鍵を保護するために非対称鍵を使います。これにより計算速度アップと、充分な強度の暗号をキープできます。



ここでOAuthダイアグラムに戻って、もし仮に、アクセストークン自身が暗号文であれば、OAuthでは非常によいメッセージ交換ができるのでないかと考えました。

流れは以下のようなイメージです。


1. 送信者は公開鍵と秘密鍵の2つの鍵を作成し、公開鍵を受信者に渡します。

2. 受信者はアクセストークンとリフレッシュトークンの2つの対称鍵を作成します。

アクセストークン……1つ目の対称鍵で構成され、公開鍵による短期限のタイムスタンプで暗号化されます。
リフレッシュトークン……2つ目の対称鍵で構成され、公開鍵による長めの有効期限のタイムスタンプで暗号化されます。

3. 受信者はアクセストークンとリフレッシュトークンの両方を送信者に渡します。すると送信者も受信者も1つ目の対称鍵で、有効期限までの時間内で、短期間対話ができるようになります。

4. 1つ目の対称鍵が期限切れになると、受信者はエラーを出したり、送信者が復号できなくなると、送信者は2つ目の対称鍵を使ってトークンの要求をし、2段階目の対話として続けることができます。



OAuthによる安全なメッセージの受け渡し理論を使ったシンプルな考えで、鍵が一般に公開されている時間が短くなるとより安全で、同じトークンが長い時間出てしまう危険性を減らせるのではと考えています。




Written by Creative Flake

コメント

このブログの人気の投稿

ブログ移転のお知らせ

いつもご覧いただきありがとうございます。 当ブログは下記URLへと引っ越しました。 http://blog2.creativeflake.com/ 今後はこちらをご覧ください!!

太字にしても文字を潰さない方法「太字に強い無料の日本語フォント」付き

PhotoshopやIllustratorなどで、太文字を書きたいとき文字がつぶれて見づらいことはありませんか? つぶれ文字の場合 文字がつぶれてしまった場合の多くは、 ・ボールド「B」で太くしている ・枠線をつけて太くしている こういうケースが多く見られます。 これは、元の文字の外側に太線をつけるため、スキマが埋められてしまうことでつぶれて見えるためです。 つぶれない文字にするには 文字をつぶさないようにするには、文字そのもののウェイトで調整します。 ウェイトというのは「太さ」という意味です。 例えば、「●●ゴシック-M」とか、「▲▲明朝-W3」などという、フォント名の最後にアルファベットや数字がついているのを見たことはありませんか? まずはフォント(文字)を選ぶ際に、ウェイトのバリエーションが存在するかどうか確認してから使うことをおすすめします。 太字にできる無料の日本語フォント そもそもどんなフォントが太字のバリエーションがあるのか、今回は無料の日本語フォントを紹介します。 M+フォント やや丸みのあるやさしいイメージのゴシックフォント。 極細から太字までフォントウェイトがあります。 【ライセンス】商用・非商用可。利用、複製、再配布可能。 配布サイトでダウンロード Kazesawaフォント こちらも丸みのある、認識性の高いフォントです。 エクストラライトからエクストラボールドまで6種類のウェイトがあります 【ライセンス】SIL Open Font License準拠 配布サイトでダウンロード 源ノ角ゴシック AdobeとGoogleが共同開発したオープンソースのフォントです。 エクストラライトからヘビーまで7種類のウェイトがあります 【ライセンス】SIL Open Font License準拠 配布サイトでダウンロード Rounded M+ 丸ゴシックのかわいい感じなのに品のあるのフォントです。 また、「標準」、「丸さ強め」、「丸さ弱め」からも選んでダウンロードが可能です。 【ライセンス】商用・非商用可。利用、複製、再配布可能。 配布サイトでダウンロード Written by Cr

【JavaScript基本から 第1回】JavaScriptはどこに書くの?

JavaScriptはどこに書くの? JavaScriptは  タグの中と、 内の好きな位置に書くことができます。 <script> タグ JavaScriptのコードは<script> 〜</script> タグの間に書くルールがあります。 記述例 <script> document.getElementById("demo").innerHTML = "Hello World!!"; </script> *以前のJavaScriptではtype属性を使って、<script type="text/javascript"></script> と書いていましたが、 今はこのtype属性は必須ではありません。 JavaScriptは <head> タグや <body> タグ内に書く HTML内に、何個でもJavaScriptを書くことができます。 JavaScriptは<head> タグや <body> タグ、または、その両方に書くことができます。 *好きな場所に書くことはまったく問題ありませんが、見やすいコードのためには1箇所にまとめて書くことが望ましいです。 <head> タグ内に書いた場合の例 JavaScriptをHTMLの<head> タグ内に書いた例です。 下記のサンプルでは、ボタンをクリックしたときに、関数を実行する例です。 記述例 <!DOCTYPE html> <html> <head> <script> function myFunction() { document.getElementById("demo").innerHTML = "内容が書き換わりました"; } </script> </head> <body> <p id="demo"&gtボタンをクリックすると内容が変わります&