155 Datasäkerhet. Här är ett antal konkreta hot problem vad avser säkerheten i datorsystem.

Relevanta dokument
11 Informationsflöden

Behörighetssystem. Ska kontrollera att ingen läser, skriver, ändrar och/eller på annat sätt använder data utan rätt att göra det

Grundfrågor för kryptosystem

Kryptering HEMLIG SKRIFT SUBSTITUTION STEGANOGRAFI KRYPTOGRAFI

Kryptografi - När är det säkert? Föreläsningens innehåll. Kryptografi - Kryptoanalys. Kryptering - Huvudsyfte. Kryptografi - Viktiga roller

Notera att skyddet avser data såväl som både maskinvara och programkod.

Kryptoteknik. Marcus Bendtsen Institutionen för Datavetenskap (IDA) Avdelningen för Databas- och Informationsteknik (ADIT)

256bit Security AB Offentligt dokument

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Krypteringteknologier. Sidorna ( ) i boken

Datasäkerhet. Petter Ericson

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Några satser ur talteorin

Metoder för sekretess, integritet och autenticering

241 Åtkomstkontroll. Följande metoder/tekniker är/var vanliga för skydd av primärminne, filer, mm.

NÅGOT OM KRYPTERING. Kapitel 1

Designprinciper för säkerhet och Epilog. Marcus Bendtsen Institutionen för Datavetenskap (IDA) Avdelningen för Databas- och Informationsteknik (ADIT)

Classes och Interfaces, Objects och References, Initialization

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

RSA-kryptering och primalitetstest

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Operativsystem - input/output, skydd, virtualisering

Relationer. 1. Relationer. UPPSALA UNIVERSITET Matematiska institutionen Erik Melin. Specialkursen HT07 23 oktober 2007

Introduktion till protokoll för nätverkssäkerhet

Modul 3 Föreläsningsinnehåll

Hjälpmedel: Inga hjälpmedel förutom penna, suddgummi och glatt humör.

Ekvivalensrelationer

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Föreläsning 8 i kursen Ma III, #IX1305, HT 07. (Fjärde föreläsningen av Bo Åhlander)

MA2047 Algebra och diskret matematik

Kryptering. Krypteringsmetoder

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Säkerhet. Vad är det vi pratar om??

Relationer och funktioner

Protokollbeskrivning av OKI

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Säkerhet. Säker kommunikation - Nivå. Secure . Alice wants to send secret message, m, to Bob.

Att använda kryptering. Nyckelhantering och protokoll som bygger på kryptering

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

Klassdeklaration. Metoddeklaration. Parameteröverföring

Kryptografi: en blandning av datavetenskap, matematik och tillämpningar

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Vektorgeometri för gymnasister

Kryptering. Av: Johan Westerlund Kurs: Utveckling av webbapplicationer Termin: VT2015 Lärare: Per Sahlin

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Lösning till tentamensskrivning på kursen Diskret Matematik, moment B, för D2 och F, SF1631 och SF1630, den 1 juni 2011 kl

Grafer och grannmatriser

CE_O3. Nios II. Inför lab nios2time

Dagens agenda. Lagring & berarbetning av data. Filer och filformat Metadata Komprimering Kryptering Olika typer av data Filsystem Databaser

Lösning till tentamensskrivning i Diskret Matematik för CINTE och CMETE, SF1610 och 5B1118, tisdagen den 7 januari 2014, kl

Filosofisk logik Kapitel 15. Robin Stenwall Lunds universitet

DD1361 Programmeringsparadigm. Carina Edlund

Flernivåsäkerhet och multilateral säkerhet

Läsanvisning till Discrete matematics av Norman Biggs - 5B1118 Diskret matematik

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Programmering B med Visual C

Parameteröverföring. Exempel. Exempel. Metodkropp

Fö 8: Operativsystem II. Minneshantering. Minneshantering (1) Minneshantering (2) Minneshantering och Virtuelltminne.

Datum: Version: Författare: Christina Danielsson Senast ändrad:

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Tildatenta Lösningsskiss

Tentamen Datastrukturer D DAT 035/INN960

Explorativ övning 9 RELATIONER OCH FUNKTIONER

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

1 De fyra fundamentala underrummen till en matris

Definitionsmängd, urbild, domän

Testning av program. Verklig modell för programutveckling

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Fö 7: Operativsystem. Vad är ett operativsystem? Målsättning med operativsystem. Styr operativsystemet datorn?

Lösning till tentamensskrivning i Diskret Matematik för CINTE, CL2 och Media 1, SF1610 och 5B1118, onsdagen den 17 augusti 2011, kl

International Olympiad in Informatics July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor

Datasäkerhet. Informationsteknologi sommarkurs 5p, Agenda. Slideset 10. Hot mot datorsystem. Datorsäkerhet viktigare och viktigare.

Typkonvertering. Java versus C

Databasdesign. E-R-modellen

Datorteknik ERIK LARSSON

Objektorienterad programmering

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Föreläsning 5: Introduktion av pekare

Introduktion. 1DV425 Nätverkssäkerhet. Patrik Brandt

Lösning till tentamensskrivning i Diskret Matematik, SF1610 och 5B1118, torsdagen den 21 oktober 2010, kl

Föreläsning 2. Operativsystem och programmering

Pascal... Pascal. Pascal... Pascal...

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Kravspecifikation Fredrik Berntsson Version 1.1

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Introduktion till programmering. Undervisning. Litteratur och examination. Lärare. Föreläsning 1

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Algoritmer, datastrukturer och komplexitet

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Medieteknologi Webbprogrammering och databaser MEB725, 5p (7,5 ECTS) Klientprogrammering JavaScript Program på flera sidor

Introduktion till arv

Operativsystem ID2200 Tentamen TEN1 3.8 hp :00-18:00

Stora bilden av Linjära algebran. Vektorrum, linjära transformationer, matriser (sammanfattning av begrepp)

Filsäkerhet i Windows NT (NTFS)

Algebra och kryptografi Facit till udda uppgifter

1 Positivt definita och positivt semidefinita matriser

Föreläsninsanteckningar till föreläsning 3: Entropi

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Transkript:

155 10. 10.1. Mål, medel och tekniker Skydds- och datasäkerhetsfunktioner används av minst två skäl. Dels vet vi att alla program är behäftade med felaktigheter, som kan innebära driftstörningar mot vilka man vill skydda sina tillämpningars såväl som operativsystemets integritet. Vidare bör rimliga mått och steg tas visavi avsiktliga sk dataintrång. Datorer byggdes en gång i tiden för att "knäcka koder" som framställdes mekaniskt. I och med datorsystems allmänna användbarhet har de kommit att utnyttjas för sådan datahandling som kräver skydd. Kryptologin har därvid kommit till heders igen. 10.1.1. Syften eller mål De mål/tjänster som man vanligen vill uppnå är följande fem; efter ISO:s säkerhetsarkitektur [ISO88]. i. Konfidentialitet (sekretess, 'secrecy') Vissa data/viss information skulle om den kom i orätta händer förorsaka alltifrån mindre missnöje till katastrof. Dessa sekretessaspekter på säkerhet berör också det som på svenska lite felaktigt kallas den "personliga integriteten". ii. Autenticitet (äkthet) Med denna äkthetsfråga avses oftast verifierad identitet. Eftersom rättigheter att utnyttja systemresurser, att se information och att förändra system ofta förknippas med identiteter (processnamn, person etc) är subjektidentifiering av central roll. Otillbörlig användning ska förhindras via korrekta namn. iii. Integritet (helhet; jfr 'integer' = heltal och integral) Här avses förmågan hos ett system att hålla data/information hel eller oförvanskad. Borttappade, mångfaldigade eller förändrade meddelanden ska inte få förekomma. Ibland används benämningen 'message authenticity' eller bara 'authenticity'. iv. Åtkomstkontroll ('access control', 'protection') Denna tjänst reglerar vem som tillåts göra vad med vad. Begreppet åtkomstkontroll står också för en mekanism. Begrepp som som subjekt och objekt är centrala här. I dessa anteckningar delar vi in mekanismerna i minnesskydd och informationsflödeskontroll. v. Icke-förnekbarhet ('non-repudiation') Ett avsänt meddelande eller ett resursutnyttjande från ett subjekt (process) bör inte senare kunna "bortförklaras". Kan även vara dubbelriktad. 10.1.2. Intrång Här är ett antal konkreta hot problem vad avser säkerheten i datorsystem. i. Användande av system där någon annat är in-loggad: Här fungerar inte autenticeringen. Många gånger har en användare anlänt till en terminal eller arbetssatation som lämnats av en företrädare med ett program som simulerar den vanliga inloggningssekvensen i syfte att samla in par av användaridentiterer och lösenord. ii. Forcering av lösenord: Symptom på samma sjukdom. Lösenord allena ger svag autenticitet. En förskräckande liten andel utgörs av "rimliga" lösenord i verkliga system. iii. Genomläsning ('browsing') av gammalt minnesinnehåll: Att detta lyckas beror på att åtkomstkontrollen inte är korrekt implementerad. Återanvändning ('object reuse') tycks kräva korrekt initiering; radering, nollställning; skriv 0-or/1-or slumpmässigt många gånger på disk/band! iv. Avlyssning: Principiellt alltid möjlig på kommunikationskanaler: Det är möjligt att via kryptering skydda information även om data är åtkomligt för avlyssnaren. Avlyssningen kan vara passiv eller aktiv. En aktiv avlyssning innebär att informationsutvinningen paras med modifikation. Forcering av chiffer är dessutom inte sällan möjlig.

156 v. Fall-luckefunktioner ('trap doors'): Oavsiktligt tillgänglig sidoinformation om tex alternativa 'entry'-punkter i program eller annan "sidoinformation" kan utnyttjas för att komma förbi åtkomstspärrar. Vid tex systemanrop utgör operativsystems svagheter att validera parametrar en uppenbar risk. vi. Trojanska hästar: Programdelar som vid sidan av väl specificerad eller dokumenterad funktion även, för att kringgå systemets normala åtkomstkontroller, utnyttjar det faktum att de instansieras i ett "lånat" kontext med felaktiga (för stora) åtkomsträttigheter. vii.virus, maskar. Populära namn på program som innehåller trojanska hästar. De genererar kopior av sig själva och sprids ofta via oskyddade kommunikationskanaler inklusive lånade disketter och dåligt skyddade persondatorer eller tom ännu mer indirekt via "infekterade" kompilatorer, editorer, &c. Den 15 august 1989 kände man till ca 75 olika virus för PC-världen och cirka 25 för Macintosh. Maskar emanerade ursprungligen genom försök att åstadkomma god lastbalansering i lokala nät! Här är några förslag på definitioner: Definition # Virus Mask 1 Malign Benign 2 "Lever i" andra Fristående programdelar program 3 Sprids exponentiellt Vandrar från punkt till punkt Exempel 1. Studenten som i sin lab-lösning lade in en TH. Läraren provkörde och fick sin fil med kommande tentamensfrågor läst; ett sk kontextfel. 2. Skapa en "jättearray" för din process, "glöm" att initierade den, hoppas att OS inte raderar det som fanns i det virtuella minnet före allokeringen och skriv ut: Ibland bara skräp, ibland något "intressant"; jfr 'object reuse'. viii. En taxonomi. Helt nyligen har C. Landwehr et al [Lan94] publicerat följande taxonomi om säkerhetsfels ursprung. (Taxos, grek. ordning, nomos, grek. lag.) Säkerhetsfel Avsiktliga Förstörande Trojansk häst Replikerbar Virus Icke-replikerbar Fallucka Logisk bomb Bevarande Covert channel Tidskanal Minneskanal Diverse Oavsiktliga Valideringsfel Argument Kontextfel Synkroniseringsfel P(S) utan V(S) Resursfel Baklås Autenticeringsfel Jag är inte jag Övriga Pekare i C Mot finare indelnig. Jag hänvisar till artikeln för en diskussion om dessa fel och om system där dessa fel hittats.

157 Som komplement till denna "ursprungsklassificering" fortsätter författarna med en analys av platsen i system för felen. Inte överraskande finner de att det är programvaran och speciellt operativsystemen är de platser där de flesta felen sker. Vidare konstateras att felen oftast har sitt ursprung i utvecklingsfasen, speciellt vid specifikationen. 10.1.3. Medel Det är vanligt att dessa medel, som i andra sammanhang tex processhantering och minneshantering, delas in i 'policies' och mekanismer. De förra specificerar vad man vill åstadkomma, de senare hur detta realiseras. 'Policies' bygger på principer som - "minsta möjliga rättigheter" för användare, dvs små skyddsdomäner, - enkla och verifierbara mekanismer, - "öppen" konstruktion, - fullständigt utnyttjande, - separation av ansvar och - psykologisk acceptans. Mekanismerna ska vara snabba, penetrerande och öppna. - Snabba: Annars använder inga dem. - Penetrerande: Annars är det lätt att gå förbi dem. - Öppna: Annars har vi glömt att programvara har en benägenehet att spridas. i. Åtkomst'policies' kan klassificeras som - 'Mandatory access control' (MAC): Rättigheter åsätts oberoende av subjektens aktiviteter: av systemadministratören. Eftersom sådana (oftast) bygger på etikettering av information så är integritetsfrågan för sådana etiketter viktig. Etiketterna ordnas ofta i fler nivåer; man talar då om 'multi level security', MLS. - 'Discretionary access control' (DAC): Rättigheter kan sättas efter subjektens gottfinnande. Detta är normalt vad som sker i filsystem där användarna efter eget gottfinnande sätter rättigheter för sina filer och kataloger i sk 'access control lists'. Sid- och segmentdeskriptorer för minnesskydd klassas också som DAC eftersom rättigheterna däri tillkommer via kompileringar på användarnas uppdrag. Återanvändning ('object reuse') av tex primärminne måste beaktas: Radering av gamla data är nödvändig före reallokering. En filradering som normalt katalogiseras med en bit i en katalog är ibland otillräcklig: Här rekommenderas i stället upprepade faktiska överskrivningar med slumpbitmönster. I ett (virtuellt) minne bör man kunna vara övertygad om att det minne man själv användt "suddas ut" innan en annan användare allokeras detta block. ii. Mekanismer De vanligaste mekanismerna/teknikerna som används för att åstadkomma säkerhet i datorsystem är följande. - Direkt åtkomstkontroll (Minnesskydd, 'protection') Läs-, skriv- mfl rättigheter för subjekt till objekt. De helt dominerande teknikerna utgörs av kontroll av rättigheter till sidor och filer via sidtabeller respektive filkataloger. - Informationsflödeskontroll MAC för att reglera hur information tillåts spridas. Ett svårhanterligt problem är de sk 'covert channels'; informationsbärande kanaler som uppstår oavsiktligt. Att ett program för vissa indata går in i en oändlig singa är et tecken på en oplanerad kanal. - Kryptografi och chiffer Kan användas både för att skydda data (konfidentialitet och i viss mån integritet) och identiteter (autenticering). Tekniken bygger på att data må finnas tillgängliga för avlyssning (passiv eller aktiv (= avlyssning med modifiering)), men att informationen inte gör det.

