FingerID - Applikation för användaridentifiering med fingeravtryck



Relevanta dokument
FINGERID APPLIKATION FÖR ANVÄNDARIDENTIFIERING MED FINGERAVTRYCK DEL II

TPFD - TestPlan Före Design BESKRIVNING AV AKTIVITETER

LEX INSTRUKTION LEX LDAP

Uppdatera Mobilus Professional till version * Filen MpUpdate.exe får inte köras när du startar denna uppdatering.

Undervisningen i ämnet mobila applikationer ska ge eleverna förutsättningar att utveckla följande:

Decentraliserad administration av gästkonton vid Karlstads universitet

FileMaker Pro 13. Använda Fjärrskrivbord med

INSTALLATIONSINSTRUKTIONER FÖR VIDA INNEHÅLL

Webbokning Windows 7,8.1 &10 Installationsmanual

Sirius II Installation och Bruksanvisning

Uppdragsbeskrivning. Paddel-appen Utmärkta kanotleder. Version 1.0 Mats Persson. Distributionslista. Namn Åtgärd Info.

Manuell installation av SQL Server 2008 R2 Express för SSF Timing

Frekvenstabell över tärningskast med C#

Nils Byström, Avd f IT och inköp. Projekt AD-design Uppsala universitet DiarieNr: UFV 2009/413. Revision 1.0 Filnamn AD skyddade personuppgifter.

Startguide för Administratör Kom igång med Microsoft Office 365

STADSLEDNINGSKONTORET SOA SDK IT-AVDELNINGEN VERSION 2.1. Läs mig först. Stockholms stad SOA-plattform. Sida 1 (5)

TDDD80 Mobila och sociala applikationer. Kursintroduktion

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Mac OS X 10.6 Snow Leopard Installationshandbok

Elisabet Stöök Konsult SAS Institute AB Copyright 2003, SAS Institute Inc. All rights reserved.

Datum Den första bilden i installationsprogrammet visar vilken version det är. Klicka på Nästa eller tryck Enter för att fortsätta.

Microsoft Operations Manager 2005

GPDR personuppgifter i Artologik EZbooking

JavaRats. Kravspecifikation. Version 1.1. Gustav Skoglund Marcus Widblom Senast ändrad: 13 / 05 / 08

Webservice & ERP-Integration Rapport

Nyckelbrickshantering

Installationsanvisningar VisiWeb. Ansvarig: Visi Closetalk AB Version: 2.3 Datum: Mottagare: Visi Web kund

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

PUBLICERINGSNOTISER TRIMBLE ACCESS SOFTWARE. Version Revidering A December 2013

Uppdragsbeskrivning. Närvaruappen. Version 1.0 Mats Persson. vakant

Manual Komma igång med Softphone-klient

AVCAD 4.0 för Windows

Användarhandbok. Trio Visit Web. Trio Enterprise 4.1

Quick Start CABAS. Generella systemkrav CABAS / CAB Plan. Kommunikation. Säkerhet

Administrationsmanual ImageBank 2

Föreläsning 11. Giriga algoritmer

Kursplanering Objektorienterad programmering

Mobilus får inte användas under tiden uppdateringen genomförs.

7 Mamut Client Manager

Pulsmätare med varningsindikatorer

Flexi Exchange Connector. Copyright Datatal AB. Med ensamrätt. Copyright 2013 Datatal AB. All rights reserved.

Krav: * Filen MpUpdate.exe får inte köras när du startar denna uppdatering.

Elsmart Användarmanual Nätanmälan för Installatörer

Quickstart manual. Rev SHTOOL Quickstart manual Smart-House

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

Administrationsmanual ImageBank 2

Webbtjänster med API er

Objektorienterad programmering Föreläsning 2

Användardokumentation för CuMaP-PC. Fleranvändarsystem och behörigheter

Boss installationsmanual förberedelser

Sänk kostnaderna genom a/ ställa rä/ krav och testa effektivt

Anslut till fjärr-whiteboard

1DV416 Windowsadministration I, 7.5hp MODULE 3 ACTIVE DIRECTORY

SNABBGUIDE för studenter windows. Utskriftshantering, Kopiering och Scanning

Med den här boken får du: Författaren:

Installationsinstruktion med rekommenderade inställningar Extern Uppkoppling med SITHS-Kort mot Landstinget Västmanland

Active Directory Self-Service Bundle

Concept Selection Chaper 7

Primus Vägledning för massimport av bilder. Primus 5.6.4

Styrteknik 7.5 hp distans: E-1000 och E-Designer

Säkerhet Användarhandbok

FileMaker. Köra FileMaker Pro 10 på Terminal Services

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Creo Customization. Lars Björs

Kontorsinstallation av SDCs insändningsprogram Sender för filer från skördare, skotare eller drivare

Definition DVG A06. Varför operativsystem? Operativsystem. Översikt. - Vad är ett operativsystem?

Snabbguide för användare SourceTech Telllus

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

BRUKSANVISNING FÖR NÄTVERKSANVÄNDARE

TDDD80 Mobila och sociala applikationer. Kursintroduktion

Författare Version Datum. Visi System AB

TST8102 WEBCM BRUKSANVISNING

Innehåll. Dokumentet gäller från och med version

Akzo Nobel AB. Användarguide - FAQ Externa användare. Sök jobb hos Akzo Nobel i vårt Rekryteringssystem

Metoder och verktyg för funktionssäkerhet

FileMaker Pro 11. Köra FileMaker Pro 11 på Citrix XenApp

Installationsanvisning Boss delad databas

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Cargolog Impact Recorder System

BioLock Fingeravtryckslås

REGION SKÅNE VDI KLIENTINSTALLATION

Skapa ett paket av TI-Nspire programvara med Microsoft SMS 2003

Telia Centrex IP Administratörswebb Handbok

Uppdatera Mobilus Professional till version * Filen MpUpdate.exe får inte köras när du startar denna uppdatering.

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Säkerhet Användarhandbok

Tillsyn enligt personuppgiftslagen (1998:204) användning av biometri inom arbetslivet

Windows Forms Winstrand Development

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

Small Business Server 2011 SSL certifikat administration

Installationsanvisningar

Transkript:

Examensarbete 20 poäng D-nivå FingerID - Applikation för användaridentifiering med fingeravtryck Reg.kod: Oru-Te-EXA089-D108/03 Daniel Johansson och Daniel Hammarin Magisterprogrammet i datateknik 160 p Örebro höstterminen 2003 Examinator: Lars Karlsson Handledare: Thomas Padron McCarthy FINGERID APPLICATION FOR USER IDENTIFICATION FROM FINGERPRINTS Örebro universitet Örebro University Institutionen för teknik Department of technology 701 82 Örebro SE-701 82 Örebro, Sweden

SAMMANFATTNING Legosan AB tillverkar naturläkemedel och kosttillskott och önskar avlägsna pappershantering från tillverkningsprocessen. Detta är anledningen till att detta projekt initierats. Tillverkningsprocessen sker maskinellt men varje tillverkningsomgång genererar ett antal dokument som granskas av kvalitetsavdelningen innan paketering och skeppning. Idag identifieras och verifieras operatörer med en handskriven signatur med bläckpenna på processdokumentationen. Operatören måste även anteckna datum och eventuellt klockslag vid signeringen. Eftersom produktionen sker under mycket stränga krav på sanitet är förekomsten av dokument och pennor i produktionen en ovälkommen riskkälla. Istället önskas ett system som kan identifiera användaren på ett säkert sätt via biometrisk information. Denna rapport presenterar resultatet av en utredning av möjligheterna att använda fingeravtryck för identifiering av operatören och konstruktionen av en applikation för detta. ABSTRACT Legosan AB manufactures natural remedies and nutritional supplements and wishes to remove any handling of papers from their manufacturing process. That is why this project was initiated. The manufacturing process is mechanical but each manufactured batch generates a number of documents that is reviewed by the department for quality assurance before packaging and shipping. Today the machine operators is identified and verified through a hand written signature with an ink pen on the process documentation. Since the production is under very strict sanitary regulations the presence of documents and pens are unwelcome sanitary hazards. A system that can identify an operator through his or hers biometric information is therefore preferable. This report presents the result of an inquiry of the possibilities to use fingerprints to identify the operator, and the construction of an application for this.

FÖRORD Denna rapport är en del av vårt avslutande examensarbete för en 160 poängs Magisterexamen i Datateknik vid Örebro Universitet. Examensarbetet omfattade 20 poäng och har utförts vid Legosan AB i Kumla under höstterminen 2003. För vår personliga del har projektet gett oss utökade kunskaper inom programmering och projekthantering. Vi har också fått möjlighet att arbeta med Visual Studio, Windows Server 2003, Active Directory Services Interface, Visual Basic for Applications och spännande teknologi i form av fingeravtryckläsare från Fingerprint Cards AB. Vi vill passa på att tacka följande personer: Fredrik Wiklund, vår handledare och uppdragsgivare på Legosan AB för hans entusiasm och goda idéer. Jonas Salomonsson, applikations- och mjukvaruingenjör på Fingerprint Cards AB för hans utmärkta support under programmeringsarbetet. Thomas Padron-McCarthy, vår handledare på Örebro Universitet. Vi vill också passa på att önska Rickard Israelsson lycka till med sitt examensarbete då han nu fortsätter att vidareutveckla och förbättra systemet.

