狠狠撸

狠狠撸Share a Scribd company logo
What'sCodeSigning
potatotips#51,23May2018
ShinYamamoto
SoftwareDeveloper,Freelance
@scenee
https://scenee.com
Today'sLearning
? CodeSigningとは何か?どう検証されているのか?
? ProvisioningProfileとは何か?
? なぜ、1年でProvisioningProfileの更新が必要なのか?
? Development/DistributionIdentityの違いは?
颁辞诲别厂颈驳苍とは?
颁辞诲别厂颈驳苍とは?
公開鍵方式暗号で、実行コードに電子署名(CodeSignature)を付与する
こと
電子署名には,秘密鍵と公開鍵が必要
秘密鍵:署名する?>Identity
公開鍵:検証する?>Certificate
Steps
1.開発者が、自身の秘密鍵(Identity)で、電子署名する
2.iOSは、その署名の正当性を公開鍵(Certificate)で検証する
Why?
開発者自身が作成したアプリケーションであることを保証する
※ 他にもCodeRequirement等の機能があるが、ここでは電子署名にフォーカスする
颁辞诲别厂颈驳苍とは?
?CodeSigningGuide,AboutCodeSigning
颁辞诲别厂颈驳苍とは?
署名はどこに?ApplicationBundle(*.app)
Mach?O(Executable):
各アーキテクチャの LC_CODE_SIGNATURE Loadcommanddata
CMS(pkcs7?signeddata)で、署名が埋め込まれている
CDHash,Entitlementsなど様々なメタデータも付与されている
ResourceFiles:
_CodeSignature/CodeResourcesというPList内に各リソースファイ
ルの署名を記載
※ 署名データフォーマットは础辫辫濒别独自でありドキュメント化されていない。
Tips
CodeSigning時に、実行コードやリソースは変更されない
再署名(Resign)できる
Isthisenough?
CodeSignatureだけではアプリを起動できない?
笔谤辞惫颈蝉颈辞苍颈苍驳笔谤辞蹿颈濒别とは?
笔谤辞惫颈蝉颈辞苍颈苍驳笔谤辞蹿颈濒别とは?
iOSがアプリプロセスに実行権限等リソースを提供(Provisioning)するた
めのプロファイル
AppID
デジタル証明書(公開鍵)リスト
デバイスリスト(ProvisionedDevices)
Entitlements
笔谤辞惫颈蝉颈辞苍颈苍驳笔谤辞蹿颈濒别とは?
CMS(CryptographicMessageSyntax:RFC5652)形式のファイル
Appleが署名済みIssued&signedby"AppleiPhoneOS
ProvisioningProfileSigning"
P?CS7?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によって解析が可能
Team笔谤辞惫颈蝉颈辞苍颈苍驳笔谤辞蹿颈濒别とは?
メンバー全てのDevelopment証明書を含むProvisioning_Profile
Xcodeで自動生成される
Wildcard(*)or特定のAppID
Teamメンバーに対応したデバイスを含む
秘密鍵の再作成は不要(ただし、面倒)
Certificate(公開鍵)は、Identity(秘密鍵)から作成可能
期限切れIdentityから証明書のみを更新できる
How?to
1.?eychainから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
Ad

Recommended