158 - Digitala signaturer Används för att åstadkomma autenticitet. Realiseras oftast via kryptografiska funktioner. De är motsvarighten till handskrivna signaturer för att användas i en automatiserad värld. - Felkorrigerande koder (redundans och återhämtning) För att säkerställa integritet i samband med oavsiktliga felaktigheter vid lagring eller kommunikation av information. - Kompaktering En teknik i grunden avsedd för helt andra ändamål (sparande av utrymme) som ofta utnyttjas tillsammans med kryptografi. Många chiffer blir starkare om det underliggande klartextspråket framställs med minskad redundans. - Inferenskontroll för att förhindra utvinnande av information ur statistiska databaser. Ett 'query'-vilkor som uppfylls av en individ kan utnyttjas för att undersöka om denna har ytterligare katalogiserade attribut trots att de bör betraktas som konfidentiella. 10.2. Minnesskydd Avgörande för val av mekanism är ambitionsnivån avseende detta skydd. Ambitionsnivåerna kan formuleras som 'policies' på många olika sätt. Här är ett förslag. 10.2.1. Ambitionsnivåer - Oskyddade system. - 'All-or-nothing systems'. - Operativsystemkontrollerad delning. - Användarstyrd delning. Den första nivån avser operativsystem byggda på maskiner som saknar minnesskydd i maskinvara. Programvarumässigt interpreterad åtkomstkontroll är i allmänhet för kostsam för objekt i primärminnet, varför man väljer att avstå från skydd. Den andra typen av system har sin grund i kombinationen av 'supervisor/user state' och privilegierade instruktioner. Namnet kommer därav att operativsystemet tillåts utföra alla instruktioner; användarna är mer begränsade. Ett system med endast dessa faciliteter måste betraktas som fullständigt oskyddat. Bättre skydd erhålls om operativsystemet därutöver sätter läs- skriv- och exekveringsskydd på minnesdelar, sidor eller segment med maskinvarustöd och för filer, terminaler och noder implementerat i programvara. I de mer avancerade systemen sker styrningen av åtkomstkontrollen efter användarnas intentioner: Inte helt fritt, då skulle kaos uppstå, men efter ramar fastställda av operativsystemet då systemets 'policy' formuleras. Observera att benämningen vanligen är delning och inte skydd. Anledningen är att det just är delningen som gör skyddsaspekterna svårhanterliga och kanske intressanta. 10.2.2. Tekniker Följande metoder/tekniker är/var vanliga för skydd av primärminne. i. Gränsregister i kombination med 'user/supervisor state'. Åtkomstskyddat område där operativsystemet har allokerats sätts via ett register med hjälp av privilegierad instruktion. En användares försök till referens till skyddat område ger 'trap'. Ett anrop till en förutbestämd adress kan tolkas som ett systemanrop (i system där en 'trap'- instruktion saknas). I övrigt är operativsystemarean oåtkomlig för användarprocesser. Figur 10.1 illustrerar tekniken.

159 Primärminnet OS i 'supervisor state' Användare (en åt gången) i 'user state') Ett gränsregister som definieras av OS med privilegierad instruktion Figur 10.1 Gränsregister ii. Lås och nycklar. Minnesblock av fix storlek åsätts mha privilegierad instruktion ett låsvärde (tex 0-15). Endast processer som har motsvarande nyckel i 'process status word', psw, kan referera detta block. Detta är grundmodellen i OS/370. iii. Bas- och gränsregister. En modifikation av tekniken med gränsregister som möjliggör inkapsling av en process' namnrum inom visst område. Denna teknik har alltid vad jag vet kombinerats med dynamisk relokering via detta basregister. Bas- och gränsregistertekniken illustreras av figur 10.2. Primärminnet OS Åtkomligt område En annan uppehållen process Dessa sätts av OS B L Adresser relokeras via B Kontroll av adress L görs Fig 10.2 Bas- och gränsregister Observera att dessa tre tekniker verkar i det fysiska adressrummmet. Nu till skydd i den logiska adressrymden. iv. Sid- eller segmentskydd. Läs- skriv- och exekveringsrättigheter (rwe) sätts av operativsystemet på basis av allokeringsenhet i respektive tabell. En otillåten operation ger ett 'trap'. Den helt dominerande tekniken idag går via sidsystem och sidskydd. v. Ringskydd. Detta kan sägas vara en generalisering av 'user/supervisor state' så att dels fler processortillstånd (ringnummer, pr.rn) kan lagras i processtatusordet, dels att varje objekt (segment) kan tilldelas ett ringnummer s.rn i segmenttabellelementet. De olika processtillstånden kan också låtas definiera olika klasser av privilegierade instruktioner. Vid varje referens kontrolleras att pr.rn s.rn. Om så inte är fallet fås en 'trap'. Detta skydd, där objekt och subjekt ordnas hierarkiskt (linjärt), verkar oberoende av rwebitarna. Eftersom en naiv tillämpning av denna regel skulle omöjliggöra anrop "inåt" från användare till systemrutiner måste regeln kompletteras. Ett sätt är att tillåta anrop, men bara anrop, inåt och då till förutsatt certifierade anropsställen [s, w] (sk 'protected calls').