INNEHÅLLSFÖRTECKNING 1 INLEDNING... 5 1.1 Legosan AB... 5 1.2 Mål... 5 1.3 Terminologi... 6 2 UTREDNING... 7 2.1 Fingeravtryck och Biometri i allmänhet... 7 2.1.1 Allmänt om biometri... 7 2.1.2 Om fingeravtryck... 7 2.1.3 Terminologi - Biometri... 8 2.2 Lämpliga fingeravtryckläsare... 9 2.2.1 Krav på fingeravtryckläsaren och utvecklingspaket... 9 2.2.2 Företag och produkter...11 2.2.2.1 Identix Inc...11 2.2.2.2 Precise Biometrics AB...12 2.2.2.3 Fingerprint Cards AB...13 2.2.3 Slutsats...14 2.3 Datainspektionen...15 2.4 Riskanalys...16 3 VERKTYG OCH METODER...17 3.1 FPC 6410 Development Kit...17 3.1.1 Fingeravtryckläsaren...17 3.1.2 Algoritmer...18 3.1.3 BioAPI...20 3.1.4 Biometric Information Record BIR...20 3.1.5 FPCore API...20 3.2 Windows Server 2003 med Active Directory...21 3.3 Visual C++ 6.0...21 3.4 iscala 2.2...21 3.5 Dokumentation...22 3.5.1 Aktivitetsbeskrivning...23 4 IMPLEMENTERING...25 4.1 Applikationsdesign...25 4.2 FingerID...26 4.2.1 Funktion...26 4.2.2 Design...27 4.2.2.1 CReader...27 4.2.2.2 CADUser...28 4.3 FingerIDAdmin...30 4.3.1 Funktion...30 4.3.2 Design...32 4.3.2.1 CReader...33 4.3.2.2 CADUser...34 4.3.2.3 CStats...36 4.4 Koppling till iscala 2.2...37 5 RESULTAT...38 6 MÖJLIGA FÖRBÄTTRINGAR...40 7 REFERENSER...42 7.1 Litteratur och skrifter...42 7.2 Webbplatser...43

1 INLEDNING Detta avsnitt ska ge en bakgrund till varför projektet startades, vilka mål som satts upp samt ge en enkel förklaring till den terminologi som används i rapporten. 1.1 Legosan AB Legosan AB finns i Kumla och har cirka 20 anställda. Legosan AB tillverkar naturläkemedel och kosttillskott, företaget har funnits sedan mitten av 1980-talet. 1997 blev Legosan AB certifierade för läkemedelsproduktion av Svenska Läkemedelsverket. De produkter som tillverkas består i huvudsak av tabletter som paketeras i burkar eller blisterförpackningar. Kunderna finns främst i Skandinavien. I lager hålls över 300 råvaror. En produkt består av allt från 3-4 råvaror till upp mot 40 stycken. Tillverkningsprocessen består av 4-7 delmoment. Tillverkningsprocessen sker med hjälp av moderna maskiner främst från Tyskland. Metoderna som används är pappersbundna vilket Legosan AB håller på att avlägsna. Alla dokument som produceras i fabriken är knutna till en tillverkningsomgång och granskas av kvalitetsavdelningen innan paketering och skeppning. Processen och rutinerna är utformade för att passa gällande regler, GMP (Good Manufactoring Practice). 1.2 Mål Att pappersdokument hanteras i tillverkningsprocessen är en sanitetsrisk. Därför önskar Legosan AB avlägsna detta. Legosan AB önskar en lösning på verifierings- och identifieringsproblemet. En tänkbar lösning kan vara att använda biometrisk information för identifiering och verifiering. De existerande verifieringssystem baserade på fingeravtryck som Legosan AB undersökt har fungerat så att man efter inloggning med användarnamn använder fingeravtrycket endast för verifiering. Tanken är att det nya systemet ska identifiera användaren så att en inloggning med användarnamn ej är nödvändig. Uppdraget består av följande punkter. Utred de existerande tekniker som finns för identifiering med hjälp av fingeravtryck och vilka tillverkare som tillhandahåller utvecklingspaket (SDK) till sina produkter. Utveckla en applikation efter Legosan AB:s behov med hjälp av den produkt och den SDK som visar sig vara mest lämpad. Utred om det är möjligt att identifiera ett fingeravtryck i arbetsmiljön i vilken individen arbetar, med avseende på pulver och diverse små partiklar som kan fastna på fingrarna. Koppla samman identifieringsapplikationen med företagets affärssystem. Daniel Johansson & Daniel Hammarin Sidan 5 av 43

Önskad dokumentation. Arbetet ska dokumenteras noggrant på det sätt som Legosan AB önskar utifrån Läkemedelsverkets riktlinjer. Dokumentation av systemets säkerhet och utred möjligheten till intrång. Utred Läkemedelsverket och fackets synpunkter på att lagra anställdas fingeravtryck. 1.3 Terminologi Verifiering (1:1-matchning) Jämförelse mot ett enskilt lagrat fingeravtryck. Kräver någon form av användarnamn eller inloggning. Identifiering (1:N-matchning) Jämförelse mot flera lagrade fingeravtryck. Kräver inte någon form av användarnamn eller inloggning. Identifiering (1:FEW-matchning) Jämförelse mot ett fåtal lagrade fingeravtryck. Genomför upprepad verifiering mot alla användare. Kräver inte någon form av användarnamn eller inloggning. SDK Software Development Kit, utvecklingspaket för mjukvara. API Application Programming Interface, En samling funktioner som används för att programmera mot en komponent, applikation eller operativsystem. ESD Electro Static Discharge, Statisk urladdning. ASIC Application Specific Integrated Circuit, en integrerad krets som har skapats för ett visst ändamål. USB Universal Serial Bus är ett gränssnitt för att ansluta yttre enheter till en dator. Både data och ström skickas i en USB-kabel. GUI Graphical User Interface, grafiskt användargränssnitt Daniel Johansson & Daniel Hammarin Sidan 6 av 43

2 UTREDNING Detta avsnitt presenterar de utredningar som gjorts i projektets inledningsfas. Avsnittet är också tänkt att ge en kort introduktion till ämnet Biometri och då främst fingeravtryck. 2.1 Fingeravtryck och Biometri i allmänhet 2.1.1 Allmänt om biometri Informationen om biometri och fingeravtryck här är bland annat hämtad från Bioidentification FAQ [19]. För den som vill fördjupa sig finns det mycket litteratur i ämnet, t.ex. "Biometrics" [9] och Automatic Fingerprint Recognition Systems [10]. Med biometrisk identifiering menas att en person identifierar sig genom sin kropp. Det kan till exempel vara via fingeravtryck eller avläsning av näthinnan. Kravet är att det ska vara en del av kroppen som är unik för varje individ. Det finns mer än 10 olika tekniker som är baserade på biometriska system vilka kan användas vid identifiering. Fysiska metoder: Irisigenkänning Hornhinneigenkänning Venmönster Ansiktsigenkänning Handgeometri eller fingergeometri Fingeravtrycksigenkänning Ytterligare metoder för att igenkänning kan vara olika typer av uppförande som rytmer i tangentbordstryckningar, röstigenkänning eller via en skriven signatur. För att kunna identifiera en person med någon av dessa metoder måste det givetvis finnas något att jämföra med. När man sparar en profil, eller schablon som det också kallas, innehållande biometrisk information så kallas det "enrollment". Detta görs ofta flera gånger för att kunna identifiera en person med en viss felmarginal. Då identifieringen genomförs jämförs den information som är sparad i profilen (schablonen) med den information som skickas in i systemet. En viss felmarginal mellan profilen och det som skickas in godtas. Om felmarginalen är för stor blir inte personen accepterad. Sannolikheten att en person blir felaktigt avvisad kallas för "False Reject Rate"(FRR) och sannolikheten för att en person blir felaktigt accepterad "False Accept Rate" (FAR). Det gäller att få dessa två värden så små som möjligt för att systemet ska bli bra. 2.1.2 Om fingeravtryck Skinnet på undersidan av ett finger är täckt med ett mönster av toppar och dalar. Dessa toppar och dalar anses som unika för varje individ. Daniel Johansson & Daniel Hammarin Sidan 7 av 43

En del fingeravtryckläsare jämför med hela fingeravtrycket som en bild och en del jämför olika specifika drag i mönstret av toppar och dalar. Dessa specifika detaljer består av linjer som slutar och linjer som delar sig. Dessa olika detaljer kallas minutiae-punkter. Ett fingeravtryck består av cirka 100 minutiae-punkter men den yta som vanligtvis läses in innehåller cirka 30-40 punkter. Figur 1 Minutiae-punkter Det finns i huvudsak 5 stycken olika typer av läsare för fingeravtryck. Dessa är: Optisk sensor med CCD eller CMOS kamera Ultraljudssensor Elektrisk ytsensor Kapacitiv sensor Temperatursensor 2.1.3 Terminologi - Biometri Schablon (eng. template) Unik matematiskt beskrivning av en persons biometriska egenskaper. Enroll Inregistrering av en persons biometriska egenskaper och skapar en schablon. False Acceptance Rate (FAR) Den frekvens med vilken icke godkända personer blir accepterade som godkända. Eftersom feltoleransen ofta kan leda till fel så kan man säga att FAR är ett mått på hur säker inläsningen är. False Rejection Rate (FRR) Daniel Johansson & Daniel Hammarin Sidan 8 av 43

