SaveSaveSaveSave ← Antes de actuar
Español

Traducción asistida por máquina, no revisada por hablantes nativos. En caso de duda, prevalece la versión en inglés.

Transparencia técnica · Septiembre de 2026

Cómo funciona de verdad

Cada afirmación de «Antes de actuar», con el detalle que la respalda.

No necesitas este documento para usar el producto. Existe para que cualquiera que quiera comprobar lo que decimos pueda hacerlo, incluidas las partes poco favorecedoras.

Motor de análisis v0.2.0 · modelo de resultados v1.0.0.

1. Cobertura de cadenas

EcosistemaCobertura
EVM: 14 cadenasEthereum, BNB Smart Chain, Polygon, Arbitrum, Optimism, Base, Avalanche, Fantom, zkSync Era, Linea, Scroll, Blast, Mantle, Gnosis. Comprobaciones de tokens y wallets.
SolanaModelo de seguridad nativo (autoridad de emisión, autoridad de congelación, mutabilidad de metadatos, transfer hooks) más datos de liquidez (número de pools, valor total bloqueado, estado de bloqueo de LP) mostrados como contexto y no como entrada del veredicto. Incluye comprobaciones de wallets.
SuiSolo seguridad de tokens. El proveedor de datos no devuelve datos de liquidez ni de titulares para Sui, así que el alcance se ajusta a lo que hay de verdad y no a lo que quedaría mejor.
TRONComprobaciones de seguridad de tokens y de direcciones. Se confirmó, en lugar de suponerlo, que la respuesta del proveedor para TRON comparte el esquema EVM.
Bitcoin, Cosmos, Cardano y otrasSin cobertura. No existe ningún adaptador, y el extractor de direcciones se niega a propósito a ofrecer un análisis que no puede hacer.

Aptos se evaluó y no se construyó. Aparece en el material comercial del proveedor de datos, pero no se pudo confirmar ningún endpoint técnico verificable, así que no se anuncia como compatible.

Colisiones de formato de dirección

El tipo de dirección se detecta automáticamente. Por construcción, los cuatro formatos compatibles no se solapan, pero merecía la pena calcular dos colisiones en lugar de suponerlas:

También se excluyen a propósito: las direcciones bech32 como bc1… (fuera del alfabeto base58), los identificadores de contenido de IPFS, los hashes de transacción de 64 caracteres que contienen dentro una dirección EVM de 40 hexadecimales de aspecto válido y los nombres ENS como vitalik.eth, que sí resuelven a una dirección, pero solo mediante una consulta que esta página nunca hace.

2. Proveedores de datos

ServicioRecibePropósito
GoPlus SecurityLa dirección y el identificador de la cadenaDatos de riesgo de tokens y wallets
Nuestro propio Worker de CloudflareLa dirección y el identificador de la cadenaProxy para las cadenas en las que se bloquea la llamada directa desde el navegador; consultas de sanciones y contrapartes
Nodos públicos de blockchainLa dirección, a través del WorkerConsultas al oráculo de sanciones y de contrapartes
Cloudflare Web AnalyticsLa URL de la página y los metadatos habituales de la peticiónRecuento de visitas, sin cookies
Google AdSenseLa URL de la página y los metadatos habituales de la peticiónPublicidad en las columnas laterales, en las cinco páginas que la llevan

Ninguno de ellos requiere cuenta. Ninguno recibe el texto enviado para analizar, un hallazgo, un veredicto ni una dirección extraída de un mensaje.

El código publicitario es la entrada más reciente y la que conviene describir con precisión. Se carga en cinco de las once páginas. En las seis que no llevan publicidad (las cuatro guías que explican engaños por mensajes, más la política de privacidad y las condiciones) se han quitado los hosts publicitarios tanto de su propia Content-Security-Policy como de su marcado. Como el navegador combina la política meta de una página con la cabecera de respuesta y aplica la intersección, esas páginas no pueden cargar un anuncio aunque la cabecera general de la web siga permitiendo esos hosts para las páginas que sí lo llevan. La lista de rutas y el motivo de cada entrada están en apply-ads.js. Recibe la dirección de la página y nada más. Los huecos de anuncios son position: fixed en los márgenes de la página, así que no están dentro del marcado del resultado y no se muestran en absoluto por debajo de 1280 px. Una prueba de la suite de interfaz comprueba que ningún elemento publicitario aparece dentro del contenedor de resultados, que los dos huecos no contienen interpolación de plantillas y que nunca se asigna texto analizado a ninguna variable global de anuncios.

Enrutamiento de proveedores

