• No results found

Cooperative, Self-aware and Intelligent Surveillance Systems

Malmö högskola, Axis Communications, Sigma Connectivity samt Sigma Technology är intressenterna av ett projekt inom IOTAP, CoSIS. Syftet med CoSIS är att komplettera till exempel kamerabilder med data från olika mobila enheter (till exempel Bluetooth och WiFi). Denna data kan användas till olika syften, exempelvis se genomströmning av personer i ett rum och uppskatta antalet personer på en större yta så som ett torg. CoSIS syfte är inte bara att förbättra systemen från ett övervakningsperspektiv men också för att utveckla system för att stödja tjänster med andra ändamål i den offentliga och halvoffentliga miljön, såsom fastighetsförvaltning och aktivitetsloggning [51].

A.3 Arbetsmöte

Under våren deltog vi under två arbetsmöte med representanter från Malmö högskola, Axis Communications, Sigma Connectivity samt Sigma Technology. Under dessa möten framgick det att CoSIS skulle utveckla system för att räkna antal personer i det offentliga rummet genom nämnda personers mobila enheter (datainsamling genom Bluetooth). Då detta är ett område som kan vara integritetskränkande så behövs det forskning om hur datainsamling kan skydda individer samtidigt som datainsamlingen kan stödja CoSIS önskemål. Önskemålen kan vara att antingen styra en byggnads ventilationsystem eller användare ska kunna få feedback från lokaler, om det finns plats eller om alla borden i lokalen är fulla. Då krävs det en möjlighet att räkna antalet personer men vem personerna är behöver inte kännas till. Samtidigt så fanns det diskussioner om huruvida det är möjligt att när en individ kommer in på kontoret automatiskt bli igenkänd av systemet och kunna få sitt schema visat på närliggande sensorer eller medlemmar i individens arbetsgrupp ska veta var individen är. Då måste systemet känna till vilken mobil enhet som tillhör vem.

Av ovan nämnda önskemål kunde vi utläsa vissa krav, det var att det skulle utvecklas ett system som kunde hantera anonymisering samt att vi skulle få utveckla ett system som samlade in information via Bluetooth.

B

Bilder

B.1 Android-applikation

Figur 12: Insamling av Bluetooth-enheter före nästa timme.

Figur 14: Visning av helt anonymiserade Bluetooth-enheter.

Figur 16: Visning av delvis helt anonymiserade Bluetooth-enheter.

Figur 18: Visning av Bluetooth-enheter endast anonymiserade av SHA-1.

B.2 oclHashcat

B.3 Databas

C

Intervju

C.1 Intervjufrågor

Intervjufrågorna användes för att ha diskussionsgrund. 1. Hur går det att se insamlingen på ett etiskt sätt?

2. Bör personer bli meddelade om deras enheter är med i ett system för datainsamling? 3. Om ja, borde du kan välja att du ska raderas från systemet efter önskemål eller ska

du kunna göra ett aktiv val med att t.ex. stänga av WiFi eller Bluetooth?

4. Vem bör ansvaret ligga på för att inte kränka integritet? Den som samlar in data eller den som blir ”insamlad” (aktivt stänga av när enheterna inte ska användas)? 5. Bör staten få reglera vad som ska samlas in eller inte?

6. Hur ”farligt” anser du det var att samla in MAC-adresser från olika mobila enheter? 7. Vilka data anser du inte borde få samlas in i ett offentligt rum?

8. Vilken kombination av data tror du kan kränka en individs integritet?

9. Kränks den personliga integriteten om en jobbtelefon spåras medan en person har den på sig?

10. Hur går det att ”designa” en databas för att kunna undvika att obehöriga kan samköra data för att ”skada” någon? (Men databasen ska även gå att använda för olika sorters tjänster)

C.2 Referat

Intervju med: Johan Gustavsson, universitetsadjunkt på Institutionen för Dataveten-

skap på Malmö högskola.

Ämne: Datainsamling, PuL, anonymisering av data och den etiska synen på insamling

av data

Ansvariga: Mattias Nilsson, Sebastian Olsson. Datum intervju: 2015-04-27

Datum transkribering av intervju 2015-04-28

Johan: När jag läser frågorna finns det en uppenbar sak som slår mig med en och kopplar

