Símbolos y evasión en EVE
Los filtros capturan palabras, pero la gente que quiere burlar un filtro rara vez escribe la palabra tal cual. Cambian una a latina por una cirílica, visten las letras con Unicode elegante, envuelven un insulto en entidades HTML, esparcen puntuación entre cada letra o recurren a emojis en lugar de palabras. EVE, el motor de coincidencia de patrones que hay detrás del filtro de chat de Verité, tiene una capa dedicada a deshacer estos trucos antes de que un mensaje llegue siquiera a probarse contra una regla.
Esta página cubre dos sistemas relacionados:
- La gestión de símbolos y glifos, incluida la tabla de plegado de confundibles que asigna los caracteres parecidos de vuelta a letras planas, y los tableros de símbolos de emoji que capturan el significado codificado que se transporta enteramente en pictogramas.
- Las pasadas de evasión que normalizan un mensaje antes de la coincidencia: plegado de homóglifos, eliminación de entidades, desofuscación, segmentación y fingerprinting.
Para el lenguaje de patrones en sí, consulta El lenguaje EVE. Para un relato honesto de lo que esta capa no puede hacer, lee Limitaciones.
Cómo encaja la normalización
Cuando llega un mensaje, EVE no coincide las reglas contra el texto en bruto. Primero expande el mensaje en un pequeño conjunto de cadenas candidatas normalizadas, y luego prueba las reglas contra ellas. Un solo mensaje se convierte en varias lecturas: una que pliega cada carácter confundible a su forma plana, otras que mantienen un carácter ambiguo tal cual, y así sucesivamente. Si algún candidato coincide con una regla, el mensaje se captura.
Este es el mecanismo que permite que un patrón creado, escrito en ASCII plano, capture una palabra escrita con letras griegas, cirílicas, fullwidth o matemáticas, sin que el autor enumere nunca esas grafías.
La tabla de plegado de confundibles
El corazón de la gestión de símbolos es la tabla de plegado: una asignación desde un origen confundible a las interpretaciones planas a las que puede plegarse. Un origen es una secuencia en bruto de uno o más puntos de código Unicode. Un destino es la cadena plana a la que se pliega, que puede ser un solo carácter, varios caracteres (la ß se pliega a ss) o la cadena vacía, que significa que el origen se elimina por completo.
La tabla se carga una vez desde un archivo de datos de tiempo de ejecución compilado a partir de un corpus de confundibles. Cuando no se carga ninguna tabla, un mensaje se pliega solo a sí mismo bajo el paso a minúsculas ASCII, así que el plegado se degrada de forma segura en lugar de fallar.
La coincidencia es primero la más larga
En cada posición del mensaje, EVE busca el origen más largo de la tabla que coincida ahí, prefiriendo más bytes de modo que una construcción de varios caracteres gane sobre su primer carácter solo. Así es como una letra de ASCII-art construida a partir de varios caracteres, o una secuencia de emoji de varios puntos de código, se reconoce como una sola unidad en lugar de como sus piezas individuales.
Un origen, varias lecturas
Un confundible no siempre es inequívoco. Un origen puede llevar varios destinos, y cada uno se trata como una lectura separada. Cuando un origen tiene más de una interpretación activada, EVE bifurca un nuevo candidato para cada una, y también mantiene la lectura original intacta junto a las plegadas. Esto importa: plegar un carácter a una letra es una conjetura, y mantener la lectura original significa que un uso inocente de ese carácter no se reescribe en silencio en una coincidencia.
La única excepción es un carácter cuya interpretación canónica es la eliminación. Un origen que canónicamente se pliega a la cadena vacía, como un ensamblador de ancho cero u otro carácter invisible, se elimina y sus bytes originales no se resucitan.
Niveles de procedencia
No todos los plegados son igual de fiables. Cada destino lleva un nivel que registra de dónde vino la asignación, desde el más autoritativo hasta el más agresivo:
| Nivel | Significado |
|---|---|
| Núcleo autoritativo | Plegado canónico de Unicode y de seguridad, siempre seguro de aplicar. |
| Normalización | Plegado de normalización canónica, siempre seguro de aplicar. |
| Texto documentado | Símbolos con texto que tienen una lectura plana documentada. |
| Agresivo recomendado | Parecidos más sueltos recomendados para el plegado agresivo. |
| Visual agresivo | Parecidos visuales bajo el plegado agresivo. |
| ASCII agresivo | Parecidos ASCII bajo el plegado agresivo. |
| Visual heredado, ASCII heredado | Alias arrastrados de una tabla anterior. |
| Transliteración | Transliteración semántica de escritura. |
| Fuente visual (estricto, estándar, exploratorio) | Parecidos encontrados al escanear fuentes renderizadas, de más ajustado a más suelto. |
| Par ASCII de fuente (estándar, exploratorio) | Parecidos ASCII encontrados al escanear fuentes renderizadas. |
Los dos niveles canónicos, núcleo autoritativo y normalización, se aplican siempre. Cualquier otro nivel es heurístico en algún grado y se activa solo cuando el plegado agresivo está encendido. Una máscara de nivel permite que las interpretaciones agresivas se activen o supriman de forma independiente de las seguras.
Los niveles también se prueban en orden, primero el más fiable. EVE limita hasta dónde puede expandirse un solo mensaje en candidatos para que un mensaje diseñado no pueda hacer explotar el conjunto de candidatos. Cuando se alcanza ese límite, los candidatos supervivientes favorecen las lecturas canónicas, porque esas se generaron primero.
La eliminación es solo otro plegado
Eliminar un carácter invisible y plegar un parecido son la misma operación. Un carácter que se pliega a la cadena vacía se elimina; un carácter que se pliega a una letra plana se reescribe. Ambos viven en una tabla, así que no hay una lista separada de caracteres que eliminar.
Clases de caracteres en los patrones
Separadas de la tabla de plegado, los patrones de EVE pueden nombrar sus propias clases: un conjunto con nombre de fragmentos intercambiables que un patrón referencia por nombre. Una clase se define una vez y se reutiliza, así que un patrón puede, por ejemplo, tratar cualquier vocal como intercambiable en una posición. Así es como un autor escribe la tolerancia a la variación ortográfica directamente en una regla, distinta del plegado automático de confundibles descrito arriba.
La coincidencia relajada también usa una clase de vocales integrada, que permite a un patrón tolerar sustituciones de vocales comunes como los intercambios de leetspeak sin que el autor enumere cada una.
Las clases son una herramienta de creación para la variación ortográfica dentro de una regla. La tabla de plegado es una pasada a nivel de motor que se ejecuta en cada mensaje antes de probar cualquier regla. Se complementan: la tabla de plegado asigna un carácter elegante a uno plano, y una clase permite que la regla plana acepte varias grafías planas.
Tableros de símbolos: emoji e iconografía
Algún contenido no lleva letras en absoluto. Un solo emoji, o un par ordenado de emojis, puede sustituir a una frase. EVE gestiona esto con dos tipos de regla creados en archivos de filtro de símbolos.
Como cualquier byte no ASCII se trata como material de palabra, un glifo literal como un emoji o un símbolo forma su propio token delimitado. Una regla escrita con uno puede empezar, terminar y delimitarse como una palabra, sin cambiar cómo se gestionan las letras y sin afectar a los mensajes ASCII planos.
Reglas de símbolo completo
Una regla de símbolo completo se dispara cuando un glifo específico aparece en el mensaje. Puede enumerar varios glifos intercambiables como alias, así que las variantes visuales del mismo símbolo activan todas la única regla. Estas capturan la iconografía que se usa como señal codificada.
HEAR rule
AS
ALIAS(卐)
卍(WHOLE)
NOTE(Hate symbols, swastika and Tibetan variants)Reglas de secuencia
Una regla de secuencia se dispara cuando un conjunto ordenado de pasos de glifo aparece todo, en orden, en cualquier lugar del mensaje, con cualquier contenido permitido entre ellos. Coincide con una subsecuencia ordenada en lugar de una serie contigua, así que el relleno entre los emojis no la anula. Cada paso puede aceptar cualquiera de un conjunto de glifos intercambiables, permitiendo que un solo paso represente a toda una familia de símbolos con el mismo significado.
Una secuencia puede marcarse como reflejada, en cuyo caso el orden invertido también se acepta. Así es como un par cuyo significado sobrevive a cualquiera de los dos arreglos se escribe como una regla, mientras que una secuencia significativa en el orden no lo hace.
SEQUENCE rule
AS
MIRROR
🍑👋
NOTE(Appears in both orders)Los glifos de una secuencia se coinciden como literales exactos, no como patrones difusos, porque un símbolo no tiene variantes ortográficas que tolerar.
Las pasadas de evasión
El plugin expone el comportamiento de normalización como un conjunto de interruptores bajo chat.filter.advanced.evasion. Cada pasada apunta a una familia de evasión. Todas están activadas por defecto. Desactivar una pasada puede ahorrar unos pocos microsegundos de latencia a costa de capturar menos.
evasion:
homoglyph: true
entity: true
deobfuscate: true
segmentation: true
fingerprint: truehomoglyph
Aplica la tabla de plegado de confundibles descrita arriba: los caracteres fullwidth, cirílicos, griegos, matemáticos y otros parecidos se pliegan de vuelta a sus formas ASCII planas para que una regla escrita en letras planas capture la grafía suplantada. Esta pasada también elimina los caracteres invisibles e ignorables que se pliegan a nada.
entity
Elimina las referencias de caracteres HTML antes de la coincidencia. Cada referencia numérica (decimal o hexadecimal) y cada referencia con nombre que termina en punto y coma se reemplaza por un solo espacio, así que un insulto oculto dentro de una codificación de entidades no puede colar sus letras por delante del filtro. Un mensaje sin ampersand se deja sin cambios.
deobfuscate
Deshace dos trucos relacionados. La reducción de series colapsa una grafía estirada, limitando una serie de la misma letra de modo que una serie de vocales exagerada se reduce a su forma corta canónica y una regla coincide con cada variante estirada. El stripping denso detecta una palabra rellenada con un solo carácter de relleno repetido entre sus letras, como un insulto escrito con un punto o guion entre cada letra, y junta las letras de nuevo. La pasada densa limita la longitud recuperada y el número de huecos para que no pueda descontrolarse en entradas largas, y se aplica solo cuando el relleno aparece al menos dos veces.
segmentation
Gestiona una palabra que se ha dividido o pegado contra las palabras circundantes, así que una frase escrita como una sola serie sólida, o una sola palabra partida entre espacios, sigue probándose como la palabra prevista.
fingerprint
Captura la transposición, donde las letras interiores de una palabra están revueltas. EVE reduce una palabra a una firma construida a partir de su primera letra, su última letra, su longitud y el multiconjunto ordenado de sus letras interiores. Dos palabras que comparten esos producen la misma firma, así que un insulto con sus letras del medio barajadas se asigna a la misma huella que el original y se captura.
Cada pasada tiene límites
Estas pasadas deshacen familias conocidas de ofuscación. No entienden un mensaje, y no pueden anticipar una grafía o un símbolo que no esté en sus tablas. Una evasión novedosa que las tablas no cubren pasa sin tocar. Consulta Limitaciones para un relato completo.