Den frekvens med vilken en godkänd person blir avvisad. FRR kan ses som ett mått på bekvämlighet. Failure To Enroll rate (FTE, även FER (Failure Enroll Rate)) Den frekvens med vilken personer misslyckas att bli inregistrerade. False Identification Rate (FIR) Den frekvens med vilken en person identifieras som en annan. False Match Rate (FMR) Andelen ej godkända personer som blir felaktigt identifierade. Det som skiljer FMR från FAR är att FAR inte tar hänsyn till dålig inläsning vilket FMR gör. False Non-Match Rate (FNMR) Andelen godkända personer som blir felaktigt identifierade eller inte blir identifierade alls. Det som skiljer FNMR från FRR är att FRR inte tar hänsyn till dålig inläsning vilket FNMR gör. 2.2 Lämpliga fingeravtryckläsare 2.2.1 Krav på fingeravtryckläsaren och utvecklingspaket 1:N identifiering Det var ett krav från Legosan AB att användaren ej ska behöva ange användarnamn och sedan genomföra 1:1-verifiering. Därför önskades en läsare och algoritm som kan genomföra 1:Nidentifiering. 1:N-identifiering är dock inte lika säker och snabb som 1:1-verifiering. Säkerheten i 1:N-matchning beräknades dock vara tillräcklig för Legosan AB:s behov. Läsaren ska gå att göra rent på ett smidigt sätt Produktionsmiljön innehåller partiklar av fint pulver som lätt kan fastna på fingrar och på läsaren. Det var därför önskvärt att personalen ska kunna göra rent läsaren på ett smidigt sätt. USB-interface PC-terminalerna har tillgång till USB och det skulle därför vara smidigt att använda sig av dessa då de även förser fingeravläsaren med ström. Snabb inläsning och identifieringsprocess Önskad tid för inläsning och identifiering ligger runt 1 sekund. Om det tar längre tid finns det risk för att systemet känns segt. Eftersom identifiering ska ske relativt ofta är det viktigt att system inte känns segt. Kapacitiv läsare Det finns kapacitiva och optiska läsare. Den kapacitiva läsaren försvårar falska inloggningar eftersom den till skillnad från en optisk läsare reagerar på elektriska signaler istället för en bild. Kompatibla med BioAPI Läsarna och tillhörande algoritmer ska vara kompatibla med BioAPI, den API som är standard för applikationer inom biometri. Daniel Johansson & Daniel Hammarin Sidan 9 av 43

Daniel Johansson & Daniel Hammarin Sidan 10 av 43

2.2.2 Företag och produkter En undersökning av marknaden för fingeravtryckläsare visade på följande lämpliga företag: Identix Inc. Precise Biometrics AB Fingerprint Cards AB 2.2.2.1 Identix Inc. Identix Inc. [15] erbjuder ett BioEngine Developer s Kit till användare som vill skriva egna applikationer. Utvecklingspaketet ger tillgång till algoritmer för så väl 1:1-verifiering som 1:N-identifiering samt exempelkod för flertalet programmeringsspråk. DFR 2080 DFR 2080 använder en optisk sensor. DFR är stor och robust och passar bra för industriellt bruk. Läsaren har USB-interface. Figur 2 DFR 2080 BioTouch USB 200 BioTouch USB 200 använder även den en optisk sensor. Läsaren är liten och behändig och anpassad för bruk med PC, Laptop eller terminaler. Läsaren har USB-interface. Figur 3 BioTouch USB 200 Daniel Johansson & Daniel Hammarin Sidan 11 av 43

2.2.2.2 Precise Biometrics AB Precise Biometrics AB [16] kan leverera två stycken utvecklingspaket. Precise BioMatch Standard Toolkit och Precise BioMatch Pro Toolkit. Dessa toolkit ger tillgång till BioMatch -algoritmen, testverktyg och exempel på hur man kan använda sig av algoritmen i form av C-kod. Dessa kit innehåller dock inte några fingeravtryckläsare. Algoritmen som Precise Biometrics AB tillhandahåller lämpar sig inte för 1:N-identifiering, högst 1:FEW-identifiering. Precise 100 A Precise 100 A är en kapacitiv areasensor som fungerar genom att användaren applicerar sitt finger på sensorn. Enligt Precise Biometrics AB sker inläsningen i realtid. Läsaren är liten, behändig och lämplig att använda tillsammans med PC, laptop eller en terminal. Läsaren har USB-interface. Figur 4 Precise 100 A Daniel Johansson & Daniel Hammarin Sidan 12 av 43

2.2.2.3 Fingerprint Cards AB Fingerprint Cards AB [14] kan levererar tre olika algoritmer för matchning av fingeravtryck. Fingerprint Cards AB erbjuder två utvecklingspaket, FPC6410 (för area sensor) och FPC6430 (för swipe sensor). Dessa innehåller sensor, manual, algoritmer samt olika exempel på C-kod. Dessa paket är speciellt framtagna till kunder som vill skriva egna applikationer och som vill göra prototyper. Fingerprint Cards AB:s båda läsare är kapacitiva, små, och lämpliga för användning tillsammans med en PC, laptop eller terminal. Läsarna har ett tjockare skydd över sensorn än andra tillverkares sensorer som gör den mindre känslig för statiska urladdningar och lätt att göra ren. FPC1010 area sensor Till den FPC1010 area sensor finns det en algoritm för 1:1-verifiering och en algoritm för 1:N-identifiering. Inläsningen sker genom att användaren placerar fingret på sensorn. Läsaren har USB-interface. Figur 5 FPC1010 Area Sensor FPC1030 Swipe Sensor Till FPC1030 Swipe Sensor finns det endast en algoritm för 1:1-verifiering. Inläsningen sker genom att drar fingret över sensorn. Läsaren har USB-interface. Figur 6 FPC1030 Swipe Sensor Daniel Johansson & Daniel Hammarin Sidan 13 av 43

2.2.3 Slutsats Efter behandling av den insamlade informationen har följande slutsats nåtts. Identix Inc. erbjuder ett bra utvecklingspaket samt en robust läsare. Det som talar mot Identix Inc. är det höga priset på utvecklingspaketet och det faktum att läsaren har en optisk sensor. Det anses lättare att lura en optisk sensor med ett falskt fingeravtryck. Den optiska sensorn har dock en fördel i och med att den är mindre känslig för statisk elektricitet. Ytterligare en nackdel är att företaget finns i USA och den svenska återförsäljaren inte är inriktad mot fingeravtryck. Det innebär svårigheter att få bra support under utvecklingen. Detta gör att Identix Inc:s lösning inte ansågs lämplig för projektet. Precise Biometrics AB erbjuder en mycket smidig läsare som är bland de minsta på marknaden. Utvecklingspaketet erbjuder dock ingen algoritm för 1:N-identifiering utan i vissa fall bara 1:FEW-identifiering. Supporten från Precise Biometrics AB är god. Vid samtal med Precise Biometrics AB visade det sig att 1:N-identifiering kunde bli svår att genomföra med deras algoritm och de rekommenderade inte den lösningen. Osäkerhet beträffande 1:N-identifiering gör att Precise Biometrics AB:s lösning inte ansågs lämplig för projektet. Fingerprint Cards AB erbjuder 2 stycken läsare som är smidiga och robusta. De erbjuder även ett bra utvecklingspaket och har en algoritm för 1:N-identifiering. Supporten från Fingerprint Cards AB är mycket god. Vid samtal med Fingerprint Cards AB visade det sig att swipe sensorn inte rekommenderades för 1:N-identifiering. Area sensorn är den produkt som kan hantera 1:N-identifiering. För projektet ansågs Fingerprint Cards AB:s FPC 6410 utvecklingspaket vara mest lämpligt. Daniel Johansson & Daniel Hammarin Sidan 14 av 43

2.3 Datainspektionen Datainspektionen är den myndighet som är ansvarig för personuppgifter, vilket fingeravtryck räknas till. Datainspektionen tillhandahåller ett flertal informationsskrifter som berör ämnet. Dessa är: Datainspektionens informationsmaterial: Information till registrerade enligt personuppgiftslagen [6] Datainspektionens informationsmaterial: Säkerhet för personuppgifter [6] Datainspektionen informerar: Personuppgifter i arbetslivet [5] Datainspektionen informerar: Samtycke enligt personuppgiftslagen [5] Datainspektionen informerar: Intresseavvägning enligt personuppgiftslagen [5] Eftersom Legosan AB är ett företag som behöver en relativt hög säkerhetsnivå i produktionen så behövs ej de anställdas samtycke, men de bör informeras. Systemet ska användas av anställda som redan har identifierats vid ingången med passerkort eller dylikt. Detta medför att ett begränsat antal individer kommer ha tillgång till systemet. Fingeravtryck är personuppgifter som ska lagras på ett säkert ställe. De schablonfiler som lagrar fingeravtrycket består inte av en bild och kan därför inte återskapa ett fingeravtryck. Datainspektionen tillhandahöll så pass bra information angående dessa frågor, vilket medförde att Läkemedelsverket och facket inte var nödvändiga att kontakta. Daniel Johansson & Daniel Hammarin Sidan 15 av 43

