SlideShare a Scribd company logo
What'sCodeSigning
potatotips#51,23May2018
ShinYamamoto
SoftwareDeveloper,Freelance
@scenee
https://scenee.com
Today'sLearning
✔ CodeSigningとは何か?どう検証されているのか?
✔ ProvisioningProfileとは何か?
✔ なぜ、1年でProvisioningProfileの更新が必要なのか?
✔ Development/DistributionIdentityの違いは?
CodeSignとは?
CodeSignとは?
公開鍵方式暗号で、実行コードに電子署名(CodeSignature)を付与する
こと
電子署名には,秘密鍵と公開鍵が必要
秘密鍵:署名する‑>Identity
公開鍵:検証する‑>Certificate
Steps
1.開発者が、自身の秘密鍵(Identity)で、電子署名する
2.iOSは、その署名の正当性を公開鍵(Certificate)で検証する
Why?
開発者自身が作成したアプリケーションであることを保証する
※ 他にもCodeRequirement等の機能があるが、ここでは電子署名にフォーカスする
CodeSignとは?
‑CodeSigningGuide,AboutCodeSigning
CodeSignとは?
署名はどこに?ApplicationBundle(*.app)
Mach‑O(Executable):
各アーキテクチャの LC_CODE_SIGNATURE Loadcommanddata
CMS(pkcs7‑signeddata)で、署名が埋め込まれている
CDHash,Entitlementsなど様々なメタデータも付与されている
ResourceFiles:
_CodeSignature/CodeResourcesというPList内に各リソースファイ
ルの署名を記載
※ 署名データフォーマットはApple独自でありドキュメント化されていない。
Tips
CodeSigning時に、実行コードやリソースは変更されない
再署名(Resign)できる
Isthisenough?
CodeSignatureだけではアプリを起動できない✋
ProvisioningProfileとは?
ProvisioningProfileとは?
iOSがアプリプロセスに実行権限等リソースを提供(Provisioning)するた
めのプロファイル
AppID
デジタル証明書(公開鍵)リスト
デバイスリスト(ProvisionedDevices)
Entitlements
ProvisioningProfileとは?
CMS(CryptographicMessageSyntax:RFC5652)形式のファイル
Appleが署名済みIssued&signedby"AppleiPhoneOS
ProvisioningProfileSigning"
PKCS7‑SignedData(S/MIMEcompat)
Entitlementsとは?
iOSがアプリプロセスに割り当てる権限を指定(Apple署名で承認済
み)
Hint:Certificatesを確認する
security cms -D -i /path/to/mobileprovision > temp.plist
/usr/libexec/PlistBuddy -c 
"Print :DeveloperCertificates:0" temp.plist 
| openssl x509 -inform der -text
App起動時に何が検証されるのか?
Mach‑Oに埋め込まれた署名情報等と、Provisioning_Profileが照合がさ
れる
Point
ProvisioningProfile
は、Appleによって署
名されている=承認
されている
AppIDとCertificateには、関連性はない
AppIDは、Entitlementsに関連する
Certificateは、「だれが署名したのか」を確認するだけ
なぜ1年ごとの更新が必要なのか?
Provisioning_Profileに含まれる証明書の期限が、1年だから
何度、ProvisioningProfileを発行しても..
指定する証明書の期限にのみ依存
証明書が有効なら古いProvisioningProfileも有効
証明書をrevokeすると..
その証明書を保持するProvisioningProfileは全て無効になる
その証明書に対応するIdentityで署名ができなくなる
Development/Distributionの違いは?
:Entitlements:get-task-allow: true/false
Xcodedebuggerが、アプリプロセスにattachできるどうか
Developmentでは、Instrumentsによって解析が可能
TeamProvisioningProfileとは?
メンバー全てのDevelopment証明書を含むProvisioning_Profile
Xcodeで自動生成される
Wildcard(*)or特定のAppID
Teamメンバーに対応したデバイスを含む
秘密鍵の再作成は不要(ただし、面倒)
Certificate(公開鍵)は、Identity(秘密鍵)から作成可能
期限切れIdentityから証明書のみを更新できる
How‑to
1.Keychainからp12ファイルをExport
2.p12ファイルとそのパスワードを用いて、以下のコマンドを実行
openssl req -new -key <(
openssl pkcs12 -in /path/to/Certificates.p12 
-nocerts -nodes -passin pass:"<# password #>"
) > new.certSigningRequest
3. new.certSigningRequest をsubmit
※ publickeyがある場合、privatekeyを右クリック「RequestaCertificateFroma
CertificateAuthorityFrom"..."」で作成可
Recap
CodeSigningとは、アプリに電子署名すること
電子署名(CodeSignature)には,秘密鍵(Identity)と公開鍵
(Certificate)が必要
秘密鍵と公開鍵≡ IdentityとProvisioningProfile
ProvisioningProfileは、Certificateを含み、Appleにより署名済み
iOSは、ProvisioningProfileで、CodeSignatureを検証する
References
CodeSigningGuide,
https://developer.apple.com/library/content/documentation/Security/C
onceptual/CodeSigningGuide/Introduction/Introduction.html
CodeSigning,https://developer.apple.com/support/code‑signing/
TechnicalNoteTN2415:EntitlementsTroubleshooting,
https://developer.apple.com/library/content/technotes/tn2415/_index.
html
TechnicalNoteTN2206:macOSCodeSigningInDepth,
https://developer.apple.com/library/content/technotes/tn2206/_index.
html

More Related Content

