Real Time Mode

クライアントがリアルタイム モードで Google セーフ ブラウジング v5 を使用することを選択した場合、クライアントはローカル データベースに次のものを保持します。(i)ホスト サフィックス/パス プレフィックス URL 式の SHA256 ハッシュとしてフォーマットされた、安全なサイトの可能性が高いサイトのグローバル キャッシュ、(ii)ホスト サフィックス/パス プレフィックス URL 式の SHA256 ハッシュ プレフィックスとしてフォーマットされた、脅威リストのセット。基本的な考え方としては、クライアントが特定の URL をチェックしたいときは、グローバル キャッシュを使用してローカル チェックが実行されます。このチェックに合格すると、ローカルの脅威リストのチェックが実行されます。それ以外の場合、クライアントは以下の説明に沿ってリアルタイム ハッシュチェックを続行します。

クライアントは、ローカル データベースに加えてローカル キャッシュも維持します。このようなローカル キャッシュは永続ストレージに存在する必要はなく、メモリ不足の場合にクリアされる可能性があります。

手順の詳細な仕様は以下のとおりです。

リアルタイムでの URL のチェックの手順

この手順では、単一の URL u を取得し、SAFEUNSAFE、または UNSURE を返します。SAFE が返された場合、その URL は Google セーフ ブラウジングによって安全と見なされます。UNSAFE が返された場合、その URL は Google セーフ ブラウジングによって安全でない可能性があると判断されているため、適切な措置を講じる必要があります。たとえば、エンドユーザーに警告を表示する、受信したメッセージをスパムフォルダに移動する、続行する前にユーザーに追加の確認を求めるなどです。UNSURE が返された場合は、その後で次のローカルチェック手順を使用する必要があります。

  1. expressions を、URL u によって生成されたサフィックス/プレフィックス式のリストとします。
  2. expressionHashes をリストとします。このリストの要素は、expressions の各式の SHA256 ハッシュです。
  3. expressionHashes の各 hash について:
    1. hash がグローバル キャッシュで見つかった場合は、UNSURE を返します。
  4. expressionHashPrefixes をリストとします。このリストの要素は、expressionHashes 内の各ハッシュの最初の 4 バイトです。
  5. expressionHashPrefixes の各 expressionHashPrefix について:
    1. ローカル キャッシュで expressionHashPrefix を検索します。
    2. キャッシュ エントリが見つかった場合:
      1. 現在の時刻が有効期限より大きいかどうかを判断します。
      2. 大きい場合:
        1. 見つかったキャッシュ エントリをローカル キャッシュから削除します。
        2. ループを続行します。
      3. それより大きくない場合:
        1. この特定の expressionHashPrefixexpressionHashPrefixes から削除します。
        2. expressionHashes 内の対応する完全なハッシュがキャッシュ エントリにあるかどうかを確認します。
        3. 見つかった場合は、UNSAFE を返します。
        4. 見つからない場合は、ループを続行します。
    3. キャッシュにエントリが見つからない場合は、ループを続行します。
  6. RPC SearchHashes または REST メソッド hashes.search を使用して、expressionHashPrefixes を Google セーフ ブラウジング v5 サーバーに送信します。エラーが発生した場合(ネットワーク エラー、HTTP エラーなどを含む)、UNSURE を返します。それ以外の場合、レスポンスは SB サーバーから受信した response とします。これは、脅威の性質(ソーシャル エンジニアリング、マルウェアなど)を特定する補助情報とキャッシュの有効期限 expiration を含む完全なハッシュのリストです。
  7. response の各 fullHash について:
    1. expiration とともに fullHash をローカル キャッシュに挿入します。
  8. response の各 fullHash について:
    1. isFoundexpressionHashesfullHash を検索した結果とします。
    2. isFound が False の場合は、ループを続行します。
    3. isFound が True の場合は、UNSAFE を返します。
  9. SAFE を返します。

このプロトコルでは、クライアントが expressionHashPrefixes をサーバーに送信するタイミングを指定しますが、送信する方法は意図的に指定していません。たとえば、クライアントがすべての expressionHashPrefixes を 1 つのリクエストで送信してもかまいません。また、クライアントが expressionHashPrefixes の各プレフィックスを個別のリクエストでサーバーに送信してもかまいません(並行して処理してもかまいません)。1 回のリクエストで送信されるハッシュ プレフィックスの数が 30 を超えない限り、クライアントが expressionHashPrefixes のハッシュ プレフィックスと一緒に無関係なハッシュ プレフィックスやランダムに生成されたハッシュ プレフィックスを送信することも許容されます。