Edited at

iOS構成プロファイルの暗号化

More than 1 year has passed since last update.

リファレンス


下準備


  • 平文、未署名の構成プロファイルを作成する。(サンプルはパスコード必須化プロファイル)

  • 「PayloadContent」キー内のトップレベルarrayを切り取る。


    • 別ファイルに貼り付け、例として「content.plist」として保存




sample.mobileconfig

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<!-- ここから -->
<array>
<dict>
<key>PayloadDescription</key>
<string>パスコード設定を構成します</string>
<key>PayloadDisplayName</key>
<string>パスコード</string>
<key>PayloadIdentifier</key>
<string>com.apple.mobiledevice.passwordpolicy.075922A0-F3E8-4021-9299-05DCE5737A69</string>
<key>PayloadType</key>
<string>com.apple.mobiledevice.passwordpolicy</string>
<key>PayloadUUID</key>
<string>075922A0-F3E8-4021-9299-05DCE5737A69</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>allowSimple</key>
<true/>
<key>forcePIN</key>
<true/>
<key>requireAlphanumeric</key>
<false/>
</dict>
</array>
<!-- ここまで --->
<key>PayloadDisplayName</key>
<string>構成プロファイル</string>
<key>PayloadIdentifier</key>
<string>com.example.sampleprofile</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>04DE3942-1870-4C98-B901-5A233EA772BF</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>


  • 「PayloadContent」キーを「EncryptedPayloadContent」に変更する。


encrypted.mobileconfig

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EncryptedPayloadContent</key>
<!-- ここから -->

<!-- ここまで --->
<key>PayloadDisplayName</key>
<string>構成プロファイル</string>
<key>PayloadIdentifier</key>
<string>com.example.sampleprofile</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>04DE3942-1870-4C98-B901-5A233EA772BF</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>



ペイロードコンテンツの暗号化

macOS Sierra, OpenSSL 0.9.8zh 14 Jan 2016

$ openssl smime -encrypt -aes256 \

-in content.plist \
-outform pem \
[証明書].cer

-----BEGIN PKCS7-----
44G744GS44G044KICg==(もっと長い)
-----END PKCS7-----

「-----BEGIN PKCS7-----」から「-----END PKCS7-----」までの間のBase64符号化されたデータをコピーする。


暗号化プロファイルとして結合

プロファイルの「EncryptedPayloadContent」下にDataとして貼り付ける。


encrypted.mobileconfig

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EncryptedPayloadContent</key>
<!-- ここから -->
<data>
44G744GS44G044KICg==
</data>
<!-- ここまで --->
<key>PayloadDisplayName</key>
<string>構成プロファイル</string>
<key>PayloadIdentifier</key>
<string>com.example.sampleprofile</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>04DE3942-1870-4C98-B901-5A233EA772BF</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>


使い方と個人的まとめ



  • iOS9までは、復号できない場合はその旨を表示していたがiOS10の場合は、ただのxmlとして扱われる模様


    • プロファイルインストール画面に遷移せず、OpenInが働く




  • 復号させる場合は、iOS側に秘密鍵を入れておく必要がある。


    • p12ファイルをメールで送る、p12を含むプロファイルをインストールしておく



  • 署名をする場合は、暗号化プロファイル作成後に署名する。



  • 暗号化することで、パスワード類を含めて平文で見えることはなくなるが、公開鍵暗号の仕様上、復号できなくもないため、内容を秘匿したい場合は秘密鍵の配布方法を考慮する必要がある。


    • p12をメールで送ると、そこから秘密鍵を取り出して復号できなくもない。

    • p12を含めたプロファイルにはp12のパスワードが平文で入る。



  • 秘密鍵を持っていないとプロファイルのインストールができないので、不特定多数への配布には不向き



  • 業務利用する場合は、秘密鍵を事前にConfiguratorで入れておけばいいかもしれない。


    • もっとも、その場合は大人しくMDMを利用する方が楽



結論:使い途が思いつかない。

おまけ

暗号化プロファイルがインストールされた場合、iTunesとかでのバックアップ時に暗号化が必須とされる。はまった。