この記事は Chrome デベロッパーおよびブロガー Bruce Dawson による Chromium Blog の記事 "Don't Copy That Surface" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

この投稿は新シリーズ速さと好奇心の一部です。このシリーズでは、Chrome の速度と信頼性を向上するという慎重なトレードオフと複雑なエンジニアリングについて詳しく解説します。Chrome デベロッパーおよびブロガーである Bruce Dawson は、ここで紹介するデバッグ作業を通じて、ウェブカメラを使う際の CPU 使用率を約 3% 削減しました。ビデオ通話を多用する私たちにとって、役立つ改善です。

2020 年、ビデオ会議の重要性は飛躍的に上昇しました。私は Google Meet チームの一員ではありませんが、Chrome に携わっているので、何か役立つ情報を見つけようと、日々会議に参加する中でお気に入りのプロファイラを実行してみました。

ビデオ会議では、複数のプロセスにまたがるさまざまな処理が動いています。私はいつも数十個のタブを開いています。Chrome のプロセスは 37 個あり、そのうち 6 つがビデオ会議に密接に関連するものでした。さらに、200 個以上の他のプロセスが動作しており(たとえば、svchost.exe は 87 個ありました)、そのうち 4 つがビデオ会議に関連するものでした。2 人の人をつなぐためになぜプロセスが 10 個も必要になるのか、不思議に思う方もいるかもしれません。そこで、使われるプロセスと役割についてまとめてみます。

  • audiodg.exe - Windows Audio Device Graph Isolation、オーディオ出力
  • dwm.exe - Windows Desktop Window Manager、動画の表示
  • svchost.exe - Windows Camera Frame Server(ウェブカメラのキャプチャ)
  • System - Windows システム プロセス、各プロセスのためにさまざまなタスクを実行
  • chrome.exe - ブラウザのプロセス、マスター コントロール プログラム
  • chrome.exe - レンダラ プロセス、Meet タブ
  • chrome.exe - GPU プロセス、ページのレンダリングを実行
  • chrome.exe - NetworkService ユーティリティ プロセス、ネットワークとの通信
  • chrome.exe - VideoCaptureService、Windows Camera Frame Server との通信
  • chrome.exe - AudioService、オーディオ入出力のコントロール

セキュリティと安定性を確保するため、これらのタスクは複数のプロセスに分散しています。そのため、いずれかがクラッシュしても、すべてをダウンさせずに再起動できます。また、セキュリティ バグのためにいずれかが侵害されても、システムの他の部分から切り離すことで、被害を抑えることができるかもしれません。

これは妥当なことですが、このように多くのプロセスを扱う場合、パフォーマンスのプロファイリングが難しくなることもあります。すべてのプロセスを確認し、改善の余地がある部分を突き止めるのは困難です。さらに難しいことに、私は Meet のアーキテクチャについてほとんど何も知りません。


プロファイルの分析

ビデオ会議は CPU を多用します。記録、圧縮、転送、受信、解凍をし、オーディオと動画の両方を出力しなければなりません。下に示すのは、Microsoft の Event Tracing for Windows(ETW)で記録した CPU のサンプルデータです。このサンプリング プロファイラは、すべての実行中のスレッドを 1 秒に約 1,000 回中断させ、コールスタックを記録します。結果の表示には、Windows Performance Analyzer(WPA)を使いました。下のスクリーンショットでは、ビデオ会議に関係する 10 個のプロセスについて、10 秒間にわたって 16,000 以上のサンプル(CPU 時間で約 16 秒)を記録したものを分析しています。



眺めるには数が多すぎるサンプルですが、コールスタックごとにまとまっているので、最も負荷の高いスタックにドリルダウンできます。最初の Chrome プロセスには気になるものはありませんでしたが、2 つ目のプロセスにはありました。


数は多くはありませんが、124 サンプルの KiPageFault は調査する価値があるとすぐにわかりました。このトレースでは、CPU を多用する作業のほとんどが重要で、省くことはできません。しかし、このサンプルは省くことができる作業、すなわち修正できる部分だと直感しました。また、これはサンプル全体のわずか 0.75% にすぎませんが、それよりも大きなコストがかかっている可能性があるとも考えました。

この重要性にすぐに気づくことができたのは、以前に同じような現象を経験していたからです。KiPageFault は、以前にプロセスに割り当てられていたものの、現在は割り当てられていないメモリにプロセッサがアクセスしたことを示します。これは、メモリを節約するためにページがプロセスから削除されているにもかかわらず、マシンのアクティブなプロセスにはたくさんのメモリがあるということなので、おかしな話です。可能性が高いと思われたのは、最近割り当てられたメモリです。