in till fråga två, tre och fyra, bör personer bli meddelade om de är med i ett system för datainsamling och vem bör ansvaret ligga på för att inte kränka integriteten, så kan vi börja med att titta på personuppgiftslagen. Den är baserad på ett EU-direktiv så vi är bundna av det även utanför Sveriges gränser. Personuppgiftslagen är väldigt tydlig i att du får inte behandla personuppgifter, i vilket även innefattar att samla in dom samt att du får inte samla in dom utan personens uttryckliga tillåtelse. Det är otillåtet att samla in personuppgifter om du inte har fått ett otvetydigt godkännande av personen. Så att svaret på fråga fyra är att lagen säger att det är den insamlade som är skyldig att bevara integriteten här och personerna måste bli meddelade. Du får inte samla in information utan den person vars information blir insamlad är medveten om det och har godkänt det och känner till vad informationen används till. Du måste ha ett informerat, personligt otvetydigt samtycke från personen i fråga.

Om vi tittar på andra sammanhang där stora mängder data samlas in går det att se hur till exempel Amazon, Facebook eller liknande har gjort, då sker det ett godkännande i samband med att man skapar sitt konto på tjänsten. Du kan inte kräva som kund hos Amazon att sina uppgifter inte samlas in därför jag har aktivt valt att skapa konto här, det innebär också att jag accepterar dom villkor som följer med det. Men det innebär att du inte kan på samma sätt, när du bara rör dig i en offentlig miljö, ha anses ha gett ditt godkännande. Det finns ett steg av aktivt godkännande som måste finnas med, för varje enskild person som finns med. Det går inte att ta det för en hel grupp. Vi kan inte säga generellt säga i den här miljön så kommer du att bli registrerad. Den typen av personlig information måste godkännas av varje individ, med ett informerat samtycke. Enligt PuL och motsvarande EU-direktiv som det baseras på finns det en väldigt tydlig gräns för vad som är möjligt.

Mattias: Men om man då helt har anonymiserat uppgifterna, då borde det väl vara

ok?

Johan: Men hur skulle du helt anonymisera uppgifterna, menar du?

Mattias: Låt säga att du har MAC-adressen, så hashar du den tillsammans med ak-

tuell timestamp, så vid nästa tillfällen du läser av den kommer du få ett nytt värde. Så du kommer aldrig få att personen har samma värde från gång till gång utan hela tiden nya.

Johan: Då kan du inte svara på frågan är det samma personen som är kvar.

Mattias: Nä precis. Då blir det mer personen som är här nu, så då blir det ett mer

Johan: Precis, då är det en fråga om nivåer. Också en fråga om problem med modern

datainsamling. Det är nuförtiden lättare att, om man ska uttrycka det så, att samla in. Vi måste anstränga oss för att avidentifiera informationen snarare än tvärtom. Skulle vi gjort det här för 20 år sen, då skulle vi haft en person med räknare som räknade varje besökare med en räknare. Nu är vi 25 personer här inne". En timme senare, Nu är vi 32". Skulle den här personen då försöka ta reda på vilka det var då skulle han vara tvungen att gå och fråga alla vilket skulle vara lite ansträngande. Medan nuförtiden är det lättare att samla in MAC-adresser och MAC-adresser är väldigt lättidentifierbara.

Där ligger en skillnad i att nuförtiden måste vi anstränga oss ganska aktivt. Jag ser att fråga 3 här, du ska kunna välja att radera från systemet efter önskemål, det ingår också i PUL att du måste ha möjlighet att säga nej, du är inte med längre. Du måste först ha aktivt godkänt och sen kan du närsomhelst säga Nu vill jag inte vara med längre". Man kan använda den information som är insamlad fram till dess men inte efteråt.

Sebastian: Hur fungerar det om det är en tredje part inblandad som har hand om både

insamling och lagring av data?

Johan: Ska vi vara säkra på att ha en säker integritet då innebär det att vi måste göra den

här hashningen direkt i sensorn. Så att den information som lagras inte är identifierbar. Det här är något som, här finns en fråga som säger att, hur farligt är det att samla in MAC-adresser. Det är något som är intressant, för det här hänger ihop med diskussioner om metadata vid telefonsamtal, trafikdata, som i princip handlar om vilket telefonnummer har ringt till vilket annat telefonnummer när.

Sebastian: Det nya datalagringsdirektivet?

Johan: Precis. Där säger man att det handlar inte om vad man pratar om utan om

vem som ringt till vem vid vilket tillfälle.

Givet en stor mängd information är det ganska lätt att se mönster, även om man har vad som man kan tänka sig vara en anonym siffra som en MAC-adress. En MAC-adress skulle vara typexempel på sådant som inte är med i ett sökbart register som ett telefon- nummer är men ändå så har vi sett att så länge vi kan se att den är knuten till mig och via den kan följa ett mönster så krävs det inte särskilt mycket för att med offentliga resurser konstatera att det här är du.

