Varumärke (datorsäkerhet)
Ett varumärke inom datorsäkerhet är ett avtal mellan kod som verifierar säkerhetsegenskaper hos ett objekt och kod som kräver att ett objekt har vissa säkerhetsegenskaper. Som sådan är den användbar för att säkerställa ett säkert informationsflöde. I objektorienterade språk är varumärkesmärkning analog med signering av data men kan ofta implementeras utan kryptografi.
Operationer
Ett varumärke har två funktioner:
Använd varumärke!(objekt)
Denna operation är analog med den privata nyckeln i en digital signaturprocess, så den får inte utsättas för opålitlig kod. Det bör endast tillämpas på oföränderliga objekt , och ser till att när VerifyTrademark? anropas på samma värde som den returnerar sant.
Verifiera varumärke? (objekt)
Denna operation är analog med den publika nyckeln i en digital signaturprocess, så den kan exponeras för opålitlig kod. Returnerar sant om-och-bara-om, ApplyTrademark! har anropats med det givna objektet.
Förhållande till fläckkontroll
Varumärke är motsatsen till smutskontroll . Medan smutskontroll är en svartlistningsmetod som säger att vissa objekt inte ska lita på, är varumärkesmärkning en vitlistningsmetod som markerar vissa objekt som att ha vissa säkerhetsegenskaper.
Förhållande till memoisering
Appliceringsvarumärket kan ses som att memorera en verifieringsprocess.
Förhållande till kontraktsverifiering
Ibland behöver en verifieringsprocess inte göras eftersom det faktum att ett värde har en viss säkerhetsegenskap kan verifieras statiskt . I det här fallet används egenskapen applicera för att hävda att ett objekt producerades av kod som formellt har verifierats för att endast producera utdata med den specifika säkerhetsegenskapen.
Exempel
Ett sätt att applicera ett varumärke i java:
public class Trademark { /* Använd en svag identitetshash-uppsättning istället om a.equals(b) && check(a) inte innebär check(b). */ privat final WeakHashSet <?> varumärkesskyddat = ...; public synchronized void tillämpas ( Object o ) { varumärkesskyddad . lägg till ( o ); } public synchronized boolean check ( Object o ) { return trademarked . innehåller ( o ); } } public class HtmlSanitizer { // Appliceringsoperationen hålls hemlig. privat statisk slutlig Varumärke TM = nytt varumärke (); public String sanitizeHtml ( String rawHtml ) { // Ta bort alla utom säkra taggar String safeHtml = ...; // java.lang.String är oföränderlig så kan vara varumärkesskyddad. TM . tillämpa ( safeHtml ); return safeHtml ; } public boolean isSanitized ( String html ) { return TM . check ( html ); } }
externa länkar
- "Protection in Programming Languages" av James Morris Jr.