プログラムが少量のメモリを割り当てる場合、通常はローカルメモリ マネージャー(「ヒープ」と呼ばれることもあります)が保有するメモリがプログラムに渡されます。しかし、適切なメモリブロックがない場合は、オペレーティング システム(OS)にメモリを要求します。プログラムが大量のメモリを割り当てる場合(約 1 MB 以上)、ヒープは確実にメモリを要求します。これ自体は、コストの低いオペレーションです。ヒープは OS にメモリを要求し、OS は「OK」と回答して、このメモリを確保する予定であることを記録するだけです。実際には、このタイミングで OS がプログラムにメモリを提供するわけではありません。Windows、Linux、Android の世界ではそのような仕組みになっています。これは優れた仕組みですが、わかりにくく、意外な動作かもしれません。プロセスがそのメモリにまったくアクセスしない場合、メモリがプロセスに追加されることはありません。しかし、プロセスがメモリにアクセスすると、メモリがゼロで初期化され、個々のページがプロセスに割り当てられます。この動作は、デマンドゼロ ページ フォールトと呼ばれます。需要が発生したタイミングで「フォールト」が起き、ゼロで初期化されたページがプロセスに渡されるからです。

つまり、大きなメモリブロックの割り当ては非常に安価ですが、確保される予定のメモリが実際に準備されるわけではありません。その後にプログラムがメモリを使おうとし、CPU がそのアドレスにメモリがないことを知ると、CPU は例外を発生させて OS をウェイクアップさせます。OS は記録を確認し、そのアドレスでメモリを確保したことが確認できると、そこにメモリを割り当ててプログラムを再起動させます。この処理は一瞬で終わるので、十分気をつけていないと見逃してしまいます。しかし、プロファイリングをすれば、サンプルに KiPageFault として表示されます。

この奇妙な動作は、4 KiB のブロックが割り当てられるごとに発生します。4 KiB というのは、CPU と OS が扱うページのサイズです。

このコストは少なく、10 秒間で KiPageFault に該当するのは 124 サンプルだけです。つまり、124 ミリ秒(0.124 秒)しかかかっていません。これを包含する CopyImage_SSE4_1 関数の合計コストは約 240 ミリ秒なので、この関数の半分以上がページ フォールトの処理時間であることになりますが、15 行目の OnSample 関数のコストの 4 分の 1 ほどでしかありません。

ページ フォールト自体の合計コストはわずかですが、ここから他の部分でコストが生じていることがうかがえます。
  • このメモリが繰り返し(おそらくすべてのフレームで)割り当てられている場合、すべてのフレームで解放する必要もあります。26 行目を見ると、メモリを解放する Release 関数に別の 64 サンプルが使われていることがわかります。
  • ページが解放されたとき、オペレーティング システムはそのページを再利用できるように、ゼロで初期化する必要があります(セキュリティ確保のため)。これは Windows System プロセスが行うので、ほぼ完全に見えないコストになります。実際に System プロセスを見てみると、138 サンプルの MiZeroPageThread を確認できます。システム全体の KiPageFault サンプルの 87% が CopyImage_SSE4_1 の呼び出しによるものであることがわかったので、138 サンプルの MiZeroPageThread の 87% がこのパターンによるものと想定されます。


メモリ割り当ての隠れたコストについては、2014 年のブログ投稿で分析しました。Windows の基本的なメモリ アーキテクチャはその後も変わっていないので、隠れたコストは同程度です。

ETW トレースには、CPU のサンプルだけでなく、すべての VirtualAlloc 呼び出しのコールスタックも含まれています。次の WPA のスクリーンショットは、OnSample 関数が 10 秒の間に 1 回あたり 1.320 MB の割り当てを 298 回(1 秒間におよそ 30 回)行っていることを示しています。


現時点で、この割り当ての繰り返しによるコストは、124(フォールトによる読み込み)+64(解放)+124(ゼロで初期化するサンプルの 87%)の合計 312 サンプルと想定されます。これは、ビデオ会議の合計 CPU コストの最大 1.9% になります。これを修正しても世界が変わることはないでしょうが、変更するだけの価値はあります。

その他のコスト

バッファの内容を確認するためにバッファをロックしていますが、実際には、ロック呼び出しによってバッファをコピーすること自体が不要です。ロック呼び出しにやってもらいたいのは、その場所を見ることができるように、バッファの内容を返してもらうことだけです。つまり、MFCopyImage を呼び出すコストがすべて無駄になっていることになります。これで、さらに 116 サンプルが追加されます。加えて、26 行目の CMF2DMediaBuffer::Unlock 呼び出しでは、別の CMF2DMediaBuffer::ContiguousCopyFrom 呼び出しが行われています。これはバッファのコピーが変更されることを想定した処理で、Unlock 呼び出しによって逆方向にコピーしています。そのため、この 101 サンプルも無駄であることがわかります。