Johan: Fråga sex till åtta hänger ihop, här finns en aspekt till som inte finns med i

själva ordet av att vi registrerar MAC-adressen. I det här ligger också att vi registrerar position, vi talar om att personen är här, vilket också är en vidare effekt av det här. Men om du har den på något sätt så du får ett unikt, identifierbart nummer för den här enheten vare sig det är en hash, MAC eller telefonnummer, så länge den här är unik över tid så kan du följa den här personens vanor och spåra den.

Det här hänger ihop med sådana frågor som vad är det som är grejen med den per- sonliga integriteten här. Det beror i mångt och mycket på vem som tittar och hur länge. Det finns det klassiska argumentet, har man bara rent mjöl i påsen-argumentet, om du inte gör något dumt så är det ingen fara. Dock finns det ganska många situationer där man kan ha rent mjöl i påsen utan att för den skull vara ofarligt att registrera var man

är.

Den generella visdomen för hur man ser till att sköta system att de inte blir sårbara är att hålla koll på dom ordentligt, uppdatera dom så snart det kommer ut buggrapport, se till att hålla brandväggar och liknande och det där är hanterbart när vi har en central server som vi hanterar. Men när vi har 200 enheter utspridda över stan som kommunicerar när någon kommer i närheten av dom och dessutom kör på hårdvara som inte är oerhört kraftig, då finns det ett problem både i uppdaterbarheten och kontrollen över de här syste- men. Om det nu dessutom de här kommunicerar med varandra på olika vis räcker det att en av de här fallerar så har vi en väg in. Modern information är väldigt lätt att spara och väldigt lätt att flytta. Det är lättare att samla in personlig information än avpersonifiera information nuförtiden.

Sebastian: Angående fråga nio, jobbtelefoner.

Johan: Det är en fråga man kan ställa sig. I mitt fall, jobbtelefonen har jag på mig

mest hela tiden eftersom den numera är mobil. Det innebär ju att jag har den på mig när jag går hem. Det är inte orimligt att tänka att arbetsgivaren vill spåra mitt användan- de av jobbtelefonen på samma sätt som man anser att arbetsgivaren har rätt att spåra mitt datoranvändande under arbetstid därför att arbetsgivaren har ett intresse av att jag faktiskt jobbar och inte bara sitter och surfar och ringer privatsamtal. Så där finns det en aspekt att arbetsgivaren har ett sådant intresse och kan tänkas sig ha intresse av att jag befinner mig åtminstone i arbetslokalerna i varje fall under arbetstid. Det finns en personuppgiftsansvarig på min arbetsplats som är skyldig att se till att den informationen inte sprids utanför HR-avdelningens system.

Sebastian: Om man tänker i ett större perspektiv, istället för att man kollar MAC-

adressen på din mobil så är det jobbtelefonen, men det är fortfarande inte du personligen.

Johan: Fast en personuppgift är en uppgift som kan knytas till en person. Är det min

jobbtelefon och vi kan anta att det är jag som bär den, jag kanske tom är skyldig till att hålla koll på vem som bär den enligt mitt avtal med arbetsgivaren, då är det också en personuppgift. En personuppgift är vilken uppgift som gör att vi kan knyta tillbaka till dig som person. Om man tar en bild, över till exempel centralstationen och det körs face recognition-teknik för att identifiera vilka personer som är där, då är bildmaterialet personuppgifter.

Mattias: Om fråga 10, databas?

Johan: På 10, om databas, om vi ska strikt designa en databas då måste vi se till att

vi inte kan spåra den här individen. Det vill säga att vi aldrig får ha en osaltade MAC- adressen. Då måste vi ha ett sätt att säga att ja, vi har här en hash som innefattar MAC och tid och för att det här ska fungera, kan vi ha till exempel MAC och timme. Då kan vi räkna på och följa personer på stationen under en timme så då får vi användbarhet. Det innebär att sen när den här personen blir siktad på en annan station när de varit och ätit lunch har de en annan lunch och då kan man inte följa de dit. Då måste vi komma till en nivå att data som lagras i databasen inte är individualiserbar. Då måste vi göra hashningen redan i sensorn så data som hamnar i databasen inte är möjlig att återför till individuella enheter. Det är naturligtvis trivialt att säga att vi har data i databasen och sen när den presenteras är den avidentifierad. Alternativet är ju man måste se till att fråga

varje enskild person för annars har du personuppgifter.

Mattias: Om man skulle ha en app, där man antingen ställer upp frivilligt eller får

