Open rocaz opened 4 years ago
この部分は、実は 6月中旬に Covid19Rader のコードが公開されたときから気になっていたところで、晴れて cocoa-mhlw のほうが公開になったので再びチェックしたところなのです。
cocoa-mhlw のコードが、サーバーサイドで動作していると仮定して、
陽性者登録 diagnosis が呼び出され、 https://github.com/cocoa-mhlw/cocoa/blob/master/src/Covid19Radar.Api/DiagnosisApi.cs#L50
ここのところで、
// validatetion VerificationPayload
var verificationResult = await VerificationService.VerificationAsync(diagnosis.VerificationPayload);
if (verificationResult != 200)
{
return new ObjectResult("Bad VerificationPayload") { StatusCode = verificationResult };
}
CustomVerificationService.VerificationAsync を呼び出している。
public async Task<int> VerificationAsync(string verificationPayload)
{
Logger.LogInformation($"start {nameof(VerificationAsync)}");
var payload = $@"{{
""{VerificationPayloadParameterName}"": ""{verificationPayload}""
}}";
var content = new StringContent(payload);
var response = await Client.PostAsync(Url, content);
if (!response.IsSuccessStatusCode) return 503;
var responseBody = JsonConvert.DeserializeObject<ResponseCustomVerification>(await response.Content.ReadAsStringAsync());
return await GetResultStatus(responseBody.Result);
}
この中で、多分 HER-SYS 相当を呼び出して処理番号が正しいかどうかをチェックする訳ですが、
という疑問の提起です。
これは根本的には
と対立するので、この部分を明確にしておきたいなと思った次第なのです。
Google のシーケンスで Verification server と Key server が別になっているのは、
を視野にいれているのかなと思っています。TEKs 自体は list.json と zip で誰でもダウンロードできるから公開情報扱いでよい。verificationPayload で送られる処理番号は個人情報なので、非公開扱いにする、という境界線を明確にするためです。
なるほどです。信頼境界と連携の問題と捉えるとすっきりしますね。
の信頼関係ですね。 このあたりの検討が初期に行われたかは不明ですが、いまとなってはuserUuidよりはよほど筋が良いように思います。 ポイントはこのVerification Protcolと名付けられたフローがGAF?においては”HIGHLY recommended”とされている点でしょうかね。
Apple Developer のサイトからも Google のコードへのリンクになっていたので、サーバーサイドのシーケンスは Google の見解でしょうね。Google としては key server 側の仕組みはそのまま提供したいのかもしれません。
Temporary Exposure Key (TEK) Publishing Guide | Exposure Notification Reference Key Server
これを見ると、構築手順が丁寧に書かれているので、そのまま Google Cloud で提供とか。 そこは私の邪推ですけど...
少なくとも、Key server 内で囲っている(公開され得る)TEKs よりも、個人に割り振られる処理番号のほうが ”HIGHLY recommended” なのは確かです。
少し話はずれますが、一応GCP以外でのHostingについても解説はしていますね。
https://google.github.io/exposure-notifications-server/server_deployment_options
でもknativeかーというのはありますが。
思い出したので付記しますが、リファレンスでOTP(処理番号)とJWT(JWS)を交換して’verificationPayload’に用いてるのは、後からのオプトアウトにも用いれるという見込みもあるのでしょうね。 全員にuserUuidなんて発行する必要は無く、公衆保健当局が間違いなく発行したJWTであるのはいつでも検証可能なので、取消も可能。 よりいっそうすっきりしました。
現状では陽性判明者が要求?すれば、COCOAでの登録のための8桁数字の処理番号が1時間有効なOTP(PIN)としてHER-SYSから払い出され、これをCOCOA(モバイルアプリ)から入力することで陽性者TEKの登録がVerification Serverを経由して行われます。 この際にアプリからPOSTされるJSONはCOCOAでも下記のGoogleによるリファレンス?の形式に従っているように見えましたが、
https://google.github.io/exposure-notifications-server/server_functional_requirements
COCOAでは上記の’verificationPayload’が8桁OTPそのままなのですが(@moonmile さんから頂いた情報による https://github.com/openCACAO/cocoa-issues/issues/22 )、同じく下記リファレンスにもあるように一旦OTPを保険当局側システムでVerifyさせた後に、JWTトークンを発行して、これを’verificationPayload’の値としてPOSTすることになっているようです。
https://google.github.io/exposure-notifications-server/design/verification_protocol
個人的にOTPを単純に送る方法に違和感があったのですが、OTPを一旦発行元での確認の後新たなClaim TokenでのVerificationを正とすることでリプライ攻撃など防ぎやすいということかな?
いずれにしても、この’Verification Protocol’については、”Use of the verification protocol is HIGHLY recommended”とされています。