Primero la llamada directa, después el proxy, cadena por cadena. Una respuesta limitada por cuota nunca se reintenta a través del proxy compartido: hacerlo gastaría una cuota compartida en una petición que ya fue rechazada y acabaría limitando el proxy para todo el mundo. Dieciséis pruebas fijan este orden.

3. El oráculo de sanciones

El Chainalysis Sanctions Oracle es un contrato inteligente gratuito, que cualquiera puede llamar, que responde si una dirección está ahora mismo en una lista de sanciones. Sin cuenta, sin clave de API.

Se verificó en lugar de darlo por bueno: la dirección del contrato se contrastó directamente en Etherscan, y el selector de función se calculó y se confirmó con el bytecode desplegado. Aquí está activo en 8 de sus 9 cadenas desplegadas.

La limitación honesta. Una revisión independiente encontró desfases reales entre la entrada en vigor de una designación y su reflejo en el oráculo: más de 90 días en un caso documentado. Una coincidencia se indica como coincidencia con el oráculo en el momento de la consulta. No es una garantía incondicional de la situación actual de sanciones, y este producto no la describe así.

Estar expuesto no es ser culpable. Las direcciones son seudónimas, los fondos pasan por ellas sin el consentimiento de su propietario, e interactuar con una dirección marcada no demuestra que nadie haya hecho nada malo.

4. Comprobación de contrapartes recientes

Un periodo limitado y declarado de transferencias recientes de tokens, contrastado con el mismo oráculo.

Lo que no es: un historial de transacciones. Esa capacidad no existe a nivel de protocolo en ninguna cadena sin un servicio de indexación, y este producto no tiene uno. Tampoco ve transferencias del activo nativo, solo de tokens.

Una contraparte sancionada lleva el resultado a CAUTION. No fuerza un FAIL. Ese salto se reserva para cuando la propia dirección de la wallet está designada directamente, porque confundir «esta wallet está designada» con «esta wallet recibió algo de una dirección designada» es el error con más probabilidades de leerse como una acusación contra una persona real.

Un fallo del Worker aquí devuelve INSUFFICIENT DATA. Nunca se descarta en silencio y nunca se muestra como una fila limpia.

5. Categorías de detección en mensajes

Veintisiete reglas deterministas en seis familias. No se llama a ningún modelo de lenguaje, y nada del texto enviado se ejecuta nunca: el motor lo lee como lo haría un corrector ortográfico.

  1. Caracteres ocultos e invisibles. Caracteres de ancho cero, anulaciones bidireccionales que reordenan lo que se muestra y el bloque Unicode Tags: puntos de código que no se ven en absoluto y pueden llevar una instrucción oculta entera dentro de una frase inofensiva. La sustitución por homoglifos se detecta en la misma pasada.
  2. Marcado oculto. Instrucciones escondidas en comentarios, en elementos con estilos para que sean invisibles o en atributos que quien lee nunca ve.
  3. Contenido codificado. Base64 y codificaciones parecidas que llevan texto que nunca se pensó para que lo leyera quien lo pega.
  4. Anulación de instrucciones. Inyección de prompts: texto dirigido a un sistema de IA y no a quien lee. Incluye intentos dirigidos a este mismo escáner, que se indican como el hallazgo más fuerte y no como un error.
  5. Petición de credenciales. Peticiones de una frase semilla, palabras de recuperación, una clave privada, una contraseña o un código de doble factor, con las formulaciones que se usan para que parezcan rutinarias.
  6. Estructura de enlaces. Destinos ocultos antes de un signo @, hosts que son una IP sin nombre, dominios punycode que se muestran como un nombre totalmente distinto, acortadores, nombres de marcas de confianza colocados donde no tienen ninguna autoridad, dominios escritos para leerse como una marca, dominios que llevan una marca de wallet con palabras añadidas y consultas codificadas largas.

Dos de ellas tuvieron defectos hasta el 19 de septiembre de 2026, y ambas se registran aquí en lugar de corregirse en silencio.

La falsa alarma. Para decidir si un nombre de marca está en la posición del propietario real hay que saber dónde termina el sufijo público de un dominio. El motor tomaba las dos últimas etiquetas, lo que lee como propietario de coinbase.co.uk a co.uk, así que un enlace legítimo corriente producía un hallazgo HIGH de suplantación de marca.

De dónde sale el límite del sufijo

Ahora el motor lleva una tabla de sufijos públicos de varias etiquetas. Esa tabla es un subconjunto fechado de la Public Suffix List, no la lista en sí, y así se indica en el código. La lista original tiene unas quince mil entradas y cambia cada pocas semanas; incluir una copia congelada entera en una página que tiene que seguir siendo pequeña sería una dependencia caducada presentada como fuente fiable. La tabla incluida cubre los segundos niveles de código de país que usan las webs corrientes y omite por completo las reglas comodín y de excepción de la lista original, porque una simple comprobación de pertenencia no puede expresarlas.

