Download - これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用
@kura_lab @nov
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
倉林 雅(通称: kura) OpenID ファウンデーション・ジャパン
エバンジェリスト ヤフー株式会社 IDサービス エンジニア
ID厨 @kura_lab
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Nov Matake
OpenID Foundation Japan
Evangelist 初号機
OAuth.jp
Idcon
Rubyist
fb_graph, rack-oauth2, openid_connect etc.
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID ファウンデーション・ジャパン
2008年設立
OpenID TechNight
翻訳・教育 WG
トラストフレームワーク WG
Enterprise Identity WG
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Japan Identity Cloud Summit
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
#idcon
OpenID Connect x
ユーザー認証@kura_lab
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.iPhone Apps by AxsDeny
これまでつくったアプリを 思い出してみよう
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.click click by Tim Franklin Photography
Facebookログインを つかってますか?
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OAuth 2.0 の Implicit フロー
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.Source: developers.facebook.com
User’s Browser
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.Source: developers.facebook.com
Your App
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
アプリ表示
Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.Source: developers.facebook.com
ダイアログ表示
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
access token 取得
Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
APIリクエストSource: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
トークン置き換え攻撃の脆弱性
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
トークン置き換え攻撃の脆弱性
【メモ】 ネイティブアプリの多くはバックエンドに 自前のサーバーがあり通信を行う アプリからバックエンドサーバーにアクセストークンを 送って認証すると脆弱性が生まれる
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
Your Server
Your App
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Weak Point
Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
access token トークン置き換え
Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
access token トークン置き換え
Source: developers.facebook.com
【メモ】 悪意ある開発者が別のアプリで他人のアクセストークンを取得する そのアクセストークンを置き換えてバックエンドサーバーに送信する
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com× 他人のユーザデータ
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com× 他人のユーザデータ
【メモ】 アクセストークンを発行したクライアントを検証せずに ユーザ情報を取得してしまうと謝ったユーザで認証を行ってしまう
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.security checked at Schiphol by sharyn morrow
クライアントの制限 Audience Restriction
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.security checked at Schiphol by sharyn morrow
クライアントの制限 Audience Restriction
【メモ】 前述のImplicitフローはSDKで実装されるケースが多いが、 バックエンドサーバにアクセストークンを渡すことを想定していないクライアントの制限をせずにトークンを受け入れると問題が発生する
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ID Token?
Question Mark Block by Jared Cherup
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ID Token?
Question Mark Block by Jared Cherup
【メモ】 Implicitを使ってサーバーサイドで認証を行う際には OpenID Connectの仕様にあるID Tokenを用いることで トークン置き換え攻撃の脆弱性を防ぐことができる
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gFWFOEjXk
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gFWFOEjXk
【メモ】 OpenID Connectで用いられるid_tokenパラメーターのサンプル
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gFWFOEjXk
JSONオブジェクト, Base64
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gFWFOEjXk
ヘッダー部
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gFWFOEjXk
ペイロード部
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gFWFOEjXk
署名, HMAC-SHA256
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
{“typ”:”JWT”, “alg”:"HS256"} !
{“iss”:”https://auth.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380}
JSONオブジェクト
ヘッダー部
ペイロード部
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
iss: issuer, トークンの発行者
aud: audience, クライアント識別子
sub: subject, ユーザー識別子
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
{“typ”:”JWT”, “alg”:"HS256"} !
{“iss”:”https://auth.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380}
audience = クライアント識別子
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
isser が audience のためにsubject を認証する
ID Tokenでわかること
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
isser が audience のためにsubject を認証する
ID Tokenでわかること
【メモ】 サーバーサイドでID Tokenを受け取りaudienceを検証することで 他のアプリで発行されたトークンと区別することができる
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.DA-SC-91-05372 by U.S. Army Korea (Historical Image Archive)
リプレイアタックの対処法
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.DA-SC-91-05372 by U.S. Army Korea (Historical Image Archive)
リプレイアタックの対処法
【メモ】 サーバーサイドでトークンの検証をおこなうため リプレイアタックの対策をしなければならない
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
nonce = number used once
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
nonce = number used once
【メモ】 ID Tokenにはリプレイアタック対策のnonceが導入されている
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
{“typ”:”JWT”, “alg”:"HS256"} !
{“iss”:”https://auth.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380}
リクエストごとに ユニークな文字列
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.Armour on display in the War Gallery by Royal Armouries
トークン置き換え攻撃リプレイアタック
ID Tokenで対策
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
nonceを生成リクエスト
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
access tokenID Token (nonce)
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
トークン置き換え
ID Token (nonce)
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
トークン置き換え
ID Token (nonce)
【メモ】 前述の脆弱性の例ではアクセストークンをサーバーに送信していたが アクセストークンは認証のための仕組みではないため利用しない かわりにID Tokenを送信して検証する
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
検証で不正を防止
ID Token (nonce)
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
検証で不正を防止
ID Token (nonce)
【メモ】 署名の検証、audienceなどをチェックして 問題なければログイン状態にする
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.iPhone 5S white vs. iPhone 5 black/slate by Morid1n
ネイティブアプリに 鍵を埋め込む?
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.iPhone 5S white vs. iPhone 5 black/slate by Morid1n
ネイティブアプリに 鍵を埋め込む?
【メモ】 ここまでサーバーサイドでの認証をみてきたがクライアントサイドに注目 ID Tokenにおける署名検証に用いる鍵についての紹介
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
署名? HMAC-SHA1?
HMAC-SHA256?
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
共通鍵暗号と公開鍵暗号
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
共通鍵暗号と公開鍵暗号 【メモ】
署名検証に共通鍵暗号を用いた場合は署名生成時と同一の鍵で検証する 公開鍵暗号を用いた場合は署名生成時に用いた秘密鍵ではなく 公開鍵を用いて検証する
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ネイティブアプリに 共通鍵(secret)を埋め込むべきではない
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ネイティブアプリに 共通鍵(secret)を埋め込むべきではない
【メモ】 署名に共通鍵暗号を用いる場合は 鍵が漏洩すると署名を偽装されてしまう危険性がある
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.Security by jan.gosmann
ID Token暗号化アルゴリズム
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
HMAC
RSA ECDSA
!
※現在のDraft
共通鍵暗号
公開鍵暗号
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
共通鍵(secret)を 埋め込む必要がなくなる
公開鍵暗号の署名検証
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
共通鍵(secret)を 埋め込む必要がなくなる
公開鍵暗号の署名検証
【メモ】 サーバーサイドでは鍵の漏洩しにくいため共通鍵暗号でもよい ネイティブアプリではアプリ内部をのぞかれる可能性があるため 漏洩してもよい公開鍵暗号を選択するとよい
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.Passport by jpmatth
ID Tokenで ユーザー認証を!
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ID Token + OAuth 2.0
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connect
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
2011~
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
詳しくは http://openid.net/connect/
OpenID Connect x
Device AuthN
@nov
Developer 💓 Device IDs
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Device IDs
iOS
UDID (dead)
UUID
Vendor Identifier
Advertising Identifier
Device Token (push)
!
Android
Android ID
others?
http://www.atmarkit.co.jp/ait/articles/1211/06/news004.html
Developer 💓 Bearer Tokens
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Bearer Tokens
そのトークンを所有しているという事実が そのトークンを利用するための唯一の条件
!
!
!漏れたらオワリ
プロキシ挟めば書き換え可能
v.s
Developer 💔 公開鍵暗号
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
公開鍵暗号(こうかいかぎあんごう、Public key cryptosystem)とは、暗号化と復号に別個の鍵(手順)を使い、暗号化の為の鍵を公開できるようにした暗号方式である。1980年代にかけ、日本で紹介された直後は「公衆暗号系」と訳されていた。 暗号は通信の秘匿性を高めるための手段だが、それに必須の鍵もまた情報なので、鍵自体を受け渡す過程で盗聴されてしまうリスクがあり、秘匿性を高める障害だった。この問題に対して、暗号化鍵の配送問題を解決したのが公開鍵暗号である。
http://ja.wikipedia.org/wiki/公開鍵暗号
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
秘密鍵を渡さずに !
公開鍵だけを渡して !
秘密鍵を持っていることを証明できる
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
秘密鍵を渡さずに !
公開鍵だけを渡して !
秘密鍵を持ってるデバイスを認証できる
デバイス上の
KeyChainに
鍵ペアを生成
すれば
…こういうのを HoK (Holder of Key) 方式とか言うらしい
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Self-Issued IdP
ID Token ベース
Subject (sub) は公開鍵のハッシュ値 (SHA256)
公開鍵自体を ID Token に含める
秘密鍵使って署名
詳しくは OpenID Connect Core - Section 7 参照
セキュアストレージ
バックアップ可能
iCloud 連携も可能
RSA Key Pair 生成
RSA 署名処理
iOS is ready.
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Self-Issued IdP
ID Token ベース
Subject (sub) は公開鍵のハッシュ値 (SHA256)
公開鍵自体を ID Token に含める
秘密鍵使って署名
詳しくは OpenID Connect Core - Section 7 参照
Developer 💓 Device IDs
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Action!!Festival of Fools by Jett Loe
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
2014.2.25 OpenID Connect 仕様最終版へ!!
Nate and Birthday Cake (2 of 5) by Chris Pencis
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.Dictionary by Chris
日本語翻訳準備中…
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.Join Us! by Doran
2014.3.7 OpenID TechNight
@nov