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
CryptoKit ではじめる暗号技術 - メッセージ認証コード編 / iosdcjapan-...
Search
kotetu (kotetuco)
September 21, 2025
0
61
CryptoKit ではじめる暗号技術 - メッセージ認証コード編 / iosdcjapan-2025-cryptokit
iOSDC Japan 2025 発表資料
kotetu (kotetuco)
September 21, 2025
Tweet
Share
More Decks by kotetu (kotetuco)
See All by kotetu (kotetuco)
認証体験向上のために passkeys (パスキー) に対応する 〜 メリット・対応方法について / iosdcjapan-2023-passkeys
kotetuco
3
2k
着信時氏名表示させたいエンジニア vs 簡単には着信時氏名表示できない電話番号 (iOS13対応版) / iosdcjapan-2020-lt-calldirectory
kotetuco
2
1.3k
UIImage and CIImage for Image Processing
kotetuco
9
6.8k
Metal for data-parallel computations
kotetuco
1
1.5k
Preparing for Swift 5 Ownership
kotetuco
0
5k
プログラミング言語RustとOS開発/rust-os-develop-introduction
kotetuco
0
1.7k
Sansan iOSアプリと R&Dとの共同研究について/sansan-ios-and-reearch
kotetuco
0
630
OS Developer として Rustを使ってみる/using-rust-for-os-developer
kotetuco
0
610
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
525
40k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Site-Speed That Sticks
csswizardry
10
830
Art, The Web, and Tiny UX
lynnandtonic
303
21k
For a Future-Friendly Web
brad_frost
180
9.9k
We Have a Design System, Now What?
morganepeng
53
7.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
A designer walks into a library…
pauljervisheath
207
24k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
The Art of Programming - Codeland 2020
erikaheidi
56
13k
Transcript
CryptoKit ではじめる暗号技術 - メッセージ認証コード編 iOSDC Japan 2025 Day2 (2025/09/21) 1
栗山 徹 (Toru Kuriyama) STORES 株式会社 モバイル開発本部 / 決済グループ iOS
エンジニア 2 X: @kotetu GitHub: @kotetuco ※ 暗号技術に興味を持ったきっかけ CTF (Capture The Flag) への参加 iOSDC Japan 2020 パンフレット原稿
トークテーマ iOS エンジニアが手を動かしながら身近に使われている暗号技術を学ぶ 3
トークのゴール iOS エンジニアも暗号技術の仕組みを理解することの大切さがわかる Swift (CryptoKit) を使って暗号技術を学べることを知る CryptoKit を使ってみたくなる 4
5
暗号技術は現代社会において欠かせない技術 6 普段から暗号技術を使用している iOS アプリでも日常的に利用されて いる (Keychain services など) 引用
: https://developer.apple.com/documentation/security/ keychain-services
SSL / TLS (公開鍵暗号) 7
SSL / TLS (公開鍵暗号) 8
SSL / TLS (公開鍵暗号) 9
SSL / TLS (公開鍵暗号) 10
11
12
生成 AI の発展 AI を用いた作業の自動化や効率化を模索 自動化の試みがプログラミング作業にも・・ 13
AI コーディングツール AI を使用して自然言語プロンプト から機能コードを生成 Claude Code, Cursor, OpenAI Codex,
Devin, etc. 引用 : https://www.anthropic.com/claude-code 14
AI コーディングが生産性向上のカギになりつつある AI コーディングツールを活用する取り組み が企業を中心に活発 iOS アプリ開発においても無視できなく なりつつある 15 引用
: https://developer.apple.com/documentation/Xcode/ writing-code-with-intelligence-in-xcode
16
17
AI コーディングは過渡期 動かないコードや誤ったコードを生成する可能性 利用するユーザー側による誤ったコードかどうかの見極めが重要 18
19
暗号技術に関する実装 セキュリティインシデントに つながる可能性 誤りが許されない 20 引用 : https://college.globalsign.com/blog/ ssl_openssl_vulnerability2014_2015/
MD5 の脆弱性 MD5 : 一方向ハッシュ関数の一種 2004 年 8 月に国際会議で報告される 異なるデータから同じハッシュ値が生成されてしまう脆弱性
22
一方向ハッシュ関数 入力データのダイジェスト (ハッシュ値) を生成 ハッシュ値から元データの復元は不可能 改ざん検知で利用 23
一方向ハッシュ関数 24
異なる入力から同じハッシュ値が出力されると・・・ 25
Flame 攻撃 (2012 年) MD5 の脆弱性を悪用し、偽造した 証明書を作成 偽造証明書で署名したマルウェアを Windows Update
を利用して拡散 引用 : https://jvn.jp/ta/JVNTA12-156A/index.html “古い暗号化アルゴリズムが悪用され、 あたかもマイクロソフトが作成したかのように コードに署名するために使用される可能性がある ことを特定しました。” 26
27
28
暗号技術を勉強する方法 暗号技術に関する書籍やオンラインドキュメントを読む 実際にコードを書いて動かしてみる 引用 : https://www.amazon.co.jp/ 29
30
31
32
CryptoKit Apple が提供する暗号処理ライブラリ iOS 13 以降で利用可能 OSS 版もある (Swift Crypto)
引用 : https://developer.apple.com/documentation/cryptokit/ 33
CryptoKit の特徴 Swift で実装されている Swift の言語仕様を活かした API デザイン 34
CommonCrypto Apple が提供する暗号処理ライブラリ CryptoKit 登場前はこちらが広く使われていた C 言語で実装されている 35
CommonCrypto と CryptoKit の 実装を比較する (SHA-256 ハッシュ値計算) 36
SHA-256 ハッシュ値 256 ビットの固定長ハッシュ値を出力 MD5 (128 ビット固定長) より安全 CRYPTREC 暗号リストに指定
引用 : https://www.cryptrec.go.jp/list/cryptrec-ls-0001-2022r1.pdf 37
SHA-256 ハッシュ値 の計算 (CommonCrypto) 先にバッファを確保し、算出した ハッシュ値をバッファへコピー 38
SHA-256 ハッシュ値 の計算 (CryptoKit) スッキリした書き方 39
シンプルに書けるようになったことで 暗号処理の理解に集中できる! 40
(余談) MD5 ハッシュ値の算出 (CryptoKit) 「Insecure」 をつけないと使えない! 41
世の中で使われている暗号処理を CryptoKit で実装してみよう 42
43
オブジェクトストレージ エンタープライズ用途にも使える高度な スケーラビリティ、セキュリティ、パフォーマンス Amazon Simple Storage Service (Amazon S3) Amazon
S3 44
通常、AWS が提供する SDK を利用 AWS SDK for Swift 今回は AWS
API を直接叩いてダウンロード 引用 : https://github.com/awslabs/aws-sdk-swift Amazon S3 に格納されているファイルのダウンロード 45
1 AWS STS から認証情報を取得 Amazon S3 へアクセス可能な IAM ユーザーの一時的な認証情報を取得 2
Amazon S3 から画像ファイルを取得 AWS STS から取得した認証情報を使って 画像ファイルをダウンロード S3 から画像ファイルをダウンロードする手順 46
本トークで使用する構成は説明の都合上、簡略化した構成になっています 本トークの構成・実装をそのまま本番環境で使用しないでください 可能な限り AWS SDK を使用することを推奨 (重要)注意事項 47
API リクエスト時にはメッセージ認証コードを使用した署名の付与が必要 署名の付与には AWS Signature Version 4 (SigV4) を使用 署名付き
AWS API リクエスト 48
メッセージ送信者が正しいかどうか認証するための技術 Message Authentication Code (MAC) メッセージ + 秘密鍵を入力として MAC 値を生成
一方向ハッシュ関数を使用して MAC 値を生成する方式は HMAC メッセージ認証コード 49
ハッシュ値と MAC 値 50
メッセージ認証コード (CryptoKit) HashFunction に準拠したクラス (= 一方向ハッシュ関数の方式)を指定 型引数に SHA256 を指定 使用する対称鍵を指定
(SymmetricKey クラス) 51
AWS API リクエストに認証情報を追加するための AWS 署名プロトコル 算出した署名を Authorization ヘッダーまたはクエリ文字列に付加してリ クエスト送信 AWS
サービス側で署名を再計算し、一致しなければリクエストを拒否 AWS Signature Version 4 (SigV4) 52
正規リクエスト (Canonical Request) の作成 署名文字列作成 Authorization ヘッダーへの署名付与 正規リクエストのハッシュ値 (SHA-256) 作成
アクセスキーやリクエスト日等を使用して署名キー (HMAC) 生成 署名文字列・署名キーを使用してリクエストに付与する署名 (HMAC) 生成 参考 : https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_sigv-create-signed-request.html 赤字の箇所で暗号処理を実行 署名付きリクエスト作成手順 53
正規リクエストのハッシュ値 (SHA-256) 作成 54
署名キー (HMAC) 生成 (1/2) 署名キー生成のために HMAC 生成を 4 回繰り返す 55
署名キー (HMAC) 生成 (2/2) 56
リクエストに付与する署名 (HMAC) 生成 署名キーを鍵に、署名文字列をメッセージに HMAC 生成 57
実装の詳細はサンプルコードをご覧ください (後日公開) https://github.com/kotetuco/PresignedURLRequest-Swift 58 iOSDC Japan 2020 パンフレット原稿 「Apple CryptoKitを通じて暗号化技術に触れる」
PDF 公開
iOS エンジニアも暗号技術の仕組みを知ることは大事 Swift で実装された暗号処理ライブラリがある (CryptoKit) iOS エンジニアが暗号技術を手を動かして学ぶ場合、シンプルにかける CryptoKit が便利! まとめ
59
10 月 17 日 (金) 19:00 〜 STORES 恵比寿オフィス https://hey.connpass.com/event/365055/
アフターイベント開催します! 60