割り当て / コピー / コピー / 解放という動作をせずにこのバッファを参照できれば、312 サンプルに加えて、116 サンプル(残りのコピーのコスト)+101 サンプル(逆コピーのコスト)を節約できます。これで節約可能な合計は 3.2% になり、さらなる向上が見込めます。

なお、サンプルデータは統計的にのみ有効なので、実際の割合はコンピュータや細かなワークロードによって大きく異なります。しかし、重要な点は変わりません。劇的ではないものの、調査してみる価値がある変更です。

長年ビデオゲーム業界に関わってきたにもかかわらず、私のグラフィック関係のバッファのロックやアンロックをする API に関する知識は豊富ではありません。最終的にコピーを完全に回避できるという結論にたどりつき、大まかな修正パターンに行き着くには、Twitter フォロワーの皆さんの知恵に頼らざるを得ませんでした。長文なバグを報告し、実際の修正作業を委任しました。修正は M85 で実施され、重要性が高いと評価されたため、M84 にもバックポートされました。

この修正は、Chrome やシステムのさまざまなプロセスにまたがっているので、実際に差を確認するには、かなり細かい注意を払う必要があります。しかし、一部のコンピュータで少しだけ熱くならずに実行できるようになったり、電池が少しだけ長持ちしたりするようになることを期待しています。また、この非効率な処理は Google Meet のプロファイリングによって見つかりましたが、実際には、Chrome(とその他の Chromium ベースのブラウザ)でウェブカメラを使うプロダクトであれば、どのようなものであっても改善の恩恵を受けることができます。

確認

この修正が実施された後、変更の前後の Chrome Canary で、2 つの 10 秒間の ETW トレースを比較してみました。どちらのトレースも、1 つの Chrome タブで Google Meet のミーティング前ページを開く以外、他のプログラムを実行しない状態で取得したものです。また、どちらもプロファイラでの 10 秒間を対象としました。結果は次のようになりました。


OnSample の CPU 時間 :
変更前 : 458 ミリ秒(そのうち 432 ミリ秒が Lock/Unlock/KiPageFault)
変更後 : 27 ミリ秒


割り当て :
変更前 : 1 秒あたり 1.32 MB の割り当てが 30 回(30 fps のフレーム 1 つにつき 1 回。さらに高いフレームレートでは割り当てがさらに多くなる)、10 秒間で合計 396 MB
変更後 : 0 回


System プロセスの MiZeroPageThread の CPU 時間 :
変更前 : 36 ミリ秒
変更後 : 0 ミリ秒

この 3 とおりの測定結果から、パフォーマンスの問題が修正されたことがわかります。OnSample によるメモリのコピーがなくなり、繰り返しの割り当てがなくなり、システム プロセスの作業量も減っています。任務は完了、バグはクローズです。



Reviewed by Eiji Kitamura - Developer Relations Team