PDF
【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~
PDF
【de:code 2020】 あらゆるエンジニアを支援! VS Code Meetup の紹介とハンズオンで活躍するテクニック集
PDF
安全な"○○でログイン"の作り方 @ NDS in Niigata #1
PDF
【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス! MR で変わるライフスタイルとワークスタイル ...
PDF
【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス! MR で変わるライフスタイルとワークスタイル ...
PDF
認証から見たリモート署名 ー利用認証と鍵認可ー
PDF
今更聞けない電子認証入門 -OAuth 2.0/OIDCからFIDOまで- <改定2版>
PDF
【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)
【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~
【de:code 2020】 あらゆるエンジニアを支援! VS Code Meetup の紹介とハンズオンで活躍するテクニック集
安全な"○○でログイン"の作り方 @ NDS in Niigata #1
【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス! MR で変わるライフスタイルとワークスタイル ...
【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス! MR で変わるライフスタイルとワークスタイル ...
認証から見たリモート署名 ー利用認証と鍵認可ー
今更聞けない電子認証入門 -OAuth 2.0/OIDCからFIDOまで- <改定2版>
【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)

What's hot (20)

PDF
クラウドの観点から見たIoT開発の試行錯誤を減らそう
PDF
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
PDF
.NET の今とミライ (.NET Conf 2018 Japan Keynote)
PDF
Advancement of FIDO Technology
PDF
FIDOセキュリティ認定の概要と最新状況
PDF
FIDO認証によるパスワードレスログイン実装入門
PPTX
Smart lock
PPTX
PHPCON fukuoka 2015 CodeIgniter update
PDF
OpenID TechNight - Ping Identity 製品紹介
PDF
GitHub Enterprise と内製開発の文化
 
PPTX
Azure io t_central_iotedge
PDF
Kinectプログラミング Step by Step
PPTX
CodeIgniterのライセンスについて
PDF
プログラミングLT 2019 Summer
PDF
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
PDF
【de:code 2020】 もうセキュリティはやりたくない!! 第 5 弾 ~Microsoft の xDR で攻撃者を追え!!~​
PDF
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
PDF
数々の実績:迅速なFIDO認証の展開をサポート
PDF
VPNはもう卒業!FIDO2認証で次世代リモートアクセス
PDF
FIDO2によるパスワードレス認証が導く新しい認証の世界
クラウドの観点から見たIoT開発の試行錯誤を減らそう
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
.NET の今とミライ (.NET Conf 2018 Japan Keynote)
Advancement of FIDO Technology
FIDOセキュリティ認定の概要と最新状況
FIDO認証によるパスワードレスログイン実装入門
Smart lock
PHPCON fukuoka 2015 CodeIgniter update
OpenID TechNight - Ping Identity 製品紹介
GitHub Enterprise と内製開発の文化
 
Azure io t_central_iotedge
Kinectプログラミング Step by Step
CodeIgniterのライセンスについて
プログラミングLT 2019 Summer
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 もうセキュリティはやりたくない!! 第 5 弾 ~Microsoft の xDR で攻撃者を追え!!~​
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
数々の実績:迅速なFIDO認証の展開をサポート
VPNはもう卒業!FIDO2認証で次世代リモートアクセス
FIDO2によるパスワードレス認証が導く新しい認証の世界
Ad

Similar to What's CodeSign (20)

PDF
Lt40
PPTX
YJTC18 D-1 安心安全な次世代認証を目指して 〜社会に溶け込む認証技術〜
PPTX
OpenID ConnectとSCIMのエンタープライズ利用ガイドライン
PDF
Idcon gomi-052715-pub
PDF
OpenID ConnectとAndroidアプリのログインサイクル
PDF
Hybrid appmeetssecurity kdl20171017-20
PDF
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
PPTX
20170415 mttokyo handson
PDF
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
PDF
FIDO2 ~ パスワードのいらない世界へ
PPTX
Windows Phoneの 企業内活用方法、 社内向けアプリ開発と展開
PPTX
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
PDF
Yahoo! JAPANのOpenID Certified Mark取得について
KEY
お客様とコードの間
PDF
今なら間に合う分散型IDとEntra Verified ID
PDF
テストコードを入り口としたリファクタリング (2025-01-17).pdf
PPTX
『OpenID ConnectとSCIMのエンタープライズ実装ガイドライン』解説
PPTX
Cognitoが大型アップデート! Managed Loginとパスワードレスログインを 実際に使ってみた@しむそくRadio Special Day1
PDF
認証技術、デジタルアイデンティティ技術の最新動向
PDF
Fido self issued
Lt40
YJTC18 D-1 安心安全な次世代認証を目指して 〜社会に溶け込む認証技術〜
OpenID ConnectとSCIMのエンタープライズ利用ガイドライン
Idcon gomi-052715-pub
OpenID ConnectとAndroidアプリのログインサイクル
Hybrid appmeetssecurity kdl20171017-20
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
20170415 mttokyo handson
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
FIDO2 ~ パスワードのいらない世界へ
Windows Phoneの 企業内活用方法、 社内向けアプリ開発と展開
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Yahoo! JAPANのOpenID Certified Mark取得について
お客様とコードの間
今なら間に合う分散型IDとEntra Verified ID
テストコードを入り口としたリファクタリング (2025-01-17).pdf
『OpenID ConnectとSCIMのエンタープライズ実装ガイドライン』解説
Cognitoが大型アップデート! Managed Loginとパスワードレスログインを 実際に使ってみた@しむそくRadio Special Day1
認証技術、デジタルアイデンティティ技術の最新動向
Fido self issued
Ad

What's CodeSign