2.4 Riskanalys För nuvarande arbetar flera operatörer med att fylla i kontrolluppgifter i affärssystemet vid samma klient vid olika hållpunkter i produktionen. Ingen in- och utloggning sker utan alla operatörer arbetar med samma användarkonto. När kontrolluppgifterna sparas i databasen skrivs processdokumentationen ut och signeras av operatören med en bläckpenna. Denna signatur är således det enda som bevisar vilken operatör som tillverkat en viss sats av produkten. Med det färdiga systemet FingerID kommer operatörerna fortfarande jobba med ett gemensamt användarkonto vid samma klient men de utskrivna dokumenten kommer att ersättas av ett fält i affärssystemet som endast kan fyllas i av FingerID efter en godkänd identifiering när kontrolluppgifterna ska sparas i databasen. Denna identifiering kommer då att vara bevis för vilken operatör som tillverkat satsen. Det finns en viss risk att fingeravtryckläsaren felaktigt identifierar en operatör, d.v.s. operatören identifieras som en annan person. I tester har risken uppmäts till 1 på 10 000 försök (0.01%). Vidare information om identifieringens säkerhet presenteras i avsnitt 3.1.2. Ett tänkbart riskscenario är då att det inte är möjligt att till 100 % säkerställa att det är den identifierade operatören som verkligen sparat kontrolluppgifterna i databasen. Detta skulle kunna orsaka problem om ansvar ska utkrävas av en operatör för felaktigheter i en produkt eller dylikt. Den identifierade operatören kan då peka på osäkerheten i identifieringen och på så sätt hävda sin oskuld. Ovanstående scenario kräver att FingerID felaktigt identifierar operatören samt att denne är oärlig nog att spara kontrolluppgifterna i databasen under felaktigt namn. Ett system med identifiering med hjälp av fingeravtryck får därför anses betydligt säkrare än det nuvarande systemet med en handskriven signatur då en signatur med relativ lätthet kan förfalskas. Det är även möjligt att tillverka ett syntetiskt finger och på så sätt lura fingeravtryckläsaren. En kapacitiv fingeravtryckläsare anses dock vara svår att lura då den utnyttjar det mänskliga fingrets förmåga att leda svaga strömmar. Att lura en kapacitiv fingeravtryckläsare kräver således tillgång till en avgjutning av en operatörs finger och ett mycket avancerat syntetiskt finger. FingerID kan även misslyckas helt med att identifiera en operatör. I tester har risken för detta uppmäts till 5 på 100 försök (5 %) samt 1 på 100 försök (1 %) om operatören får försöka två gånger. Därmed finns det en risk att en operatör inte lyckas att identifiera sig och då av lathet ber någon annan att utföra identifiering istället. Detta kan leda till att fel operatör står som ansvarig för produkten. Att en helt utomstående person skulle kunna ta sig in i produktionen och spara information i databasen anses vara mycket liten då en passerkontroll sker vid tillträde till produktionsmiljön. De risker som framkommit under arbetet med FingerID anses av Legosan AB vara godtagbara och införandet av FingerID i produktionen anses ge en högre säkerhetsnivå än nuläget. Daniel Johansson & Daniel Hammarin Sidan 16 av 43

3 VERKTYG OCH METODER Detta avsnitt ger en beskrivning av de verktyg och metoder som använts i projektet. FPC 6410 Development Kit Utvecklingspaket från Fingerprint Cards AB som innehåller hårdvara och algoritmer för inläsning och identifiering av fingeravtryck. Windows Server 2003 Den serverprogramvara som Legosan AB använder. Visual C++ 6.0 Det utvecklingsverktyg som använts för projektet. iscala 2.2 Det affärssystem som Legosan AB använder. PPFD-metoden Den metod för programvaruutveckling som använts i projektet. 3.1 FPC 6410 Development Kit Det utvecklingspaket som beställdes från Fingerprint Cards AB innehåller följande komponenter: 1 st. fingeravtryckläsare bestående av: FPC1010 Area Sensor, ASIC FPC2000 processor, ARM7 mikrocontroller för USB eller seriell kommunikationskabel. 1 st. CD innehållande FPC4010 Area Verification Algorithm, FPC4020 Area Identification Algorithm, mjukvara, dokumentation och exempelkod. 3.1.1 Fingeravtryckläsaren FCP1010 Area Sensor är en kapacitiv sensor och ser ut enligt bilden nedan. Figur 7 FPC1010 Area Sensor I utvecklingspaketet är sensorn monterad i ett plastskal kallad puck innehållande processorn och USB-mikrocontrollern. I slutprodukten är sensorn tänkt att vara integrerad på ett lämpligt sätt vid PC-terminalen. Under utvecklingsfasen har dock arbetet skett mot en sensor monterad i puck. Daniel Johansson & Daniel Hammarin Sidan 17 av 43

Figur 8 FPC1010 Area Sensor monterad i puck med USB-kabel En kapacitiv fingeravtryckssensor arbetar genom att mäta variationen i kapacitans över den yta som har kontakt med sensorn. En kapacitiv sensor kan skapa en korrekt 3-dimensionell bild av fingeravtryckets struktur baserad på fingertoppens elektriska egenskaper. Kapacitansen mäts genom reflektiv mätning. Reflektiv mätning är baserad på en extern stimulation av fingertoppen. Den största fördelen med reflektiv mätning är att det ger en starkare signal mellan fingertoppen och sensorn vilket tillåter att en tjockare skyddsfilm används på sensorn. Denna skyddsfilm gör att sensorn kan motstå ESD-urladdningar på 15kV och klarar att användas över 1 000 000 gånger. 3.1.2 Algoritmer Fingerprint Cards AB:s två algoritmer för verifiering och identifiering, FPC4010 Area Verification Algorithm och FPC4020 Area Identification Algorithm bygger på Distinct Area Detection Method, DAD. DAD identifierar olika minutiae-punkter. Dessa punkter tas fram från den 3-dimensionella information som den kapacitiva sensorn ger. Vissa algoritmer reducerar den 3-dimensionella informationen till 2 dimensioner innan minutiae-punkter tas fram men algoritmen från Fingerprint Cards AB jobbar direkt på den 3- dimensionella informationen. Minutiae-punkterna bildar tillsammans med sina inbördes geometriska förhållanden en unik matematisk beskrivning av fingeravtrycket. Fingerprint Cards algoritmer för verifiering och identifiering innehåller båda en del för inregistrering av fingeravtryck. Vid inregistrering skapas en schablon av den unika matematiska beskrivning som DAD-algoritmen tar fram. Denna schablon sparas på BIR-format (se kapitel 3.1.4). Vid verifiering används denna schablon som en operator på det inlästa fingeravtrycket. Om resultatet av operationen är lyckat så anses verifieringen vara lyckad. Vid verifiering är det vanligt att det inlästa fingeravtrycket omvandlas till en schablon som jämförs med den schablon som är lagrad för användaren. Detta innebär en viss säkerhetsrisk Daniel Johansson & Daniel Hammarin Sidan 18 av 43

då det är möjligt att lura systemet genom att låta verifieringen ske mot en fabricerad schablon istället för den som skapats från sensorns inlästa data. Fingerprint Cards AB:s verifieringsalgoritm eliminerar denna säkerhetsrisk genom att verifieringsalgoritmen arbetar direkt på den inlästa fingeravtrycksdatan, d.v.s. algoritmen letar direkt på fingeravtrycket efter de minutiae-punkter som den lagrade schablonen beskriver. Vid identifiering gås alla lagrade schabloner igenom och en lista på tio stycken tänkbara kandidater tas fram. Dessa rankas från 1 till 10 varefter en verifiering körs efter rankningsordningen. När en lyckad verifiering mot en schablon i listan sker anses identifieringen vara lyckad. Tabellen nedan visar Fingerprint Cards AB:s uppgifter gällande algoritmernas säkerhet och bekvämlighet [7],[8]. FPC4010 Area Verification Algorithm FPC4020 Area Identification Algorithm FMR < 0.001 % FMR < 0.01 % FNMR1 < 3 % FNMR1 < 5 % FNMR2 < 0.5 % FNMR2 < 1 % Figur 9 Risker för felaktig verifiering och identifiering FMR False Match Rate FNMR1 False Non-Match Rate med ett försök FNMR2 False Non-Match Rate med två försök Risken att bli felaktigt verifierad är alltså 1 på 100 000 försök och risken för att blir felaktigt identifierad är 1 på 10 000 försök. Däremot är risken för att en användare inte blir verifierad 3 på 100 försök respektive 5 på 100 försök för identifiering. Risken minskar dock till 0.5 på 100 respektive 1 på 100 om användaren tillåts försöka två gånger. Denna risk har uppmätts i Fingerprint Card AB:s testlabb där ett robotfinger har utfört upprepade verifierings- och identifieringsförsök. Testerna har skett i storleksordningen miljontals försök, Jonas Salomonsson vid Fingerprint Cards AB, Muntlig kommunikation. 2004. Fingerprint Cards AB:s fingeravtryckläsare har kapacitet att utföra hela identifieringen internt i en ASIC processor men i detta projekt utförs identifieringen lokalt på den datorn till vilken fingeravtryckläsaren är kopplad. Detta ger en snabbare identifiering och bättre möjligt till att få ut mer information om identifieringen. Daniel Johansson & Daniel Hammarin Sidan 19 av 43