något i utbyte, där man har installerat appen på telefonen. Då kan man ha att ska du vara med måste du godkänna. Då kan man göra vad man vill?

Johan: Inte helt och hållet vad du vill. Dels måste du tala om vad du ska använda datan

till i villkoren och får inte använda till annat och dessutom finns det begränsningar i vilka data du får samla in. Har du särskilt känsligt data du vill samla in måste du ändå ha ett godkännande av datainspektionen. Särskilt känslig information innefattar möjlighet att ta reda på politisk inriktning, sexuell läggning, religion och lite annat som är kritiskt. Men den typen av appar har vi idag, i form av turfing-appar. Det är en fråga om datainsamling för reklam, det är det som är syftet med hela grejen. Vi gör ett spel där vi ska följa var ni går hela dagarna. Finns det en baktanke? Ja kanske. . .

D

Källkod

D.1 Android D.1.1 AnalyzeFragment.java package bluetooth.exjobb.com.findbt; import android.os.Bundle; import android.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; /**

* Contains logic for showing when a specific device have been scanned. * Created by Mattias Nilsson & Sebastian Olsson

*/

public class AnalyzeFragment extends Fragment {

private String hash;

private String device;

private ArrayList<String> time;

public AnalyzeFragment() {

// Required empty public constructor

}

/* Sets up the fragment. When the fragment is launched from DisplayFragment, arguments

* are sent from that fragment to this fragment. */

public static AnalyzeFragment newInstance(String hash, String device, ArrayList<String> time){

AnalyzeFragment fragment = new AnalyzeFragment(); Bundle args = new Bundle();

args.putString("Hash", hash); args.putString("Device", device); args.putStringArrayList("Time", time); fragment.setArguments(args);

return fragment; }

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

if(getArguments() != null){

hash = getArguments().getString("Hash"); device = getArguments().getString("Device"); time = getArguments().getStringArrayList("Time"); }

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

// Inflate the layout for this fragment

View view = inflater.inflate(R.layout.fragment_analyze, container, false); TextView textView = (TextView) view.findViewById(R.id.textViewAnalyze); textView.setText("The device with the hashed MAC-address " + hash +

"\nthat is a Bluetooth device of class " + device +

" has been at this location at these times:");

ListView listView = (ListView) view.findViewById(R.id.listViewAnalyze); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>

(getActivity(), android.R.layout.simple_list_item_1, time); listView.setAdapter(arrayAdapter);

return view; }

D.1.2 BluetoothDevices.java

package bluetooth.exjobb.com.findbt;

/**

* Returns the Bluetooth class of found device. * Created by Mattias Nilsson & Sebastian Olsson */

