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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Walnuts
March 06, 2026
Technology
74
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
210
プログラミングサークルの新歓を支える技術
walnuts1018
1
630
Go言語でLINE Botをつくろう!
walnuts1018
0
1.2k
ESP32と赤外線LEDを用いて エアコンを遠隔操作する
walnuts1018
0
510
Other Decks in Technology
See All in Technology
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
760
Jetson Orin Nanoとk3sとローカルLLMで音声文字起こしシステム作ってみた
y_sera15
0
120
プロダクト価値を、 チームが使える判断軸に変える
vivion
0
140
OpenSharing について熱く語る〜AI アセットの共有について〜
kameitomohiro
0
250
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
1.9k
組み立てて楽しむ AWS Blocks 入門
kmiya84377
0
230
OR学会2026年秋期大会_機械学習と数理最適化の融合による、配合レシピ最適化システム開発事例
brainpadpr
0
120
Loop Engineering これくらいでいい
mikanichinose
0
210
AIに攻撃される前に、AIに攻撃させる
tsuchikazu
0
170
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
7
2.8k
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
3
680
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
910
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
720
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
920
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
790
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Darren the Foodie - Storyboard
khoart
PRO
4
4k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
The SEO Collaboration Effect
kristinabergwall1
1
590
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Faster Mobile Websites
deanohume
310
32k
4 Signs Your Business is Dying
shpigford
187
23k
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 俵俵 > 俵俵 > 俵俵俵