3.1.3 BioAPI BioAPI är ett ramverk som möjliggör åtkomst till olika biometriska enheter och funktioner genom så kallade Biometric Service Providers, BSP:er. BioAPI är en bred API som kan hantera många olika sorters BSP:er, inte bara fingeravtryckläsare. BioAPI tillhandahålls gratis av The BioAPI Consortium [13]. BioAPI finns tillgängligt för plattformarna Windows Win32, UNIX, Linux och Sun Solaris. Win32-versionen av BioAPI består av två DLL-filer. BSP:er implementeras som DLL:er som laddas av BioAPI-ramverket när olika applikationer begär dessa. BioAPI måste vara installerat på alla datorer som ska använda någon eller flera BSP:er. 3.1.4 Biometric Information Record BIR Biometrisk information som förmedlas mellan applikation och BSP sparas i en BIR Biometric Information Record. Filhuvud (standard) Biometrisk information (genomskinlig) Nyttolast (valfri) Signatur (valfri) Figur 10 Uppbyggnad, BIR En BIR består av ett filhuvud och den biometriska informationen. Nyttolasten och Signaturen är valfria. Den biometriska informationen är transparent för applikationen så att den inte förstår informationen. Informationens format specificeras i filhuvudet. I filhuvudet specificeras också för vilket ändamål som BIR:en har skapats. Möjliga ändamål är VERIFY, IDENTIFY, ENROL, ENROL_FOR_VERIFICATION_ONLY, ENROL_FOR_IDENTIFICATION_ONLY, AUDIT 3.1.5 FPCore API FPCore API är en samling C++-klasser designade för att förenkla kommunikationen mellan BioAPI och de BSP:er som Fingerprint Cards AB tillhandahåller. BioAPI-ramverket kan förmedla biometrisk information mellan applikation och BSP men det finns ingen standard för att skicka och hämta parametrar från en BSP. Därför implementerar FPCore API en sådan kommunikation som sker via Windows-registret. FPCore API finns endast tillgängligt för Windows Win32-plattformar och har inte implementerat Nyttolast eller Signatur för BIRs. Daniel Johansson & Daniel Hammarin Sidan 20 av 43

3.2 Windows Server 2003 med Active Directory Legosan använder en Windows Server 2003 som domänkontrollant i sitt interna nätverk. En domänkontrollant använder katalogtjänsten Active Directory för att hantera nätverkets resurser som t.ex. användare, användargrupper, datorer, filer och applikationer. De användare som ska vara tillgängliga för FingerID-systemet måste vara medlemmar av en speciell användargrupp. FingerID-systemet är serverbaserat. Applikationer och fingeravtrycksschabloner lagras på servern. 3.3 Visual C++ 6.0 Som utvecklingsverktyg för projektet valdes Microsoft Visual C++ 6.0 då FPCore API och den exempelkod som medföljde FPC 6410 Developement Kit är anpassade för just detta. Programmering mot Active Directory har skett via interfacen IDirectorySearch och IDirectoryObject som är en del av Active Directory Services Interface (ADSI). ADSI är ett programmeringsgränssnitt som kan användas mot olika katalogtjänster som t.ex. Active Directory (AD), NDS från Novell, Exchange och Windows NT4 domäner (NTDS). ADSI är implementerat enligt Microsofts COM-standard. 3.4 iscala 2.2 iscala 2.2 utvecklas av Scala Business Solutions NV [18] och är det affärssystem som Legosan använder. Ifrån iscala 2.2 startas FingerID-systemet när användaren placerar markören i ett specifikt textfält. FingerID returnerar identiteten till textfältet. Daniel Johansson & Daniel Hammarin Sidan 21 av 43

3.5 Dokumentation Då systemet ska användas inom läkemedelstillverkning är det viktigt att det finns en dokumentation som följer de riktlinjer som läkemedelsverket lagt fram. Legosan önskade en dokumentationsform som följer Good Manufacturing Practice, GMPs riktlinjer för mjukvaruutveckling inom läkemedelstillverkning [1],[17]. GMP-modellen rekommenderar att utvecklingen innehåller följande aktiviteter: User requirements specification Verifierar PQ Performance qualification Function requirements specification Verifierar OQ Operational qualification Design requirements specification Verifierar IQ Installation qualification System implementation Figur 11 Modell över krav och validering enligt GAMP4 GMP-modellen har mycket gemensamt med metoden PPFD, ProvPlan Före Design [4], som vi studerat i kursen Programvaruutveckling och projekthantering. Systemet FingerID har därför dokumenterats enligt en något modifierad variant av PPFDmetoden. De aktiviteter som PPFD-metoden rekommenderar kan ses i figuren nedan. Daniel Johansson & Daniel Hammarin Sidan 22 av 43

Anv.krav Riskanalys Problemlista Systemkrav Konfigdok Provlogg Provplan Utprovning Mjukvaru Designspec Hårdvaru Designspec Verifiering Implementation Figur 12 PPFD-metoden, aktiviteter 3.5.1 Aktivitetsbeskrivning Användarkrav Användarkraven är de övergripande kraven på system. De ska specificeras på ett för användaren begripligt sätt. Användarkraven motsvarar User Requirements Specification i GMP-modellen. Systemkrav Användarkraven ska formuleras om och vidarebearbetas till ett systemkrav som i detalj ska specificera kraven på det system som ska tas fram. Kraven ska formuleras på ett sådant sätt att de är enkla att prova ut. Dessa krav är en utökad beskrivning av användarkraven och är främst riktade mot utvecklaren. Därför kan dessa krav upplevas mer komplicerade för användaren. Systemkraven ska vara numrerade för att förenkla utprovning. Systemkraven motsvarar Function Requirements Specification i GMP-modellen. Provplan Provplan ska tas fram i samband med systemkraven för att förbereda prov av det byggda systemet och samtidigt analysera kraven i systemkravsdokumentet. Daniel Johansson & Daniel Hammarin Sidan 23 av 43

Konfigurationsdokument Konfigurationsdokumentet ska specificera utvecklings- och målmiljö. Versionshantering och manuella rutiner ska också skrivas ner. Designdokument (Hårdvaru & Mjukvaru) Designdokumenten ska givet användar- och systemkrav specificera hur systemet ska konstrueras med avseende på hårdvara och mjukvara. Designdokumenten motsvarar Design Requirements Specification i GMP-modellen. Verifiering Granskning av att systemet har byggts enligt intentionerna i kravdokumenten och designspecifikationen. Utprovning Systemet ska provas ut enligt provplan. Provresultat ska dokumenteras i provloggar. Ickefunktionella krav som inte kan provas ut ska granskas mot det faktiska systemet. Problemlista Problemlistan ska innehålla de problem som uppkommit under projektet och inte kommer att lösas inom projekttiden. GMP-modellens tre steg av verifiering, Installation Qualification, Operational Qualification och Performance Qualification motsvaras i PPFD-metoden av Verifiering mot designdokumenten och utprovningen som kontrollerar att systemkraven uppfylls. Daniel Johansson & Daniel Hammarin Sidan 24 av 43

4 IMPLEMENTERING Detta avsnitt beskriver hur systemet FingerID har designats och implementerats. Först ges en översikt över hela systemet och sedan en funktionsbeskrivning av de två applikationerna FingerID och FingerIDAdmin. De två applikationerna beskrivs sedan ytterligare i detalj då de klasser med tillhörande funktioner som implementerats beskrivs. 4.1 Applikationsdesign Systemet FingerID är uppdelat i två delar, FingerID för identifiering och FingerIDAdmin för administration. FingerID är huvudapplikationen och den del på vilken störst fokus legat under utvecklingen. FingerID och FingerIDAdmin är helt separata applikationer. Systemöversikt iscala 2.2 Affärssystem Startar FingerID identifierar Returnerar identitet Fingeravtrycksläsare Läser in fingeravtryck FingerIDAdmin administrerar Läser schabloner Läser användarinformation Skapar schabloner Läser och skriver fingeravtrycksinformation BIR-katalog Lagrar schabloner Active Directory Innehåller användarinformation Figur 13 Systemöversikt, FingerID När en användare av Legosan AB:s affärssystem iscala 2.2 ombedes identifiera sig så startar iscala 2.2 FingerID. FingerID läser med hjälp av fingeravtryckläsaren in användarens fingeravtryck. FingerID matchar det inlästa fingeravtrycket mot de fingeravtrycksschabloner som finns lagrade i BIR-katalogen. När en korrekt matchning skett hämtar FingerID det fullständiga namnet på den användare i Active Directory som finns kopplad till den matchade schablonen. Med hjälp av FingerIDAdmin kan systemadministratören låta användare läsa in nya fingeravtryck som sparas i BIR-katalogen och kopplas till ett användarnamn i Active Directory. Daniel Johansson & Daniel Hammarin Sidan 25 av 43

4.2 FingerID FingerID-applikationen visar en dialog där användaren ombedes att lägga sitt finger på fingeravtryckläsaren. Fingeravtrycket läses in och jämförs mot lagrade fingeravtrycksschabloner. Från Active Directory hämtas den användarinformation som är kopplad till det identifierade fingeravtrycket och returneras till iscala 2.2. Figur 14 - FingerID 4.2.1 Funktion Då användaren kommer till ett specifikt fält i iscala 2.2 startar FingerID och kontaktar läsaren som är ansluten till datorn. Om inte läsaren är ansluten startar inte FingerID. Användaren ombedes placera sitt finger på fingeravtryckläsaren och inläsningen startar. Efter inläsning startar en process som börjar leta efter en matchande schablon till det inlästa fingret. Alla schabloner finns lagrade i en katalog med specifika filnamn. Om inte en matchande schablon hittas så anses identifieringen som misslyckad och användaren ges valet att göra om eller avbryta inläsningen. Om en matchande schablon hittas läser FingerID filnamnet och startar en sökning i Active Directory efter den användaren som är associerad med den aktuella schablonen. Då sökningen är klar och en användare hittats i Active Directory returneras användarinformationen till iscala 2.2. Om sökningen i Active Directory misslyckas anses identifieringen som misslyckad och användaren ges valet att göra om eller avbryta inläsningen. FingerID skriver till sist statistik på hur identifieringen lyckades eller misslyckads i en textfil. Daniel Johansson & Daniel Hammarin Sidan 26 av 43