public class BluetoothDevices {

public static String DeviceClass(int input){

switch (input){

//Values below come from

//developer.android.com/reference/android/bluetooth/BluetoothClass.Device.html case 1076: return "AUDIO_VIDEO_CAMCORDER"; case 1056: return "AUDIO_VIDEO_CAR_AUDIO"; case 1032: return "AUDIO_VIDEO_HANDSFREE"; case 1048: return "AUDIO_VIDEO_HEADPHONES"; case 1064: return "AUDIO_VIDEO_HIFI_AUDIO"; case 1044: return "AUDIO_VIDEO_LOUDSPEAKER"; case 1040: return "AUDIO_VIDEO_MICROPHONE"; case 1052: return "AUDIO_VIDEO_PORTABLE_AUDIO"; case 1060: return "AUDIO_VIDEO_SET_TOP_BOX"; case 1024: return "AUDIO_VIDEO_UNCATEGORIZED"; case 1068: return "AUDIO_VIDEO_VCR"; case 1072: return "AUDIO_VIDEO_VIDEO_CAMERA"; case 1088: return "AUDIO_VIDEO_VIDEO_CONFERENCING"; case 1084: return "AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER"; case 1096: return "AUDIO_VIDEO_VIDEO_GAMING_TOY"; case 1080: return "AUDIO_VIDEO_VIDEO_MONITOR"; case 1028: return "AUDIO_VIDEO_WEARABLE_HEADSET"; case 260: return "COMPUTER_DESKTOP"; case 272: return "COMPUTER_HANDHELD_PC_PDA"; case 268: return "COMPUTER_LAPTOP"; case 276: return "COMPUTER_PALM_SIZE_PC_PDA"; case 264:

return "COMPUTER_SERVER"; case 256: return "COMPUTER_UNCATEGORIZED"; case 280: return "COMPUTER_WEARABLE"; case 2308: return "HEALTH_BLOOD_PRESSURE"; case 2332: return "HEALTH_DATA_DISPLAY"; case 2320: return "HEALTH_GLUCOSE"; case 2324: return "HEALTH_PULSE_OXIMETER"; case 2328: return "HEALTH_PULSE_RATE"; case 2312: return "HEALTH_THERMOMETER"; case 2304: return "HEALTH_UNCATEGORIZED"; case 2316: return "HEALTH_WEIGHING"; case 516: return "PHONE_CELLULAR"; case 520: return "PHONE_CORDLESS"; case 532: return "PHONE_ISDN"; case 528: return "PHONE_MODEM_OR_GATEWAY"; case 524: return "PHONE_SMART"; case 512: return "PHONE_UNCATEGORIZED"; case 2064: return "TOY_CONTROLLER"; case 2060: return "TOY_DOLL_ACTION_FIGURE"; case 2068: return "TOY_GAME"; case 2052: return "TOY_ROBOT"; case 2048: return "TOY_UNCATEGORIZED"; case 2056: return "TOY_VEHICLE"; case 1812: return "WEARABLE_GLASSES"; case 1808: return "WEARABLE_HELMET"; case 1804: return "WEARABLE_JACKET"; case 1800: return "WEARABLE_PAGER"; case 1792: return "WEARABLE_UNCATEGORIZED"; case 1796: return "WEARABLE_WRIST_WATCH";

//Values below comes from //developer.android.com/reference/android/bluetooth/BluetoothClass.Device.Major.html case 1536: return "IMAGING"; case 0: return "MISC"; case 768: return "NETWORKING"; case 1280: return "PERIPHERAL"; case 7936: return "UNCATEGORIZED"; default: return null; } } }

D.1.3 DeviceAdapter.java package bluetooth.exjobb.com.findbt; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import java.util.ArrayList; /**

* Modified adapter to show found devices on the scan. * Created by Mattias Nilsson & Sebastian Olsson */

public class DeviceAdapter extends ArrayAdapter<Devices> {

public DeviceAdapter(Context context, ArrayList<Devices>devices) {

super(context, 0,devices); }

public View getView(int position, View convertView, ViewGroup parent){ Devices devices = getItem(position);

if (convertView == null) { convertView =

LayoutInflater.from(getContext()).inflate(R.layout.devices, parent, false);

}

TextView textViewMAC = (TextView)convertView.findViewById(R.id.tvMAC); TextView textRSSI = (TextView)convertView.findViewById(R.id.tvRSSI); TextView textClass = (TextView)convertView.findViewById(R.id.tvClass); TextView textViewType = (TextView)convertView.findViewById(R.id.tvType); TextView textViewHashFull = (TextView)convertView.findViewById(R.id.tvHashFull); TextView textViewHashSemi = (TextView)convertView.findViewById(R.id.tvHashSemi); TextView textViewHashNo = (TextView)convertView.findViewById(R.id.tvHashNo);

textViewMAC.setText("MAC-address is: " + devices.macAddress); textRSSI.setText("RSSI: " + devices.RSSI + " dBm");

textViewType.setText("Name of Bluetooth-device: " + devices.type); textClass.setText("Class: " + devices.BTclass);

textViewHashFull.setText("Full anonymization: " + devices.hashFull); textViewHashSemi.setText("Semi anonymization: " + devices.hashSemi); textViewHashNo.setText("Only SHA-1: " + devices.hashNo);

return convertView; }

D.1.4 Devices.java

package bluetooth.exjobb.com.findbt;

/**

* Stores the found Bluetooth device as an object. * Created by Mattias Nilsson & Sebastian Olsson */

public class Devices {

public String macAddress;

public String type;

public String hashFull;

public String hashSemi;

public String hashNo;

public int RSSI;

public String BTclass;

public Devices(String type, String macAddress, String hashFull, String hashSemi, String hashNo,

int RSSI, String BTclass){

this.type = type;

this.macAddress = macAddress;

this.hashFull = hashFull;

this.hashSemi = hashSemi;

this.hashNo = hashNo;

this.RSSI = RSSI;

this.BTclass = BTclass; }

public String getMacAddress(){

return macAddress; }

D.1.5 Display.java

package bluetooth.exjobb.com.findbt;

/**

* Stores data about a Bluetooth device (data from database). * Created by Mattias Nilsson & Sebastian Olsson

*/

public class Display {

public String timeStamp;

public String hashedMAC;

public String deviceClass;

public int RSSI;

public Display(String timeStamp, String hashedMAC, String deviceClass, int

Related documents