Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
パスキーでE2E暗号化 in Android Apps (PRF Extension)
Search
Walnuts
March 06, 2026
Technology
62
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
パスキーでE2E暗号化 in Android Apps (PRF Extension)
2025/03/06に開催されたMobile Act OSAKA 18での発表資料です。
Walnuts
March 06, 2026
More Decks by Walnuts
See All by Walnuts
Cloud Native 技術をフル活用!壊して学ぶ自宅サーバーのバックアップ戦略!
walnuts1018
2
180
プログラミングサークルの新歓を支える技術
walnuts1018
1
620
Go言語でLINE Botをつくろう!
walnuts1018
0
1.2k
ESP32と赤外線LEDを用いて エアコンを遠隔操作する
walnuts1018
0
490
Other Decks in Technology
See All in Technology
え、こんなに早く改修できるの?──新人エンジニアとスクラムマスターの2人が語る、AI×アジャイル開発の現場
ysasago
1
260
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
4
240
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
31
27k
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
120
AIエージェントを最高のパートナーに育てる方法|評価と判断軸を育てる5つのステップ
koichiaoki
1
150
Goodbye ShellScript, Hello File-based App
shunsock
0
150
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
0
130
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
1
170
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
2
940
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
200
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
340
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.2k
Deep Space Network (abreviated)
tonyrice
0
310
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
280
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Are puppies a ranking factor?
jonoalderson
2
3.9k
Evolving SEO for Evolving Search Engines
ryanjones
0
300
The Language of Interfaces
destraynor
162
27k
Everyday Curiosity
cassininazir
0
320
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
Transcript
パスキーでE2E暗号化 in Android Apps (PRF Extension) 2025/03/06 Mobile Act OSAKA
18 walnuts1018
名名 : 俵 俵俵俵俵俵俵 俵俵俵俵俵 名名 : 俵俵俵俵 俵俵俵 俵俵俵俵俵俵俵
4俵俵 俵俵俵俵俵俵俵 俵俵俵俵俵 名名 : 俵 Kubernetes 俵 Go 俵 OpenTelemetry 俵 React 俵 Android 自己紹介 https://walnuts.dev @walnuts1018 @walnuts1018 id:walnuts1018 1 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵
2 パスワードによるリモート認証 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 Credential 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 俵俵 1.
俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 2. 俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵 0123 検証 パスワードの送信
3 FIDO認証 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 名名名名名名名名名名名名名名名名名 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 Challenge 俵
俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • Credential 俵 = 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 Credential 俵俵俵俵 俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵 abcdef 署名検証 YWJjZGVmCg 署名生成
4 FIDO認証 on Android • Android 俵俵 Credential Manager 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵
val credentialManager = CredentialManager.create(context) // サーバーからChallengeなどを受け取る val publicKeyJson = Json.parseToJsonElement( apiClient.getVerificationAssertion(userId) ).jsonObject["publicKey"]!!.toString() // Credential Manager APIを呼び出して署名を得る val result = credentialManager.getCredential( context = activityContext, request = GetCredentialRequest( credentialOptions = listOf(GetPublicKeyCredentialOption(requestJson = publicKeyJson)), ), ) // サーバーに署名を送信して検証 val response = apiClient.verifyWebAuthnAssertion((result.credential as PublicKeyCredential).authenticationResponseJson) 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵
5 クライアントサイド暗号化におけるパスワード • FIDO 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 俵俵俵俵俵俵俵俵 • 俵俵俵俵
名名名名名名名名名名名名名名名名名名名 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵
6 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 •
俵俵俵俵 名名名名名名名名名名名名名名名名名名名名名名名名名名 俵俵俵俵俵俵 俵俵俵俵 俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 +Salt 俵俵俵俵俵俵俵俵俵俵俵 俵俵俵俵俵俵俵俵俵 クライアントサイド暗号化におけるパスワード 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵
7 WebAuthn Pseudo-random function (prf) extension • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 FIDO 俵俵俵俵俵俵俵俵俵俵俵俵俵
• 俵俵俵俵 Credential 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 Challenge/Response 俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵 /俵俵俵俵俵俵俵 Credential 俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵 … • 俵俵俵俵 WebAuthn PRF Extension 俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵 RPID 俵 俵 俵俵俵俵俵俵 Salt 俵俵俵俵俵俵 俵俵俵俵俵俵俵俵俵俵 • = 俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 https://w3c.github.io/webauthn/#prf-extension 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵 RPID: example.walnuts.dev Salt: d2FsbnV0czEwMTgK uCgogICAgICAgRm9 ybWVyIE1haW50YWl
8 PRF Extension on Android • Credential Manager 俵俵俵 Passkey
俵俵俵俵俵俵俵俵 PRF Extension 俵俵俵俵俵俵俵 • "WebAuthn "俵俵俵俵俵 ... • Android 俵俵俵俵俵 Android Keystore 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵 PRF Extension 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 Google Password Manager 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵 Web俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 /俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵
PRF Extension on Android 俵俵 : • Pixel 8 Pro
(Android16) / Pixel 9 Pro (Android16) • 俵俵俵 : Google Password Manager • 俵俵俵俵 : https://prfexample.walnuts.dev/ 俵俵 : 1. 俵俵俵俵俵俵俵俵俵俵俵俵 with PRF Extension 俵 2. 俵俵俵俵俵俵俵俵俵俵俵俵俵俵 PRF Extension 俵俵俵俵俵 俵俵俵俵俵俵俵俵 3. 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 4. 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 PRF Extension 俵俵俵俵俵 俵俵俵俵俵俵俵 9 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵
10 より実用的にするには • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • Google 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • Please, please,
please stop using passkeys for encrypting user data · Timbits • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵 HMAC 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵 PRF Key generated by Passkey 1 PRF Key generated by Passkey 2 Shared Key encrypted by PRF Key1 Data encrypted by Shared Key Shared Key encrypted by PRF Key2 Shared Key Saved on Server Saved on Authenticator Restored when needed
11 まとめ • (WebAuthn ) PRF Extension 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 俵俵俵俵俵 •
Android 俵 Credential Manager 俵俵俵俵俵俵俵俵俵俵俵俵俵俵 PRF Extension 俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 • 俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵俵 俵俵俵俵 > FIDO 俵俵 > 俵俵俵俵俵俵俵俵俵俵俵俵 > PRF Extension 俵俵 > 俵俵 > 俵俵俵