Real Time Mode

Cuando los clientes eligen usar la versión 5 de Navegación Segura de Google en modo en tiempo real, mantendrán en su base de datos local lo siguiente: (i) una caché global de sitios probablemente seguros, con formato de hashes SHA256 de expresiones de URL de sufijo de host/prefijo de ruta, (ii) un conjunto de listas de amenazas, con formato de prefijos de hash SHA256 de expresiones de URL de sufijo de host/prefijo de ruta. La idea general es que, cada vez que el cliente desee verificar una URL en particular, se realizará una verificación local con la caché global. Si esa verificación se aprueba, se realiza una verificación de las listas de amenazas locales. De lo contrario, el cliente continúa con la verificación de hash en tiempo real, como se detalla a continuación.

Además de la base de datos local, el cliente mantendrá una caché local. Esta caché local no necesita estar en un almacenamiento persistente y se puede borrar en caso de presión de memoria.

A continuación, se incluye una especificación detallada del procedimiento.

Procedimiento de verificación de URL en tiempo real

Este procedimiento toma una sola URL u y devuelve SAFE, UNSAFE o UNSURE. Si devuelve SAFE, la Navegación segura de Google considera que la URL es segura. Si devuelve UNSAFE, la Navegación segura de Google considera que la URL es potencialmente insegura y se debe tomar la medida adecuada, como mostrar una advertencia al usuario final, mover un mensaje recibido a la carpeta de spam o solicitar una confirmación adicional del usuario antes de continuar. Si devuelve UNSURE, se debe usar el siguiente procedimiento de verificación local.

  1. Sea expressions una lista de expresiones de sufijo o prefijo generadas por la URL u.
  2. Sea expressionHashes una lista en la que los elementos son hashes SHA256 de cada expresión en expressions.
  3. Para cada hash de expressionHashes:
    1. Si se encuentra hash en la caché global, se devuelve UNSURE.
  4. Sea expressionHashPrefixes una lista en la que los elementos son los primeros 4 bytes de cada hash en expressionHashes.
  5. Para cada expressionHashPrefix de expressionHashPrefixes:
    1. Busca expressionHashPrefix en la caché local.
    2. Si se encuentra la entrada almacenada en caché, haz lo siguiente:
      1. Determina si la hora actual es posterior a la hora de vencimiento.
      2. Si es mayor, haz lo siguiente:
        1. Quita la entrada almacenada en caché encontrada de la caché local.
        2. Continúa con el bucle.
      3. Si no es mayor, haz lo siguiente:
        1. Quita este expressionHashPrefix en particular de expressionHashPrefixes.
        2. Comprueba si el hash completo correspondiente dentro de expressionHashes se encuentra en la entrada almacenada en caché.
        3. Si se encuentra, devuelve UNSAFE.
        4. Si no se encuentra, continúa con el bucle.
    3. Si no se encuentra la entrada almacenada en caché, continúa con el bucle.
  6. Envía expressionHashPrefixes al servidor de la versión 5 de la Navegación segura de Google con RPC SearchHashes o el método de REST hashes.search. Si se produjo un error (incluidos errores de red, errores de HTTP, etcétera), devuelve UNSURE. De lo contrario, sea response la respuesta recibida del servidor de SB, que es una lista de hashes completos junto con información auxiliar que identifica la naturaleza de la amenaza (ingeniería social, software malicioso, etcétera), así como el tiempo de vencimiento de la caché expiration.
  7. Para cada fullHash de response:
    1. Inserta fullHash en la caché local, junto con expiration.
  8. Para cada fullHash de response:
    1. Sea isFound el resultado de encontrar fullHash en expressionHashes.
    2. Si isFound es falso, continúa con el bucle.
    3. Si isFound es verdadero, se devuelve UNSAFE.
  9. Muestra SAFE.

Si bien este protocolo especifica cuándo el cliente envía expressionHashPrefixes al servidor, no especifica de forma intencional cómo enviarlos. Por ejemplo, es aceptable que el cliente envíe todos los expressionHashPrefixes en una sola solicitud, y también es aceptable que envíe cada prefijo individual en expressionHashPrefixes al servidor en solicitudes separadas (quizás de forma paralela). También es aceptable que el cliente envíe prefijos hash no relacionados o generados de forma aleatoria junto con los prefijos hash en expressionHashPrefixes, siempre y cuando la cantidad de prefijos hash enviados en una sola solicitud no supere los 30.