この記事はデベロッパー アドボケート、Eiji Kitamura、プロダクト マネージャー、Ali Sarraf による Chromium Blog の記事 "Help users log in across affiliated sites on Chrome" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Chrome は、新しいパスワードを生成したり、保存されたパスワードの自動入力や同期をしたり、侵害されたパスワードについてユーザーに警告したりすることができます。つまり、ユーザーは自分でパスワードを管理する必要がなくなります。しかし、複数のドメインで同じアカウント管理バックエンドを利用している場合(たとえば、https://www.example.comhttps://www.example.co.uk のような複数のトップレベル ドメイン)、Chrome はドメインをまたいで自動入力をしてくれません。その結果、異なるドメインに対して同じパスワードのエントリが 2 つできることになり、同期がとれなくなることもあります。

バージョン 91 以降の Chrome では、Digital Asset Links(DAL)で関連付けられたドメイン間で、保存したパスワードの自動入力が提案されます。DAL は、Android アプリとウェブサイトを関連付けるために、2015 年から利用されています。Chrome 91 では、サイト間で DAL を設定すると、Chrome がサイトをまたいでユーザーのログインをアシストしてくれます。DAL の関連付けをするには、両方のドメインの /.well-known/assetlinks.jsonDAL 構文に従った JSON ファイルを配置する必要があります。

DAL の関連付けの詳しい設定方法については、すべての連携サイトで Chrome がログイン認証情報を共有できるようにするをご覧ください。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は Chromium Blog の記事 "Chrome 91: Handwriting Recognition, WebXR Plane Detection and More" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

特に記載のない限り、下記の変更は Android、Chrome OS、Linux、macOS、Windows 向けの最新の Chrome ベータ版チャンネル リリースに適用されます。ここに記載されている機能の詳細については、リンクまたは ChromeStatus.com の一覧でご確認ください。2021 年 4 月 22 日の時点で Chrome 91 はベータ版です。

オリジン トライアル

このバージョンの Chrome には、以下のオリジン トライアルが導入されています。オリジン トライアルとして新機能を試せるようにすることで、ウェブ標準コミュニティにユーザビリティ、実用性、有効性についてのフィードバックを提供することができます。以下の項目を含め、現在 Chrome でサポートされているオリジン トライアルに登録するには、Chrome オリジントライアル ダッシュボードをご覧ください。Chrome のオリジン トライアルの詳細については、ウェブ デベロッパーのためのオリジントライアル ガイドをご覧ください。Microsoft Edge は、Chrome とは別に独自のオリジン トライアルをしています。詳細については、Microsoft Edge オリジントライアル デベロッパー コンソールをご覧ください。

新しいオリジン トライアル

PWA の宣言的リンク キャプチャ

新しいウェブアプリ マニフェストのメンバーとして、capture_links が追加されます。これを使うと、ユーザーがインストール済みのウェブアプリのスコープ内でページを移動したときの動作をコントロールできます。ユーザーがアプリへのリンクをクリックしたときに自動的に新しい PWA ウィンドウを開いたり、モバイルアプリのようなシングル ウィンドウ モードにしたりすることが可能です。オリジン トライアルに登録すると、オリジントライアル ダッシュボードで詳細を確認できます。

WebTransport

WebTransport は、ウェブのセキュリティ モデルの制約を受けるクライアントがリモート サーバーと通信する際に、安全な多重化転送をできるようにするプロトコル フレームワークです。

現在、ウェブ アプリケーション デベロッパーがリモート サーバーと双方向通信をする場合、WebSocketsRTCDataChannel という 2 つの API を使うことができます。WebSockets は TCP ベースなので、すべての TCP の欠点(ヘッドオブライン ブロッキング、信頼できないデータ転送の未サポート)を引き継ぐことになり、レイテンシが重要なアプリケーションには適しません。RTCDataChannel は Stream Control Transmission Protocol(SCTP)ベースなので、そのような欠点はありません。しかし、ピアツーピアで使うことを念頭に置いて設計されているので、クライアント サーバー設定で使われることはほとんどありません。WebTransport は、信頼できないデータと信頼できるデータの両方の双方向通信をサポートするクライアント サーバー API で、UDP 的なデータグラムによるキャンセル可能なストリームを利用します。WebTransport の呼び出しは DevTools の [Network] パネルで確認できます。[Type] 列を見ると、このプロトコルが使われていることがわかります。

詳しくは、WebTransport の試験運用をご覧ください。オリジン トライアルに登録すると、オリジントライアル ダッシュボードで詳細を確認できます。

WebXR Plane Detection API

WebXR アプリケーションで、ユーザーの環境内の平面についてのデータを取得できるようになります。これにより、低い処理能力でも高いユーザー エクスペリエンスを実現できます。この機能なしに平面検出をするには、MediaDevices.getUserMedia() のデータを利用してカスタムのコンピュータ ビジョン アルゴリズムを実行する必要があります。通常、このようなソリューションは、AR エクスペリエンスに求められる質や精度を満たせず、ワールドのスケールもサポートされません。オリジン トライアルに登録すると、ダッシュボードで詳細を確認できます。

完了したオリジン トライアル

Chrome で以前にオリジン トライアルが行われていた以下の機能は、現在デフォルトで有効化されています。

battery-savings メタタグ

サイトがユーザー エージェントに対し、ページよりもユーザー エージェントのほうが得意とする方法で電池寿命を節約し、CPU の利用を最適化することを推奨できるようになります。たとえば、フレームレートを落とすことを許可したり、スクリプトの速度を下げることを許可したりできます。詳しくは、解説をご覧ください。

非表示テキストの検索

ユーザーがページ内検索をし、ある要素で一致するテキストが見つかると、beforematch イベントが発行されます。これまでは、content-visiblityhidden に設定されていた場合、このイベントは発行されませんでした。content-visibility: hidden-matchable CSS プロパティは、content-visibility: hidden と同じように動作しますが、ページ内検索で非表示テキストを検索でき、beforematch イベントも発行されます。beforematch イベントと content-visibiliy: hidden-matchable を組み合わせて使うと、ページ内検索に反応して非表示コンテンツを展開するウェブサイトを実現できます。詳しくは、解説をご覧ください。

WebAssembly SIMD

WebAssembly SIMD は、プラットフォームに依存しない方法でハードウェア SIMD 命令を WebAssembly アプリケーションに公開します。これにより、さまざまな種類の圧縮データを表す新しい 128 ビット型や、圧縮データを扱ういくつかのベクトル演算を導入できます。SIMD は、データレベルの並列化を利用してパフォーマンスを大きく向上できることに加え、ネイティブ コードを WebAssembly にコンパイルする場合にも役立ちます。詳しくは、WebAssembly SIMD の V8 機能の解説をご覧ください。

今回のリリースに追加されたその他の機能

Performance API のタイマー解像度とクロスオリジン分離機能の一致

サイト分離の有無に基づいた performance.now() と関連するタイムスタンプの精度を下げる処理が、プラットフォーム間で一貫した動作になりました。これにより、デスクトップ版の分離されていないコンテキストでは、解像度が 5 マイクロ秒から 100 マイクロ秒に下がります。また、Android 版でクロスオリジン分離されているコンテキストでは、解像度が 100 マイクロ秒から 5 マイクロ秒に上がります。

クリップボード : 読み取り専用ファイルのサポート

デスクトップ版で、アプリがクリップボードからファイルを読み取ることができるようになります(ただし、クリップボードにファイルを書き込むことはできません)。アプリは、クリップボードのファイルに読み取り専用でアクセスします。

async function onPaste(e) {
  let file = e.clipboardData.files[0];
  let contents = await file.text();  
}

CSS

カスタムのカウンター スタイル

リストマーカーや CSS カウンターで CSS の @counter-style ルールを使うと、ウェブ制作者がカスタムのカウンター スタイルを指定できます。これは国際化に役立ちます。この変更は、以下を除くすべての CSS Counter Styles Level 3 機能で実装されます。

  • どのブラウザもサポートしておらず、仕様によれば「危険性がある」イメージ シンボル
  • ユーザー補助機能である speak-as ディスクリプタ
  • symbols() 関数

:host() と :host-context() での単一の <compound-selector>

:host() と :host-context() 疑似クラスが、<compound-selector-list> に加えて単一の <compound-selector> を受け取れるようになります

Android 版でのフォーム コントロールの外観の更新

フォーム コントロールの外観が刷新され、ユーザー補助機能とタッチのサポートが向上します。これは Microsoft と Google の共同作業です。詳しい情報は、以前の CDS トークMicrosoft のブログ投稿をご覧ください。

今回のリリースでは、すでに他のプラットフォームでリリースしたものと同じフォーム コントロール UX を Android 版にも提供します。新しいフォーム コントロールには、ダークモードでフォーム コントロールやスクロールバーが自動的に暗い色になる機能が含まれています。

ダークモードは、ウェブ制作者がウェブページをダークモードで表示できるようにするユーザー補助機能です。これを有効にすると、ユーザーは Android デバイスでダークモード設定を切り替えることにより、サポートされているウェブサイトをダークモードで表示できます。ダークモードは低光量環境で目にやさしく、電池の消費も少なくなります。

GravitySensor インターフェース

GravitySensor インターフェースは、重力の 3 軸読み取り値を提供します。これまでも、Accelerometer の読み取り値から LinerAccelerometer の読み取り値を除くことで、このインターフェースで提供される値に近い値を算出することができました。

File System Access API でのファイル名と場所の提案

ウェブアプリで File System Access API を使う場合、作成または読み込みをするファイルやディレクトリの名前と場所を提案できるようになります。これにより、ユーザー エクスペリエンスが向上し、ウェブアプリの動作がシステムアプリに近づきます。File System Access API の詳細については、File System Access API: ローカル ファイルへのアクセスを簡単にするをご覧ください。

WebOTP API: クロスオリジン iframe のサポート

パーミッション ポリシーで許可されている場合、WebOTP API をクロスオリジン iframe で利用できるようになります。WebOTP API を使うと、プログラムによってそのオリジンが宛先となった特別な形式の SMS メッセージからワンタイム コードを読み取り、ユーザーの手間を減らすことができます。認証を扱う iframe は、多くのサイトに埋め込まれています。

WebSockets over HTTP/2

Chrome は、Chromium の WebSockets over HTTP/2RFC 8441 で規定)をサポートします。これは、すでに HTTP/2 で接続しており、サーバーが仕様で規定されている HTTP/2 の SETTINGS パラメータによって WebSockets over HTTP/2 のサポートをアドバタイズしていて、安全な WebSockets リクエストが行われた場合のみ利用されます。

