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.
- Sea
expressionsuna lista de expresiones de sufijo o prefijo generadas por la URLu. - Sea
expressionHashesuna lista en la que los elementos son hashes SHA256 de cada expresión enexpressions. - Para cada
hashdeexpressionHashes:- Si se encuentra
hashen la caché global, se devuelveUNSURE.
- Si se encuentra
- Sea
expressionHashPrefixesuna lista en la que los elementos son los primeros 4 bytes de cada hash enexpressionHashes. - Para cada
expressionHashPrefixdeexpressionHashPrefixes:- Busca
expressionHashPrefixen la caché local. - Si se encuentra la entrada almacenada en caché, haz lo siguiente:
- Determina si la hora actual es posterior a la hora de vencimiento.
- Si es mayor, haz lo siguiente:
- Quita la entrada almacenada en caché encontrada de la caché local.
- Continúa con el bucle.
- Si no es mayor, haz lo siguiente:
- Quita este
expressionHashPrefixen particular deexpressionHashPrefixes. - Comprueba si el hash completo correspondiente dentro de
expressionHashesse encuentra en la entrada almacenada en caché. - Si se encuentra, devuelve
UNSAFE. - Si no se encuentra, continúa con el bucle.
- Quita este
- Si no se encuentra la entrada almacenada en caché, continúa con el bucle.
- Busca
- Envía
expressionHashPrefixesal 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), devuelveUNSURE. De lo contrario, searesponsela 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. - Para cada
fullHashderesponse:- Inserta
fullHashen la caché local, junto conexpiration.
- Inserta
- Para cada
fullHashderesponse:- Sea
isFoundel resultado de encontrarfullHashenexpressionHashes. - Si
isFoundes falso, continúa con el bucle. - Si
isFoundes verdadero, se devuelveUNSAFE.
- Sea
- 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.