4.2.2 Design Nedanstående stödgraf symboliserar hur de olika klasserna i FingerID hänger ihop. Läs ut beror av i den streckade pilen riktning. CFingerIDApp CFingerIDDlg CLabel CReader CADUser Figur 15 Stödgraf FingerID CFingerIDApp Startar huvuddialogen. CFingerIDDlg Dialogklass som är applikationen huvuddialog, tar hand om användarkommunikation och anropar funktioner i underliggande logikklasser. Visar också resultat av underliggande klassers funktioner. CLabel Grafikklass som ger utökad funktion för visning av text och bildmeddelanden. CReader Logikklass som tar hand om all kommunikation med fingeravtryckläsaren. Kommunicerar med läsaren via Fingerprint Cards AB:s FPCoreAPI. CADUser Logikklass som tar hand om all kommunikation med Active Directory via ADSI. Håller också reda på användarinformation, läsning och skrivning till fil samt applikationens inställningar. 4.2.2.1 CReader I logikklassen CReader finns följande funktioner: AbortReader() Avbryter inläsningen genom en event i FPCoreAPI. Capture(bool GuiActive, bool FingerPresent) Returnerar TRUE eller FALSE beroende på om inläsning av fingeravtrycket lyckas eller ej. Skickar parametrar för inläsningen till fingeravtryckläsaren via FPCoreAPI. Med parametrarna kan följande inställningar göras: Aktivera eller inaktivera Fingerprint Cards GUI för inläsning. Daniel Johansson & Daniel Hammarin Sidan 27 av 43

Aktivera eller inaktivera fingerplaceringsguide för Fingerprint Cards AB:s GUI. Aktivera eller inaktivera automatisk avstängning av Fingerprint Cards AB:s GUI efter inläsning. Aktivera eller inaktivera läsarens FingerPresent -funktion som innebär att läsaren väntar tills en tillräckligt stor del av fingret täcker läsaren innan inläsning sker. Samtliga alternativ för Fingerprint Cards AB:s GUI är inaktiverade i FingerID. Skickar ett inläsningsanrop till fingeravtryckläsaren. GetArea() Anropas då statistik skrivs i statistikfilen. Returnerar ett heltalsvärde mellan 0-5 som representerar hur stor del av fingeravtrycket som blivit inläst. 0 representerar en mycket liten area och 5 representerar en stor area. GetQuality() Anropas då statistik skrivs i statistik filen. Returnerar ett heltalsvärde mellan 0-5 som representerar fingeravtryckets kvalité med avseende på minutiae-punkter. 0 representerar en mycket låg kvalité och 5 presenterar en hög kvalitet. Identify(CString *Name, int *UserRanking, int SecurityLevel) Anropas av klassen CFingerIDDlg. Söker igenom fingeravtryckschabloner i BIR-katalogen tills en matchande schablon hittats. Sätter parametern Name till namnet på den schablon som användaren matchar mot. Sätter parametern UserRanking till den ranking som det matchande schablonen har i identifieringsalgoritmens rankinglista. Parametern SecurityLevel anger med vilken noggrannhet identifieringen ska göras och kommer från filen FingerID.ini. InitBioApi() Anropas då läsaren ska användas. Initierar BioAPI via FPCoreAPI. InitBSP() Anropas strax efter funktionen InitBioApi. Laddar tillgängliga BSP:er via FPCoreAPI så att BioAPI får tillgång till dessa. TerminateBioAPI() Anropas när en inläsning har slutförts. Laddar via FPCoreAPI ur de BSP:er som kopplats till BioAPI. Avbryter kopplingen mellan läsaren och applikationen. 4.2.2.2 CADUser I logikklassen CADUser finns följande funktioner: GetSecurityLevel() Returnerar en variabel för identifieringens noggrannhet som sätts av funktionen LoadSettings. GetUserFullName() Daniel Johansson & Daniel Hammarin Sidan 28 av 43

Anropas av klassen CFingerIDDlg. Returnerar värdet av variabeln UserFullName. LoadSettings() Anropas av klassen CFingerIDDlg. Läser inställningar från filen FingerID.ini. Informationen sparas i variabler som används av applikationen. MatchIdentifiedUser(CString IdentifiedUserName) Anropas av klassen CFingerIDDlg efter en lyckad identifiering. Söker i Active Directory efter den användare som parametern IdentifiedUserName anger. Sätter parametern UserFullName till det fullständiga namn som denne användare har i Active Directory. SaveStatistics(CString IdentifiedUserName, int rank, int area, int quality, CString idsearchtime, CString adsearchtime) Anropas av klassen CFingerIDDlg. Sparar statistik över identifieringsförsöket i filen statistik.log. Den statistik som sparas är Användarnamn (IdentifiedUserName) Ranking (rank) Area (area) Kvalité (quality) Tid för ID-sökning (idsearchtime) Tid för Active Directory-sökning (adsearchtime) Datum och tid för identifieringsförsöket I de fall som identifieringen misslyckas sätts Användarnamn till ett felmeddelande istället och ranking och de övriga parametrarna sätts till 0. Daniel Johansson & Daniel Hammarin Sidan 29 av 43

4.3 FingerIDAdmin FingerIDAdmin applikationen är ett administrationsverktyg för FingerID. FingerIDAdmin skapar schabloner som associeras med den användare som är markerad i applikationen. Applikationen hämtar användare från Active Directory som är medlemmar i en specifik grupp. I FingerIDAdmin kan statistik från FingerID avläsas. Figur 16 - FingerIDAdmin 4.3.1 Funktion FingerIDAdmin används av systemadministratören för att göra inställningar för FingerID, ta del av statistik över systemet samt för att lägga till eller ta bort fingeravtryck för användare. Vid programstart kontaktar FingerIDAdmin Active Directory och listar användarnamnen på samtliga medlemmar i användargruppen för FingerID-systemet. Användarinformation för varje enskild användare presenteras när dessa markeras i listan. Information om vilka fingeravtryck som varje användare har lagrade visas också. En användare kan ha upp till sex stycken fingeravtryck lagrade, ett för pekfingret, långfingret och ringfingret på varje hand. Daniel Johansson & Daniel Hammarin Sidan 30 av 43

Då administratören väljer att lägga till ett fingeravtryck till en användare visas en dialog som är en utökad version av applikationen FingerIDs GUI. Det inlästa fingeravtrycket måste vara av bestämd kvalitet innan det kan sparas. När ett fingeravtryck sparas så skapas en fingeravtrycksschablon i BIR-katalogen. Filnamnet anger till vilken användare och finger avtrycket tillhör. Filnamnet skrivs på formen användarnamn;000001.bir där 000001 anger höger ringfinger, 000010 anger höger långfinger osv. I Active Directory uppdateras informationen om vilka fingeravtryck användaren har lagrade. När ett fingeravtrycks tas bort så tas filen bort och fingeravtrycksinformationen i Active Directory uppdateras. Administratören kan låta en användare verifiera sig mot de lagrade fingeravtrycken för att kontrollera att användaren kan identifiera sig på ett korrekt sätt. Verifiering sker enbart mot den fingeravtrycksschablon som representerar ett specifikt finger för en specifik användare. De inställningar som administratören kan göra för FingerID är att ställa in noggrannheten för identifieringen och att kräva godkännande efter identifiering för olika användare. FingerIDAdmin kan visa den statistik som FingerID skriver efter varje identifieringsförsök. Detta görs i en statistikdialog som listar följande: För varje användare: Antal identifieringar Genomsnittlig ranking Genomsnittlig inläst area Genomsnittlig kvalitet på inläsning Genomsnittlig tid för ID-sökning Genomsnittlig tid för Active Directory-sökning Datum och tid för senaste identifiering Vidare så visas statistik över fel som har inträffat. Fel som det förs statistik över: Kunde ej hämta data från läsaren Kunde ej kontakta Active Directory Misslyckad identifiering Statistiken kan sparas för senare visning i en textfil av typen *.log. Daniel Johansson & Daniel Hammarin Sidan 31 av 43

4.3.2 Design Nedanstående stödgraf symboliserar hur de olika klasserna i FingerIDAdmin hänger ihop. Läs ut beror av i den streckade pilen riktning. CFingerIDAdminApp CFingerIDAdminDlg CVerifyDlg CFingerIDDlg CAboutDlg CSecurityDlg CStatsDlg CADUser CStats CReader CSortlistCrtl CSortHeaderCtrl CLabel Figur 17 Stödgraf FingerIDAdmin CFingerIDAdminApp Startar huvuddialogen. CFingerIDAdminDlg Dialogklass som är applikationens huvuddialog, tar hand om användarkommunikation och anropar funktioner i underliggande dialog- och logikklasser. Visar även resultat av underliggande klassers funktioner. CAboutDlg Dialogklass som visar information om applikationen. CVerifyDlg Dialogklass som tar hand om användarkommunikation vid verifiering. CSecurityDlg Dialogklass som tar hand om användarkommunikation vid justering av säkerhetsnivå vid identifiering. Daniel Johansson & Daniel Hammarin Sidan 32 av 43