Digital Asset Links で連携したサイト間の認証情報の共有

2015 年より、デベロッパーは Digital Asset Links(DAL)を使って Android アプリとウェブサイトを関連付け、ユーザーのログインをアシストしています。複数のドメインで同じアカウント管理バックエンドを共有している場合は、それらを相互に関連付けることで、Chrome のパスワード マネージャーがすべての連携するウェブサイトで保存した認証情報を提案するようになります。詳しくは、すべての連携サイトで Chrome がログイン認証情報を共有できるようにするをご覧ください。

JavaScript

このバージョンの Chrome には、V8 JavaScript エンジンのバージョン 9.1 が組み込まれます。具体的には、以下の変更点が含まれます。最新の機能リストをすべて確認したい方は、V8 リリースノートをご覧ください。

Service Worker の ES モジュール('module' タイプ オプション)

JavaScript が Service Worker でモジュールをサポートします。コンストラクタの type 属性に 'module' タイプを設定すると、ワーカーのスクリプトが ES モジュールとして読み込まれ、ワーカーのコンテキストで import 文が利用できるようになります。この機能を使うと、組み合わせ可能なプログラムを簡単に書けるようになり、ページやワーカー間でプログラムを共有しやすくなります。

プライベート フィールドのチェック

#foo in obj 構文により、オブジェクトでプライベート フィールドの存在チェックをできるようになります。

