About Christopher Kullenberg | CV and publications

Archive

Anonymisera facebookdata för forskning med hmac och hashlib

Om man vill samla in data från Facebook i forskningssyfte stöter man genast på forskningsetiska problem. Facebook ger alldeles för mycket information om informanterna, utan att man ens behöver be om lov.

Här tänkte jag bara ta upp en detalj som handlar om den "farligaste" uppgiften i den datamängd som man kan extrahera med Facebooks API: det unika id-numret.

Varje Facebookanvändare har ett femtonsiffrigt nummer tatuerat i sitt digitala skinn. Det ser ut så här (i (förkortat) json-format):

``` {.EnlighterJSRAW data-enlighter-language="json"} { "id": "48236456782311475_63332119186437", "message": "This is a message written by an informant", "type": "status", "from": { "id": "121506454323368", "name": "Jane Doe" }, "created_time": "2011-06-11T25:48:31+0000", "status_type": "wall_post", "is_expired": false }

De två fält som är uppenbart identifierande är alltså **id** och
**name**. Här tänkte jag bara ta upp id-numret. Att ersätta namnet men
behålla man/kvinna-distinktionen är ett problem som måste lösas  ett
annat sätt.

För att kunna bevara det unika med id-numret utan att kunna identifiera
en riktig person tänkte jag att man skulle kunna använda kryptering. Men
jag är inte  duktig  det  jag undrar nu om detta kan vara ett
vettigt angreppssätt.

Eftersom id-numrena alltid är femtonsiffriga  är det nämligen möjligt
att räkna fram alla hashsummor, även om det skulle ta lite tid. Men om
man däremot använder
[HMAC](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code)
 lägger man till ett lager av säkerhet genom att man använder en unik
hemlig nyckel och krypterar med.  här tänkte jag ungefär:

``` {.EnlighterJSRAW data-enlighter-language="python"}
from json import load
from os import listdir
import hmac
import hashlib

#Some code for reading files and parsing the data to jsondata

    for item in jsondata['data']:
        print("-" * 20)
        print("Name: " + item['from']['name'])
        print("Facebook id: " + item['from']['id'])
        digest_maker = hmac.new(b'replacewithsuperecretk3y', item['from']['id'].encode(), hashlib.sha256)
        print("Encrypted id: " + digest_maker.hexdigest())

Detta skriver ut:

Name: Jane Doe Facebook id: 121506454323368 Encrypted id: dfef8d5bed530668b004e28a29488e8252e5a5224d3178f00c0f7d0bf48e4b6a

Detta gör att man kan bygga om forskningsdatan och ersätta id-numret med det krypterade numret.

Nu finns det tusen andra saker i materialet som kan avslöja en användares identitet. Men, bortsett från detta, tror ni att den här krypteringsmetoden är tillräckligt bra?