Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
K/NでCryptoKit使いたかった
Search
RyuNen344
November 29, 2022
Technology
620
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
K/NでCryptoKit使いたかった
RyuNen344
November 29, 2022
More Decks by RyuNen344
See All by RyuNen344
Gradle-Plugin-in-2026.pdf
ryunen344
1
120
せめて、ネイティブらしく
ryunen344
2
3.1k
Cache Me If You Can
ryunen344
3
9.1k
WindowInsetsだってテストしたい
ryunen344
2
410
サプライチェーン攻撃に備える
ryunen344
1
3.8k
Okioに愛を込めて
ryunen344
3
3k
Firebase Hostingを使ってPasskeyをandroidアプリで試してみよう
ryunen344
2
2.1k
Xcode Meets Gradle
ryunen344
0
450
わかった気になる、Coroutine1.7.0のチャンネルのパフォーマンス向上
ryunen344
0
470
Other Decks in Technology
See All in Technology
顧客の要望は2次情報である 〜アンテナを張るFDEの構造論〜
noriakioji
5
1.1k
[2026-08-25]AIによる自動化と人の介入、その狭間で揺れる信頼性についての俺の思いを、波よ聞いてくれ
tosite
0
110
いかに伝えるか 〜新卒エンジニアの教育のための、ライトノベル活用の一例
ikedon
1
130
書籍『生成AIの安全性入門』の入門
wataoka
0
150
「面白い!」を信じ抜け。激動の時代を貫く、オンリーワン・エンジニアの条件
kizawa2020
2
560
Genie Code ワークショップ 基礎編 / Genie-Code-Workshop-fundamental
databricksjapan
PRO
0
230
Guerilla InnerSource in enterprises, during the AI hype
onenashev
PRO
0
130
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
0
350
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.3k
EUDIWの枠組みを出発点に民間エコシステムの在り方を考える(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
420
[RSJ26] Building a VLA Model Based on Self-Distilled Classification
keio_smilab
PRO
0
110
Claude Teamプランの コスト最適化を考える
rfdnxbro
2
850
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
52k
Skip the Path - Find Your Career Trail
mkilby
1
210
A better future with KSS
kneath
240
18k
WENDY [Excerpt]
tessaabrams
12
39k
How to Ace a Technical Interview
jacobian
281
24k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
New Earth Scene 8
popppiees
3
2.5k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
A Tale of Four Properties
chriscoyier
163
24k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
64k
Transcript
Kotlin NativeͰCryptoKit͍ ͔ͨͬͨɾɾɾɾɾ 2022.11.27 Mobileษڧձ Wantedly × νʔϜϥϘ #7 Bunjiro
Miyoshi
About Me • νʔϜϥϘॴଐ • (ࣗশ)ϚϧνϓϥοτϑΥʔϜܳਓ • Jetpack Compose࠷ߴʂʂ
͢͜ͱɾ͞ͳ͍͜ͱ • ͢͜ͱ • CryptoKitͱ • ͳͥCryptoKitΛ͍͍͔ͨ • Kotlin NativeͷSwift/Obj-C
Interop • ͞ͳ͍͜ͱ • KMMͱ(͕࣌ؒΓͳ͘ͳΔ) • androidଆʹدΓఴͬͨ༰(΄΅androidؔͳ͍͔͠͠ͳ͍) • ඇରশ҉߸पΓ(K/NͰSecurity Framework͑Δ)
CryptoKitͱ • Appleެࣜͷ҉߸ԽϥΠϒϥϦ • iOS13͔Β༻Ͱ͖Δ • LinuxͰ͑ΔΑ͏ʹಛघͳϋʔυΣΞॲཧΛඞཁͱ͠ͳ͍APIΛ ൈ͖ग़ͨ͠OSS൛͋Δ • ݱࡏiOSͰAESHashͷ࣮Λ͍ͨ͠ͳΒ͜ΕΛ͏ͷ͕σϑΝΫ
τ
ͳͥCryptoKitΛ͍͍͔ͨ#Tink • KMMͰ҉߸ԽॲཧΛԿͰ࣮͢Δ͔໎ͬͨ • Google/TinkΛinterop͢Δ༧ఆͩͬͨ • androidͷ҉߸ԽॲཧݱࡏTinkҰͳঢ়ଶͩ͠ɾɾɾɾ • arm64ରԠʹۤ͠ΜͰ͍ΔΒ͘͠ରԠΛ͍ͬͯΒΕͳ͍ •
→ https://github.com/google/tink/issues/554
ͳͥCryptoKitΛ͍͍͔ͨ#CommonCrypto • iOSʹRuntimeʹCommonCrypto͕ಉࠝ͞Ε͍ͯΔ • → https://opensource.apple.com/source/CommonCrypto • CͰ࣮͞Ε͍ͯΔFramework • ରশ҉߸(AES-CBC,
AES-ECB)ɺϋογϡؔɺμΠδΣετؔͳ Ͳ͕༻Ͱ͖Δ
ͳͥCryptoKitΛ͍͍͔ͨ#CommonCrypto
ͳͥCryptoKitΛ͍͍͔ͨ • CryptoKit͡Όͳ͍ͱͰ͖ͳ͍͜ͱ • AEAD(AES-GCM)ͳͲͷೝূϞʔυ • ॺ໊पΓͷॲཧ • ٯʹCryptoKitͩͱͰ͖ͳ͍ॲཧ͋Δ •
MD2ɺ4ͳͲͷڧͷ͍μΠδΣετ͋·Γ༻͠ͳ͍ͷͳ ͷͰؾʹ͠ͳͯ͘Α͍
AES-GCM͕͍͍ͨ • CommonCryptoʹGCM࣮ͷϔομʔϑΝΠϧ͋Δɾɾɾɾ • https://opensource.apple.com/source/CommonCrypto/ CommonCrypto-60061/lib/CommonCryptorGCM.c.auto.html • ඇެ։APIʹͳ͍ͬͯͯK/NͰ͑ͳ͍ɾɾɾɾɾ
Ͳ͏ͤϥούʔΛͭ͘ΔͳΒCryptoKitʹ͍ͨ͠ • ͖ͬͱJetBrainsͷK/NνʔϜ͍͍ͨͱࢥͬͯͨΜ͡Όͳ͍͔ͳͱ अਪ • ͓ΉΖʹKotlinͷϦϙδτϦΛோΊͯΈΔ • K/N͕औΓࠐΉDarwinͷAPI👇ʹ͓͍ͯ͋Δ • https://github.com/JetBrains/kotlin/tree/master/kotlin-native/
platformLibs/src/platform/ios
Μɾɾɾɾɾʁ
Μɾɾɾɾɾʁ
͋ɺ͋Δʂʂʂ
Swift/Objective-C Interop • def.disabledͱ͍͏ෆԺͳϑΝΠϧ໊ʹͳ͍ͬͯΔ • obj-c͔Βݺͼग़ͤΔΑ͏ʹͳͬͯΔSwift Framework͑Δ͕pure SwiftͷFrameworkK/NʹऔΓࠐΊͳ੍͍͕͋ΔͨΊdisable
Swift/Objective-C Interop • def.disabledͱ͍͏ෆԺͳϑΝΠϧ໊ʹͳ͍ͬͯΔ • obj-c͔Βݺͼग़ͤΔΑ͏ʹͳͬͯΔSwift Framework͑Δ͕pure SwiftͷFrameworkK/NʹऔΓࠐΊͳ੍͍͕͋ΔͨΊdisable ཁ͢Δʹͦͷ··Ͱ͑ͳ͍
Swift/Objective-C Interop • ͏ʹ@objc͕༩͞Ε͍ͯΔϥούʔͷϥΠϒϥϦΛ࡞͠ɺͦ ΕΛK/NʹऔΓࠐΉඞཁ͕͋Δ • ಉ͜͡ͱΛߟ͍͑ͯΔਓ͍Δ • https://youtrack.jetbrains.com/issue/KT-54729/KMM-Native-iOS- use-CryptoKit
Ͳ͏͍͏ϥούʔϥΠϒϥϦ͕΄͍͔͠ • K/NϥΠϒϥϦͱͯ͠ެ։͞Ε͍ͯΔ • -> KMMʹՃ͢Δ͚ͩͰCryptoKit͑ΔΑ͏ʹͳͬͯ΄͍͠ • ϥούʔϥΠϒϥϦdynamic libraryͱͯ͠CryptoKitΛͱΓ͜ΜͰ΄͍͠ •
-> όΠφϦຊମʹCryptoKitͷϏϧυੜΛؚΜͰ΄͘͠ͳ͍ • (ͨΓલ͕ͩ)CryptoKit͔ΒͷΤϥʔΛͪΌΜͱϋϯυϦϯάͰ͖ΔIFʹ ͳͬͯͯ΄͍͠
ϥούʔϥΠϒϥϦΛ࡞Δ • Swift InteropʹerrorൖपΓʹ᠘͕͋Δ • Swift/Objective-C error-throwing methods aren't imported
to Kotlin as exception- throwing • https://kotlinlang.org/docs/native-objc-interop.html#errors-and-exceptions • Kotlin -> Obj-CɺObj-C -> Kotlinͷ྆ํʹ੍͕͋Δ • ࠓճͷϢʔεέʔεͩͱSwift -> Obj-C ->KotlinͷܗʹͳΔͨΊͦΕͧΕͷݴޠײͷนΛߟྀͯ͠ ࣮͢Δඞཁ͕͋Δ • iOSͷ։ൃݴޠͷσϑΝΫτ͕Obj-C͔ΒSwiftʹΓସΘͬͨλΠϛϯάͷࢿྉ͕ʹཱͪͦ͏
·ͱΊ • ࠓճ༻ҙͰ͖ͨ෦͜͜·Ͱ • ࢲࣗࠓճඞཁͷΈͷఆ͔ٛ͠ߦΘͣɺCryptoKitશମͷϥοϓʹͨͲΓண͔ͳ ͔ͬͨ(୭͔ҰॹʹΓ·ͤΜ͔ɾɾɾ) • Swift InteropपΓʹΤϥʔൖͷ᠘͕͋Δ •
Swift/KotlinޓରԠͷissue͋Δ͕͕͔͔࣌ؒΓͦ͏ͳͷͰϥούʔϥΠϒϥϦΛ ࡞ΔҎ֎ʹݱঢ়खஈ͕ͳͦ͞͏ • https://youtrack.jetbrains.com/issue/KT-49521/Support-direct-interoperability-with- Swift
12݄10ͷKotlin Festొஃ͠·͢ ͓࣌ؒ͋Δ͔ͨͥͻ