【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~
【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~
日本マイクロソフト株式会社
?
【de:code 2020】 あらゆるエンジニアを支援! VS Code Meetup の紹介とハンズオンで活躍するテクニック集
【de:code 2020】 あらゆるエンジニアを支援! VS Code Meetup の紹介とハンズオンで活躍するテクニック集
日本マイクロソフト株式会社
?
安全な"○○でログイン"の作り方 @ NDS in Niigata #1
安全な"○○でログイン"の作り方 @ NDS in Niigata #1
Ryo Ito
?
【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス! MR で変わるライフスタイルとワークスタイル ...
【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス! MR で変わるライフスタイルとワークスタイル ...
日本マイクロソフト株式会社
?
【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス! MR で変わるライフスタイルとワークスタイル ...
【de:code 2020】 『RE:BEL ROBOTICA レベルロボチカ』の世界と現代をミックス! MR で変わるライフスタイルとワークスタイル ...
日本マイクロソフト株式会社
?
認証から見たリモート署名 ー利用認証と鍵認可ー
認証から見たリモート署名 ー利用認証と鍵認可ー
Naoto Miyachi
?
今更聞けない電子認証入門 -OAuth 2.0/OIDCからFIDOまで- <改定2版>
今更聞けない電子認証入門 -OAuth 2.0/OIDCからFIDOまで- <改定2版>
Naoto Miyachi
?
【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)
【de:code 2020】 GitHub 新機能のご紹介(2020 年 5 月発表)
日本マイクロソフト株式会社
?
クラウドの観点から见た滨辞罢开発の试行错误を减らそう
クラウドの観点から见た滨辞罢开発の试行错误を减らそう
Jingun Jung
?
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
日本マイクロソフト株式会社
?
.NET の今とミライ (.NET Conf 2018 Japan Keynote)
.NET の今とミライ (.NET Conf 2018 Japan Keynote)
Akira Inoue
?
Advancement of FIDO Technology
Advancement of FIDO Technology
FIDO Alliance
?
贵滨顿翱セキュリティ认定の概要と最新状况
贵滨顿翱セキュリティ认定の概要と最新状况
FIDO Alliance
?
贵滨顿翱认証によるパスワードレスログイン実装入门
贵滨顿翱认証によるパスワードレスログイン実装入门
驰补丑辞辞!デベロッパーネットワーク
?
Smart lock
Smart lock
Yoshinori Hayashi
?
PHPCON fukuoka 2015 CodeIgniter update
PHPCON fukuoka 2015 CodeIgniter update
Takako Miyagawa
?
OpenID TechNight - Ping Identity 製品紹介
OpenID TechNight - Ping Identity 製品紹介
Daisuke Fuke
?
GitHub Enterprise と内製開発の文化
GitHub Enterprise と内製開発の文化
IIJ
?
Azure io t_central_iotedge
Azure io t_central_iotedge
Yoshinori Hayashi
?
Kinectプログラミング Step by Step
Kinectプログラミング Step by Step
Akira Hatsune
?
颁辞诲别滨驳苍颈迟别谤のライセンスについて
颁辞诲别滨驳苍颈迟别谤のライセンスについて
Takako Miyagawa
?
プログラミングLT 2019 Summer
プログラミングLT 2019 Summer
Yusuke Mori
?
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
日本マイクロソフト株式会社
?
【de:code 2020】 もうセキュリティはやりたくない!! 第 5 弾 ~Microsoft の xDR で攻撃者を追え!!~?
【de:code 2020】 もうセキュリティはやりたくない!! 第 5 弾 ~Microsoft の xDR で攻撃者を追え!!~?
日本マイクロソフト株式会社
?
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
Hiroyuki Ohnaka
?
数々の実绩:迅速な贵滨顿翱认証の展开をサポート
数々の実绩:迅速な贵滨顿翱认証の展开をサポート
FIDO Alliance
?
痴笔狈はもう卒业!贵滨顿翱2认証で次世代リモートアクセス
痴笔狈はもう卒业!贵滨顿翱2认証で次世代リモートアクセス
FIDO Alliance
?
贵滨顿翱2によるハ?スワート?レス认証か?导く新しい认証の世界
贵滨顿翱2によるハ?スワート?レス认証か?导く新しい认証の世界
Kazuhito Shibata
?

More Related Content

What's hot (20)