CFingerIDDlg Dialogklass som tar hand om användarkommunikation vid registrering av nya fingeravtryck. CStatsDlg Dialogklass som visar statistik över identifieringsförsök med FingerID. CLabel Grafikklass som ger utökad funktion för visning av text och bildmeddelanden. CReader Logikklass som tar hand om all kommunikation med fingeravtryckläsaren. Kommunicerar med läsaren via FPCoreAPI som tillhandahålls av Fingerprint Cards AB. CADUser Logikklass som tar hand om all kommunikation med Active Directory via ADSI. Håller också reda på användarinformation, läsning och skrivning till fil samt applikationens inställningar. CStats Logikklass som läser och bearbetar statistikfiler. CSortListCtrl Hjälpklass som ger utökad funktion till CListCtrl. CSortHeaderCtrl Hjälpklass till CListCtrl. 4.3.2.1 CReader I logikklassen CReader finns följande funktioner: AbortReader() Anropas när inläsningen har slutförts. Avbryter inläsningen genom en event i FPCoreAPI. Capture(bool GuiActive, bool FingerPresent) Anropas av klassen CFingerIDDlg. Returnerar TRUE eller FALSE beroende på om inläsning av fingeravtrycket lyckas eller ej. Skickar parametrar för inläsningen till fingeravtryckläsaren via FPCoreAPI. Med parametrarna kan följande inställningar göras: Aktivera eller inaktivera Fingerprint Cards AB:s GUI för inläsning. Aktivera eller inaktivera fingerplaceringsguide för Fingerprint Cards AB:s GUI. Aktivera eller inaktivera automatisk avstängning av Fingerprint Cards AB:s GUI efter inläsning. Aktivera eller inaktivera läsarens FingerPresent -funktion som innebär att läsaren väntar tills en tillräckligt stor del av fingret täcker läsaren innan inläsning sker. Samtliga alternativ för Fingerprint Cards AB:s GUI är inaktiverade i FingerID. Skickar ett inläsningsanrop till fingeravtryckläsaren. CreateTemplate() Anropas då en schablon ska skapas. Skapar en schablon av den inlästa bilden från läsaren. Returnerar TRUE eller FALSE beroende på om skapandet av en schablon lyckas eller ej. GetArea() Anropas då statistik skrivs i statistik filen. Daniel Johansson & Daniel Hammarin Sidan 33 av 43

Returnerar ett heltalsvärde mellan 0-5 som representerar hur stor del av fingeravtrycket som blivit inläst. 0 representerar en mycket liten area och 5 representerar en stor area. GetQuality() Anropas då statistik skrivs i statistik filen. Returnerar ett heltalsvärde mellan 0-5 som representerar fingeravtryckets kvalité med avseende på minutiae-punkter. 0 representerar en mycket låg kvalité och 5 presenterar en hög kvalitet. InitBioApi() Anropas då läsaren ska användas. Initierar BioAPI via FPCoreAPI. InitBSP() Anropas strax efter funktionen InitBioApi. Laddar tillgängliga BSP:er via FPCoreAPI så att BioAPI får tillgång till dessa. SaveTemplate(CString UserName, CString ActiveFinger) Anropas efter att en schablon har skapats. Sparar schablonen till en BIR-fil. Returnerar TRUE eller FALSE beroende på om det gick att spara schablonen som en BIR-fil eller ej. Sparar på formen användarnamn;001000.bir. Användarnamnet är parametern UserName och 001000 är parametern ActiveFinger. TerminateBioAPI() Anropas när inläsningen slutförts. Laddar via FPCoreAPI ur de BSP:er som kopplats till BioAPI. Avbryter kopplingen mellan läsaren och applikationen. Verify(CString UserName, CString ActiveFinger) Anropas då verifiering sker. Hämtar aktuellt fingeravtryck i BIR-katalogen och jämför med det inlästa fingeravtrycket. Returnerar TRUE eller FALSE beroende på om verifieringen misslyckas eller ej. Anropar Capture. Verifiering sker mot en specifik schablon. Schablonens filnamn bildas av parametrarna UserName och ActiveFinger. Filnamnet skapas på formen användarnamn;001000.bir. Om filen inte hittas returneras FALSE. 4.3.2.2 CADUser I logikklassen CADUser finns följande funktioner: DeleteUserPrint() Anropas av klassen CFingerIDAdmin. Tar bort den fingeravtrycksschablon som är associerad med den användare och fingeravtryck som är markerade. Uppdaterar även den koden för lagrade fingeravtryck genom att anropa funktionen UpdateUserFingerCode. GetDateForLatestPrints() Anropas för att uppdatera användarinformationen i applikationens huvudfönster. Daniel Johansson & Daniel Hammarin Sidan 34 av 43

Returnerar värdet av variabeln m_dateforlatestprints som anger när en användares fingeravtryck senast las till eller togs bort. GetFingerIDUsers(CString *users) Anropas när användarlistan i applikationens huvudfönster fylls. Fyller vektorn users med användarnamnen för samtliga medlemmar i användargruppen för systemet FingerID i Active Directory. GetSecurityLevel() Anropas när dialogen för att ändra FingerIDs noggrannhet ska visas. Returnerar värdet av variabeln SecurityLevel GetUserFirstName() Anropas för att uppdatera användarinformationen i applikationens huvudfönster. Returnerar värdet av variabeln m_userfirstname som innehåller den aktuella användarens förnamn. GetUserLastName() Anropas för att uppdatera användarinformationen i applikationens huvudfönster. Returnerar värdet av variabeln m_userlastname som innehåller den aktuella användarens efternamn. GetUserLoginName() Anropas för att hämta den aktuella användarens användarnamn. Returnerar värdet av variabeln m_userloginname. LoadSettings() Anropas vid programstart. Fyller applikationens inställningsvariabler med information om namn på FingerID-systemets användargrupp, inställd noggrannhetsnivå, domännamnet för domänkontrollanten samt sökoch bindningssträngar mot Active Directory. LoadUserData(CString str) Anropas när en användare i användarlistan markeras. Söker i Active Directory's användargrupp för systemet FingerID efter en användare med det användarnamn som finns i parametern str. Fyller variablerna för den aktuella användaren. ResetUserPrints() Anropas för att uppdatera användarinformationen i applikationens huvudfönster. Nollställer variablerna för lagrade fingeravtryck för den aktuella användaren. SetSecurityLevel(int level) Anropas när administratören har ändrat noggrannhetsnivån för FingerID. Anropar i sin tur funktionen SaveSecurityLevel. Parametern level anger till vilken nivå administratören har satt noggrannhetsnivån. SaveSecurityLevel() Anropas av funktionen SetSecurityLevel Skriver den nya noggrannhetsnivån till systemets ini-fil, FingerID.ini. SetUserPrints() Anropas för att uppdatera användarinformationen i applikationens huvudfönster. Daniel Johansson & Daniel Hammarin Sidan 35 av 43

Fyller variablerna för lagrade fingeravtryck för den aktuella användaren. UpdateUserFingerCode(bool NewFinger) Anropas efter att en användares fingeravtryck lagts till eller tagits bort. Uppdaterar koden för lagrade fingeravtryck i Active Directory. Koden består av en sju tecken lång sträng där de sex första tecknen representerar användarens fingrar och markeras med 1 eller 0 beroende på om det finns ett fingeravtryck lagrat för detta finger eller inte. Det sjunde tecknet indikerar om applikationen FingerID ska kräva godkännande av användaren vid identifiering. y för att kräva godkännande, n annars. Parametern NewFinger anger om ett avtryck läggs till eller tas bort. UpdateUserFingerCodeAppendix(bool OkIdChecked) Anropas efter att administratören har angett att en användare ska lämna ett godkännande efter identifiering. Uppdaterar sista tecknet i koden för lagrade fingeravtryck i Active Directory. Parametern OkIdCheck anger om koden ska uppdateras med ett y (true) eller ett n (false). 4.3.2.3 CStats I klassen CStats finns följande funktioner: CalculateAverageTime(CString time) Anropas av funktionen LoadStatistics. Returnerar den genomsnittliga tiden för ID-sökning eller Active Directory-sökning beroende på om parametern time är ID eller AD. LoadStatistics(CString username, CString pathname) Anropas en gång för varje användare i användarlistan när en statistikfil laddas. Parametern username anger vilket användarnamn som statistiken ska räknas ihop för. Parametern pathname anger sökvägen till den statistikfil som funktionen ska läsa ifrån. Daniel Johansson & Daniel Hammarin Sidan 36 av 43

4.4 Koppling till iscala 2.2 FingerID startas när en användare av Legosan AB:s affärssystem iscala 2.2 kommer till ett speciellt textfält där användaren ska ange sin identitet. Efter att FingerID genomfört en identifiering returneras användarens namn till fältet. iscala 2.2 har stöd för VBA (Visual Basic for Applications) och med hjälp av detta kan FingerID startas från iscala 2.2. VBA-scriptet kör programmet FingerID.exe med hjälp av VBA-kommandot ShellExecute. ShellExecute låter Windows ta hand om exekveringen av programmet. VBA-scriptet lyssnar sedan på den standardutmatningsström ( stdout ) som tillhör processen FingerID.exe. FingerID skickar antingen en namnsträng eller strängen ERROR på sin stdout-ström beroende på resultatet av identifieringen. När någonting skickats ut på stdout-strömmen tar VBA-scriptet hand om detta och presenterar resultatet av identifieringen i det fält från vilket FingerID startades. VBA-scriptet låser sedan fältet så att identiteten inte kan ändras. Innan FingerID startas ändrar VBA-scriptet den nuvarande arbetskatalogen till den katalog som FingerID.exe befinner sig i. Om detta ej görs hittar inte FingerID katalogen innehållande fingeravtrycksschabloner eftersom sökvägen till denna anges relativt FingerIDs startkatalog. Då FingerID avslutas återställer VBA-scriptet arbetskatalogen till den sökväg som fanns innan FingerID exekverades. iscala 2.2 VBA-script ShellExecute stdout Windows FingerID.exe Figur 18 Koppling till iscala 2.2 Daniel Johansson & Daniel Hammarin Sidan 37 av 43