build-suffixes.js regenera la tabla a partir de la lista original y le pone la fecha en que se tomó. Se niega a escribir una tabla que no pudo descargar, y se niega a escribir una que no pasa sus propias comprobaciones de coherencia: una tabla de sufijos errónea en silencio es peor que una visiblemente antigua. Los sufijos de alojamiento como github.io se excluyen a propósito: ahí la etiqueta la registra de verdad quien la pidió, así que una marca de wallet sobre uno de ellos merece marcarse en lugar de excusarse.

Un límite sin resolver nunca se adivina. Esta es la parte que impide que el fallo original vuelva con otra forma. Cuando un host termina en un sufijo que la tabla no incluye y tiene la forma de un registro de código de país (un código de país de dos letras con una etiqueta administrativa corta delante, como los reales msk.ru o nom.za), el límite se indica como desconocido. Entonces se retiene cualquier juicio sobre marcas y se le dice a quien lee que no se pudo determinar la propiedad, en lugar de decirle que la web suplanta a alguien. No detectar algo en un sufijo poco habitual es un fallo menor que decirle a alguien que la web real de su banco está suplantando a su banco.

El punto ciego. El truco de enlaces más común que circula (registrar un dominio escrito para leerse mal, metarnask por metamask) no se detectaba en absoluto. Ahora sí, probando todas las formas en que un vistazo podría leer el nombre en lugar de reducirlo a una sola grafía: el dígito 1 hace de l en un dominio y de i en el siguiente, así que una sola pasada de normalización atrapa uno y se le escapa el otro.

Lo que todavía se escapa. Una errata simple sin ningún carácter confundible, como metamsk.io, no se detecta. Hay una prueba en la suite que comprueba que no se detecta, para que la carencia siga siendo conocida en lugar de convertirse en una sorpresa. El motor tampoco resuelve nunca un enlace acortado: seguir una dirección elegida por un desconocido es justo el ataque, así que un acortador se indica como no resuelto en lugar de desplegarse.

Cada hallazgo lleva un identificador de regla, una gravedad, un grado de confianza, las posiciones exactas de los caracteres donde coincidió y una explicación en lenguaje sencillo.

Explicar no es ejecutar

«Nunca compartas tu frase semilla con nadie» y «envíame tu frase semilla para verificar tu wallet» contienen casi las mismas palabras. Un escáner que marca la primera es peor que inútil: enseña a la gente a ignorarlo.

El motor separa instrucción de explicación con una puntuación de directiva más un tratamiento explícito de la negación de advertencia. La primera vez salió mal: una versión temprana devolvía FAIL con un artículo de seguridad legítimo sobre cómo proteger la frase semilla. El archivo de revisión adversarial que lo detectó forma ahora parte permanente de la suite.

Falsos positivos conocidos, mantenidos como pruebas

6. La política de combinación

Un mensaje pegado no es una sola cosa. Es texto, más enlaces, más direcciones, y cada parte recibe una comprobación distinta con una cobertura y unas carencias distintas. Reducirlo todo a una puntuación destruye la información que más importa: qué parte es peligrosa.

PASS < INSUFFICIENT DATA < CAUTION < FAIL

El peor componente decide la indicación, y nada lo supera en votos. Sin puntuación, sin media ponderada, sin mayoría.

INSUFFICIENT DATA está por encima de PASS porque no saber no es lo mismo que estar limpio. Está por debajo de CAUTION porque un problema concreto observado pesa más que una falta de información. Nunca puede tapar un FAIL.

Consecuencias visibles en la interfaz:

Una dirección 0x no lleva cadena, así que la fila usa Ethereum por defecto, indica que el texto no mencionaba la cadena y ofrece un selector. Cambiar la cadena descarta el resultado anterior, porque un resultado para Ethereum no es un resultado para BNB Chain.

Tipos de análisis

Cinco tipos en producción: crypto_address_scan, token_scan, wallet_scan, prompt_scan, message_scan. Cada uno tiene un motor detrás.

file_scan está reservado y no se puede construir a propósito. Estuvo una semana en la lista de producción sin nada detrás; no se rompió nada porque nada lo llamaba, y precisamente por eso se retiró. Un nombre es una afirmación.

7. Dónde se encontró cada dirección