160 Maskinvarumodellen är funktionellt identisk med 'scope'- reglerna för många blockorienterade språk. vi. 'Capability-' (CL) och/eller åtkomstlistor (ACL). Dessa tekniker eller dess ekvivalenser är mig veterligen de enda som gör användarstyrd åtkomstkontroll möjlig. Listorna (registren, segmenten) med 'capabilities' laddas ju av processerna från certifierade platser i operativsystemet. De objekt som innehåller 'capabilities' kan läsas/skrivas om användaren har rättighet i en "primär" 'capability' rc/wc till detta (rc/wc = 'read/write capability'). Figur 10.3 illustrerar CL. Processlista CL Process x Process y (Subjekt) En annan CL Figur 10.3 CL Segment Rättigheter Ett segment (objekt) eller en underordnad CL Byten mellan olika listor (domän) blir också möjligt, så att tex beroende på i vilken funktion en process befinner sig i så kan rättigheterna vara olika. Rätt använd ger tekniken ett bra skydd mot trojanska hästar, den möjliggör små skyddsdomäner ('least priviledge') och kan integreras med namnhanteringen (av segment). Åtkomstlistorna associerar rättigheter för subjekt per objekt och är funktionellt ekvivalent med cap-listor. Cap-listor har fördelen att de är effektivare att utnyttja vid exekveringen av program (processens domän finns ju samlad där), de förra att de är lättare att administrera. De är dessa aspekter som gör att åtkomstlistor är vanliga i filsystem, medan domän-listorna är nödvändiga vid skydd av primärminnet. I 'capability'-orienterade system är återkallande ('revocation') av rättigheter till ett objekt omständligt. Detta beror på att flera subjekt kan ha 'capabilities' till samma objekt. Om en rättighet ska tas bort för samtliga subjekt till ett objekt måste systemet söka genom alla 'capability lists'. Ett sätt att förenkla detta återkallande är att använda 'capabilities' indirekt. Dessa pekar ut EN deskriptor som i sin tur pekar ut objektet. Fullständigt återkallande kan då ske genom att ta bort denna deskriptor (O' i figuren). Figur 10.4 visar caps som används indirekt. C' CL(användare) Global segmenttabell Objektet O O' CL(ägare) O C' C Ägaren av O (dvs C) delar ut en begränsad kopia C' till användaren som utnyttjar den indirekt. Figur 10.4 'Capabilities' för återkallande av rättigheter

161 Selektivt återkallande är fortfarande omständligt. Här har 'access control lists' en definitiv fördel. CL-metoden har ibland kallats biljettorienterad eftersom blotta ägandet av en 'capability' visar rättigheten till ett objekt (tex en plats i en teatersalong). ACL-metoden kallas analogt för listorienterad: Användaren anger sin identitet för en kontrollant som avgör om tjänsten kan utföras genom att konsultera en lista (kan liknas vid passkontrollen i vissa länder). vii. 'Capabilities med kryptochecksumma. I distribuerade system kan 'capabilities' användas för att definiera och adressera objekt i de ingående delsystemen. En 'capability' kan bestå av följande fyra delar (från Amoeba). Maskin, 48 bits Objekt, 24 bits Rättighet, 8 bits 48 'checkbits' Eftersom dessa skickas via datanät är de utsatta för risker för manipulation. I en 'capability' ingår därför det fjärde fältet (, som inte brukar finnas i centraliserade system). Detta kan framställas via kryptering som en digital signatur beräknad utgående från de första tre fälten. 10.2.3. Accessmatrismodellen Modellen har utvecklats för att systematisera den myriad av tekniker som förekommer och för att kunna syntetisera och analysera konkreta skyddssystem. Modellen består av tillstånd (matriser) och tillståndsövergångar (kommandon). Matrisen definierar ett skyddsystems momentana tillstånd och ges av följande tre delar. - En mängd subjekt ({s}). -- kolumnindex - En mängd objekt ({o}). -- radindex - Sekvenser av rättigheter A[s, o]. Subjekten är systemets aktiva agenter. Beroende på om studieobjektet är maskinvara, operativsystem, programspråk, kommunikationssystem eller databashanterare så ser vi olika subjekt. I operativsystem tänker vi oss vanligen subjekten som instruktioner, funktioner, processer eller användare. Objekten är dessa element som man avser åtkomstskydda. Exempel på objekt är segment, filer, terminaler och portar. Alla subjekt betraktas som objekt eftersom processer eller funktioner kan referera andra processer eller funktioner eller dessas rättigheter. Elementen A[s, o] anger de operationer som s tillåts utföra på o. En matrisrad brukar kallas ett domän ('protection domain') och definierar samtidigt ett kontext kompletterat med rättigheter. De rättigheter som kan ingå i elementen (sekvenserna) A[s, o] är av tre typer: - För verkställighet av skyddet - För att flytta rättigheter - För att byta matrisrad (domän) 10.2.4. Modellens attribut i. Skyddets verkställighet ('enforcement') Rättigheter som beskriver de vanliga operationer som ett subjekt kan utföra på ett objekt: läsa, skriva, lägga till (på filer), starta (processer) osv. Förutsättningar för att skyddet ska kunna upprätthållas är att skyddskontrollen alltid genomförs korrekt. För att detta ska vara möjligt måste subjekt och objekt identifieras korrekt, dvs

162 - entydigt, - oförfalskat och - alltid. För 'enforcement' brukar det i praktiken finnas en 'protection monitor' för varje typ av objekt: filsystemet för filer, drivrutiner för i/o-enheter, adresseringslogiken för segment, schemaläggaren för processer osv, som kontrollerar om referensen är tillåten eller inte. Den del som påverkar skyddsystemet i sig ('rights movement') kontrolleras av 'kärnan' i skyddsystemet. En operation a som s önskar utförd på o handhas som följer a1. s startar operationen a genom att skicka <s, o, a> till aktuell 'protection monitor'. a2. Denna kontollerar med skyddsystemet om a A[s, o]. a3. Om så är fallet utförs a, annars sker 'trap' ('access violation'). ii. Förändringar i matrisen ('rights movement'); tillståndsövergångar. De speciella rättigheterna own, control, + och * anger huruvida ett subjekt får ändra ett objekts (subjekts) rättigheter. En ägare kan lägga till rättigheter för subjekt till ett objekt vilket han äger. 'Control' kan användas för att definiera möjligheter att återkalla rättigheter,* för att ange att kopiering av rättigheter är möjlig och + för att ange att rättigheter kan flyttas. Det är denna klass som gör ett skyddsystem dynamiskt. Exempel på regler (kommandon, se nedan) för 'rights movement' är b1. Om own A[s, o] kan s lägga till en godtycklig rättighet till A[s', o] för alla s'. b2. Om control A[s, s'] kan s ta bort en godtycklig rättighet från A[s', o] för alla o. b3. Om *a A[s, o] så kan s lägga till a eller *a i A[s', o] för alla s'. b4. Om +a A[s, o] så kan s flytta a eller +a från A[s, o] till A[s', o] för alla s'. Om objekten är subjekt kan man också införa rättigheter som 'read/write capability'. iii. Domänbyte. Rättigheten som används är 'enter'. Den kan ses som en rättighet att göra ett funktionsanrop som samtidigt ger ett domänbyte. Vi skiftar sas rad i matrisen och erhåller 'domain switching'. c. Om enter A[s, s'] så kan subjektet/processen s anropa subjektet/processen s'. Rättigheten används för att implementera en något generaliserad 'call gate' och betyder i praktiken att en aktiv process/användare omfattar fler subjekt (s, s',...) och att operationen enter s' utförd av s resulterar i ett byte av aktuell rad ('protection domain') från s till s' i matrisen. 10.2.5. Kommandon Matrisen beskriver i varje ögonblick ett specifikt tillstånd hos skyddsystemet. Tillståndsövergångar modelleras av kommandon som sammansätts av primitiva operationer. Följande är ett exempel på en uppsättning primitiva operationer. PRIMITIVA Tilläggande Borttagande OPERATIONER Subjekt create subject s destroy subject s Objekt create object o destroy object o Rättighet enter r into A[s, o] delete r from A[s, o] Semantiken kan formuleras i termer av matrisens utseende före och efter de primitiva operationerna. Observera att create subject skapar såväl en ny rad som en ny kolumn i matrisen A. Kommandon består av parametriserade och villkorade sekvenser av primitiva operationer. Som exempel kan följande tre tjäna:

163 command create-file (p, f): command confer-read(x, y, f): create object f if own A[x, f] enter own into A[p, f] then enter read into A[y, f]; enter read into A[p, f] enter write into A[p, f] command take-subordinate-read (p,q,m): if control A[p,q] and read A[q,m] then enter read into A[p,m] Figur 10.5 visar matriser före och efter några kommandon. Starttillstånd P1 P2 M1 M2 F1 F2 P1 P2 rwe rwe own rw own re Subjekten är processerna P1 och P2 Objekten är filer (F) och minnessegment (M) och processerna (P) Transitioner Motsvarande sk accessgraf är Antag att följande sekvens utförs create.subordinate (P2, P3, M3) take.subordinate.read (P2, P3, M3) take.subordinate.write (P2, P3,M3) confer.read (P2, P3, F2) own, rw P1 rwe M1 P2 own, re F1 rwe F2 M2 Då erhålls med lämpliga (vilka?) definitioner av dessa kommandon Nytt tillstånd P1 P2 M1 M2 M3 F1 F2 P1 P2 P3 rwe rwe rw own rw own rw control P3 rwe r Figur 10.5 Accessmatrismodellen 10.2.6. 'Policy/mechanism' Säkerhetssystemets mekanismer specificeras av begynnelsetillståndet och möjliga sekvenser av kommandon. Systemets policy kan specificeras som en mängd A av auktoriserade tillstånd. Om mekanismerna kan skapa exakt den mängden så sägs systemet vara precist. Om de möjliga tillstånden är en delmängd av A kallas systemet säkert ('secure'). I övrigt finns problem (fel) i specifikationen eller i implementeringen.

164 10.2.7. Generiska versus typspecifika rättigheter Rättigheter (operationer, funktioner) som är tillämpbara på objekt av olika typer brukar kallas generiska. Exempel är 'read' som kan avse tex filer, terminaler och brevlådor. Observera att 'extended type objects' tex brevlådor bör ha såväl generiska som typspecifika rättigheter. Rättigheten 'read' kan avse att utnyttjande subjekt har rättighet att läsa representationen av brevlådan, dvs godtyckliga element i brevlådestrukturen: pekare, låsfält och andra attribut. Detta blir då en rättighet som operativsystemet bör besitta. Användarprocesser ska inte tillåtas ha denna rättighet. En användare kan däremot behöva rättigheten 'receive', som innebär att processen tillåts utföra motsvarande brevlådeoperation. Samma resonemang kan föras för alla abstrakta datatyper. Observera att det finns rättigheter som inte går att kontrollera redan vid kompileringen. Speciellt gäller detta dynamiska strukturer eller processer. Typdeskriptorer måste då finnas med under exekveringen. De kan användas endera av ett 'run time system' associerat till språket eller administreras av operativsystemet. Figur 10.6 visar delarna som är inblandade vid åtkomstkontroll. Subjekt 'Protection monitor' Objekt Attribut (exempel på operation) (predikat) (kan vara subjekt) (predikativt?) S: (f) Filsystemet S: read-file (f) Filer 'Enforcement' S: move d1, [s,w] Adresseringslogik Segment ibid S: send (to process) Schemaläggare Processer ibid S: doio(...) Drivrutin Enhet ibid S: enter (S') Avkodning Instr. 'Domain switching' S:change access right Skyddsystemet 'Rights movement' Kan skriva s r o Accessmatrisen Läser här (som ACL eller CL) Figur 10.6 Allmän översikt av direkt åtkomstkontroll

165 10.3. Informationsflödeskontroll Den direkta (och 'discretionary') åtkomstkontrollen löser inte alla frågeställningar. Exempel. Om subjekt A har läsrättighet till filen F och B saknar sådan hindrar inget att A kopierar F's innehåll till ett objekt F' som är läsbart av B. För att förhindra detta kringgående av rättigheter behövs flödeskontroll: Till varje subjekt s och till varje objekt o associeras en etikett (label, class) c(s) respektive c(o). Etiketterna kan ordnas linjärt ( ), tex öppen, konfidentiell, hemlig, topphemlig, eller mer generellt via en partiell ordning ( ): - en reflexiv: c(a) c(a), för alla a, - antisymmetrisk: c(a) c(b) och c(b) c(a) medför c(a) = c(b), och - transitiv relation: c(a) c(b) och c(b) c(c) medför c(a) c(c). En obligatorisk ('mandatory') flödessäker åtkomstkontroll införs genom att kontrollera att information inte kan flöda "nedåt" utan bara "uppåt". En säkerhetskärna ('security kernel') specificeras i grunden precis som den allmänna modellen för åtkomstkontroll men kompletteras med flera säkerhetsklasser. 10.3.1. Relationer Här kommer en kort repetition av (eller möjligen introduktion till) de vanligaste begreppen om relationer, mm. i. Definitioner Givet två (ändliga) mändger X och Y kan man bilda den sk Cartesiska produkten X Y def { (x, y), x X, y Y}, dvs mängden av par där första komponeneten tillhör X och den andra komponenten tillhör Y. I många sammanhang är X och Y samma mängd. En (binär) relation R över X och Y (eller från X till Y) är en delmängd av X Y; X Y R. För att uttrycka att paret (x, y) R skriver man ofta x R y eller ibland (sällan) y = R(x). Mängden X kallas relationens definitionsområde ('domain') och Y dess värdeförråd ('range'). En funktion är en relation där x R y och x R z implicerar att y z: "Entydigt funktionsvärde". Här är det normala skrivsättet y = R(x). Relationer brukar ibland betecknas med specialsymboler som tex, <, ~,, etc. ii. Representationer Tre vanliga sätt att illustrera/representera en relation på X är: - Linjär form: Här räknas helt enkelt de par som ingår i relationen upp. Ett alternativ är att göra en entydig karakteristik tex via mängdoperationer och logiska konnektiv. - Grafform: Här placeras elementen x, y,... i X ut på ett plan och vi ritar en båge från x till y precis då x R y. - Matrisform: Här införs ett matriselement M ij för varje par (x i, x j ) där x i,x j X och vi sätter M ij = 1 = true om (x i, x j ) R och M ij = 0 = false annars. iii. Typer av relationer. Här kommer definitioner på några vanliga typer av relationer. Namn Definition Reflexiv x R x Irreflexiv not x R x Symmetrisk x R y y R x. Antisymmetrisk x R y, y R x x y. Asymmetrisk x R y not y R x. Transitiv x R y, y R z x R z.

166 Det finns många samband mellan dessa typer av relationer och karakteristika för motsvarande matris/graf. Några exempel är följande. - För en reflexiv/irreflexiv relation gäller att dess matris har 1-or/0-or på diagonalen. - En symmetrisk relation har en symmetrisk matris M = M T, där M T är den till M transponerade matrisen; rader byts mot kolumner och vice versa. - En reflexiv relation har en slinga i varje nod i graf- formen. - En irreflexiv relation saknar 'loops'. - I en symmetrisk relations graf är alla bågar dubbelriktade. - Matrisen M T definierar den omvända relationen. Notera att en asymmetrisk relation alltid är irreflexiv. Namn Strikt partiell ordning Partiell ordning Ekvivalensrelation Kompatibilitetsrelation Total ordning (kedja) Karakteristika Asymmetrisk, irreflexiv, transitiv Reflexiv, Antisymmetrisk, transitiv Reflexiv, Symmetrisk, transitiv Reflexiv, Symmetrisk Alla element är linjärt ordnade En total ordning är ett specialfall av en partiell ordning. I många tillämpningar vill man inte ordna alla symboler i "nummerordning", eftersom fler av de objekt som symbolerna representerar är oberoende; tex 'concurrent' eller lika säkerhetskänsliga. Två relationer P och R är konsistenta om P R = P + R kan utvidgas till en total ordning. Detta är möjligt precis då dess transitiva hölje (se nedan) är irreflexivt, dvs då dess graf är utan slingor. Exempel. En relation E, en exekveringsordning, är korrekt om och endast om den är konsistent med programordningen P. E är i sin tur en acyklisk orientering av den sk konfliktrelationen C, som definieras av "interfererande minnesreferenser" och som är symmetrisk och irreflexiv (men inte nödvändigtvis transitiv). Om man vill ta hänsyn till atomära operationer kan man representera dessa mha en ekvivalensrelation. Följande figur 10.7 visar ett exempel på en relation. En ekvivalensrelation inducerar en uppdelning av elementen i sk ekvivalensklasser bestående av klasser av element som är ekvivalenta. Utgå från ett element x och låt [x] R bestå av alla element som är (R-) ekvivalenta med x. Föreningsmängden av alla ekvivalensklasser är X. Exempel. Ett exempel på en relation som genererar ekvivalensklasser är ekvivalensrelationen a b (mod n). För tex n = 3 och b = 1 är tex [2] mod 3 = {2, 5, 8,... } = { 3k + 2 k = 0, 1, 2,... }. Ett annat exempel är en 'hash'-funktion h. Ekvivalenta symboler eller adresser 'hash'as till samma länkade överskottslista (samma h-värde) respektive avbildas associativt till samma 'cache'-rad.

167 En relation hb ('happended before') defineras över en mängd av händelser eller processer p1, p2, p3 och p4 via följande uppräkning: hb = < (p1, p2), (p2, p4), p3, p4)> Motsvarande graf-form blir Motsvarande matrisform blir p1 p2 p3 p4 p1 0 1 0 0 p2 0 0 0 1 p3 0 0 0 1 p4 0 0 0 0 p1 p2 p3 p4 Relationen är irreflexiv, aymmetrisk och transitiv, dvs en strikt partiell ordning. Figur 10.7 En relation iv. Operationer på relationer Givet en relation P från X till Y och en relation R från Y till Z kan man bilda sammansättningen P R = { (x, z) x X, z Z, ( y) ((x, y) P, (y, z) R )}. En sammansättning av P med sig själv upprepeade gånger skrivs också P n = P P (n gånger) P P. P 0 = I står för identitetsrelationen. Sammansättning på matrisrepresentationen ges av matrismultiplikation. Eftersom en relation är en mängd kan vi bilda förenings- och snittmängderna mellan två relationer. Föreningsmängden av P och R skrivs oftast P + R. Det transitiva höljet till en relation över en mängd med n komponenter R är R + = R + R 2 + R 3 +... + R n. Det reflexiva transitiva höljet är R* = I + R +. Relationen R + är den minsta transitiva relation som innehåller R. Warshalls algoritm för att bilda det reflexiva transitiva höljet rp till r är for i, j := 1 to n do rp (i,j) := r (i,j); for k := 1 to n do for i := 1 to n do for j := 1 to n do if not rp (i,j) then rp (i,j) := rp (i,k) and rp (k,j); -- r antas vara definierad R + och R * svarar mot en upprepad tillämpning av R; en eller fler respektive 0 eller fler upprepningar. 10.3.2. Bell-LaPadulamodellen Varje objekt och subjekt tilldelas förutom rättigheter i matrisen en fix etikett (linjärt ordnade) och enligt den modell som föreslagits av Bell och LaPadula skall följande axiom gälla. - En process p kan inte läsa ett object o försåvitt inte c(o) c(p). Detta kallas vanligen simple security ' ('no read up'). - En process kan inte läsa ett objekt x och skriva ett objekt y om inte c(x) c(y). Detta kallas vanligen '*-property ' eller 'confinement property' ('no write down').

168 Detta är hårdare krav än nödvändigt. Processen låter inte nödvändigtvis information flöda från x till y. I praktiken räcker det att kräva att c(x) c(y) i de fall då y är funktionellt beroende av x. Modellen tillåter inte heller dynamiska (databeroende, tidsberoende) eller partiellt ordnade etiketter. Observera också att denna flödeskontroll avser konfidentialitetsaspekten. Integritet berös inte: En process i klassen 'öppen' tillåts skriva nonsens i ett objekt i klassen 'topphemlig'! Figur 10.8 illustrerar Bells och LaPadulas modell. Subjekt Objekt Top secret Secret Classified Unclassified 'Clearence' 'Classification' Flöde EJ tillåtet Flöde OK 10.3.3. Biba-modellen Figur 10.8 Flödeskontroll via BLP-modellen En modell för integritet som kan sägas vara dual till BLP är den sk Biba-modellen. Den bygger på integritetsklasser i(x) och består av följande regler. - En process p kan inte modifiera ett object o endast ifall i(o) i(p). Detta kallas vanligen 'simple integrity. - Om en process s kan läsa ett objekt o, så kan s kriva ett objekt y endast ifall i(y) i(o). Detta kallas vanligen '*-integrity property '. Att samtidigt garantera både konfidentialitet och integritet med enbart dessa metoder (BLP och Biba) ger starka inskränkningar! 10.3.4. Dennings modell För att hantera dynamiska säkerhetsklasser (etiketter) och för att bättre kunna validera processer som hanterar information av olika klass har Dorothy Denning utvecklat en modell i vilken processens interna tillståndsövergångar studeras. i. Allmänt. Modellen bygger på lattices definierade av en partiell ordning ( ) av säkerhetsklasser med minimum ('greatest lower bound', ) och maximum ('least upper bound', ). Ett lattice är en partiellt ordnad mängd där varje par har ett entydigt minimum och maximum. - Existensen av medför att om c(x i ) c(y) så finns en klass c(x) = c(x i ) så att c(x) c(y). Det betyder att alla flöden från x i till y är tillåtna om c(x) c(y). Detta kan tilläpas på explicita flöden:

169 För y := expression (x 1,..., x n ); Kontrollera att c(x i ) c (y). En sats y := x ger ett explicit flöde x y. - Existensen av medför att om c(x) c(y i ) så finns en klass c(y) = c(y i ) så att c(x) c(y). Det betyder att alla flöden från x till y i är tillåtna om c(x) c(y). Detta kan tillämpas på implicita flöden: if predicate(x) then y 1 :=...;...; y n :=...; end if; Kontrollera att c(predicate(x)) c(y i ). I en sats if x then y := 1; ger en observation av y information om x; dvs ett implicit flöde x y. Som vid tex programverifiering kan vi sedan sätta upp axiom för alla programspråkskonstruktioner, som alla kan uttryckas med - EN "tillräckligt bra" aritmetisk/logisk operation (tex nand); jfr 'expression' ovan - EN villkorlig hopp-instruktion; jfr if ovan, och "tillräckligt med minne" att lagra resultaten i (Turing). Konstruktioner som sekventiella sammansättningar säkerställs genom att utnyttja transitivitets- egenskapen. Certifieringen kan ske under 'compile time' (statiskt) eller under exekveringen (dynamiskt). ii. Exempel: Satsen if x > y then z := w; i := k + j end if; kräver att c(w ) c(z) och c(k) c(j) c(i) c(x) c(y) c (z) c(i) -- tilldelningarna; expicita flöden -- if-satsen; implicita flöden Notera att kontrollen implementeras av en 'security kernel'. Tekniken är alltså avsedd för applikationer och inte för att användas i en operativsystemkärna. Notera också att det som kan uppfattas som (enkla) variabler i tex exemplet också kan stå för mer sammansatta objekt som tex filer och databaser. iii. Certifieringsregler. Följande är en sammanfattning av regler för kontroll av auktoriserade flöden med avseende på några vanliga programkonstruktioner. Sats Kontroll av var := exp c(exp) c(var) {s1,..., sn} s1, s1,..., sn if exp then s1 [else s2] a. s1 [och s2] while exp do s b. c(exp) c(a), där c(a) = c(s1) [ c(s2)] och där c(si) = {c(z) z tilldelas värde i si} a. Satsen terminerar b. s c. c(exp) c(s), där c(s) = { c(a) info flödar till a i satsen s}

170 iv. Flödessäker åtkomstkontroll. En grov kontroll som ibland görs är att kräva för en process p och dess in- och utdata {xi} respektive {yi} att i c(xi) c(p) i c(yi). En begränsning med detta metod är att den inte "kan skilja på" vad som är känsliga klasser och inte. En finmaskigare kontroll erhålls om man särskiljer de enskilda objektens klasser. 10.3.5. Exempel; Unix V/MLS AT&T har lanserat en version Unix V/MLS ('multi level security') som bygger på BLP. Det är i grunden ett Unix system V med tillägg av funktioner för 'mandatory access control', MAC. Etiketter implementeras via Unix's 'group identifier' och de innehåller - 'level', ett 16 bitars heltal som definierar en linjär ordning - 'category', en 64 bitars 'boolean array' som definierar ett delmängdslattice. Cartesiska produkten av dessa blir också ett lattice och används för att etikettera subjekt och objekt. Systemet hanterar filer, inodes, kataloger, ipc-mekanismer och processer. För de olika operationerna på de olika objekten (objekttyp följer av operationstyp) måste dominansrelationer enligt följande tabell vara uppfyllda för att en referens ska kunna ske. Operation Read, Search, Execute Write (Overwrite, Append) Create, Link, Unlink Read-file/I-node status Change status ReadIPC WriteIPC Send a signal Relation s o s = o s = o s o s = o s o s = o s = o Lilla s står för klassen för inblandat subjekt och o för objektsklassen. Systemadministratörerna definierar klasserna för objekten och subjekten. 10.3.6. 'Covert channels' Helt omöjligt blir det att i praktiken stänga alla oönskade kanaler i ett system. Delade skivminnen, medier och utnyttjandegrad hos system skapar alltid ett minimum av informationsflöde som inte var avsett. Exempel på "lustigheter": Kodning av ett meddelande med de minst signifikanta bitarna hos en sekvens bilder (en bit per bild). Ett exempel på en "synkroniseringskanal" (troligen 'covert') illusteras av följande. parbegin process 1: if x = 0 then signal (s0) else signal (s1) process 2: wait (s0); y := 1; signal (s1) process 3: wait (s1); y := 0; signal (s0); parend; Om x = 0 så exekverar process 2 före process 3 så y blir 0. Om x 0 så kommer process 3 före process 2 och y blir 1. Systemet ger altså ett flöde x y trots att x och y inte är gemensamma. Eftersom dock satser efter wait-operationerna är betingade av signaloperationer, så föreligger ett implicit flöde från semaforerna. Ett rättframt sätt att förhindra sådana flöden är att kräva att c(s) c(y), där y är sådana "betingade variabler". Även variabler av annan typ än semaforer kan orsaka flöden om de är globala. En signalerande process kan i allmänhet läcka information genom att orsaka en annan process att vänta en tid som är proportionell mot värdet av en variabel. Någon allmän lösning på denna frågeställning finns inte vad man vet.

171 10.3.7. 'Security kernels' En säkerhetskärna integrerar samtliga säkerhetsfunktioner till en isolerad plats i arkitekturen. Ett exempel är en sk 'reference monitor' för åtkomstkontroll. Kärnan ligger principiellt i gränslandet mellan operativsystemet och maskinvaran och är altså inte direkt åtkomlig för användaren. Några grundförutsättningar är att kärnan inte kan förstöras och inte förbipasseras. Vidare bör den efter konstruktionen valideras eller verifieras med avseende på funktionalitet. Många delar implementeras gärna i maskinvara. Den bör vara av minimal komplexitet och feltolerant. En TCB, 'trusted computing base', är mängden av maskin- och programvara ansvarig för säkerheten. En TCB är funktionellt lika en säkerhetskärna men kan vara distribuerad i systemet. En TCB kan dessutom byggas i flera skikt. TCB-minimering ger enklare validering. Honeywells Secure Communications Processor (SCOMP) konstrueras väsentligen soom en säkerhets-front-end till Multics. SCOMP består av en program- och en maskinvarudel vardera arbetande mot en "databas"; de kallas "security attributes" respektive "descriptor base". Ett anrop (kommando eller systemanrop) från användaren tas om hand av programvarudelen, som ger en fysisk accessförfrågan riktad till maskinvarudelen. Denna svarar med att godta eller vägra utföra anropet. Programvarudelen innehåller funktioner för accesskontroll, filtjänster, konsistenskontroller för filer och 'auditing'. Säkerhetskärnor återfinns också för datornät. För TCP/IP finns tex en variant MLS/TCP för 'multi-level security'. NSA har också "sponsrat" ett projekt/datornät kallat SDNS, Secure Data Network System. SDNS bygger på OSI-modellen och innehåller kryptering på länk-, nät- och transportskikten (end-to-end) och protokoll för e-post och nyckelhantering på skikt 7. Ah, ett slutcitat (F. T. Grampp & R. H. Morris): "It is easy to run a secure computer system. You merely have to disconnect all dial-up connections and permit only direct-wired terminals, put the machine and its terminals in a shielded room, and post a guard at the door." 10.4. Kryptologi 10.4.1. Allmänt Kryptologin som studiemråde kan uppdelas i konstruktion av chiffer och deras forcering; kryptografi respektive kryptoanalys. Krypto kommer från grekiskans kryptos som betyder dold eller hemlig. Grafi härleds från grekiskans grafeinsom betyder skrift. Data som sänds över kanaler som kan avlyssnas eller modifieras kan inte skyddas via vanliga åtkomstkontrolltekniker som baseras på läs/skrivrättigheter. Informationen kan däremot skyddas genom att den kodas så att motsvarande data blir obegripliga ('secrecy') eller så att modifikationer av data kan upptäckas eller korrigeras ('integrity'). En sådan kodning kallas ett chiffer (fr. chiffre, siffra av arabiska sifr, nolla). Det är en avbildning från en mängd klartexter till en mängd kryptogram. Informationen chiffreras (krypteras) på ena sidan innan den sänds och dechiffreras (dekrypteras) på mottagande sidan innan den vidarebehandlas. Chiffer antas vanligen bygga på kända (öppna) algoritmer. Konfidentialitet eller integitet och autenticitet säkerställs genom att en chifferparameter (nyckel) k hålls hemlig. Ett chiffer betraktas vanligen som en funktion som avbildar klartexter på kryptogram. Som vanligt sammanblandas ofta funktionen med funktionsvärdet så att kryptogram också kallas chiffer.

172 Givet en klartextmängd {m} och en kryptogram/chiffermängd {c} kan ett chiffersystem ses som en mängd {E k } av transformationer så att c = E k (m) och m = D k (c). Sambandet D k E k = I (= enhetstransformationen) gäller alltså alltid. Figur 10.9 visar ett kryptosystem i bildform. Figuren antyder att kryptografernas motspelare heter forcörer. En sådan har i uppgift att härleda m eller k eller approximationer av dessa utan att känna till nycken k. En kryptoforcör Chiffrering F m' (skattning av m) eller k' Dechiffrering m E(k,.) c D(k,.) m k Kanal för distribution av k Figur 10.9. Ett kryptosystem Några önsvärda egenskaper hos chiffer är 1. E k och D k måste kunna beräknas snabbt. 2. Algoritmerna förutsatts vara öppet tillgängliga 3. Det ska vara svårt att systematiskt beräkna a. för konfidentialitet - D k från c även om visst m är känt. - klartexten m från c. b. för integitet/autenticitet - E k från c även om visst m är känt. - ett c' så att Dk(c') utgör ett meningsfullt meddelande. 10.4.2. Symmetriska system I de sk klassiska systemen (symmetriska) är nyckeln k för E och D densamma, eller så kan två nycklar beräknas trivialt ur varandra, så att konfidentilitet och integritet kan upprätthållas samtidigt. Så gott som alla chiffer bygger på upprepade substitutioner och permutationer. Det enklast tänkbara chiffret är det sk Caesarchiffret, som inebär att klartextens boktäver subsitueras en efter en genom ett alfabetiskt skift tre steg (a d,..., z c) eller med en formel E k=3 : m char (ord(m) + 3) mod 26). Sägnen hävdar att G. J. Caesar använde denna kod i sin konversation med Cicero. Man brukar tala om två typer av chiffer; blockchiffer och flödeschiffer ('stream ciphers'). i. Blockchiffer. En standardalgoritm kallas DES. ('Data Encryption Standard'): I denna chiffreras 64-bits block med en 56-bits nyckel via 33 (sic!) transpositioner och substitutioner.

173 Ett meddelande delas inledningsvis upp i 64-bits block. Samma nyckel används vanligen för flera block. Denna tillämpning av DES (eller ett annat blockchiffer) kallas vanligen 'electronic code book'; ECB. För att undvika att lika klartextblock resulterar i lika chifferblock, vilket är ett problem i filoch databassystem, kan en algoritm som tex DES tillämpas för att framställa 'kedjade' chifferblock. Metoden kallas CBC, 'cipher block chaining': C i = DES k (M i xor C i-1 ). Processen startar med ett valt C 0, kallas startvektor eller 'seed'. Sista chifferblocket blir funktionellt beroende av alla klartextblock och kan därför också tjäna som checksumma, så att (vissa) överföringsfel kan upptäckas eller korrigeras (integritetsaspekten). Dechiffereringen blir M i = DES -1 k (C i ) xor C i-1. Övning. Vad innebär följande? a := a xor b; b := a xor b; a := a xor b; ii. Flödeschiffer. Alla sådan chiffer fungerar enligt följande mall: Klartexten M = m 1 m 2... krypteras bitvis eller teckenvis till C = c 1 c 2... via c i = m i xor k i, Bland de klassiska chiffren kan nämnas den sk 'one time pad', som är det enda teoretiskt oforcerbara chiffret man känner till. I detta är nyckelsekvensen {k i } en icke-repetitiv slumpföljd (minst lika lång som M) som alltså används bara en gång. Ingen information (statistik) om M överförs därför till C och forcörens uppgift är omöjlig. För varje givet chiffer är varje klartext lika möjlig/sannolik. Nyckelhanteringen blir emellertid ett svårt problem varför approximationer till 'one time pad' oftast används. Vissa slumptalsgeneratorer eller ett blockchiffer tex DES kan då användas för att ge {k i }. Två typer av flödeschiffer brukar omnämnas. a. I sk synkrona flödeschiffer härleds nyckesekvensen oberoende av klartextsymbolerna. - 'Output block feedback mode' (OBF): Ett initialvärde transformeras via ett blockchiffer (tex DES). Ur detta plockas en bit/byte ut som [ny] nyckesysmbol, varefter utdata från blockchiffret återkopplas och blir nytt indata till nästa transformation för nästa nyckelsymbol. b. I sk självsynkroniserande flödeschiffer härleds nyckelsekvensen ur en begränsad mängd av föregående klartextsymboler; sådana chiffer kallas därför ibland autoklavsystem. - 'Cipher feedback mode' (CFM): Detta liknar lite grand OBF i så måtto att ett blockchiffer används. Indata till detta utgörs denna gång av ett skiftregister med givet initialvärde. Från utdata omhändertas en bit/byte som [ny] nyckelsysmbol och resten kastas. I detta fall återkopplas emellertid erhållet chiffer c = m xor k till skiftregistret. Observera att de flesta pseudoslumptalsgeneratorer, tex x i+1 = ax i + b mod n är olämpliga eftersom nyckelsekvensen x i bestäms av bara tre kvantiter (a, b och n), som om de kan härledas av forcören gör chiffter obrukbart.

174 10.4.3. Asymmetriska system Idag finns (från 1976) system som är sådana att bara endera av E k eller D k behöver hemlighållas; den andra kan vara öppen (publik). Man talar då om 'public key systems' (PKS) eller system med öppna nycklar. i. Konfidentialitet. Om D k hålls privat men E k är öppen kan alla tillverka kryptogram men bara den rättmätiga mottagaren återvinna klartexten. ii. Integritet. I det omvända fallet kan information återvinnas av alla bara om den rättmätlige sändaren har tillverkat chiffret. Detta brukar användas för att erhålla integritet och autenticitet. En identifierare (eller lösenord) transformeras privat men kan verifieras av alla. iii. Både/och. För att samtidigt få konfidentilitet och integritet måste dubbla transformationer användas; en för vardera syfte. Detta kräver att E k D k = D k E k = I. Det mest använda PKS, den så kallade RSA-algoritmen, uppfyller detta (under vissa förutsättningar). Antag att A har tranformationer E a och D a och B har motsvarande E b och D b, där E är publika och D är privata. För att säkerställa konfidentialitet och äkthet för ett meddelande M framställer A kvantiteten X = E b (D a (M)) som sänds till B. D a garanterar äktheten. Mottagaren B beräknar E a (D b (X) ) = E a (D b (E b (D a (M)))) = M (enligt förutsättningarna). D b garanterar konfidentialitet. I ett PKS råder naturligtvis ett matematiskt förhållande mellan E och D så att det i teorin är möjligt att härleda den ena ur den andra. Konfidentialitet/integritet säkerställs genom att det beräkningsmässigt är ogörligt att (inom rimlig tid/rimligt stort minne) praktiskt härleda den ena ur den andra. Den mycket omtalade RSA-algoritmen (från 1978) bygger på att E är "lätt" att beräkna men att D i praktiken låter sig beräknas endast via tillgång till extra information (kallas ibland fall-lucke-parameter); dvs den privata nyckeln. Metoden består av ett blockchiffer som bygger på exponentiering (modulo n) och svårigheterna att forcera genom att beräkna den diskreta logaritmen eller att faktorisera (stora) primtal. Kryptokonstruktören utgår från två stora, tex 100 siffriga, primtal p och q och bildar n = p*q. Faktorerna i n hålls hemliga medan n kan ges ut publikt. Att återvinna p och q kräver att det är möjligt att primtalsfaktorisera STORA tal. Ingen har ännu konstruerat en tillräckligt snabb metod för detta ändamål. Med givna p och q bildas φ(n) = (p - 1)*(q - 1) = antalet tal som är prima relativt n. Relationen mellan den privata och den publika nyckeln är e*d mod φ(n) = 1; dvs e*d = konst*φ(n) + 1, en ekvation som är enkel att lösa, men bara om φ(n) är given. Kryptering ges av ekvation (1). C = E (n,e) (M) = M e mod n. (1)

175 Den publika nyckeln är alltså (n,e). Klartexten uppdelas i block om log n bitar och resulterande bitsekvens tolkas som ett heltal. Dekryptering sker genom att beräkna M = D (n,d) (C) = C d mod n. (2) med den hemliga nyckeln (n,d). I beviset för att (2) inverterar (1) kan användas Eulers sats: gcd (M, n) = 1 ==> M φ(n) - 1 mod n = 1, med förutsättningen att n = p*q, där p och q är olika primtal. Noter. Forcörens möjlighet att göra kryptoanalys genom att invertera (1) är beräkningsmässigt utesluten (lika svårt som att faktorisera primtal). Exponeneten e bör vara så stor att (1) innebär en modulo-reduktion, annars kan man "lätt" bräkna e:te roten. 10.4.4. Kryptoanalys Att forcera ett chiffer eller att lyckas med kryptoanalys innebär att man tillförskansar sig kunskap om klartexten eller nyckeln tvärtemot användarnas avsikt med chiffret. Oftast är detta möjligt genom att förutsättningslöst prova alla nycklar till dess framgång nås. Med att forcera chiffer förstås dock vanligen ett tillvägagångssätt där kartext eller nyckel kan härledas med mycket mindre arbete än uttömmande nyckeprövning ('brute force'). En attack kan rikta sig mot både kryptoalgoritmen i sig med ofta också mot det sätt på vilket den används, dvs på protokollet. i. Algoritmforcering. Beroende på förutsättningarna räknar man med olika klasser av forcering. -Endast chiffer. I detta fall antas forcören bara ha tillgång till chiffer. Detta ur användarens synpunkt mest ideala fallt är knappast realistiskt. - Känd klartext. I många fall vet forcören (med stor sannaoliket) vissa par <m, c>. Forcering med känd kartext innebär att dennes uppgift är att med dessa uppskatta andra klartexter och/eller nycklar. Text som tex "login" brukar inleda många sessioner. - Vald klartext. Ibland är forcörens läge ännu mer gynnsamt. Detta kan vara för handen i tex databassystem om samtliga användare tillåts lägga in poster i systemet. Vid denna attack är det alltså möjligt för forcören att lista ut chiffer för vissa valda klartexter. - Valt chiffer. I PKS (med öppen chiffreringsnyckel) utgör detta en fjärde typ av möjlighet för kryptoanalytikern. ii. Protokollforcering. Även om en algoritm i sig förefaller svår/omöjlig att forcera är det ibland möjligt forcera användningen. Kryptologin som vetenskap består dels av kryptografi, dels av kryptoanalys; två grenar som fortlöpande tävlar med varandra. Man brukar kalla ett kryptosystem för ovilkorligt säkert om det oberoende av forcörens beräkningkapacitet motstår analys. Endast ett chiffer brukar räknas till denna klass; 'one time pad'. Många system är däremot beräkningsmässigt säkra. Egenskapen betyder att den tid det tar för forcören att lyckas överstiger den tid användarnas policy anger; tex 10 17 µsek. iii. Ett exempel. Följande är från [Kon81]: I en restaurang finns ett anslag: Red ut vad följande betyder DFOR KIBUC TECRELOHV DONSHU GEDOD LADCLIAC