ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
検証可能な医療記録の詳細
検証可能な医療記録へのアクセスを安全にリクエストし、そのデータをAppに安全に組み込む方法を紹介します。ヘルスケアAppでは、COVID-19の予防接種や検査結果などの医療記録をダウンロード、表示、共有することができます。また、iOS 15では、FHIR健康データ標準を取り入れた検証可能な医療記録であるスマートヘルスカードがサポートされます。本セッションでは、Appがこのレコードへのアクセスをリクエストする方法と、CryptoKitと発行者の公開鍵を使用してファイルの署名を検証する方法を紹介します。
リソース
- Accessing a User’s Clinical Records
- Accessing Data from a SMART Health Card
- Accessing Health Records
- HKVerifiableClinicalRecord
- HKVerifiableClinicalRecordQuery
関連ビデオ
WWDC20
-
ダウンロード
こんにちは Health Recordsチームの Annieです 今日はCaryと共に HealthKitでどのように 検証可能な医療記録 を共有できるかお話しします そのトピックに入る前に まず 2018年に iOS 11.3で登場した Health Recordsについて お話しします Health Recordsは 医療プロバイダに接続し 簡単な保管と視覚化のため 医療記録を ヘルスケアAppに ダウンロードするものです これは業界基準である HL7のFHIRをベースに 作られています ユーザーの許可を得て HealthKitで ダウンロードした 医療記録にアクセスできます Health Records APIの詳細は WWDC 2018の "HealthKitでヘルスケアレコードに アクセスする"を ご覧ください iOS 15ではHealth Recordsの ノウハウを生かし ヘルスケアAppで 医療記録の ダウンロード・保管・共有を 可能にします SMART Health Cards仕様に 基づいています 検証可能な医療記録 とは何なのか 現在HealthKitで クエリできる ヘルスケアデータと どう違うのか見てみましょう 検証可能な医療記録 には 患者リソースと 臨床リソースの FHIRリソースからなります これらをまとめたものが SMART Health Cardです この医療記録の発行人である 研究所や医療機関が このSMART Health Cardを JSON Web Signature JWSとして 暗号化して符号化します 最後に発行人が 患者と臨床データの 最小必要データだけを 検証可能な医療記録 として作成します もう少し明確にするため 例を見てみましょう ここでは 2つのワクチンに関する FHIR予防接種 リソースが含まれます また接種者の確認のため FHIR患者リソースも 含まれます これらがまとめられて SMART Health Cardとなり このような 生データになります SMART Health Card payloadには health cardにどのような データがあるかを示す URLを含んだtypeと FHIRのバージョンや 接種と患者のリソースを含む bundleリソースが含まれる credential subjectが あります SMART Health Cardは JWSとして符号化され headerとpayloadに 分類されます JWS headerには どの公開鍵が使用されたか 特定するpublic key thumbprintである JWSの符号化に使用された アルゴリズムと payloadを圧縮する アルゴリズムがあります compressed JWS payloadは credential subjectと共に 発行人の公開鍵がある issuer URLや 発行日時及び オプションの有効期限日 などが含まれています ご覧の生データが 検証可能な医療記録 です 詳細はこのセッションの リンクにある SMART Health Card specificationを ご参照ください それでは データがどのようなものか わかったところで ヘルスケアAppへの 取り込み方を お見せします 一つはHealth Records 機能の使用です ヘルスケアAppで Health Records対応の プロバイダに接続して 記録をダウンロードできます 現在 このオプションは Health Records機能が 利用可能な アメリカ・イギリスと カナダでのみ使用できます また.smart-health-cards 拡張子のファイルのダウンロード 及び smart-health-card ファイルが埋め込まれた QRコードをスキャンすることも 可能です これにより 詳細を閲覧したり ダウンロードを 選択できるシートが ヘルスケアAppに 表示されます これらのオプションは 全世界で利用できます 最後にHealthKitで どのようにアクセスを リクエストするかです HKVerifiableClinical RecordQueryと HKSample subclassの HKVerifiableClinicalRecord がiOS 15に追加されます 他のHKQuery subclasses と違い このクエリの使用は HealthKitアクセス権限を リクエストせねばなりません SDKでpublic headerに アクセスできても 権限なしでは authorization denied error がresults handlerから 出ることになります 詳細は このセッションのリンクを ご参照ください queryと sample classに入る前に 検証可能な医療記録 の認可についてです Health Recordsとは 少し違います 検証可能な医療記録は per-sampleの 認可パターンで守られ ユーザーは 個別typeではなく sampleを Appと共有します このタイプの認可は データに対する 細かい管理が可能になり プライバシー保護上 非常に重要です 現在のHealthKit 認可パターンには 2ステップあります まず 読み込んで共有する typeの認可 そして認可後の sampleのクエリです 検証可能な医療記録 の場合 一つ目は不必要です HKVerifiableClinical RecordQueryが作られ 実行されれば 認可シートが 表示され どの記録をAppと共有するか ユーザーが 選択できます 共有後 選ばれた記録が クエリの results handlerに戻ります さらに 検証可能な医療記録 の認可は一度のみで 第三者Appと共有しても 長期のアクセス認可は できません HKVerifiableClinical RecordQueryの実行で 認可シートが 表示され results handlerに 選択された記録が 戻ります 認可の説明は以上です 次はHKVerifiableClinical RecordQueryの詳細を 見てみましょう HKVerifiableClinical RecordQueryの初期化には 先程 医療記録内にある データタイプとして定義した record typesの文字列配列を まず提供せねばなりません record typesが提供された 記録のみが 認可シートに 表示されます HealthKitの他のクエリ同様 認可のサンプルセットの フィルタに predicateを 足すこともできます 一定期間の 関連日時の記録に対する predicateを作成するための convenience constructorを 提供しています クエリが実行されユーザーが “一度だけ共有”を押せば 認可されたHKVerifiable ClinicalRecordsが results handlerに戻ります 記録には subjectとissuerの 基本情報と あなたが確認し 解読する生データを含む JWSプロパティが 含まれています 検証可能な医療記録 の機能と APIを見たところで Caryにバトンタッチし テストデータのインポート APIでの記録リクエストと JWSの認可のお話をします ありがとう Annie どうも エンジニアの Caryです 検証可能な医療記録 の使い方をお話しします この機能を利用するために HealthKitにテストデータを 取り込みましょう Annieが話したように 3つ方法があります アメリカ・カナダ・ イギリスにいるなら ヘルスケアAppの Health Records機能で プロバイダに接続できます もう一つは smarthealth.cardsの 仕様Webサイトにある .smart-health-card ファイルを使用することです 3つ目はQRコードの使用です ではデータの取得です このデモでは 新しいQRコードを使います iOS 15搭載のデバイスで このQRコードを スキャンしてください すぐにヘルスケアAppで 開くプロンプトが出ます そこからAppで インポートの手順が 始まります Add to Healthを選び インポートは完了です 予防接種の欄に インポートされた記録が あります これをタップすると Appで認可された ワクチンの情報が 確認できます ヘルスケアAppに 記録がインポートされ あなたのAppに 呼び出す準備ができました この新しいAPIへの アクセスの仕方を 見てみましょう まずHealthKitの インポートです 次にHealthStoreを作ります HealthKitの authorization APIの 使用経験があれば簡単です ユーザーに 共有してもらうデータの record typesを リストにします 認可する時 このリストと 一致するrecord typesが 表示されます 次に日程期間を指定するため predicateを作ります この例では過去7日間の 検査結果が リクエストされています そしてrecordTypesと predicateで クエリを作ります completionを使って サンプルがAppに 共有されたか確認します 最後に クエリの実行で 認可シートが 表示され Appと共有されるデータを 選択できます この方法を使うといつでも これが表示されます これで符号付きの データが取り込まれ シグネチャ確認の コードが書けます デジタルシグネチャは デジタル情報を 数学的に認証する方法です サーバーや モバイルデバイスなど どこでも可能ですが この例ではApp内で 認証してみましょう 4つのステップがあります まず Codableで データを解析します その次は JSON Web Token payloadで 解凍します 3つ目は issuerのpublic keyを ダウンロードします 最後にCryptoKitで シグネチャを認証します まずは元々JSON Web Signature specificationで 定義されていたsigned recordのデータモデルを どう定義するかです これは3つに分かれます headerとpayload そしてsignatureです Swift Codableで 解析できます signature verificationの ために 元のheaderとpayloadを キープしておきます 何よりも大切なのは JWSを解析するために initializerを足すことです 次にJWS headerを示す structを作ります compact serializationの 初期化と signature verification processに必要です ここのheaderに specified signature algorithmと public key thumbprintを 保つkey-ID field そしてcompression algorithmがあります public key thumbprintは どのキーがJWSの符号付きに 使われたかの確認に 使われます このプロセスにはES256 Signature Algorithmと DEF compression algorithmsが必要で どちらもSwift librariesで サポートされています ではJWSをcompact serializationから 解析するコードを 見てみましょう serialized stringを 分類することから 始めます いずれもBase64URLで 符号化されています JSONDecoderを作り Base64URLで headerとpayloadを 解読したら payloadが正しく圧縮されて いるかheaderで確かめます 圧縮を確認した後 サンプルプロジェクトの utility methodで payloadを解凍します 次にhealth card payloadの作成に structが必要になります ここで重要なのは キーの呼び込みに使う issuerの web identifierを持つ issuer fieldと 患者のデータを持つ VC fieldです VC fieldの解析と 分析に関しては Handling FHIR without getting burnedを ご参照ください JWSの解析法がわかり 信頼性を認可できます JWS structに verification methodを足す extentionの作成を 見てみましょう signing keysを引き出すため issuerのWebサイトに 直接通信するため 非同期面の対応に Combineを使用し signature verificationに CryptoKitを使います verification method内で issuerのWebアドレスである issuerのidentifierを 引き出します URLが個人的に 信頼できるものであり そうでない場合は 中止するように 自分なりの確認方法を ここで足すこともできます 次にissuerのkeysを 引き出すために .wellknown/jwks.jsonを 足してURLを作ります このpath suffixは 仕様で定義されており どのissuersも 同じであるはずです URLを作成したところで issuerに接続して keysをダウンロードし signatureを確証します URLSession dataTaskPublisherで issuerのJWK エンドポイントに接続し コードの作成は終了です データに一致させて jsonDecoderでJWKsを解読し そして最後に ブールに一致させ シグネチャの信頼性を 確認します 最後のmap blockの中で JWS headerに基づいて issuerのkeyを選びます 最後はCryptoKitを使って シグネチャを認可します JWS仕様に基づき Base64URLのheaderと payloadを ピリオドで繋ぎ認可された データが形成されます 次にダウンロードした JWK keysを サンプルプロジェクトの utility methodで CryptoKit P256 signing keysに変換します 最後にCryptoKitの isValidSignatureで シグネチャの認可をします これで認可に必要な データモデルと 全てのロジックが定義され 全てを統合できます 先程の新しいAPIの 呼び出し方でこのコメントを 新しい認可方法と 入れ替えられます APIは選択されたサンプルを リストにするため そのリストから 一つ目を選びます 次にdataからStringに 解析します compact serialization initializerで解析します 最後に新しい 認可方法を呼び出し ブールの結果を確認します このように 符号付き医療データを 呼び込み issuerのsigning keysを ダウンロードし この記録のシグネチャを 認証するのです では Annieが 話をまとめます ありがとう Cary 話を終える前に 検証可能な医療記録 のプライバシーについてです 検証可能な医療記録は ユーザーのプライバシーを 念頭に設計されています まず SMART Health Card仕様は issuerが記録に含む情報を 極小化するdata profileを 使用しています ヘルスケアAppは 医療データを守るために デザインされており 検証可能な医療記録 を含む全てのデータが iPhoneロック中 暗号化されています 検証可能な医療記録 へのアクセスには これらのデータが 悪用されないよう 追加義務のあるエンタイトルメントがある Appが必要になります 最後にユーザーは 検証可能な医療記録の共有を さらに管理できるように なっています それではおさらいです iOS 15では Health Recordsに基づき ヘルスケアAppに 検証可能な記録を 呼び込む機能と 新しいAPIで 解読できる機能を 追加しました さらに お試し いただけることがあります まずverifiable health dataの エコシステムを学ぶため SMART Health Cards specificationsをご覧になり ヘルスケアAppに テスト記録を インポートし 試してみてください サンプルAppを ダウンロードし クエリと認証の仕方を 学んでください 最後にAppが完成したら 検証可能な医療記録 のためのHealthKit アクセス権限を リクエストしてください ご閲覧 ありがとうございました [音楽]
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。