La extracción registra las posiciones de los caracteres, así que cada dirección se muestra con la línea en la que apareció y la dirección marcada dentro. «Send 0.5 ETH to 0x…» y «the contract at 0x… was audited» son situaciones distintas, y una dirección mostrada sin su frase es una afirmación sin procedencia.

Las posiciones se capturan una vez al analizar, no se recalculan al mostrar buscando la cadena; si no, una dirección que aparece dos veces resaltaría la misma aparición las dos veces.

Los enlaces a exploradores de bloques salen de una tabla fija que cubre 14 cadenas EVM, Solana y TRON. Una cadena tiene un explorador conocido o la fila dice que no lo tiene. Nada adivina una URL. El enlace es un enlace, no una consulta: no se hace ninguna petición hasta que haces clic.

8. Verificación de privacidad

La afirmación de privacidad del análisis de mensajes no se deduce leyendo el código. Se verificó contra la web desplegada con la captura de red activada antes de la acción.

Método. Se pegó y se analizó un mensaje con una cadena testigo única, una URL de phishing, una petición de frase semilla y una carga de inyección.

Se repitió después de añadir el contador de visitas, para confirmar que el contador no cambia el resultado.

Conservación. Este producto no guarda nada. No hay base de datos, ni sistema de cuentas, ni registro en el servidor del contenido enviado, ni almacenamiento en el navegador del texto analizado. Los terceros nombrados en la sección 2 llevan sus propios registros según sus propias políticas, que no controlamos y que no describimos en su nombre.

9. La suite de pruebas

Una afirmación de rigor vale exactamente lo que vale la suite que la respalda. Estas cubren garantías materialmente distintas y por eso se indican por separado.

SuiteComprobacionesQué fija
Motor de mensajes176Cada familia de detección, el límite entre explicar y ejecutar, la extracción de direcciones, los extractos de contexto y los enlaces a exploradores
Interfaz / integración / XSS81El código realmente incrustado en la página, incluida una suite completa de cross-site scripting y las comprobaciones de aislamiento publicitario
Regresión del motor de direcciones61Etiquetas de veredicto con datos de proveedor maliciosos, benignos, parciales, contradictorios y mal formados
Modelo de análisis57La política de combinación, de forma exhaustiva, incluido que un componente que falla nunca se diluye
Enrutamiento de proveedores16Orden directo y después proxy por cadena; una llamada limitada por cuota nunca se reintenta por un proxy compartido
Revisión adversarial20La salida del motor puntuada frente a una lectura humana atenta, casos benignos incluidos
Páginas publicadas51Cada ejemplo resuelto sigue llegando a su veredicto declarado, cada capacidad que afirman las guías la realiza el motor, ninguna guía muestra una dirección resoluble y el estado publicitario de cada página coincide con la política de rutas tanto en su marcado como en su propia Content-Security-Policy
Total462

Detección de divergencias

El escáner es un único archivo autónomo, así que cada motor existe dos veces: una como módulo propio y otra incrustado en la página. Una comprobación de compilación los compara y falla de forma visible si no coinciden.

Se añadió después de que pasara exactamente eso: una corrección vivía en el módulo que nadie carga, y durante una semana se publicó una ruta de enrutamiento de cadenas rota mientras las pruebas del propio módulo seguían pasando.

Detectar la divergencia era solo la mitad, porque la otra mitad dependía de que alguien se acordara de volver a pegar el código. Desde el 19 de septiembre de 2026, un segundo script hace la copia él mismo, de los módulos a la página, y se niega a escribir nada si falta un punto de referencia: una página a medio escribir es peor que una desactualizada, porque una desactualizada sigue funcionando.

Cross-site scripting

Esta función toma texto hostil de un desconocido y lo vuelve a mostrar en la página. Cada valor se escapa, incluido el propio texto de respuesta del proveedor de seguridad, porque una respuesta externa falsificada o comprometida tampoco debe convertirse en marcado.

Los únicos manejadores en línea que emite el renderizador son literales fijos más un índice entero, y una prueba comprueba exactamente eso. El único elemento de enlace que puede contener el resultado (el enlace al explorador de bloques) se valida en la suite XSS con un patrón tan estricto que es en sí la comprobación: solo https, un host de la tabla fija y una dirección sin comillas, espacios ni corchetes.

10. Cabeceras de seguridad

Se envían como cabeceras de respuesta, no solo como etiqueta meta. Una política en etiqueta meta solo protege ese documento HTML; dejaba robots.txt, sitemap.xml y las imágenes sin ninguna política.

Verificado con respuestas reales por dos métodos independientes, no supuesto por la existencia de un archivo de configuración.

Lo que costó el cambio publicitario

