Una marca registrada en seguridad informática es un contrato entre el código que verifica las propiedades de seguridad de un objeto y el código que exige que un objeto tenga determinadas propiedades de seguridad. Como tal, resulta útil para garantizar un flujo seguro de información. En los lenguajes orientados a objetos, el registro de una marca registrada es análogo a la firma de datos, pero a menudo se puede implementar sin criptografía.
Una marca tiene dos operaciones:
Esta operación es análoga a la clave privada en un proceso de firma digital, por lo que no debe exponerse a código no confiable. Solo debe aplicarse a objetos inmutables y garantiza que cuando se llama a VerifyTrademark? con el mismo valor, devuelva verdadero.
Esta operación es análoga a la clave pública en un proceso de firma digital, por lo que puede quedar expuesta a código no confiable. Devuelve verdadero si y solo si se ha llamado a ApplyTrademark! con el objeto indicado.
El registro de marca es lo inverso del control de contaminación . Mientras que el control de contaminación es un enfoque de lista negra que dice que no se debe confiar en ciertos objetos, el registro de marca es un enfoque de lista blanca que marca ciertos objetos como poseedores de ciertas propiedades de seguridad.
La marca registrada puede considerarse como la memorización de un proceso de verificación.
A veces no es necesario realizar un proceso de verificación porque el hecho de que un valor tenga una propiedad de seguridad particular se puede verificar de forma estática . En este caso, la propiedad de aplicación se utiliza para afirmar que un objeto fue producido por un código que se verificó formalmente para producir solo resultados con la propiedad de seguridad particular.
Una forma de solicitar una marca registrada en Java:
clase pública Marca registrada { /* Utilice un conjunto hash de identidad débil en su lugar si a.equals(b) y check(a) no implica check(b). */ privada final WeakHashSet <?> marca registrada = ...; público sincronizado void aplicar ( Object o ) { marca registrada.add ( o ) ; } booleano público sincronizado comprobar ( Object o ) { devolver marca registrada . contiene ( o ); } } public class HtmlSanitizer { // La operación de aplicación se mantiene en secreto. private static final Trademark TM = new Trademark (); public String sanitizeHtml ( String rawHtml ) { // Eliminar todas las etiquetas excepto las seguras String safeHtml = ...; // java.lang.String es inmutable, por lo que puede registrarse como marca registrada. TM . apply ( safeHtml ); return safeHtml ; } public boolean isSanitized ( String html ) { return TM . check ( html ); } }