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