5 RESULTAT Detta avsnitt ska visa hur väl projektet lyckats nå de mål som sattes upp vid projektets start. Utred de existerande tekniker som finns för identifiering med hjälp av fingeravtryck och vilka tillverkare som tillhandahåller utvecklingspaket (SDK) till sina produkter. Utredningen blev inte så omfattande då endast ett fåtal tillverkare tillhandahåller utvecklingspaket till sina läsare. Av dessa tillhandahåller ännu färre renodlade algoritmer för identifiering. Valet föll på Fingerprint Cards AB då de är ett svenskt företag och erbjöd en god support. Utveckla en applikation efter Legosan AB:s behov med hjälp av den produkt och den SDK som visar sig vara mest lämpad. Utvecklingen av applikationen skedde med hjälp PPFD-metoden som genererar en samling kravdokument och en plan för utprovning. Se FingerIDs kravdokumentation för utförligare information. De mätbara krav på applikationen som sattes upp i början av projektet och under projektets gång var följande. o Systemet fick inte kännas segt, om systemet tog längre än 1 sekund på sig att identifiera en person/användare skulle det kännas som segt. Med en databas på 40 fingeravtryck nåddes bra resultat och identifiering tog inte mer än 1 sekund utan tiden för identifiering låg runt 800 millisekunder. Då databasen utökades med ytterligare 250 fingeravtryck tog identifieringen betydligt längre tid och systemet kändes segt. o Sökningen i Active Directory ska gå snabbt Sökningen efter den identifierade användaren skedde på godkänd tid, runt 100 millisekunder. o Start av FingerID ska gå snabbt Starten av FingerID går inte så snabbt som är önskvärt eftersom applikationen måste laddas från servern. Utred om det är möjligt att identifiera ett fingeravtryck i arbetsmiljön i vilken individen arbetar, med avseende på pulver och diverse små partiklar som kan fastna på fingrarna. Detta mål har ej uppnåtts. Det beror på att målet har prioriterats ner på grund av tidsbrist och svårighet att utföra tester eftersom sådana kräver en väl fungerande applikation. Koppla samman identifieringsapplikationen med företagets affärssystem. Daniel Johansson & Daniel Hammarin Sidan 38 av 43

Applikationen går att integrera med iscala 2.2. Applikationen startar när användaren placerar markören i ett speciellt fält och returnerar namnet på den identifierade till samma fält. Arbetet ska dokumenteras noggrant på det sätt som Legosan AB önskar utifrån Läkemedelsverkets riktlinjer. Dokumentationen som togs fram i början och under projektet blev noggrann. Dokumentationen avvek en aning från Läkemedelsverkets linjer men endast för att det skulle vara lättare att förstå och granska dokumenten. Dokumentation av systemets säkerhet och utred möjligheten till intrång. Detta mål har ej uppnåtts. Prioriterades ner från Legosan AB:s sida och på grund av tidsbrist. Legosan AB håller på att ta fram en ny IT-policy så en dokumentation av säkerheten passar bättre att ta upp i anslutning till detta. Utred Läkemedelsverket och fackets synpunkter på att lagra anställdas fingeravtryck. Legosan AB har haft kontakt med Läkemedelsverket och fått ett godkännande för att använda fingeravtryck som identifieringsmetod. Eftersom fingeravtryck är en form av personuppgifter hanteras de av personuppgiftslagen, PUL. Därför kontaktades datainspektionen. Vid samtal med datainspektionen stod det klart att fackets tillstånd ej behövdes. Datainspektionen ansåg att naturläkemedelsproduktion är tillräckligt säkerhetskänslig för att företaget ska kunna lagra de anställdas fingeravtryck utan fackets eller de anställdas samtycke. Daniel Johansson & Daniel Hammarin Sidan 39 av 43

6 MÖJLIGA FÖRBÄTTRINGAR Detta avsnitt diskuterar de förbättringar av projektet som kan vara aktuella att genomföra i framtiden. Starta FingerID som en tjänst I sin nu varande form är FingerID serverbaserat då FingerID.exe, FingerIDAdmin.exe och BIR-katalogen alla ligger på servern. Detta gör att FingerID måste laddas till klienten varje gång det startas och bidrar till att systemet känns något segt. Ett alternativ kan vara att köra applikationen som en tjänst som startas redan vid inloggning och är igång i aktivitetsfältet så att applikationen redan är igång när det anropas av iscala 2.2. Då behöver endast FingerIDs GUI aktiveras. Replikera BIR-katalogen på klienter För att slippa ladda över alla schabloner till klienten när identifieringen sker kan det vara en fördel att replikera serverns BIR-katalog på varje klient. Då ett nytt fingeravtryck läggs till och en schablon skapas i BIR-katalogen eller en schablon tas bort så skulle detta reflekteras på varje klient. Urval vid ID-sökning För att ytterligare snabba på ID-sökningen kan en man göra sökningen i ett urval av schabloner. Urval bör baseras på de senast identifierade användarna vid en specifik klient. Alternativt kan fingeravtrycksschabloner sparas i olika katalogen som motsvarar de olika klienterna eller avdelningarna. Integrera administrationsdelen i Active Directory Users and Computers För att öka systemets användbarhet vore det möjligt att integrera administrationsapplikationen som en extra flik i Active Directory Users and Computers. Detta medför dock att man inte längre kan göra ändringar som berör alla användare och ta del av statistiken på ett enkelt sätt. Installationsprogram För nuvarande krävs det att man installerar ett demoprogram, FPCore Demo för att fingeravtryckläsare ska fungerar korrekt. Det vore önskvärt att konstruera två separata installationsprogram, ett för applikationerna och ett för själva läsaren som lägger till information i registret samt kopierar över och registrerar DLL:er för BioAPI och BSP:erna. Daniel Johansson & Daniel Hammarin Sidan 40 av 43

Utökad iscala 2.2 integration med testplan och dokumentation Under projekttiden gjordes en provintegrering med Legosan AB:s affärssystem iscala 2.2, denna bör slutföras. Integrationen behöver också en omfattande dokumentation framtagen i linje med de krav som läkemedelsverket ställer på programvara inom läkemedelstillverkning. Till detta hör också en omfattande testplan för integreringen. Spärrat användarkonto I Legosan AB:s produktionsmiljö använder flera användare samma klienter. Då flera olika operatörer ska mata in kontrolldata i affärssystemet vid flera olika tillfällen sker ingen in- och ut loggning utan samma konto används hela dagen. Detta leder till att en användare med ett spärrat personligt användarkonto kan jobba vid en klient. Denna användare bör då inte kunna identifieras av FingerID även om användaren tillhör gruppen FingerID. Daniel Johansson & Daniel Hammarin Sidan 41 av 43

7 REFERENSER 7.1 Litteratur och skrifter [1] PIC/S GUIDANCE Good practices for computerised systems in regulated GXP environments - 2003 [2] Jan Skansholm, C++ Direkt, Studentlitteratur, 2000 andra upplagan [3] Davis Chapman, Lär dig Visual C++ 6 på 3 veckor, Pagina förlags, 1999 [4] Håkan Lindegren, Stabil Programvara, Kursmaterial, 2002 [5] Datainspektionen informerar Nr 7, 11 och 12 [6] Datainspektionens informationsmaterial Information till registrerade enligt personuppgiftslagen & Säkerhet för personuppgifter [7] Distinct Area Detection for Finger Pattern Verification: Area Sensor Algorithm FPC4010 Performance White Paper, FingerPrint Cards AB, 2004 [8] Produktinformationsblad: Algorithm for Fingerprint Processing: FPC4020 Area Identification Algorithm, Algorithm for Fingerprint Processing: FPC4010 Area Verification Algorithm, FingerPrint Cards AB, 2002 [9] John Woodward, Biometrics, Mcgraw-Hill Education - Europe, 2003 [10] Ratha, Nalini, Bolle, Ruud, Automatic Fingerprint Recognition Systems, Springer- Verlag, N.Y., 2003 Daniel Johansson & Daniel Hammarin Sidan 42 av 43

7.2 Webbplatser [11] MSDN Developer Centers, http://msdn.microsoft.com/developercenters/ [12] The Code Project, http://www.codeproject.com/ [13] BioAPI Consortium, http://www.bioapi.org/ [14] Fingerprint Cards AB, http://www.fingerprints.com [15] Identix inc, http://www.identix.com [16] Precise Biometrics, http://www.precisebiometrics.se/ [17] Pharmaceutical Inspection Convention, http://www.picscheme.org/ [18] Scala Business Solutions NV, http://www.scala.net/ [19] Bioidentification FAQ, http://www.bromba.com/faq/biofaqe.htm Daniel Johansson & Daniel Hammarin Sidan 43 av 43