サポートの終了と機能の削除

このバージョンの Chrome では、デベロッパーに関連するサポートの終了や機能の削除はありません。以前の機能の削除リストは、ChromeStatus.com をご覧ください。


Reviewed by Eiji Kitamura - Developer Relations Team


Google Open Source Live イベントシリーズを開催いたします。

第 8 回目の今回のイベントは「Open data lake day」です。

 

Google に在籍するデータ アナリティクスのエキスパートが、オープンテーブル フォーマットや、イノベーションとクラウドのバリアの克服方法などについてお話しします。

 

セッション中には質問を投稿できるフォーラムが立ち上がります。Google 社員に直接質問ができるチャンスとなりますのでぜひ、ご活用ください。

 

また、セッション終了後に Google Meet にてアフターパーティーを開催いたします。他の参加者の方達と交流したり、Google オリジナルグッズが当たるクイズゲームなどをご用意しておりますのでぜひ、ご参加ください。

 

日本語版のイベントでは、日本語での MC、日本語の字幕付きセッション、そして日本語開催のアフターパーティーとなります。

英語版をご希望の方は太平洋時間の 9:00 am PST、日本語版をご希望の方は日本時間の 9:00 am JST にご参加ください。



事前お申込み受付中 : http://goo.gle/OpenDataLakeDayJP


開催概要

名 称 『Open data lake day』

日 程 日本語版 : 5 月 7 日(金)9:00 am - 11:00 am JST (日本時間)

    英 語 版 : 5 月 6 日(木)9:00 am - 11:00 am PST (太平洋時間)

対 象 開発エンジニア、インフラ エンジニア、運用エンジニア

参加費 無料(事前登録制)

登 録 http://goo.gle/OpenDataLakeDayJP


基調講演

オープンソースによってイノベーションとクラウドの壁を取り除く

アマー・アワダラ

クラウド・デベロッパー・リレーションズ 担当 副社長 (Google)


この記事は Chrome チーム、Shweta Panditrao、Mustafa Emre Acer による Chromium Blog の記事 "A safer default for navigation: HTTPS" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

バージョン 90 より、Chrome のアドレスバーで https:// がデフォルトとして使われるようになります。これによってプライバシーが向上し、HTTPS をサポートするウェブサイトにアクセスしたときの読み込み速度も上がります。Chrome ユーザーが手動で URL を入力してウェブサイトを開くとき、多くの場合は “http://” や “https://” を含めません。たとえば、アドレスバーに “https://example.com” ではなく “example.com” と入力することがよくあります。このとき、ユーザーが初めてそのウェブサイトを訪れる場合は、これまでの Chrome の動作ではデフォルトのプロトコルとして http:// が選択されていました 1。これは、ウェブの多くが HTTPS をサポートしていなかった過去においては、現実的なデフォルトでした。

今後は、プロトコルを指定せずに入力されたほとんどのナビゲーションで、Chrome のデフォルトが HTTPS になります 2。HTTPS は、安全性が向上しているだけでなく、すべての主要プラットフォームの Chrome で最も広く使われているスキームです。この変更により、セキュリティとプライバシーが明らかに向上することに加え、HTTPS をサポートするサイトの初回読み込み速度も上がります。Chrome が HTTPS エンドポイントに直接接続し、http:// から https:// にリダイレクトする必要がなくなるからです。まだ HTTPS をサポートしていないサイトでは、HTTPS による試行が失敗した後、HTTP にフォールバックします(名前の不一致、信頼できない自己署名証明書などの証明書エラーや、DNS の解決失敗などの接続エラーが発生した場合も含みます)。この変更は、まずバージョン 90 の Chrome デスクトップ版と Android 版にロールアウトされ、その後近いうちに iOS 版の Chrome にもリリースされます。

HTTPS では、ユーザーがウェブサイトに入力した機密情報が攻撃者や盗聴者によって傍受または改ざんされないように、ネットワークに送られるトラフィックを暗号化してユーザーを保護します。Chrome では、HTTPS をウェブのデフォルトのプロトコルにするための取り組みが行われています。今回の変更で、デフォルトで常に安全な接続を使うことに一歩近づきます。