Merece la pena dejarlo escrito con claridad, porque es una reducción real y la versión anterior de esta página decía lo contrario.

Antes de la publicidad, connect-src era una garantía estructural: el propio navegador se habría negado a enviar datos del análisis a cualquier sitio que no fueran dos hosts nombrados, hiciera lo que hiciera el código de la página, incluido código introducido por error o por un atacante. Los endpoints publicitarios de Google están ahora en esa lista, así que la garantía ya no es estructural: depende de que el código de la página no entregue contenido del análisis al script de anuncios.

Esa propiedad la fija ahora una prueba y no el navegador. Es una garantía más débil y preferimos decirlo antes que dejar en pie la frase antigua, más fuerte, cuando ya no es cierta. script-src también ganó 'unsafe-inline' en las páginas de documentos, que antes no lo necesitaban.

Reglas de caché

El HTML debe revalidarse en cada carga. Sin eso, un visitante que vuelve conserva el motor de ayer después de un despliegue, lo que para una herramienta de seguridad significa ejecutar reglas de detección que ya se han corregido. Las imágenes se cachean de forma agresiva. Los archivos para rastreadores tienen una hora, lo bastante poco para que una corrección se recoja el mismo día.

11. Capacidades aplazadas

Se nombran aquí para que sigan siendo decisiones y no sorpresas. Nada de esto existe hoy:

Lo siguiente: análisis estático de Markdown y HTML y, después, estudiar si se puede ofrecer de forma segura una clasificación limitada de JavaScript.

12. Carencias conocidas

13. Historial de versiones

v1
Comprobación de direcciones y tokens en cadenas EVM, un solo proveedor.
v2
Adaptadores para Solana, Sui y TRON. Oráculo de sanciones verificado e integrado. Enrutamiento de proveedores con proxy de respaldo. Detección de divergencias añadida tras una regresión silenciosa de una semana.
v3.0
Análisis de mensajes y prompts en el navegador. El modelo de resultados unificado y la política de combinación. Comprobación de contrapartes recientes. Páginas legales, analítica sin cookies y la sección de guías.
Motor de análisis v0.2.0
Veintisiete reglas. Se añadió la detección de un cambio de destinatario a mitad de mensaje, la enumeración de capacidades y las formulaciones de anulación que antes esquivaba un posesivo o un adjetivo. Las tres carencias se encontraron analizando nuestro propio ejemplo publicado y obteniendo un resultado más débil del que afirmaba el artículo.
Modelo de resultados v1.0.0
Cinco tipos de análisis en producción, la escala de veredictos y la regla de que gana el peor componente.

14. Glosario

Wallet
Guarda las claves que controlan tus cripto; te permite enviarlas, recibirlas o interactuar con ellas.
Clave privada / frase semilla
Un secreto que demuestra la propiedad y mueve los fondos. No lo compartas nunca: ni con SaveSaveSaveSave ni con nadie. Nada legítimo lo necesita jamás.
Contrato inteligente
Código autoejecutable en una blockchain que define cómo se comporta un token o una app.
Honeypot
Un token construido para que se pueda comprar pero no vender.
Autoridad de emisión
La capacidad de crear más suministro después del lanzamiento. No es peligrosa automáticamente, pero conviene saberlo igualmente.
Inyección de prompts
Texto escrito para que lo lea un sistema de IA y no tú, que le ordena ignorar sus reglas o actuar contra tus intereses. Funciona tanto si lo notas como si no.
Homoglifo
Un carácter de un alfabeto que se ve idéntico a otro de otro alfabeto; se usa para que un nombre falso parezca real.
Punycode
Una forma de escribir un nombre de dominio que el navegador puede mostrar como un nombre completamente distinto. El método habitual para falsificar un dominio conocido.
Oráculo de sanciones
Un contrato inteligente que cualquiera puede llamar y que responde si una dirección está sancionada ahora mismo: gratuito, en la cadena, sin cuenta.
Contraparte
Una dirección con la que una wallet ha hecho transacciones directamente. Estar expuesto a una contraparte de riesgo no es lo mismo que afirmar que la propia wallet es de riesgo.
INSUFFICIENT DATA
Un resultado por derecho propio, no un PASS suave. La comprobación no se pudo completar: no se sabe nada en ningún sentido.
Acceso de solo lectura
Permiso para ver, nunca para cambiar, mover ni gastar.

Las correcciones son bienvenidas en el gestor de incidencias del proyecto o por correo a savesavesavesave@tuta.io. Si algo de aquí está mal, decirlo en público es justo el propósito del documento. Una afirmación de este documento que se ha separado del código es un fallo, y merece notificarse como tal.