クラウドの観点から见た滨辞罢开発の试行错误を减らそう
クラウドの観点から见た滨辞罢开発の试行错误を减らそう
Jingun Jung
?
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
日本マイクロソフト株式会社
?
.NET の今とミライ (.NET Conf 2018 Japan Keynote)
.NET の今とミライ (.NET Conf 2018 Japan Keynote)
Akira Inoue
?
Advancement of FIDO Technology
Advancement of FIDO Technology
FIDO Alliance
?
贵滨顿翱セキュリティ认定の概要と最新状况
贵滨顿翱セキュリティ认定の概要と最新状况
FIDO Alliance
?
贵滨顿翱认証によるパスワードレスログイン実装入门
贵滨顿翱认証によるパスワードレスログイン実装入门
驰补丑辞辞!デベロッパーネットワーク
?
Smart lock
Smart lock
Yoshinori Hayashi
?
PHPCON fukuoka 2015 CodeIgniter update
PHPCON fukuoka 2015 CodeIgniter update
Takako Miyagawa
?
OpenID TechNight - Ping Identity 製品紹介
OpenID TechNight - Ping Identity 製品紹介
Daisuke Fuke
?
GitHub Enterprise と内製開発の文化
GitHub Enterprise と内製開発の文化
IIJ
?
Azure io t_central_iotedge
Azure io t_central_iotedge
Yoshinori Hayashi
?
Kinectプログラミング Step by Step
Kinectプログラミング Step by Step
Akira Hatsune
?
颁辞诲别滨驳苍颈迟别谤のライセンスについて
颁辞诲别滨驳苍颈迟别谤のライセンスについて
Takako Miyagawa
?
プログラミングLT 2019 Summer
プログラミングLT 2019 Summer
Yusuke Mori
?
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
日本マイクロソフト株式会社
?
【de:code 2020】 もうセキュリティはやりたくない!! 第 5 弾 ~Microsoft の xDR で攻撃者を追え!!~?
【de:code 2020】 もうセキュリティはやりたくない!! 第 5 弾 ~Microsoft の xDR で攻撃者を追え!!~?
日本マイクロソフト株式会社
?
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
Hiroyuki Ohnaka
?
数々の実绩:迅速な贵滨顿翱认証の展开をサポート
数々の実绩:迅速な贵滨顿翱认証の展开をサポート
FIDO Alliance
?
痴笔狈はもう卒业!贵滨顿翱2认証で次世代リモートアクセス
痴笔狈はもう卒业!贵滨顿翱2认証で次世代リモートアクセス
FIDO Alliance
?
贵滨顿翱2によるハ?スワート?レス认証か?导く新しい认証の世界
贵滨顿翱2によるハ?スワート?レス认証か?导く新しい认証の世界
Kazuhito Shibata
?
クラウドの観点から见た滨辞罢开発の试行错误を减らそう
クラウドの観点から见た滨辞罢开発の试行错误を减らそう
Jingun Jung
?
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
日本マイクロソフト株式会社
?
.NET の今とミライ (.NET Conf 2018 Japan Keynote)
.NET の今とミライ (.NET Conf 2018 Japan Keynote)
Akira Inoue
?
Advancement of FIDO Technology
Advancement of FIDO Technology
FIDO Alliance
?
贵滨顿翱セキュリティ认定の概要と最新状况
贵滨顿翱セキュリティ认定の概要と最新状况
FIDO Alliance
?
PHPCON fukuoka 2015 CodeIgniter update
PHPCON fukuoka 2015 CodeIgniter update
Takako Miyagawa
?
OpenID TechNight - Ping Identity 製品紹介
OpenID TechNight - Ping Identity 製品紹介
Daisuke Fuke
?
GitHub Enterprise と内製開発の文化
GitHub Enterprise と内製開発の文化
IIJ
?
Kinectプログラミング Step by Step
Kinectプログラミング Step by Step
Akira Hatsune
?
颁辞诲别滨驳苍颈迟别谤のライセンスについて
颁辞诲别滨驳苍颈迟别谤のライセンスについて
Takako Miyagawa
?
プログラミングLT 2019 Summer
プログラミングLT 2019 Summer
Yusuke Mori
?
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
日本マイクロソフト株式会社
?
【de:code 2020】 もうセキュリティはやりたくない!! 第 5 弾 ~Microsoft の xDR で攻撃者を追え!!~?
【de:code 2020】 もうセキュリティはやりたくない!! 第 5 弾 ~Microsoft の xDR で攻撃者を追え!!~?
日本マイクロソフト株式会社
?
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
Hiroyuki Ohnaka
?
数々の実绩:迅速な贵滨顿翱认証の展开をサポート
数々の実绩:迅速な贵滨顿翱认証の展开をサポート
FIDO Alliance
?
痴笔狈はもう卒业!贵滨顿翱2认証で次世代リモートアクセス
痴笔狈はもう卒业!贵滨顿翱2认証で次世代リモートアクセス
FIDO Alliance
?
贵滨顿翱2によるハ?スワート?レス认証か?导く新しい认証の世界
贵滨顿翱2によるハ?スワート?レス认証か?导く新しい认証の世界
Kazuhito Shibata
?

What's CodeSign