1 主な例外の 1 つは、HSTS プリロード リストに含まれるサイトです。これらのサイトでは、常にデフォルトが HTTPS になります。
2 IP アドレス、シングルラベル ドメイン、test/ や localhost/ などの予約されているホスト名では、引き続き HTTP がデフォルトになります。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は Google Trust Services、プロダクト マネジメント、Ryan Hurst による Google Online Security Blog の記事 "Google, HTTPS, and device compatibility" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

世界中の情報を整理し、強固なセキュリティとプライバシーで保護しつつ広くアクセスできるようにするというミッションにおいて、暗号化は基本的な構成要素です。今から 4 年少し前に、公的に信頼できる認証局(CA)として Google Trust Services を設立したのはそのためです。

公的に信頼される認証局になるまでの道のりは長く、インターネットで特にアクセスの多いサイトの証明書を発行しているなら、なおさらです。

この歩みが始まったときの目標は、5 年以内にルート証明書が十分多くのデバイスに組み込まれ、1 回で長期ルート証明書に移行できるようにすることでした。

現在も、Google のルート証明書の更新が行われていない中古のデバイスがたくさん使われています。

Google Trust Services の証明書を使う際、できる限り多くのクライアントが確実に安全な接続を続けられるようにするには、クロス署名を取得する必要がありました。クロス署名を使うと、すでにデバイスから信頼されている認証局が、そのデバイスの互換性を別の認証局に拡大できます。

パブリック CA の運用における規則では、クロス署名された CA は、クロス署名を提供する側の認証局と厳密に同一の運用、技術、監査の各基準を満たす必要があると規定されています。Google Trust Services は高水準で運用されており、すでに公的に信頼されている CA です。また、すべての主要なブラウザのトラストストアに格納されています。そのため、すでに別の CA からのクロス署名要件を満たしていました。重要な点は、Google の証明書を検証できるようにしたいデバイスで、すでに信頼されている認証局を見つけることでした。そこで、このクロス署名に関して GMO GlobalSign と連携することにしました。現在広く使われているルート証明書の中でも、特に古くから運用されているためです。

なぜここでこのような話をしているかというと、2021 年 12 月 15 日に、現在使用しているプライマリ ルート証明書(Google Trust Services が所有、運用している GlobalSign R2)の有効期限が切れるためです。

Google が発行する証明書を搭載した古いデバイスが問題なく動作を続けられるようにするため、新たな証明書を発行するタイミングで、新しいクロス署名証明書のサービスへの送信を開始します。

ありがたいことに、ユーザーはこの変更に気づくことはないはずです。これは、Google がデプロイしているクロス証明書(GTS Root R1 Cross)は 20 年以上前に作成されたもので、ほとんどのデバイスにおいて信頼されているルート証明書で署名されているからです。

つまり、Google Trust Services の証明書を使用している方やそのお客様は、業界最大級のデバイスの互換性というメリットを引き続き活用できます。

この変更について、質問がある方もいらっしゃるでしょう。特に多く寄せられる質問について、以下に回答を記載します。

デベロッパーまたは ISV として Google API を使用しています。何をする必要がありますか?

認証局は使用するルート CA 証明書を随時変更しています。そのため、Google は現在使用している、または今後使用する可能性がある証明書のリストを常に提供しています。このリストを使っている方は、何も変更する必要はありません。このリストを使っておらず、Google が公開しているガイドに基づく更新をしていない方は、ユーザーが今後の変更にスムーズに対応できるように、これらのルートを使うようにアプリケーションを更新し、定期的にリストを更新する必要があります。

Google Trust Services の証明書を使ってウェブサイトを運用しています。何か変更は必要ですか?

何もありません。Google Trust Services は、多くの Google Cloud のサービスを含む Alphabet のプロダクトやサービスに証明書を提供しています。TLS の設定や管理はこれらのサービスが行ってくれます。

変更が反映されるのはいつですか? 

このクロス証明書を使う証明書チェーンのロールアウトは、2021 年 3 月から始まります。この変更は今年いっぱいをかけてゆっくりとロールアウトし、2021 年 12 月 15 日までに終える予定です。

Google Trust Services を使っているサービスやプロダクトを使用しています。何か変更は必要ですか?ありません。エンドユーザーはこの変更に気づかないはずです。

デバイスがこのクロス署名を使った証明書を信頼していることは、どうすればテストできますか? 

このクロス証明書を使ったテストサイトを作成しています。テストサイトには、こちらからアクセスできます。追加の証明書情報とともに "Google Trust Services Demo Page - Expected Status: good" と表示される場合、そのデバイスで新しい証明書チェーンが正しく動作しています。エラーが表示される場合は、テストしているデバイスの信頼されたルートのリストを更新する必要があります。

このクロス証明書の有効期限はいつですか?また、その有効期限が切れるとどうなりますか? 

クロス証明書の有効期限は、2028 年 1 月 28 日です。今後、クロス証明書がなくても多くのデバイスとの互換性を確保できるようになったと考えられれば、この追加の証明書は不要になるため、証明書要求者への提供を停止する予定です。

クロス署名を信頼しない古いデバイスを使っています。どうすればよいですか? 

多くのデバイスは、セキュリティ パッチ処理の一環としてルート証明書の更新をします。そのようなデバイスを使っている場合は、関連するすべてのセキュリティ アップデートを確実に適用してください。お使いのデバイス向けのセキュリティ アップデートをメーカーがもう提供していない場合もあるかもしれません。その場合は、プロバイダに連絡するか、デバイスを換えることを検討してください。

これは Google Trust Services のルートを使えなくなるということですか?Google Trust Services ルートは今後も使用されます。単にそれがクロス署名されるということです。クロス署名を使う必要がなくなれば、証明書要求者にクロス署名を配布することはなくなります。

詳細は、Google Trust Services をご覧ください。

Reviewed by Eiji Kitamura - Developer Relations Team

この記事は Android チーム、Sudhi Herle、Jason Wong による Google Online Security Blog の記事 "Announcing the Android Ready SE Alliance" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

2018 年に発売された Pixel 3 には、Titan M と呼ばれる新しい改ざん防止ハードウェア エンクレーブが搭載されました。これは、Pixel のソフトウェアとファームウェアの信頼の基点となるだけでなく、StrongBox を使った Android アプリ用の改ざんできない鍵ストレージも実現しています。StrongBox は、ハードウェアのセキュリティ モジュール内にある Keymaster HAL の実装です。これは Android デバイスにとっての重要なセキュリティ強化策であり、これまで実現できなかった機能を検討する道を開くものです。

StrongBox と改ざん防止ハードウェアは、新たに登場する次のようなユーザー機能の重要な要件になりつつあります。

  • デジタルキー(自動車、家、オフィス)
  • モバイル運転免許証(mDL)、国民識別番号、e パスポート
  • 電子マネー ソリューション(Wallet など)

こういった機能は、すべて改ざん防止ハードウェアで実行する必要があり、アプリケーションの実行ファイルやユーザーのデータ、鍵、財布などの整合性を守ります。現在、ほとんどの最新スマートフォンには、セキュア エレメント(SE)と呼ばれる個別の改ざん防止ハードウェアが含まれています。Google は、この SE こそが、上記のような新しい消費者向けのユースケースを Android に導入するための最善の道であると確信しています。

こういった新しい Android のユースケースの採用を加速するため、Android Ready SE Alliance を設立したことをお知らせします。SE ベンダーと Google は、すぐに使えるオープンソースの検証済み SE アプレットを作成するため、力を合わせています。今日(元記事公開当時)、SE 向け StrongBox の一般提供(GA)版を公開します。このアプレットは、OEM パートナーによって作成、認定されています。現在のところ、Giesecke+DevrientKigenNXPSTMicroelectronicsThales がこのアプレットを公開しています。

覚えておくべき重要な点は、これらの機能はスマートフォンやタブレットだけのものではないことです。StrongBox は、WearOS、Android Auto Embedded、Android TV でも利用できます。

OEM パートナーがデバイスで Android Ready SE を使うには、以下の作業が必要です。

  1. SE ベンダーから適切な検証済みハードウェア パーツを取得する
  2. ブートローダーから SE を初期化できるようにし、SPI インターフェースまたは暗号化バインディングを通して信頼の基点(RoT)パラメータを提供する
  3. Google と連携し、SE の製造現場で構成証明鍵・証明書をプロビジョニングする
  4. SE の用途に対応する、SE 向け StrongBox アプレットの GA 版を使用する
  5. HAL コードを組み込む
  6. SE アップグレード メカニズムを有効化する
  7. StrongBox で CTS/VTS テストを実行し、組み込みが正常に行われていることを検証する

Google はエコシステムと連携し、以下のアプレットと、対応する Android 機能のリリースを優先して作業を進めています。

  • モバイル運転免許証と ID 認証情報
  • 自動車のデジタルキー

いくつかの Android OEM パートナーは、すでにデバイスで Android Ready SE を採用しています。OEM パートナーと連携して、このような次世代の機能をユーザーに提供できることを楽しみにしています。

詳しくは、Android セキュリティとプライバシーのデベロッパー サイトをご覧ください。


Reviewed by Eiji Kitamura - Developer Relations Team