Petter Reinholdtsen

Entries tagged "sikkerhet".

New and improved sqlcipher in Debian for accessing Signal database
12th November 2023

For a while now I wanted to have direct access to the Signal database of messages and channels of my Desktop edition of Signal. I prefer the enforced end to end encryption of Signal these days for my communication with friends and family, to increase the level of safety and privacy as well as raising the cost of the mass surveillance government and non-government entities practice these days. In August I came across a nice recipe on how to use sqlcipher to extract statistics from the Signal database explaining how to do this. Unfortunately this did not work with the version of sqlcipher in Debian. The sqlcipher package is a "fork" of the sqlite package with added support for encrypted databases. Sadly the current Debian maintainer announced more than three years ago that he did not have time to maintain sqlcipher, so it seemed unlikely to be upgraded by the maintainer. I was reluctant to take on the job myself, as I have very limited experience maintaining shared libraries in Debian. After waiting and hoping for a few months, I gave up the last week, and set out to update the package. In the process I orphaned it to make it more obvious for the next person looking at it that the package need proper maintenance.

The version in Debian was around five years old, and quite a lot of changes had taken place upstream into the Debian maintenance git repository. After spending a few days importing the new upstream versions, realising that upstream did not care much for SONAME versioning as I saw library symbols being both added and removed with minor version number changes to the project, I concluded that I had to do a SONAME bump of the library package to avoid surprising the reverse dependencies. I even added a simple autopkgtest script to ensure the package work as intended. Dug deep into the hole of learning shared library maintenance, I set out a few days ago to upload the new version to Debian experimental to see what the quality assurance framework in Debian had to say about the result. The feedback told me the pacakge was not too shabby, and yesterday I uploaded the latest version to Debian unstable. It should enter testing today or tomorrow, perhaps delayed by a small library transition.

Armed with a new version of sqlcipher, I can now have a look at the SQL database in ~/.config/Signal/sql/db.sqlite. First, one need to fetch the encryption key from the Signal configuration using this simple JSON extraction command:

/usr/bin/jq -r '."key"' ~/.config/Signal/config.json

Assuming the result from that command is 'secretkey', which is a hexadecimal number representing the key used to encrypt the database. Next, one can now connect to the database and inject the encryption key for access via SQL to fetch information from the database. Here is an example dumping the database structure:

% sqlcipher ~/.config/Signal/sql/db.sqlite
sqlite> PRAGMA key = "x'secretkey'";
sqlite> .schema
CREATE TABLE sqlite_stat1(tbl,idx,stat);
CREATE TABLE conversations(
      id STRING PRIMARY KEY ASC,
      json TEXT,

      active_at INTEGER,
      type STRING,
      members TEXT,
      name TEXT,
      profileName TEXT
    , profileFamilyName TEXT, profileFullName TEXT, e164 TEXT, serviceId TEXT, groupId TEXT, profileLastFetchedAt INTEGER);
CREATE TABLE identityKeys(
      id STRING PRIMARY KEY ASC,
      json TEXT
    );
CREATE TABLE items(
      id STRING PRIMARY KEY ASC,
      json TEXT
    );
CREATE TABLE sessions(
      id TEXT PRIMARY KEY,
      conversationId TEXT,
      json TEXT
    , ourServiceId STRING, serviceId STRING);
CREATE TABLE attachment_downloads(
    id STRING primary key,
    timestamp INTEGER,
    pending INTEGER,
    json TEXT
  );
CREATE TABLE sticker_packs(
    id TEXT PRIMARY KEY,
    key TEXT NOT NULL,

    author STRING,
    coverStickerId INTEGER,
    createdAt INTEGER,
    downloadAttempts INTEGER,
    installedAt INTEGER,
    lastUsed INTEGER,
    status STRING,
    stickerCount INTEGER,
    title STRING
  , attemptedStatus STRING, position INTEGER DEFAULT 0 NOT NULL, storageID STRING, storageVersion INTEGER, storageUnknownFields BLOB, storageNeedsSync
      INTEGER DEFAULT 0 NOT NULL);
CREATE TABLE stickers(
    id INTEGER NOT NULL,
    packId TEXT NOT NULL,

    emoji STRING,
    height INTEGER,
    isCoverOnly INTEGER,
    lastUsed INTEGER,
    path STRING,
    width INTEGER,

    PRIMARY KEY (id, packId),
    CONSTRAINT stickers_fk
      FOREIGN KEY (packId)
      REFERENCES sticker_packs(id)
      ON DELETE CASCADE
  );
CREATE TABLE sticker_references(
    messageId STRING,
    packId TEXT,
    CONSTRAINT sticker_references_fk
      FOREIGN KEY(packId)
      REFERENCES sticker_packs(id)
      ON DELETE CASCADE
  );
CREATE TABLE emojis(
    shortName TEXT PRIMARY KEY,
    lastUsage INTEGER
  );
CREATE TABLE messages(
        rowid INTEGER PRIMARY KEY ASC,
        id STRING UNIQUE,
        json TEXT,
        readStatus INTEGER,
        expires_at INTEGER,
        sent_at INTEGER,
        schemaVersion INTEGER,
        conversationId STRING,
        received_at INTEGER,
        source STRING,
        hasAttachments INTEGER,
        hasFileAttachments INTEGER,
        hasVisualMediaAttachments INTEGER,
        expireTimer INTEGER,
        expirationStartTimestamp INTEGER,
        type STRING,
        body TEXT,
        messageTimer INTEGER,
        messageTimerStart INTEGER,
        messageTimerExpiresAt INTEGER,
        isErased INTEGER,
        isViewOnce INTEGER,
        sourceServiceId TEXT, serverGuid STRING NULL, sourceDevice INTEGER, storyId STRING, isStory INTEGER
        GENERATED ALWAYS AS (type IS 'story'), isChangeCreatedByUs INTEGER NOT NULL DEFAULT 0, isTimerChangeFromSync INTEGER
        GENERATED ALWAYS AS (
          json_extract(json, '$.expirationTimerUpdate.fromSync') IS 1
        ), seenStatus NUMBER default 0, storyDistributionListId STRING, expiresAt INT
        GENERATED ALWAYS
        AS (ifnull(
          expirationStartTimestamp + (expireTimer * 1000),
          9007199254740991
        )), shouldAffectActivity INTEGER
        GENERATED ALWAYS AS (
          type IS NULL
          OR
          type NOT IN (
            'change-number-notification',
            'contact-removed-notification',
            'conversation-merge',
            'group-v1-migration',
            'keychange',
            'message-history-unsynced',
            'profile-change',
            'story',
            'universal-timer-notification',
            'verified-change'
          )
        ), shouldAffectPreview INTEGER
        GENERATED ALWAYS AS (
          type IS NULL
          OR
          type NOT IN (
            'change-number-notification',
            'contact-removed-notification',
            'conversation-merge',
            'group-v1-migration',
            'keychange',
            'message-history-unsynced',
            'profile-change',
            'story',
            'universal-timer-notification',
            'verified-change'
          )
        ), isUserInitiatedMessage INTEGER
        GENERATED ALWAYS AS (
          type IS NULL
          OR
          type NOT IN (
            'change-number-notification',
            'contact-removed-notification',
            'conversation-merge',
            'group-v1-migration',
            'group-v2-change',
            'keychange',
            'message-history-unsynced',
            'profile-change',
            'story',
            'universal-timer-notification',
            'verified-change'
          )
        ), mentionsMe INTEGER NOT NULL DEFAULT 0, isGroupLeaveEvent INTEGER
        GENERATED ALWAYS AS (
          type IS 'group-v2-change' AND
          json_array_length(json_extract(json, '$.groupV2Change.details')) IS 1 AND
          json_extract(json, '$.groupV2Change.details[0].type') IS 'member-remove' AND
          json_extract(json, '$.groupV2Change.from') IS NOT NULL AND
          json_extract(json, '$.groupV2Change.from') IS json_extract(json, '$.groupV2Change.details[0].aci')
        ), isGroupLeaveEventFromOther INTEGER
        GENERATED ALWAYS AS (
          isGroupLeaveEvent IS 1
          AND
          isChangeCreatedByUs IS 0
        ), callId TEXT
        GENERATED ALWAYS AS (
          json_extract(json, '$.callId')
        ));
CREATE TABLE sqlite_stat4(tbl,idx,neq,nlt,ndlt,sample);
CREATE TABLE jobs(
        id TEXT PRIMARY KEY,
        queueType TEXT STRING NOT NULL,
        timestamp INTEGER NOT NULL,
        data STRING TEXT
      );
CREATE TABLE reactions(
        conversationId STRING,
        emoji STRING,
        fromId STRING,
        messageReceivedAt INTEGER,
        targetAuthorAci STRING,
        targetTimestamp INTEGER,
        unread INTEGER
      , messageId STRING);
CREATE TABLE senderKeys(
        id TEXT PRIMARY KEY NOT NULL,
        senderId TEXT NOT NULL,
        distributionId TEXT NOT NULL,
        data BLOB NOT NULL,
        lastUpdatedDate NUMBER NOT NULL
      );
CREATE TABLE unprocessed(
        id STRING PRIMARY KEY ASC,
        timestamp INTEGER,
        version INTEGER,
        attempts INTEGER,
        envelope TEXT,
        decrypted TEXT,
        source TEXT,
        serverTimestamp INTEGER,
        sourceServiceId STRING
      , serverGuid STRING NULL, sourceDevice INTEGER, receivedAtCounter INTEGER, urgent INTEGER, story INTEGER);
CREATE TABLE sendLogPayloads(
        id INTEGER PRIMARY KEY ASC,

        timestamp INTEGER NOT NULL,
        contentHint INTEGER NOT NULL,
        proto BLOB NOT NULL
      , urgent INTEGER, hasPniSignatureMessage INTEGER DEFAULT 0 NOT NULL);
CREATE TABLE sendLogRecipients(
        payloadId INTEGER NOT NULL,

        recipientServiceId STRING NOT NULL,
        deviceId INTEGER NOT NULL,

        PRIMARY KEY (payloadId, recipientServiceId, deviceId),

        CONSTRAINT sendLogRecipientsForeignKey
          FOREIGN KEY (payloadId)
          REFERENCES sendLogPayloads(id)
          ON DELETE CASCADE
      );
CREATE TABLE sendLogMessageIds(
        payloadId INTEGER NOT NULL,

        messageId STRING NOT NULL,

        PRIMARY KEY (payloadId, messageId),

        CONSTRAINT sendLogMessageIdsForeignKey
          FOREIGN KEY (payloadId)
          REFERENCES sendLogPayloads(id)
          ON DELETE CASCADE
      );
CREATE TABLE preKeys(
        id STRING PRIMARY KEY ASC,
        json TEXT
      , ourServiceId NUMBER
        GENERATED ALWAYS AS (json_extract(json, '$.ourServiceId')));
CREATE TABLE signedPreKeys(
        id STRING PRIMARY KEY ASC,
        json TEXT
      , ourServiceId NUMBER
        GENERATED ALWAYS AS (json_extract(json, '$.ourServiceId')));
CREATE TABLE badges(
        id TEXT PRIMARY KEY,
        category TEXT NOT NULL,
        name TEXT NOT NULL,
        descriptionTemplate TEXT NOT NULL
      );
CREATE TABLE badgeImageFiles(
        badgeId TEXT REFERENCES badges(id)
          ON DELETE CASCADE
          ON UPDATE CASCADE,
        'order' INTEGER NOT NULL,
        url TEXT NOT NULL,
        localPath TEXT,
        theme TEXT NOT NULL
      );
CREATE TABLE storyReads (
        authorId STRING NOT NULL,
        conversationId STRING NOT NULL,
        storyId STRING NOT NULL,
        storyReadDate NUMBER NOT NULL,

        PRIMARY KEY (authorId, storyId)
      );
CREATE TABLE storyDistributions(
        id STRING PRIMARY KEY NOT NULL,
        name TEXT,

        senderKeyInfoJson STRING
      , deletedAtTimestamp INTEGER, allowsReplies INTEGER, isBlockList INTEGER, storageID STRING, storageVersion INTEGER, storageUnknownFields BLOB, storageNeedsSync INTEGER);
CREATE TABLE storyDistributionMembers(
        listId STRING NOT NULL REFERENCES storyDistributions(id)
          ON DELETE CASCADE
          ON UPDATE CASCADE,
        serviceId STRING NOT NULL,

        PRIMARY KEY (listId, serviceId)
      );
CREATE TABLE uninstalled_sticker_packs (
        id STRING NOT NULL PRIMARY KEY,
        uninstalledAt NUMBER NOT NULL,
        storageID STRING,
        storageVersion NUMBER,
        storageUnknownFields BLOB,
        storageNeedsSync INTEGER NOT NULL
      );
CREATE TABLE groupCallRingCancellations(
        ringId INTEGER PRIMARY KEY,
        createdAt INTEGER NOT NULL
      );
CREATE TABLE IF NOT EXISTS 'messages_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'messages_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'messages_fts_content'(id INTEGER PRIMARY KEY, c0);
CREATE TABLE IF NOT EXISTS 'messages_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'messages_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TABLE edited_messages(
        messageId STRING REFERENCES messages(id)
          ON DELETE CASCADE,
        sentAt INTEGER,
        readStatus INTEGER
      , conversationId STRING);
CREATE TABLE mentions (
        messageId REFERENCES messages(id) ON DELETE CASCADE,
        mentionAci STRING,
        start INTEGER,
        length INTEGER
      );
CREATE TABLE kyberPreKeys(
        id STRING PRIMARY KEY NOT NULL,
        json TEXT NOT NULL, ourServiceId NUMBER
        GENERATED ALWAYS AS (json_extract(json, '$.ourServiceId')));
CREATE TABLE callsHistory (
        callId TEXT PRIMARY KEY,
        peerId TEXT NOT NULL, -- conversation id (legacy) | uuid | groupId | roomId
        ringerId TEXT DEFAULT NULL, -- ringer uuid
        mode TEXT NOT NULL, -- enum "Direct" | "Group"
        type TEXT NOT NULL, -- enum "Audio" | "Video" | "Group"
        direction TEXT NOT NULL, -- enum "Incoming" | "Outgoing
        -- Direct: enum "Pending" | "Missed" | "Accepted" | "Deleted"
        -- Group: enum "GenericGroupCall" | "OutgoingRing" | "Ringing" | "Joined" | "Missed" | "Declined" | "Accepted" | "Deleted"
        status TEXT NOT NULL,
        timestamp INTEGER NOT NULL,
        UNIQUE (callId, peerId) ON CONFLICT FAIL
      );
[ dropped all indexes to save space in this blog post ]
CREATE TRIGGER messages_on_view_once_update AFTER UPDATE ON messages
      WHEN
        new.body IS NOT NULL AND new.isViewOnce = 1
      BEGIN
        DELETE FROM messages_fts WHERE rowid = old.rowid;
      END;
CREATE TRIGGER messages_on_insert AFTER INSERT ON messages
      WHEN new.isViewOnce IS NOT 1 AND new.storyId IS NULL
      BEGIN
        INSERT INTO messages_fts
          (rowid, body)
        VALUES
          (new.rowid, new.body);
      END;
CREATE TRIGGER messages_on_delete AFTER DELETE ON messages BEGIN
        DELETE FROM messages_fts WHERE rowid = old.rowid;
        DELETE FROM sendLogPayloads WHERE id IN (
          SELECT payloadId FROM sendLogMessageIds
          WHERE messageId = old.id
        );
        DELETE FROM reactions WHERE rowid IN (
          SELECT rowid FROM reactions
          WHERE messageId = old.id
        );
        DELETE FROM storyReads WHERE storyId = old.storyId;
      END;
CREATE VIRTUAL TABLE messages_fts USING fts5(
        body,
        tokenize = 'signal_tokenizer'
      );
CREATE TRIGGER messages_on_update AFTER UPDATE ON messages
      WHEN
        (new.body IS NULL OR old.body IS NOT new.body) AND
         new.isViewOnce IS NOT 1 AND new.storyId IS NULL
      BEGIN
        DELETE FROM messages_fts WHERE rowid = old.rowid;
        INSERT INTO messages_fts
          (rowid, body)
        VALUES
          (new.rowid, new.body);
      END;
CREATE TRIGGER messages_on_insert_insert_mentions AFTER INSERT ON messages
      BEGIN
        INSERT INTO mentions (messageId, mentionAci, start, length)
        
    SELECT messages.id, bodyRanges.value ->> 'mentionAci' as mentionAci,
      bodyRanges.value ->> 'start' as start,
      bodyRanges.value ->> 'length' as length
    FROM messages, json_each(messages.json ->> 'bodyRanges') as bodyRanges
    WHERE bodyRanges.value ->> 'mentionAci' IS NOT NULL
  
        AND messages.id = new.id;
      END;
CREATE TRIGGER messages_on_update_update_mentions AFTER UPDATE ON messages
      BEGIN
        DELETE FROM mentions WHERE messageId = new.id;
        INSERT INTO mentions (messageId, mentionAci, start, length)
        
    SELECT messages.id, bodyRanges.value ->> 'mentionAci' as mentionAci,
      bodyRanges.value ->> 'start' as start,
      bodyRanges.value ->> 'length' as length
    FROM messages, json_each(messages.json ->> 'bodyRanges') as bodyRanges
    WHERE bodyRanges.value ->> 'mentionAci' IS NOT NULL
  
        AND messages.id = new.id;
      END;
sqlite>

Finally I have the tool needed to inspect and process Signal messages that I need, without using the vendor provided client. Now on to transforming it to a more useful format.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: debian, english, sikkerhet, surveillance.
Latest Jami back in Debian Testing, and scriptable using dbus
12th January 2021

After a lot of hard work by its maintainer Alexandre Viau and others, the decentralized communication platform Jami (earlier known as Ring), managed to get its latest version into Debian Testing. Several of its dependencies has caused build and propagation problems, which all seem to be solved now.

In addition to the fact that Jami is decentralized, similar to how bittorrent is decentralized, I first of all like how it is not connected to external IDs like phone numbers. This allow me to set up computers to send me notifications using Jami without having to find get a phone number for each computer. Automatic notification via Jami is also made trivial thanks to the provided client side API (as a DBus service). Here is my bourne shell script demonstrating how to let any system send a message to any Jami address. It will create a new identity before sending the message, if no Jami identity exist already:

#!/bin/sh
#
# Usage: $0  
#
# Send  to , create local jami account if
# missing.
#
# License: GPL v2 or later at your choice
# Author: Petter Reinholdtsen


if [ -z "$HOME" ] ; then
    echo "error: missing \$HOME, required for dbus to work"
    exit 1
fi

# First, get dbus running if not already running
DBUSLAUNCH=/usr/bin/dbus-launch
PIDFILE=/run/asterisk/dbus-session.pid
if [ -e $PIDFILE ] ; then
    . $PIDFILE
    if ! kill -0 $DBUS_SESSION_BUS_PID 2>/dev/null ; then
        unset DBUS_SESSION_BUS_ADDRESS
    fi
fi
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && [ -x "$DBUSLAUNCH" ]; then
    DBUS_SESSION_BUS_ADDRESS="unix:path=$HOME/.dbus"
    dbus-daemon --session --address="$DBUS_SESSION_BUS_ADDRESS" --nofork --nopidfile --syslog-only < /dev/null > /dev/null 2>&1 3>&1 &
    DBUS_SESSION_BUS_PID=$!
    (
        echo DBUS_SESSION_BUS_PID=$DBUS_SESSION_BUS_PID
        echo DBUS_SESSION_BUS_ADDRESS=\""$DBUS_SESSION_BUS_ADDRESS"\"
        echo export DBUS_SESSION_BUS_ADDRESS
    ) > $PIDFILE
    . $PIDFILE
fi &

dringop() {
    part="$1"; shift
    op="$1"; shift
    dbus-send --session \
        --dest="cx.ring.Ring" /cx/ring/Ring/$part cx.ring.Ring.$part.$op $*
}

dringopreply() {
    part="$1"; shift
    op="$1"; shift
    dbus-send --session --print-reply \
        --dest="cx.ring.Ring" /cx/ring/Ring/$part cx.ring.Ring.$part.$op $*
}

firstaccount() {
    dringopreply ConfigurationManager getAccountList | \
      grep string | awk -F'"' '{print $2}' | head -n 1
}

account=$(firstaccount)

if [ -z "$account" ] ; then
    echo "Missing local account, trying to create it"
    dringop ConfigurationManager addAccount \
      dict:string:string:"Account.type","RING","Account.videoEnabled","false"
    account=$(firstaccount)
    if [ -z "$account" ] ; then
        echo "unable to create local account"
        exit 1
    fi
fi

# Not using dringopreply to ensure $2 can contain spaces
dbus-send --print-reply --session \
  --dest=cx.ring.Ring \
  /cx/ring/Ring/ConfigurationManager \
  cx.ring.Ring.ConfigurationManager.sendTextMessage \
  string:"$account" string:"$1" \
  dict:string:string:"text/plain","$2" 

If you want to check it out yourself, visit the the Jami system project page to learn more, and install the latest Jami client from Debian Unstable or Testing.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: debian, english, sikkerhet, surveillance.
Secure Socket API - a simple and powerful approach for TLS support in software
6th June 2020

As a member of the Norwegian Unix User Group, I have the pleasure of receiving the USENIX magazine ;login: several times a year. I rarely have time to read all the articles, but try to at least skim through them all as there is a lot of nice knowledge passed on there. I even carry the latest issue with me most of the time to try to get through all the articles when I have a few spare minutes.

The other day I came across a nice article titled "The Secure Socket API: TLS as an Operating System Service" with a marvellous idea I hope can make it all the way into the POSIX standard. The idea is as simple as it is powerful. By introducing a new socket() option IPPROTO_TLS to use TLS, and a system wide service to handle setting up TLS connections, one both make it trivial to add TLS support to any program currently using the POSIX socket API, and gain system wide control over certificates, TLS versions and encryption systems used. Instead of doing this:

int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

the program code would be doing this:

int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TLS);

According to the ;login: article, converting a C program to use TLS would normally modify only 5-10 lines in the code, which is amazing when compared to using for example the OpenSSL API.

The project has set up the https://securesocketapi.org/ web site to spread the idea, and the code for a kernel module and the associated system daemon is available from two github repositories: ssa and ssa-daemon. Unfortunately there is no explicit license information with the code, so its copyright status is unclear. A request to solve this about it has been unsolved since 2018-08-17.

I love the idea of extending socket() to gain TLS support, and understand why it is an advantage to implement this as a kernel module and system wide service daemon, but can not help to think that it would be a lot easier to get projects to move to this way of setting up TLS if it was done with a user space approach where programs wanting to use this API approach could just link with a wrapper library.

I recommend you check out this simple and powerful approach to more secure network connections. :)

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: debian, english, sikkerhet, sysadmin.
Jami as a Zoom client, a trick for password protected rooms...
8th May 2020

Half a year ago, I wrote about the Jami communication client, capable of peer-to-peer encrypted communication. It handle both messages, audio and video. It uses distributed hash tables instead of central infrastructure to connect its users to each other, which in my book is a plus. I mentioned briefly that it could also work as a SIP client, which came in handy when the higher educational sector in Norway started to promote Zoom as its video conferencing solution. I am reluctant to use the official Zoom client software, due to their copyright license clauses prohibiting users to reverse engineer (for example to check the security) and benchmark it, and thus prefer to connect to Zoom meetings with free software clients.

Jami worked OK as a SIP client to Zoom as long as there was no password set on the room. The Jami daemon leak memory like crazy (approximately 1 GiB a minute) when I am connected to the video conference, so I had to restart the client every 7-10 minutes, which is not great. I tried to get other SIP Linux clients to work without success, so I decided I would have to live with this wart until someone managed to fix the leak in the dring code base. But another problem showed up once the rooms were password protected. I could not get my dial tone signaling through from Jami to Zoom, and dial tone signaling is used to enter the password when connecting to Zoom. I tried a lot of different permutations with my Jami and Asterisk setup to try to figure out why the signaling did not get through, only to finally discover that the fundamental problem seem to be that Zoom is simply not able to receive dial tone signaling when connecting via SIP. There seem to be nothing wrong with the Jami and Asterisk end, it is simply broken in the Zoom end. I got help from a very skilled VoIP engineer figuring out this last part. And being a very skilled engineer, he was also able to locate a solution for me. Or to be exact, a workaround that solve my initial problem of connecting to password protected Zoom rooms using Jami.

So, how do you do this, I am sure you are wondering by now. The trick is already documented from Zoom, and it is to modify the SIP address to include the room password. What is most surprising about this is that the automatically generated email from Zoom with instructions on how to connect via SIP do not mention this. The SIP address to use normally consist of the room ID (a number), an @ character and the IP address of the Zoom SIP gateway. But Zoom understand a lot more than just the room ID in front of the at sign. The format is "[Meeting ID].[Password].[Layout].[Host Key]", and you can here see how you can both enter password, control the layout (full screen, active presence and gallery) and specify the host key to start the meeting. The full SIP address entered into Jami to provide the password will then look like this (all using made up numbers):

sip:657837644.522827@192.168.169.170

Now if only jami would reduce its memory usage, I could even recommend this setup to others. :)

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: debian, english, sikkerhet, surveillance.
Jami/Ring, finally functioning peer to peer communication client
19th June 2019

Some years ago, in 2016, I wrote for the first time about the Ring peer to peer messaging system. It would provide messaging without any central server coordinating the system and without requiring all users to register a phone number or own a mobile phone. Back then, I could not get it to work, and put it aside until it had seen more development. A few days ago I decided to give it another try, and am happy to report that this time I am able to not only send and receive messages, but also place audio and video calls. But only if UDP is not blocked into your network.

The Ring system changed name earlier this year to Jami. I tried doing web search for 'ring' when I discovered it for the first time, and can only applaud this change as it is impossible to find something called Ring among the noise of other uses of that word. Now you can search for 'jami' and this client and the Jami system is the first hit at least on duckduckgo.

Jami will by default encrypt messages as well as audio and video calls, and try to send them directly between the communicating parties if possible. If this proves impossible (for example if both ends are behind NAT), it will use a central SIP TURN server maintained by the Jami project. Jami can also be a normal SIP client. If the SIP server is unencrypted, the audio and video calls will also be unencrypted. This is as far as I know the only case where Jami will do anything without encryption.

Jami is available for several platforms: Linux, Windows, MacOSX, Android, iOS, and Android TV. It is included in Debian already. Jami also work for those using F-Droid without any Google connections, while Signal do not. The protocol is described in the Ring project wiki. The system uses a distributed hash table (DHT) system (similar to BitTorrent) running over UDP. On one of the networks I use, I discovered Jami failed to work. I tracked this down to the fact that incoming UDP packages going to ports 1-49999 were blocked, and the DHT would pick a random port and end up in the low range most of the time. After talking to the developers, I solved this by enabling the dhtproxy in the settings, thus using TCP to talk to a central DHT proxy instead of peering directly with others. I've been told the developers are working on allowing DHT to use TCP to avoid this problem. I also ran into a problem when trying to talk to the version of Ring included in Debian Stable (Stretch). Apparently the protocol changed between beta2 and the current version, making these clients incompatible. Hopefully the protocol will not be made incompatible in the future.

It is worth noting that while looking at Jami and its features, I came across another communication platform I have not tested yet. The Tox protocol and family of Tox clients. It might become the topic of a future blog post.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: debian, english, sikkerhet, surveillance.
Fetching trusted timestamps using the rfc3161ng python module
8th October 2018

I have earlier covered the basics of trusted timestamping using the 'openssl ts' client. See blog post for 2014, 2016 and 2017 for those stories. But some times I want to integrate the timestamping in other code, and recently I needed to integrate it into Python. After searching a bit, I found the rfc3161 library which seemed like a good fit, but I soon discovered it only worked for python version 2, and I needed something that work with python version 3. Luckily I next came across the rfc3161ng library, a fork of the original rfc3161 library. Not only is it working with python 3, it have fixed a few of the bugs in the original library, and it has an active maintainer. I decided to wrap it up and make it available in Debian, and a few days ago it entered Debian unstable and testing.

Using the library is fairly straight forward. The only slightly problematic step is to fetch the required certificates to verify the timestamp. For some services it is straight forward, while for others I have not yet figured out how to do it. Here is a small standalone code example based on of the integration tests in the library code:

#!/usr/bin/python3

"""

Python 3 script demonstrating how to use the rfc3161ng module to
get trusted timestamps.

The license of this code is the same as the license of the rfc3161ng
library, ie MIT/BSD.

"""

import os
import pyasn1.codec.der
import rfc3161ng
import subprocess
import tempfile
import urllib.request

def store(f, data):
    f.write(data)
    f.flush()
    f.seek(0)

def fetch(url, f=None):
    response = urllib.request.urlopen(url)
    data = response.read()
    if f:
        store(f, data)
    return data

def main():
    with tempfile.NamedTemporaryFile() as cert_f,\
    	 tempfile.NamedTemporaryFile() as ca_f,\
    	 tempfile.NamedTemporaryFile() as msg_f,\
    	 tempfile.NamedTemporaryFile() as tsr_f:

        # First fetch certificates used by service
        certificate_data = fetch('https://freetsa.org/files/tsa.crt', cert_f)
        ca_data_data = fetch('https://freetsa.org/files/cacert.pem', ca_f)

        # Then timestamp the message
        timestamper = \
            rfc3161ng.RemoteTimestamper('http://freetsa.org/tsr',
                                        certificate=certificate_data)
        data = b"Python forever!\n"
        tsr = timestamper(data=data, return_tsr=True)

        # Finally, convert message and response to something 'openssl ts' can verify
        store(msg_f, data)
        store(tsr_f, pyasn1.codec.der.encoder.encode(tsr))
        args = ["openssl", "ts", "-verify",
                "-data", msg_f.name,
	        "-in", tsr_f.name,
		"-CAfile", ca_f.name,
                "-untrusted", cert_f.name]
        subprocess.check_call(args)

if '__main__' == __name__:
   main()

The code fetches the required certificates, store them as temporary files, timestamp a simple message, store the message and timestamp to disk and ask 'openssl ts' to verify the timestamp. A timestamp is around 1.5 kiB in size, and should be fairly easy to store for future use.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, noark5, sikkerhet.
Stortingsflertallet går inn for ny IP-basert sensurinfrastruktur i Norge
24th April 2018

VG, Dagbladet og NRK melder i dag at flertallet i Familie- og kulturkomiteen på Stortinget har bestemt seg for å introdusere en ny sensurinfrastruktur i Norge. Fra før har Norge en «frivillig» sensurinfrastruktur basert på DNS-navn, der de største ISP-ene basert på en liste med DNS-navn forgifter DNS-svar og omdirigerer til et annet IP-nummer enn det som ligger i DNS. Nå kommer altså IP-basert omdirigering i tillegg. Når infrastrukturen er på plass, er sensur av IP-adresser redusert et spørsmål om hvilke IP-nummer som skal blokkeres. Listen over IP-adresser vil naturligvis endre seg etter hvert som myndighetene endrer seg. Det er ingen betryggende tanke.

Tags: norsk, sikkerhet.
«Rapporten ser ikke på informasjonssikkerhet knyttet til personlig integritet»
27th June 2017

Jeg kom over teksten «Killing car privacy by federal mandate» av Leonid Reyzin på Freedom to Tinker i dag, og det gleder meg å se en god gjennomgang om hvorfor det er et urimelig inngrep i privatsfæren å la alle biler kringkaste sin posisjon og bevegelse via radio. Det omtalte forslaget basert på Dedicated Short Range Communication (DSRC) kalles Basic Safety Message (BSM) i USA og Cooperative Awareness Message (CAM) i Europa, og det norske Vegvesenet er en av de som ser ut til å kunne tenke seg å pålegge alle biler å fjerne nok en bit av innbyggernes privatsfære. Anbefaler alle å lese det som står der.

Mens jeg tittet litt på DSRC på biler i Norge kom jeg over et sitat jeg synes er illustrativt for hvordan det offentlige Norge håndterer problemstillinger rundt innbyggernes privatsfære i SINTEF-rapporten «Informasjonssikkerhet i AutoPASS-brikker» av Trond Foss:

«Rapporten ser ikke på informasjonssikkerhet knyttet til personlig integritet.»

Så enkelt kan det tydeligvis gjøres når en vurderer informasjonssikkerheten. Det holder vel at folkene på toppen kan si at «Personvernet er ivaretatt», som jo er den populære intetsigende frasen som gjør at mange tror enkeltindividers integritet tas vare på. Sitatet fikk meg til å undres på hvor ofte samme tilnærming, å bare se bort fra behovet for personlig itegritet, blir valgt når en velger å legge til rette for nok et inngrep i privatsfæren til personer i Norge. Det er jo sjelden det får reaksjoner. Historien om reaksjonene på Helse Sør-Østs tjenesteutsetting er jo sørgelig nok et unntak og toppen av isfjellet, desverre. Tror jeg fortsatt takker nei til både AutoPASS og holder meg så langt unna det norske helsevesenet som jeg kan, inntil de har demonstrert og dokumentert at de verdsetter individets privatsfære og personlige integritet høyere enn kortsiktig gevist og samfunnsnytte.

Tags: norsk, personvern, sikkerhet.
How to talk with your loved ones in private
7th November 2016

A few days ago I ran a very biased and informal survey to get an idea about what options are being used to communicate with end to end encryption with friends and family. I explicitly asked people not to list options only used in a work setting. The background is the uneasy feeling I get when using Signal, a feeling shared by others as a blog post from Sander Venima about why he do not recommend Signal anymore (with feedback from the Signal author available from ycombinator). I wanted an overview of the options being used, and hope to include those options in a less biased survey later on. So far I have not taken the time to look into the individual proposed systems. They range from text sharing web pages, via file sharing and email to instant messaging, VOIP and video conferencing. For those considering which system to use, it is also useful to have a look at the EFF Secure messaging scorecard which is slightly out of date but still provide valuable information.

So, on to the list. There were some used by many, some used by a few, some rarely used ones and a few mentioned but without anyone claiming to use them. Notice the grouping is in reality quite random given the biased self selected set of participants. First the ones used by many:

Then the ones used by a few.

Then the ones used by even fewer people

And finally the ones mentioned by not marked as used by anyone. This might be a mistake, perhaps the person adding the entry forgot to flag it as used?

Given the network effect it seem obvious to me that we as a society have been divided and conquered by those interested in keeping encrypted and secure communication away from the masses. The finishing remarks from Aral Balkan in his talk "Free is a lie" about the usability of free software really come into effect when you want to communicate in private with your friends and family. We can not expect them to allow the usability of communication tool to block their ability to talk to their loved ones.

Note for example the option IRC w/OTR. Most IRC clients do not have OTR support, so in most cases OTR would not be an option, even if you wanted to. In my personal experience, about 1 in 20 I talk to have a IRC client with OTR. For private communication to really be available, most people to talk to must have the option in their currently used client. I can not simply ask my family to install an IRC client. I need to guide them through a technical multi-step process of adding extensions to the client to get them going. This is a non-starter for most.

I would like to be able to do video phone calls, audio phone calls, exchange instant messages and share files with my loved ones, without being forced to share with people I do not know. I do not want to share the content of the conversations, and I do not want to share who I communicate with or the fact that I communicate with someone. Without all these factors in place, my private life is being more or less invaded.

Update 2019-10-08: Børge Dvergsdal, who told me he is Customer Relationship Manager @ Whereby (formerly appear.in), asked if I could mention that appear.in is now renamed and found at https://whereby.com/. And sure, why not. Apparently they changed the name because they were unable to trademark appear.in somewhere... While I am at it, I can mention that Ring changed name to Jami, now available from https://jami.net/. Luckily they were able to have a direct redirect from ring.cx to jami.net, so the user experience is almost the same.

Tags: english, personvern, sikkerhet, surveillance.
Aktivitetsbånd som beskytter privatsfæren
3rd November 2016

Jeg ble så imponert over dagens gladnyhet på NRK, om at Forbrukerrådet klager inn vilkårene for bruk av aktivitetsbånd fra Fitbit, Garmin, Jawbone og Mio til Datatilsynet og forbrukerombudet, at jeg sendte følgende brev til forbrukerrådet for å uttrykke min støtte:

Jeg ble veldig glad over å lese at Forbrukerrådet klager inn flere aktivitetsbånd til Datatilsynet for dårlige vilkår. Jeg har ønsket meg et aktivitetsbånd som kan måle puls, bevegelse og gjerne også andre helserelaterte indikatorer en stund nå. De eneste jeg har funnet i salg gjør, som dere også har oppdaget, graverende inngrep i privatsfæren og sender informasjonen ut av huset til folk og organisasjoner jeg ikke ønsker å dele aktivitets- og helseinformasjon med. Jeg ønsker et alternativ som ikke sender informasjon til skyen, men derimot bruker en fritt og åpent standardisert protokoll (eller i det minste en dokumentert protokoll uten patent- og opphavsrettslige bruksbegrensinger) til å kommunisere med datautstyr jeg kontrollerer. Er jo ikke interessert i å betale noen for å tilrøve seg personopplysninger fra meg. Desverre har jeg ikke funnet noe alternativ så langt.

Det holder ikke å endre på bruksvilkårene for enhetene, slik Datatilsynet ofte legger opp til i sin behandling, når de gjør slik f.eks. Fitbit (den jeg har sett mest på). Fitbit krypterer informasjonen på enheten og sender den kryptert til leverandøren. Det gjør det i praksis umulig både å sjekke hva slags informasjon som sendes over, og umulig å ta imot informasjonen selv i stedet for Fitbit. Uansett hva slags historie som forteller i bruksvilkårene er en jo både prisgitt leverandørens godvilje og at de ikke tvinges av sitt lands myndigheter til å lyve til sine kunder om hvorvidt personopplysninger spres ut over det bruksvilkårene sier. Det er veldokumentert hvordan f.eks. USA tvinger selskaper vha. såkalte National security letters til å utlevere personopplysninger samtidig som de ikke får lov til å fortelle dette til kundene sine.

Stå på, jeg er veldig glade for at dere har sett på saken. Vet dere om aktivitetsbånd i salg i dag som ikke tvinger en til å utlevere aktivitets- og helseopplysninger med leverandøren?

Jeg håper en konkurrent som respekterer kundenes privatliv klarer å nå opp i markedet, slik at det finnes et reelt alternativ for oss som har full tillit til at skyleverandører vil prioritere egen inntjening og myndighetspålegg langt foran kundenes rett til privatliv. Jeg har ingen tiltro til at Datatilsynet vil kreve noe mer enn at vilkårene endres slik at de forklarer eksplisitt i hvor stor grad bruk av produktene utraderer privatsfæren til kundene. Det vil nok gjøre de innklagede armbåndene «lovlige», men fortsatt tvinge kundene til å dele sine personopplysninger med leverandøren.

Tags: norsk, personvern, sikkerhet, surveillance.
Experience and updated recipe for using the Signal app without a mobile phone
10th October 2016

In July I wrote how to get the Signal Chrome/Chromium app working without the ability to receive SMS messages (aka without a cell phone). It is time to share some experiences and provide an updated setup.

The Signal app have worked fine for several months now, and I use it regularly to chat with my loved ones. I had a major snag at the end of my summer vacation, when the the app completely forgot my setup, identity and keys. The reason behind this major mess was running out of disk space. To avoid that ever happening again I have started storing everything in userdata/ in git, to be able to roll back to an earlier version if the files are wiped by mistake. I had to use it once after introducing the git backup. When rolling back to an earlier version, one need to use the 'reset session' option in Signal to get going, and notify the people you talk with about the problem. I assume there is some sequence number tracking in the protocol to detect rollback attacks. The git repository is rather big (674 MiB so far), but I have not tried to figure out if some of the content can be added to a .gitignore file due to lack of spare time.

I've also hit the 90 days timeout blocking, and noticed that this make it impossible to send messages using Signal. I could still receive them, but had to patch the code with a new timestamp to send. I believe the timeout is added by the developers to force people to upgrade to the latest version of the app, even when there is no protocol changes, to reduce the version skew among the user base and thus try to keep the number of support requests down.

Since my original recipe, the Signal source code changed slightly, making the old patch fail to apply cleanly. Below is an updated patch, including the shell wrapper I use to start Signal. The original version required a new user to locate the JavaScript console and call a function from there. I got help from a friend with more JavaScript knowledge than me to modify the code to provide a GUI button instead. This mean that to get started you just need to run the wrapper and click the 'Register without mobile phone' to get going now. I've also modified the timeout code to always set it to 90 days in the future, to avoid having to patch the code regularly.

So, the updated recipe for Debian Jessie:

  1. First, install required packages to get the source code and the browser you need. Signal only work with Chrome/Chromium, as far as I know, so you need to install it.
    apt install git tor chromium
    git clone https://github.com/WhisperSystems/Signal-Desktop.git
    
  2. Modify the source code using command listed in the the patch block below.
  3. Start Signal using the run-signal-app wrapper (for example using `pwd`/run-signal-app).
  4. Click on the 'Register without mobile phone', will in a phone number you can receive calls to the next minute, receive the verification code and enter it into the form field and press 'Register'. Note, the phone number you use will be user Signal username, ie the way others can find you on Signal.
  5. You can now use Signal to contact others. Note, new contacts do not show up in the contact list until you restart Signal, and there is no way to assign names to Contacts. There is also no way to create or update chat groups. I suspect this is because the web app do not have a associated contact database.

I am still a bit uneasy about using Signal, because of the way its main author moxie0 reject federation and accept dependencies to major corporations like Google (part of the code is fetched from Google) and Amazon (the central coordination point is owned by Amazon). See for example the LibreSignal issue tracker for a thread documenting the authors view on these issues. But the network effect is strong in this case, and several of the people I want to communicate with already use Signal. Perhaps we can all move to Ring once it work on my laptop? It already work on Windows and Android, and is included in Debian and Ubuntu, but not working on Debian Stable.

Anyway, this is the patch I apply to the Signal code to get it working. It switch to the production servers, disable to timeout, make registration easier and add the shell wrapper:

cd Signal-Desktop; cat <<EOF | patch -p1
diff --git a/js/background.js b/js/background.js
index 24b4c1d..579345f 100644
--- a/js/background.js
+++ b/js/background.js
@@ -33,9 +33,9 @@
         });
     });
 
-    var SERVER_URL = 'https://textsecure-service-staging.whispersystems.org';
+    var SERVER_URL = 'https://textsecure-service-ca.whispersystems.org';
     var SERVER_PORTS = [80, 4433, 8443];
-    var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com';
+    var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments.s3.amazonaws.com';
     var messageReceiver;
     window.getSocketStatus = function() {
         if (messageReceiver) {
diff --git a/js/expire.js b/js/expire.js
index 639aeae..beb91c3 100644
--- a/js/expire.js
+++ b/js/expire.js
@@ -1,6 +1,6 @@
 ;(function() {
     'use strict';
-    var BUILD_EXPIRATION = 0;
+    var BUILD_EXPIRATION = Date.now() + (90 * 24 * 60 * 60 * 1000);
 
     window.extension = window.extension || {};
 
diff --git a/js/views/install_view.js b/js/views/install_view.js
index 7816f4f..1d6233b 100644
--- a/js/views/install_view.js
+++ b/js/views/install_view.js
@@ -38,7 +38,8 @@
             return {
                 'click .step1': this.selectStep.bind(this, 1),
                 'click .step2': this.selectStep.bind(this, 2),
-                'click .step3': this.selectStep.bind(this, 3)
+                'click .step3': this.selectStep.bind(this, 3),
+                'click .callreg': function() { extension.install('standalone') },
             };
         },
         clearQR: function() {
diff --git a/options.html b/options.html
index dc0f28e..8d709f6 100644
--- a/options.html
+++ b/options.html
@@ -14,7 +14,10 @@
         <div class='nav'>
           <h1>{{ installWelcome }}</h1>
           <p>{{ installTagline }}</p>
-          <div> <a class='button step2'>{{ installGetStartedButton }}</a> </div>
+          <div> <a class='button step2'>{{ installGetStartedButton }}</a>
+	    <br> <a class="button callreg">Register without mobile phone</a>
+
+	  </div>
           <span class='dot step1 selected'></span>
           <span class='dot step2'></span>
           <span class='dot step3'></span>
--- /dev/null   2016-10-07 09:55:13.730181472 +0200
+++ b/run-signal-app   2016-10-10 08:54:09.434172391 +0200
@@ -0,0 +1,12 @@
+#!/bin/sh
+set -e
+cd $(dirname $0)
+mkdir -p userdata
+userdata="`pwd`/userdata"
+if [ -d "$userdata" ] && [ ! -d "$userdata/.git" ] ; then
+    (cd $userdata && git init)
+fi
+(cd $userdata && git add . && git commit -m "Current status." || true)
+exec chromium \
+  --proxy-server="socks://localhost:9050" \
+  --user-data-dir=$userdata --load-and-launch-app=`pwd`
EOF
chmod a+rx run-signal-app

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: debian, english, sikkerhet, surveillance.
NRKs kildevern når NRK-epost deles med utenlands etterretning?
8th October 2016

NRK lanserte for noen uker siden en ny varslerportal som bruker SecureDrop til å ta imot tips der det er vesentlig at ingen utenforstående får vite at NRK er tipset. Det er et langt steg fremover for NRK, og når en leser bloggposten om hva de har tenkt på og hvordan løsningen er satt opp virker det som om de har gjort en grundig jobb der. Men det er ganske mye ekstra jobb å motta tips via SecureDrop, så varslersiden skriver "Nyhetstips som ikke krever denne typen ekstra vern vil vi gjerne ha på nrk.no/03030", og 03030-siden foreslår i tillegg til et webskjema å bruke epost, SMS, telefon, personlig oppmøte og brevpost. Denne artikkelen handler disse andre metodene.

Når en sender epost til en @nrk.no-adresse så vil eposten sendes ut av landet til datamaskiner kontrollert av Microsoft. En kan sjekke dette selv ved å slå opp epostleveringsadresse (MX) i DNS. For NRK er dette i dag "nrk-no.mail.protection.outlook.com". NRK har som en ser valgt å sette bort epostmottaket sitt til de som står bak outlook.com, dvs. Microsoft. En kan sjekke hvor nettverkstrafikken tar veien gjennom Internett til epostmottaket vha. programmet traceroute, og finne ut hvem som eier en Internett-adresse vha. whois-systemet. Når en gjør dette for epost-trafikk til @nrk.no ser en at trafikken fra Norge mot nrk-no.mail.protection.outlook.com går via Sverige mot enten Irland eller Tyskland (det varierer fra gang til gang og kan endre seg over tid).

Vi vet fra introduksjonen av FRA-loven at IP-trafikk som passerer grensen til Sverige avlyttes av Försvarets radioanstalt (FRA). Vi vet videre takket være Snowden-bekreftelsene at trafikk som passerer grensen til Storbritannia avlyttes av Government Communications Headquarters (GCHQ). I tillegg er er det nettopp lansert et forslag i Norge om at forsvarets E-tjeneste skal få avlytte trafikk som krysser grensen til Norge. Jeg er ikke kjent med dokumentasjon på at Irland og Tyskland gjør det samme. Poenget er uansett at utenlandsk etterretning har mulighet til å snappe opp trafikken når en sender epost til @nrk.no. I tillegg er det selvsagt tilgjengelig for Microsoft som er underlagt USAs jurisdiksjon og samarbeider med USAs etterretning på flere områder. De som tipser NRK om nyheter via epost kan dermed gå ut fra at det blir kjent for mange andre enn NRK at det er gjort.

Bruk av SMS og telefon registreres av blant annet telefonselskapene og er tilgjengelig i følge lov og forskrift for blant annet Politi, NAV og Finanstilsynet, i tillegg til IT-folkene hos telefonselskapene og deres overordnede. Hvis innringer eller mottaker bruker smarttelefon vil slik kontakt også gjøres tilgjengelig for ulike app-leverandører og de som lytter på trafikken mellom telefon og app-leverandør, alt etter hva som er installert på telefonene som brukes.

Brevpost kan virke trygt, og jeg vet ikke hvor mye som registreres og lagres av postens datastyrte postsorteringssentraler. Det vil ikke overraske meg om det lagres hvor i landet hver konvolutt kommer fra og hvor den er adressert, i hvert fall for en kortere periode. Jeg vet heller ikke hvem slik informasjon gjøres tilgjengelig for. Det kan være nok til å ringe inn potensielle kilder når det krysses med hvem som kjente til aktuell informasjon og hvor de befant seg (tilgjengelig f.eks. hvis de bærer mobiltelefon eller bor i nærheten).

Personlig oppmøte hos en NRK-journalist er antagelig det tryggeste, men en bør passe seg for å bruke NRK-kantina. Der bryter de nemlig Sentralbanklovens paragraf 14 og nekter folk å betale med kontanter. I stedet krever de at en varsle sin bankkortutsteder om hvor en befinner seg ved å bruke bankkort. Banktransaksjoner er tilgjengelig for bankkortutsteder (det være seg VISA, Mastercard, Nets og/eller en bank) i tillegg til politiet og i hvert fall tidligere med Se & Hør (via utro tjenere, slik det ble avslørt etter utgivelsen av boken «Livet, det forbannede» av Ken B. Rasmussen). Men hvor mange kjenner en NRK-journalist personlig? Besøk på NRK på Marienlyst krever at en registrerer sin ankost elektronisk i besøkssystemet. Jeg vet ikke hva som skjer med det datasettet, men har grunn til å tro at det sendes ut SMS til den en skal besøke med navnet som er oppgitt. Kanskje greit å oppgi falskt navn.

Når så tipset er kommet frem til NRK skal det behandles redaksjonelt i NRK. Der vet jeg via ulike kilder at de fleste journalistene bruker lokalt installert programvare, men noen bruker Google Docs og andre skytjenester i strid med interne retningslinjer når de skriver. Hvordan vet en hvem det gjelder? Ikke vet jeg, men det kan være greit å spørre for å sjekke at journalisten har tenkt på problemstillingen, før en gir et tips. Og hvis tipset omtales internt på epost, er det jo grunn til å tro at også intern eposten vil deles med Microsoft og utenlands etterretning, slik tidligere nevnt, men det kan hende at det holdes internt i NRKs interne MS Exchange-løsning. Men Microsoft ønsker å få alle Exchange-kunder over "i skyen" (eller andre folks datamaskiner, som det jo innebærer), så jeg vet ikke hvor lenge det i så fall vil vare.

I tillegg vet en jo at NRK har valgt å gi nasjonal sikkerhetsmyndighet (NSM) tilgang til å se på intern og ekstern Internett-trafikk hos NRK ved oppsett av såkalte VDI-noder, på tross av protester fra NRKs journalistlag. Jeg vet ikke om den vil kunne snappe opp dokumenter som lagres på interne filtjenere eller dokumenter som lages i de interne webbaserte publiseringssystemene, men vet at hva noden ser etter på nettet kontrolleres av NSM og oppdateres automatisk, slik at det ikke gir så mye mening å sjekke hva noden ser etter i dag når det kan endres automatisk i morgen.

Personlig vet jeg ikke om jeg hadde turt tipse NRK hvis jeg satt på noe som kunne være en trussel mot den bestående makten i Norge eller verden. Til det virker det å være for mange åpninger for utenforstående med andre prioriteter enn NRKs journalistiske fokus. Og den største truslen for en varsler er jo om metainformasjon kommer på avveie, dvs. informasjon om at en har vært i kontakt med en journalist. Det kan være nok til at en kommer i myndighetenes søkelys, og de færreste har nok operasjonell sikkerhet til at vil tåle slik flombelysning på sitt privatliv.

Tags: betalkontant, dld, norsk, personvern, sikkerhet, surveillance.
Unlocking HTC Desire HD on Linux using unruu and fastboot
7th July 2016

Yesterday, I tried to unlock a HTC Desire HD phone, and it proved to be a slight challenge. Here is the recipe if I ever need to do it again. It all started by me wanting to try the recipe to set up an hardened Android installation from the Tor project blog on a device I had access to. It is a old mobile phone with a broken microphone The initial idea had been to just install CyanogenMod on it, but did not quite find time to start on it until a few days ago.

The unlock process is supposed to be simple: (1) Boot into the boot loader (press volume down and power at the same time), (2) select 'fastboot' before (3) connecting the device via USB to a Linux machine, (4) request the device identifier token by running 'fastboot oem get_identifier_token', (5) request the device unlocking key using the HTC developer web site and unlock the phone using the key file emailed to you.

Unfortunately, this only work fi you have hboot version 2.00.0029 or newer, and the device I was working on had 2.00.0027. This apparently can be easily fixed by downloading a Windows program and running it on your Windows machine, if you accept the terms Microsoft require you to accept to use Windows - which I do not. So I had to come up with a different approach. I got a lot of help from AndyCap on #nuug, and would not have been able to get this working without him.

First I needed to extract the hboot firmware from the windows binary for HTC Desire HD downloaded as 'the RUU' from HTC. For this there is is a github project named unruu using libunshield. The unshield tool did not recognise the file format, but unruu worked and extracted rom.zip, containing the new hboot firmware and a text file describing which devices it would work for.

Next, I needed to get the new firmware into the device. For this I followed some instructions available from HTC1Guru.com, and ran these commands as root on a Linux machine with Debian testing:

adb reboot-bootloader
fastboot oem rebootRUU
fastboot flash zip rom.zip
fastboot flash zip rom.zip
fastboot reboot

The flash command apparently need to be done twice to take effect, as the first is just preparations and the second one do the flashing. The adb command is just to get to the boot loader menu, so turning the device on while holding volume down and the power button should work too.

With the new hboot version in place I could start following the instructions on the HTC developer web site. I got the device token like this:

fastboot oem get_identifier_token 2>&1 | sed 's/(bootloader) //'

And once I got the unlock code via email, I could use it like this:

fastboot flash unlocktoken Unlock_code.bin

And with that final step in place, the phone was unlocked and I could start stuffing the software of my own choosing into the device. So far I only inserted a replacement recovery image to wipe the phone before I start. We will see what happen next. Perhaps I should install Debian on it. :)

Tags: bootsystem, debian, english, opphavsrett, sikkerhet.
How to use the Signal app if you only have a land line (ie no mobile phone)
3rd July 2016

For a while now, I have wanted to test the Signal app, as it is said to provide end to end encrypted communication and several of my friends and family are already using it. As I by choice do not own a mobile phone, this proved to be harder than expected. And I wanted to have the source of the client and know that it was the code used on my machine. But yesterday I managed to get it working. I used the Github source, compared it to the source in the Signal Chrome app available from the Chrome web store, applied patches to use the production Signal servers, started the app and asked for the hidden "register without a smart phone" form. Here is the recipe how I did it.

First, I fetched the Signal desktop source from Github, using

git clone https://github.com/WhisperSystems/Signal-Desktop.git

Next, I patched the source to use the production servers, to be able to talk to other Signal users:

cat <<EOF | patch -p0
diff -ur ./js/background.js userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/background.js
--- ./js/background.js  2016-06-29 13:43:15.630344628 +0200
+++ userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/background.js    2016-06-29 14:06:29.530300934 +0200
@@ -47,8 +47,8 @@
         });
     });
 
-    var SERVER_URL = 'https://textsecure-service-staging.whispersystems.org';
-    var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com';
+    var SERVER_URL = 'https://textsecure-service-ca.whispersystems.org:4433';
+    var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments.s3.amazonaws.com';
     var messageReceiver;
     window.getSocketStatus = function() {
         if (messageReceiver) {
diff -ur ./js/expire.js userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/expire.js
--- ./js/expire.js      2016-06-29 13:43:15.630344628 +0200
+++ userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/expire.js2016-06-29 14:06:29.530300934 +0200
@@ -1,6 +1,6 @@
 ;(function() {
     'use strict';
-    var BUILD_EXPIRATION = 0;
+    var BUILD_EXPIRATION = 1474492690000;
 
     window.extension = window.extension || {};
 
EOF

The first part is changing the servers, and the second is updating an expiration timestamp. This timestamp need to be updated regularly. It is set 90 days in the future by the build process (Gruntfile.js). The value is seconds since 1970 times 1000, as far as I can tell.

Based on a tip and good help from the #nuug IRC channel, I wrote a script to launch Signal in Chromium.

#!/bin/sh
cd $(dirname $0)
mkdir -p userdata
exec chromium \
  --proxy-server="socks://localhost:9050" \
  --user-data-dir=`pwd`/userdata --load-and-launch-app=`pwd`

The script start the app and configure Chromium to use the Tor SOCKS5 proxy to make sure those controlling the Signal servers (today Amazon and Whisper Systems) as well as those listening on the lines will have a harder time location my laptop based on the Signal connections if they use source IP address.

When the script starts, one need to follow the instructions under "Standalone Registration" in the CONTRIBUTING.md file in the git repository. I right clicked on the Signal window to get up the Chromium debugging tool, visited the 'Console' tab and wrote 'extension.install("standalone")' on the console prompt to get the registration form. Then I entered by land line phone number and pressed 'Call'. 5 seconds later the phone rang and a robot voice repeated the verification code three times. After entering the number into the verification code field in the form, I could start using Signal from my laptop.

As far as I can tell, The Signal app will leak who is talking to whom and thus who know who to those controlling the central server, but such leakage is hard to avoid with a centrally controlled server setup. It is something to keep in mind when using Signal - the content of your chats are harder to intercept, but the meta data exposing your contact network is available to people you do not know. So better than many options, but not great. And sadly the usage is connected to my land line, thus allowing those controlling the server to associate it to my home and person. I would prefer it if only those I knew could tell who I was on Signal. There are options avoiding such information leakage, but most of my friends are not using them, so I am stuck with Signal for now.

Update 2017-01-10: There is an updated blog post on this topic in Experience and updated recipe for using the Signal app without a mobile phone.

Tags: debian, english, sikkerhet, surveillance.
syslog-trusted-timestamp - chain of trusted timestamps for your syslog
2nd April 2016

Two years ago, I had a look at trusted timestamping options available, and among other things noted a still open bug in the tsget script included in openssl that made it harder than necessary to use openssl as a trusted timestamping client. A few days ago I was told the Norwegian government office DIFI is close to releasing their own trusted timestamp service, and in the process I was happy to learn about a replacement for the tsget script using only curl:

openssl ts -query -data "/etc/shells" -cert -sha256 -no_nonce \
  | curl -s -H "Content-Type: application/timestamp-query" \
         --data-binary "@-" http://zeitstempel.dfn.de > etc-shells.tsr
openssl ts -reply -text -in etc-shells.tsr

This produces a binary timestamp file (etc-shells.tsr) which can be used to verify that the content of the file /etc/shell with the calculated sha256 hash existed at the point in time when the request was made. The last command extract the content of the etc-shells.tsr in human readable form. The idea behind such timestamp is to be able to prove using cryptography that the content of a file have not changed since the file was stamped.

To verify that the file on disk match the public key signature in the timestamp file, run the following commands. It make sure you have the required certificate for the trusted timestamp service available and use it to compare the file content with the timestamp. In production, one should of course use a better method to verify the service certificate.

wget -O ca-cert.txt https://pki.pca.dfn.de/global-services-ca/pub/cacert/chain.txt
openssl ts -verify -data /etc/shells -in etc-shells.tsr -CAfile ca-cert.txt -text

Wikipedia have a lot more information about trusted Timestamping and linked timestamping, and there are several trusted timestamping services around, both as commercial services and as free and public services. Among the latter is the zeitstempel.dfn.de service mentioned above and freetsa.org service linked to from the wikipedia web site. I believe the DIFI service should show up on https://tsa.difi.no, but it is not available to the public at the moment. I hope this will change when it is into production. The RFC 3161 trusted timestamping protocol standard is even implemented in LibreOffice, Microsoft Office and Adobe Acrobat, making it possible to verify when a document was created.

I would find it useful to be able to use such trusted timestamp service to make it possible to verify that my stored syslog files have not been tampered with. This is not a new idea. I found one example implemented on the Endian network appliances where the configuration of such feature was described in 2012.

But I could not find any free implementation of such feature when I searched, so I decided to try to build a prototype named syslog-trusted-timestamp. My idea is to generate a timestamp of the old log files after they are rotated, and store the timestamp in the new log file just after rotation. This will form a chain that would make it possible to see if any old log files are tampered with. But syslog is bad at handling kilobytes of binary data, so I decided to base64 encode the timestamp and add an ID and line sequence numbers to the base64 data to make it possible to reassemble the timestamp file again. To use it, simply run it like this:

syslog-trusted-timestamp /path/to/list-of-log-files

This will send a timestamp from one or more timestamp services (not yet decided nor implemented) for each listed file to the syslog using logger(1). To verify the timestamp, the same program is used with the --verify option:

syslog-trusted-timestamp --verify /path/to/log-file /path/to/log-with-timestamp

The verification step is not yet well designed. The current implementation depend on the file path being unique and unchanging, and this is not a solid assumption. It also uses process number as timestamp ID, and this is bound to create ID collisions. I hope to have time to come up with a better way to handle timestamp IDs and verification later.

Please check out the prototype for syslog-trusted-timestamp on github and send suggestions and improvement, or let me know if there already exist a similar system for timestamping logs already to allow me to join forces with others with the same interest.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, sikkerhet.
Always download Debian packages using Tor - the simple recipe
15th January 2016

During his DebConf15 keynote, Jacob Appelbaum observed that those listening on the Internet lines would have good reason to believe a computer have a given security hole if it download a security fix from a Debian mirror. This is a good reason to always use encrypted connections to the Debian mirror, to make sure those listening do not know which IP address to attack. In August, Richard Hartmann observed that encryption was not enough, when it was possible to interfere download size to security patches or the fact that download took place shortly after a security fix was released, and proposed to always use Tor to download packages from the Debian mirror. He was not the first to propose this, as the apt-transport-tor package by Tim Retout already existed to make it easy to convince apt to use Tor, but I was not aware of that package when I read the blog post from Richard.

Richard discussed the idea with Peter Palfrader, one of the Debian sysadmins, and he set up a Tor hidden service on one of the central Debian mirrors using the address vwakviie2ienjx6t.onion, thus making it possible to download packages directly between two tor nodes, making sure the network traffic always were encrypted.

Here is a short recipe for enabling this on your machine, by installing apt-transport-tor and replacing http and https urls with tor+http and tor+https, and using the hidden service instead of the official Debian mirror site. I recommend installing etckeeper before you start to have a history of the changes done in /etc/.

apt install apt-transport-tor
sed -i 's% http://ftp.debian.org/% tor+http://vwakviie2ienjx6t.onion/%' /etc/apt/sources.list
sed -i 's% http% tor+http%' /etc/apt/sources.list

If you have more sources listed in /etc/apt/sources.list.d/, run the sed commands for these too. The sed command is assuming your are using the ftp.debian.org Debian mirror. Adjust the command (or just edit the file manually) to match your mirror.

This work in Debian Jessie and later. Note that tools like apt-file only recently started using the apt transport system, and do not work with these tor+http URLs. For apt-file you need the version currently in experimental, which need a recent apt version currently only in unstable. So if you need a working apt-file, this is not for you.

Another advantage from this change is that your machine will start using Tor regularly and at fairly random intervals (every time you update the package lists or upgrade or install a new package), thus masking other Tor traffic done from the same machine. Using Tor will become normal for the machine in question.

On Freedombox, APT is set up by default to use apt-transport-tor when Tor is enabled. It would be great if it was the default on any Debian system.

Tags: debian, english, sikkerhet.
PGP key transition statement for key EE4E02F9
17th November 2015

I've needed a new OpenPGP key for a while, but have not had time to set it up properly. I wanted to generate it offline and have it available on a OpenPGP smart card for daily use, and learning how to do it and finding time to sit down with an offline machine almost took forever. But finally I've been able to complete the process, and have now moved from my old GPG key to a new GPG key. See the full transition statement, signed with both my old and new key for the details. This is my new key:

pub   3936R/111D6B29EE4E02F9 2015-11-03 [expires: 2019-11-14]
      Key fingerprint = 3AC7 B2E3 ACA5 DF87 78F1  D827 111D 6B29 EE4E 02F9
uid                  Petter Reinholdtsen <pere@hungry.com>
uid                  Petter Reinholdtsen <pere@debian.org>
sub   4096R/87BAFB0E 2015-11-03 [expires: 2019-11-02]
sub   4096R/F91E6DE9 2015-11-03 [expires: 2019-11-02]
sub   4096R/A0439BAB 2015-11-03 [expires: 2019-11-02]

The key can be downloaded from the OpenPGP key servers, signed by my old key.

If you signed my old key (DB4CCC4B2A30D729), I'd very much appreciate a signature on my new key, details and instructions in the transition statement. I m happy to reciprocate if you have a similarly signed transition statement to present.

Tags: debian, english, sikkerhet.
Lawrence Lessig interviewed Edward Snowden a year ago
19th October 2015

Last year, US president candidate in the Democratic Party Lawrence interviewed Edward Snowden. The one hour interview was published by Harvard Law School 2014-10-23 on Youtube, and the meeting took place 2014-10-20.

The questions are very good, and there is lots of useful information to be learned and very interesting issues to think about being raised. Please check it out.

I find it especially interesting to hear again that Snowden did try to bring up his reservations through the official channels without any luck. It is in sharp contrast to the answers made 2013-11-06 by the Norwegian prime minister Erna Solberg to the Norwegian Parliament, claiming Snowden is no Whistle-Blower because he should have taken up his concerns internally and using official channels. It make me sad that this is the political leadership we have here in Norway.

Tags: english, personvern, sikkerhet, surveillance.
Alle Stortingets mobiltelefoner kontrolleres fra USA...
7th October 2015

Jeg lot meg fascinere av en artikkel i Aftenposten der det fortelles at «over 600 telefoner som benyttes av stortingsrepresentanter, rådgivere og ansatte på Stortinget, kan «fjernstyres» ved hjelp av programvaren Airwatch, et såkalte MDM-program (Mobile Device Managment)». Det hele bagatelliseres av Stortingets IT-stab, men det er i hovedsak på grunn av at journalisten ikke stiller de relevante spørsmålene. For meg er det relevante spørsmålet hvem som har lovlig tilgang (i henhold til lokal lovgiving, dvs. i hvert fall i Norge, Sverige, UK og USA) til informasjon om og på telefonene, og hvor enkelt det er å skaffe seg tilgang til hvor mobilene befinner seg og informasjon som befinner seg på telefonene ved hjelp av utro tjenere, trusler, innbrudd og andre ulovlige metoder.

Bruken av AirWatch betyr i realiteten at USAs etteretning og politimyndigheter har full tilgang til stortingets mobiltelefoner, inkludert posisjon og innhold, takket være FISAAA-loven og "National Security Letters" og det enkle faktum at selskapet AirWatch er kontrollert av et selskap i USA. I tillegg er det kjent at flere lands etterretningstjenester kan lytte på trafikken når den passerer landegrensene.

Jeg har bedt om mer informasjon fra Stortinget om bruken av AirWatch via Mimes brønn så får vi se hva de har å fortelle om saken. Fant ingenting om 'airwatch' i postjournalen til Stortinget, så jeg trenger hjelp før jeg kan be om innsyn i konkrete dokumenter.

Oppdatering 2015-10-07: Jeg er blitt spurt hvorfor jeg antar at AirWatch-agenten rapporterer til USA og ikke direkte til Stortingets egen infrastruktur. Det stemmer at det er teknisk mulig å sette opp mobiltelefonene til å rapportere til datamaskiner som eies av Stortinget. Jeg antar det rapporteres til AirWatch sine sentrale tjenester basert på det jeg leste fra beskrivelsen av Mobile Device Management på AirWatch sine egne nettsider, koblet med at det brukes en standard app som kan hentes fra "app-butikkene" for å få tilgang. Enten må app-en settes opp individuelt hos Stortinget, eller så får den beskjed fra AirWatch i USA om hvor den skal koble seg opp. I det første tilfellet vil den ikke rapportere direkte til USA, men til programvare utviklet av AirWatch som kjører på en maskin under Stortingets kontroll. Det er litt bedre, men fortsatt vil det være umulig for Stortinget å være sikker på hva programvaren som tar imot forbindelser gjør. Jeg ser fra beskrivelsen av Enterprice Integration hos AirWatch at det er mulig å ha lokal installasjon, og håper innsynsforespørsler mot Stortinget kan fortelle mer om hvordan ting konkret fungerer der.

Tags: norsk, offentlig innsyn, personvern, sikkerhet, stortinget, surveillance.
Good bye subkeys.pgp.net, welcome pool.sks-keyservers.net
10th September 2014

Yesterday, I had the pleasure of attending a talk with the Norwegian Unix User Group about the OpenPGP keyserver pool sks-keyservers.net, and was very happy to learn that there is a large set of publicly available key servers to use when looking for peoples public key. So far I have used subkeys.pgp.net, and some times wwwkeys.nl.pgp.net when the former were misbehaving, but those days are ended. The servers I have used up until yesterday have been slow and some times unavailable. I hope those problems are gone now.

Behind the round robin DNS entry of the sks-keyservers.net service there is a pool of more than 100 keyservers which are checked every day to ensure they are well connected and up to date. It must be better than what I have used so far. :)

Yesterdays speaker told me that the service is the default keyserver provided by the default configuration in GnuPG, but this do not seem to be used in Debian. Perhaps it should?

Anyway, I've updated my ~/.gnupg/options file to now include this line:

keyserver pool.sks-keyservers.net

With GnuPG version 2 one can also locate the keyserver using SRV entries in DNS. Just for fun, I did just that at work, so now every user of GnuPG at the University of Oslo should find a OpenGPG keyserver automatically should their need it:

% host -t srv _pgpkey-http._tcp.uio.no
_pgpkey-http._tcp.uio.no has SRV record 0 100 11371 pool.sks-keyservers.net.
%

Now if only the HKP lookup protocol supported finding signature paths, I would be very happy. It can look up a given key or search for a user ID, but I normally do not want that, but to find a trust path from my key to another key. Given a user ID or key ID, I would like to find (and download) the keys representing a signature path from my key to the key in question, to be able to get a trust path between the two keys. This is as far as I can tell not possible today. Perhaps something for a future version of the protocol?

Tags: debian, english, personvern, sikkerhet.
FreedomBox milestone - all packages now in Debian Sid
15th April 2014

The Freedombox project is working on providing the software and hardware to make it easy for non-technical people to host their data and communication at home, and being able to communicate with their friends and family encrypted and away from prying eyes. It is still going strong, and today a major mile stone was reached.

Today, the last of the packages currently used by the project to created the system images were accepted into Debian Unstable. It was the freedombox-setup package, which is used to configure the images during build and on the first boot. Now all one need to get going is the build code from the freedom-maker git repository and packages from Debian. And once the freedombox-setup package enter testing, we can build everything directly from Debian. :)

Some key packages used by Freedombox are freedombox-setup, plinth, pagekite, tor, privoxy, owncloud and dnsmasq. There are plans to integrate more packages into the setup. User documentation is maintained on the Debian wiki. Please check out the manual and help us improve it.

To test for yourself and create boot images with the FreedomBox setup, run this on a Debian machine using a user with sudo rights to become root:

sudo apt-get install git vmdebootstrap mercurial python-docutils \
  mktorrent extlinux virtualbox qemu-user-static binfmt-support \
  u-boot-tools
git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
  freedom-maker
make -C freedom-maker dreamplug-image raspberry-image virtualbox-image

Root access is needed to run debootstrap and mount loopback devices. See the README in the freedom-maker git repo for more details on the build. If you do not want all three images, trim the make line. Note that the virtualbox-image target is not really virtualbox specific. It create a x86 image usable in kvm, qemu, vmware and any other x86 virtual machine environment. You might need the version of vmdebootstrap in Jessie to get the build working, as it include fixes for a race condition with kpartx.

If you instead want to install using a Debian CD and the preseed method, boot a Debian Wheezy ISO and use this boot argument to load the preseed values:

url=http://www.reinholdtsen.name/freedombox/preseed-jessie.dat

I have not tested it myself the last few weeks, so I do not know if it still work.

If you wonder how to help, one task you could look at is using systemd as the boot system. It will become the default for Linux in Jessie, so we need to make sure it is usable on the Freedombox. I did a simple test a few weeks ago, and noticed dnsmasq failed to start during boot when using systemd. I suspect there are other problems too. :) To detect problems, there is a test suite included, which can be run from the plinth web interface.

Give it a go and let us know how it goes on the mailing list, and help us get the new release published. :) Please join us on IRC (#freedombox on irc.debian.org) and the mailing list if you want to help make this vision come true.

Tags: debian, english, freedombox, sikkerhet, surveillance, web.
S3QL, a locally mounted cloud file system - nice free software
9th April 2014

For a while now, I have been looking for a sensible offsite backup solution for use at home. My requirements are simple, it must be cheap and locally encrypted (in other words, I keep the encryption keys, the storage provider do not have access to my private files). One idea me and my friends had many years ago, before the cloud storage providers showed up, was to use Google mail as storage, writing a Linux block device storing blocks as emails in the mail service provided by Google, and thus get heaps of free space. On top of this one can add encryption, RAID and volume management to have lots of (fairly slow, I admit that) cheap and encrypted storage. But I never found time to implement such system. But the last few weeks I have looked at a system called S3QL, a locally mounted network backed file system with the features I need.

S3QL is a fuse file system with a local cache and cloud storage, handling several different storage providers, any with Amazon S3, Google Drive or OpenStack API. There are heaps of such storage providers. S3QL can also use a local directory as storage, which combined with sshfs allow for file storage on any ssh server. S3QL include support for encryption, compression, de-duplication, snapshots and immutable file systems, allowing me to mount the remote storage as a local mount point, look at and use the files as if they were local, while the content is stored in the cloud as well. This allow me to have a backup that should survive fire. The file system can not be shared between several machines at the same time, as only one can mount it at the time, but any machine with the encryption key and access to the storage service can mount it if it is unmounted.

It is simple to use. I'm using it on Debian Wheezy, where the package is included already. So to get started, run apt-get install s3ql. Next, pick a storage provider. I ended up picking Greenqloud, after reading their nice recipe on how to use S3QL with their Amazon S3 service, because I trust the laws in Iceland more than those in USA when it come to keeping my personal data safe and private, and thus would rather spend money on a company in Iceland. Another nice recipe is available from the article S3QL Filesystem for HPC Storage by Jeff Layton in the HPC section of Admin magazine. When the provider is picked, figure out how to get the API key needed to connect to the storage API. With Greencloud, the key did not show up until I had added payment details to my account.

Armed with the API access details, it is time to create the file system. First, create a new bucket in the cloud. This bucket is the file system storage area. I picked a bucket name reflecting the machine that was going to store data there, but any name will do. I'll refer to it as bucket-name below. In addition, one need the API login and password, and a locally created password. Store it all in ~root/.s3ql/authinfo2 like this:

[s3c]
storage-url: s3c://s.greenqloud.com:443/bucket-name
backend-login: API-login
backend-password: API-password
fs-passphrase: local-password

I create my local passphrase using pwget 50 or similar, but any sensible way to create a fairly random password should do it. Armed with these details, it is now time to run mkfs, entering the API details and password to create it:

# mkdir -m 700 /var/lib/s3ql-cache
# mkfs.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
  --ssl s3c://s.greenqloud.com:443/bucket-name
Enter backend login: 
Enter backend password: 
Before using S3QL, make sure to read the user's guide, especially
the 'Important Rules to Avoid Loosing Data' section.
Enter encryption password: 
Confirm encryption password: 
Generating random encryption key...
Creating metadata tables...
Dumping metadata...
..objects..
..blocks..
..inodes..
..inode_blocks..
..symlink_targets..
..names..
..contents..
..ext_attributes..
Compressing and uploading metadata...
Wrote 0.00 MB of compressed metadata.
# 

The next step is mounting the file system to make the storage available.

# mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
  --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
Using 4 upload threads.
Downloading and decompressing metadata...
Reading metadata...
..objects..
..blocks..
..inodes..
..inode_blocks..
..symlink_targets..
..names..
..contents..
..ext_attributes..
Mounting filesystem...
# df -h /s3ql
Filesystem                              Size  Used Avail Use% Mounted on
s3c://s.greenqloud.com:443/bucket-name  1.0T     0  1.0T   0% /s3ql
#

The file system is now ready for use. I use rsync to store my backups in it, and as the metadata used by rsync is downloaded at mount time, no network traffic (and storage cost) is triggered by running rsync. To unmount, one should not use the normal umount command, as this will not flush the cache to the cloud storage, but instead running the umount.s3ql command like this:

# umount.s3ql /s3ql
# 

There is a fsck command available to check the file system and correct any problems detected. This can be used if the local server crashes while the file system is mounted, to reset the "already mounted" flag. This is what it look like when processing a working file system:

# fsck.s3ql --force --ssl s3c://s.greenqloud.com:443/bucket-name
Using cached metadata.
File system seems clean, checking anyway.
Checking DB integrity...
Creating temporary extra indices...
Checking lost+found...
Checking cached objects...
Checking names (refcounts)...
Checking contents (names)...
Checking contents (inodes)...
Checking contents (parent inodes)...
Checking objects (reference counts)...
Checking objects (backend)...
..processed 5000 objects so far..
..processed 10000 objects so far..
..processed 15000 objects so far..
Checking objects (sizes)...
Checking blocks (referenced objects)...
Checking blocks (refcounts)...
Checking inode-block mapping (blocks)...
Checking inode-block mapping (inodes)...
Checking inodes (refcounts)...
Checking inodes (sizes)...
Checking extended attributes (names)...
Checking extended attributes (inodes)...
Checking symlinks (inodes)...
Checking directory reachability...
Checking unix conventions...
Checking referential integrity...
Dropping temporary indices...
Backing up old metadata...
Dumping metadata...
..objects..
..blocks..
..inodes..
..inode_blocks..
..symlink_targets..
..names..
..contents..
..ext_attributes..
Compressing and uploading metadata...
Wrote 0.89 MB of compressed metadata.
# 

Thanks to the cache, working on files that fit in the cache is very quick, about the same speed as local file access. Uploading large amount of data is to me limited by the bandwidth out of and into my house. Uploading 685 MiB with a 100 MiB cache gave me 305 kiB/s, which is very close to my upload speed, and downloading the same Debian installation ISO gave me 610 kiB/s, close to my download speed. Both were measured using dd. So for me, the bottleneck is my network, not the file system code. I do not know what a good cache size would be, but suspect that the cache should e larger than your working set.

I mentioned that only one machine can mount the file system at the time. If another machine try, it is told that the file system is busy:

# mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
  --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
Using 8 upload threads.
Backend reports that fs is still mounted elsewhere, aborting.
#

The file content is uploaded when the cache is full, while the metadata is uploaded once every 24 hour by default. To ensure the file system content is flushed to the cloud, one can either umount the file system, or ask S3QL to flush the cache and metadata using s3qlctrl:

# s3qlctrl upload-meta /s3ql
# s3qlctrl flushcache /s3ql
# 

If you are curious about how much space your data uses in the cloud, and how much compression and deduplication cut down on the storage usage, you can use s3qlstat on the mounted file system to get a report:

# s3qlstat /s3ql
Directory entries:    9141
Inodes:               9143
Data blocks:          8851
Total data size:      22049.38 MB
After de-duplication: 21955.46 MB (99.57% of total)
After compression:    21877.28 MB (99.22% of total, 99.64% of de-duplicated)
Database size:        2.39 MB (uncompressed)
(some values do not take into account not-yet-uploaded dirty blocks in cache)
#

I mentioned earlier that there are several possible suppliers of storage. I did not try to locate them all, but am aware of at least Greenqloud, Google Drive, Amazon S3 web serivces, Rackspace and Crowncloud. The latter even accept payment in Bitcoin. Pick one that suit your need. Some of them provide several GiB of free storage, but the prize models are quite different and you will have to figure out what suits you best.

While researching this blog post, I had a look at research papers and posters discussing the S3QL file system. There are several, which told me that the file system is getting a critical check by the science community and increased my confidence in using it. One nice poster is titled "An Innovative Parallel Cloud Storage System using OpenStack’s SwiftObject Store and Transformative Parallel I/O Approach" by Hsing-Bung Chen, Benjamin McClelland, David Sherrill, Alfred Torrez, Parks Fields and Pamela Smith. Please have a look.

Given my problems with different file systems earlier, I decided to check out the mounted S3QL file system to see if it would be usable as a home directory (in other word, that it provided POSIX semantics when it come to locking and umask handling etc). Running my test code to check file system semantics, I was happy to discover that no error was found. So the file system can be used for home directories, if one chooses to do so.

If you do not want a locally file system, and want something that work without the Linux fuse file system, I would like to mention the Tarsnap service, which also provide locally encrypted backup using a command line client. It have a nicer access control system, where one can split out read and write access, allowing some systems to write to the backup and others to only read from it.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: debian, english, nice free software, personvern, sikkerhet.
EU-domstolen bekreftet i dag at datalagringsdirektivet er ulovlig
8th April 2014

I dag kom endelig avgjørelsen fra EU-domstolen om datalagringsdirektivet, som ikke overraskende ble dømt ulovlig og i strid med borgernes grunnleggende rettigheter. Hvis du lurer på hva datalagringsdirektivet er for noe, så er det en flott dokumentar tilgjengelig hos NRK som jeg tidligere har anbefalt alle å se.

Her er et liten knippe nyhetsoppslag om saken, og jeg regner med at det kommer flere ut over dagen. Flere kan finnes via mylder.

Jeg synes det er veldig fint at nok en stemme slår fast at totalitær overvåkning av befolkningen er uakseptabelt, men det er fortsatt like viktig å beskytte privatsfæren som før, da de teknologiske mulighetene fortsatt finnes og utnyttes, og jeg tror innsats i prosjekter som Freedombox og Dugnadsnett er viktigere enn noen gang.

Update 2014-04-08 12:10: Kronerullingen for å stoppe datalagringsdirektivet i Norge gjøres hos foreningen Digitalt Personvern, som har samlet inn 843 215,- så langt men trenger nok mye mer hvis ikke Høyre og Arbeiderpartiet bytter mening i saken. Det var kun partinene Høyre og Arbeiderpartiet som stemte for Datalagringsdirektivet, og en av dem må bytte mening for at det skal bli flertall mot i Stortinget. Se mer om saken Holder de ord.

Tags: dld, norsk, personvern, sikkerhet, surveillance.
Dokumentaren om Datalagringsdirektivet sendes endelig på NRK
26th March 2014

Foreningen NUUG melder i natt at NRK nå har bestemt seg for når den norske dokumentarfilmen om datalagringsdirektivet skal sendes (se IMDB for detaljer om filmen) . Første visning blir på NRK2 mandag 2014-03-31 kl. 19:50, og deretter visninger onsdag 2014-04-02 kl. 12:30, fredag 2014-04-04 kl. 19:40 og søndag 2014-04-06 kl. 15:10. Jeg har sett dokumentaren, og jeg anbefaler enhver å se den selv. Som oppvarming mens vi venter anbefaler jeg Bjørn Stærks kronikk i Aftenposten fra i går, Autoritær gjøkunge, der han gir en grei skisse av hvor ille det står til med retten til privatliv og beskyttelsen av demokrati i Norge og resten verden, og helt riktig slår fast at det er vi i databransjen som sitter med nøkkelen til å gjøre noe med dette. Jeg har involvert meg i prosjektene dugnadsnett.no og FreedomBox for å forsøke å gjøre litt selv for å bedre situasjonen, men det er mye hardt arbeid fra mange flere enn meg som gjenstår før vi kan sies å ha gjenopprettet balansen.

Jeg regner med at nettutgaven dukker opp på NRKs side om filmen om datalagringsdirektivet om fem dager. Hold et øye med siden, og tips venner og slekt om at de også bør se den.

Tags: dld, freedombox, mesh network, norsk, personvern, sikkerhet, surveillance.
Public Trusted Timestamping services for everyone
25th March 2014

Did you ever need to store logs or other files in a way that would allow it to be used as evidence in court, and needed a way to demonstrate without reasonable doubt that the file had not been changed since it was created? Or, did you ever need to document that a given document was received at some point in time, like some archived document or the answer to an exam, and not changed after it was received? The problem in these settings is to remove the need to trust yourself and your computers, while still being able to prove that a file is the same as it was at some given time in the past.

A solution to these problems is to have a trusted third party "stamp" the document and verify that at some given time the document looked a given way. Such notarius service have been around for thousands of years, and its digital equivalent is called a trusted timestamping service. The Internet Engineering Task Force standardised how such service could work a few years ago as RFC 3161. The mechanism is simple. Create a hash of the file in question, send it to a trusted third party which add a time stamp to the hash and sign the result with its private key, and send back the signed hash + timestamp. Both email, FTP and HTTP can be used to request such signature, depending on what is provided by the service used. Anyone with the document and the signature can then verify that the document matches the signature by creating their own hash and checking the signature using the trusted third party public key. There are several commercial services around providing such timestamping. A quick search for "rfc 3161 service" pointed me to at least DigiStamp, Quo Vadis, Global Sign and Global Trust Finder. The system work as long as the private key of the trusted third party is not compromised.

But as far as I can tell, there are very few public trusted timestamp services available for everyone. I've been looking for one for a while now. But yesterday I found one over at Deutches Forschungsnetz mentioned in a blog by David Müller. I then found a good recipe on how to use the service over at the University of Greifswald.

The OpenSSL library contain both server and tools to use and set up your own signing service. See the ts(1SSL), tsget(1SSL) manual pages for more details. The following shell script demonstrate how to extract a signed timestamp for any file on the disk in a Debian environment:

#!/bin/sh
set -e
url="http://zeitstempel.dfn.de"
caurl="https://pki.pca.dfn.de/global-services-ca/pub/cacert/chain.txt"
reqfile=$(mktemp -t tmp.XXXXXXXXXX.tsq)
resfile=$(mktemp -t tmp.XXXXXXXXXX.tsr)
cafile=chain.txt
if [ ! -f $cafile ] ; then
    wget -O $cafile "$caurl"
fi
openssl ts -query -data "$1" -cert | tee "$reqfile" \
    | /usr/lib/ssl/misc/tsget -h "$url" -o "$resfile"
openssl ts -reply -in "$resfile" -text 1>&2
openssl ts -verify -data "$1" -in "$resfile" -CAfile "$cafile" 1>&2
base64 < "$resfile"
rm "$reqfile" "$resfile"

The argument to the script is the file to timestamp, and the output is a base64 encoded version of the signature to STDOUT and details about the signature to STDERR. Note that due to a bug in the tsget script, you might need to modify the included script and remove the last line. Or just write your own HTTP uploader using curl. :) Now you too can prove and verify that files have not been changed.

But the Internet need more public trusted timestamp services. Perhaps something for Uninett or my work place the University of Oslo to set up?

Tags: english, sikkerhet.
Freedombox on Dreamplug, Raspberry Pi and virtual x86 machine
14th March 2014

The Freedombox project is working on providing the software and hardware for making it easy for non-technical people to host their data and communication at home, and being able to communicate with their friends and family encrypted and away from prying eyes. It has been going on for a while, and is slowly progressing towards a new test release (0.2).

And what day could be better than the Pi day to announce that the new version will provide "hard drive" / SD card / USB stick images for Dreamplug, Raspberry Pi and VirtualBox (or any other virtualization system), and can also be installed using a Debian installer preseed file. The Debian based Freedombox is now based on Debian Jessie, where most of the needed packages used are already present. Only one, the freedombox-setup package, is missing. To try to build your own boot image to test the current status, fetch the freedom-maker scripts and build using vmdebootstrap with a user with sudo access to become root:

git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
  freedom-maker
sudo apt-get install git vmdebootstrap mercurial python-docutils \
  mktorrent extlinux virtualbox qemu-user-static binfmt-support \
  u-boot-tools
make -C freedom-maker dreamplug-image raspberry-image virtualbox-image

Root access is needed to run debootstrap and mount loopback devices. See the README for more details on the build. If you do not want all three images, trim the make line. But note that thanks to a race condition in vmdebootstrap, the build might fail without the patch to the kpartx call.

If you instead want to install using a Debian CD and the preseed method, boot a Debian Wheezy ISO and use this boot argument to load the preseed values:

url=http://www.reinholdtsen.name/freedombox/preseed-jessie.dat

But note that due to a recently introduced bug in apt in Jessie, the installer will currently hang while setting up APT sources. Killing the 'apt-cdrom ident' process when it hang a few times during the installation will get the installation going. This affect all installations in Jessie, and I expect it will be fixed soon.

Give it a go and let us know how it goes on the mailing list, and help us get the new release published. :) Please join us on IRC (#freedombox on irc.debian.org) and the mailing list if you want to help make this vision come true.

Tags: debian, english, freedombox, sikkerhet, surveillance, web.
A fist full of non-anonymous Bitcoins
29th January 2014

Bitcoin is a incredible use of peer to peer communication and encryption, allowing direct and immediate money transfer without any central control. It is sometimes claimed to be ideal for illegal activity, which I believe is quite a long way from the truth. At least I would not conduct illegal money transfers using a system where the details of every transaction are kept forever. This point is investigated in USENIX ;login: from December 2013, in the article "A Fistful of Bitcoins - Characterizing Payments Among Men with No Names" by Sarah Meiklejohn, Marjori Pomarole,Grant Jordan, Kirill Levchenko, Damon McCoy, Geoffrey M. Voelker, and Stefan Savage. They analyse the transaction log in the Bitcoin system, using it to find addresses belong to individuals and organisations and follow the flow of money from both Bitcoin theft and trades on Silk Road to where the money end up. This is how they wrap up their article:

"To demonstrate the usefulness of this type of analysis, we turned our attention to criminal activity. In the Bitcoin economy, criminal activity can appear in a number of forms, such as dealing drugs on Silk Road or simply stealing someone else’s bitcoins. We followed the flow of bitcoins out of Silk Road (in particular, from one notorious address) and from a number of highly publicized thefts to see whether we could track the bitcoins to known services. Although some of the thieves attempted to use sophisticated mixing techniques (or possibly mix services) to obscure the flow of bitcoins, for the most part tracking the bitcoins was quite straightforward, and we ultimately saw large quantities of bitcoins flow to a variety of exchanges directly from the point of theft (or the withdrawal from Silk Road).

As acknowledged above, following stolen bitcoins to the point at which they are deposited into an exchange does not in itself identify the thief; however, it does enable further de-anonymization in the case in which certain agencies can determine (through, for example, subpoena power) the real-world owner of the account into which the stolen bitcoins were deposited. Because such exchanges seem to serve as chokepoints into and out of the Bitcoin economy (i.e., there are few alternative ways to cash out), we conclude that using Bitcoin for money laundering or other illicit purposes does not (at least at present) seem to be particularly attractive."

These researches are not the first to analyse the Bitcoin transaction log. The 2011 paper "An Analysis of Anonymity in the Bitcoin System" by Fergal Reid and Martin Harrigan is summarized like this:

"Anonymity in Bitcoin, a peer-to-peer electronic currency system, is a complicated issue. Within the system, users are identified by public-keys only. An attacker wishing to de-anonymize its users will attempt to construct the one-to-many mapping between users and public-keys and associate information external to the system with the users. Bitcoin tries to prevent this attack by storing the mapping of a user to his or her public-keys on that user's node only and by allowing each user to generate as many public-keys as required. In this chapter we consider the topological structure of two networks derived from Bitcoin's public transaction history. We show that the two networks have a non-trivial topological structure, provide complementary views of the Bitcoin system and have implications for anonymity. We combine these structures with external information and techniques such as context discovery and flow analysis to investigate an alleged theft of Bitcoins, which, at the time of the theft, had a market value of approximately half a million U.S. dollars."

I hope these references can help kill the urban myth that Bitcoin is anonymous. It isn't really a good fit for illegal activites. Use cash if you need to stay anonymous, at least until regular DNA sampling of notes and coins become the norm. :)

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: bitcoin, english, personvern, sikkerhet, usenix.
All drones should be radio marked with what they do and who they belong to
21st November 2013

Drones, flying robots, are getting more and more popular. The most know ones are the killer drones used by some government to murder people they do not like without giving them the chance of a fair trial, but the technology have many good uses too, from mapping and forest maintenance to photography and search and rescue. I am sure it is just a question of time before "bad drones" are in the hands of private enterprises and not only state criminals but petty criminals too. The drone technology is very useful and very dangerous. To have some control over the use of drones, I agree with Daniel Suarez in his TED talk "The kill decision shouldn't belong to a robot", where he suggested this little gem to keep the good while limiting the bad use of drones:

Each robot and drone should have a cryptographically signed I.D. burned in at the factory that can be used to track its movement through public spaces. We have license plates on cars, tail numbers on aircraft. This is no different. And every citizen should be able to download an app that shows the population of drones and autonomous vehicles moving through public spaces around them, both right now and historically. And civic leaders should deploy sensors and civic drones to detect rogue drones, and instead of sending killer drones of their own up to shoot them down, they should notify humans to their presence. And in certain very high-security areas, perhaps civic drones would snare them and drag them off to a bomb disposal facility.

But notice, this is more an immune system than a weapons system. It would allow us to avail ourselves of the use of autonomous vehicles and drones while still preserving our open, civil society.

The key is that every citizen should be able to read the radio beacons sent from the drones in the area, to be able to check both the government and others use of drones. For such control to be effective, everyone must be able to do it. What should such beacon contain? At least formal owner, purpose, contact information and GPS location. Probably also the origin and target position of the current flight. And perhaps some registration number to be able to look up the drone in a central database tracking their movement. Robots should not have privacy. It is people who need privacy.

Tags: english, robot, sikkerhet, surveillance.
Det er jo makta som er mest sårbar ved massiv overvåkning av Internett
26th October 2013

De siste måneders eksponering av den totale overvåkningen som foregår i den vestlige verden dokumenterer hvor sårbare vi er. Men det slår meg at de som er mest sårbare for dette, myndighetspersoner på alle nivåer, neppe har innsett at de selv er de mest interessante personene å lage profiler på, for å kunne påvirke dem.

For å ta et lite eksempel: Stortingets nettsted, www.stortinget.no (og forsåvidt også data.stortinget.no), inneholder informasjon om det som foregår på Stortinget, og jeg antar de største brukerne av informasjonen der er representanter og rådgivere på Stortinget. Intet overraskende med det. Det som derimot er mer skjult er at Stortingets nettsted bruker Google Analytics, hvilket gjør at enhver som besøker nettsidene der også rapporterer om besøket via Internett-linjer som passerer Sverige, England og videre til USA. Det betyr at informasjon om ethvert besøk på stortingets nettsider kan snappes opp av svensk, britisk og USAs etterretningsvesen. De kan dermed holde et øye med hvilke Stortingssaker stortingsrepresentantene synes er interessante å sjekke ut, og hvilke sider rådgivere og andre på stortinget synes er interessant å besøke, når de gjør det og hvilke andre representanter som sjekker de samme sidene omtrent samtidig. Stortingets bruk av Google Analytics gjør det dermed enkelt for utenlands etteretning å spore representantenes aktivitet og interesse. Hvis noen av representantene bruker Google Mail eller noen andre tjenestene som krever innlogging, så vil det være enda enklere å finne ut nøyaktig hvilke personer som bruker hvilke nettlesere og dermed knytte informasjonen opp til enkeltpersoner på Stortinget.

Og jo flere nettsteder som bruker Google Analytics, jo bedre oversikt over stortingsrepresentantenes lesevaner og interesse blir tilgjengelig for svensk, britisk og USAs etterretning. Hva de kan bruke den informasjonen til overlater jeg til leseren å undres over.

Tags: norsk, personvern, sikkerhet, stortinget, surveillance.
Videos about the Freedombox project - for inspiration and learning
27th September 2013

The Freedombox project have been going on for a while, and have presented the vision, ideas and solution several places. Here is a little collection of videos of talks and presentation of the project.

A larger list is available from the Freedombox Wiki.

On other news, I am happy to report that Freedombox based on Debian Jessie is coming along quite well, and soon both Owncloud and using Tor should be available for testers of the Freedombox solution. :) In a few weeks I hope everything needed to test it is included in Debian. The withsqlite package is already in Debian, and the plinth package is pending in NEW. The third and vital part of that puzzle is the metapackage/setup framework, which is still pending an upload. Join us on IRC (#freedombox on irc.debian.org) and the mailing list if you want to help make this vision come true.

Tags: debian, english, freedombox, sikkerhet, surveillance, web.
Recipe to test the Freedombox project on amd64 or Raspberry Pi
10th September 2013

I was introduced to the Freedombox project in 2010, when Eben Moglen presented his vision about serving the need of non-technical people to keep their personal information private and within the legal protection of their own homes. The idea is to give people back the power over their network and machines, and return Internet back to its intended peer-to-peer architecture. Instead of depending on a central service, the Freedombox will give everyone control over their own basic infrastructure.

I've intended to join the effort since then, but other tasks have taken priority. But this summers nasty news about the misuse of trust and privilege exercised by the "western" intelligence gathering communities increased my eagerness to contribute to a point where I actually started working on the project a while back.

The initial Debian initiative based on the vision from Eben Moglen, is to create a simple and cheap Debian based appliance that anyone can hook up in their home and get access to secure and private services and communication. The initial deployment platform have been the Dreamplug, which is a piece of hardware I do not own. So to be able to test what the current Freedombox setup look like, I had to come up with a way to install it on some hardware I do have access to. I have rewritten the freedom-maker image build framework to use .deb packages instead of only copying setup into the boot images, and thanks to this rewrite I am able to set up any machine supported by Debian Wheezy as a Freedombox, using the previously mentioned deb (and a few support debs for packages missing in Debian).

The current Freedombox setup consist of a set of bootstrapping scripts (freedombox-setup), and a administrative web interface (plinth + exmachina + withsqlite), as well as a privacy enhancing proxy based on privoxy (freedombox-privoxy). There is also a web/javascript based XMPP client (jwchat) trying (unsuccessfully so far) to talk to the XMPP server (ejabberd). The web interface is pluggable, and the goal is to use it to enable OpenID services, mesh network connectivity, use of TOR, etc, etc. Not much of this is really working yet, see the project TODO for links to GIT repositories. Most of the code is on github at the moment. The HTTP proxy is operational out of the box, and the admin web interface can be used to add/remove plinth users. I've not been able to do anything else with it so far, but know there are several branches spread around github and other places with lots of half baked features.

Anyway, if you want to have a look at the current state, the following recipes should work to give you a test machine to poke at.

Debian Wheezy amd64

  1. Fetch normal Debian Wheezy installation ISO.
  2. Boot from it, either as CD or USB stick.
  3. Press [tab] on the boot prompt and add this as a boot argument to the Debian installer:

    url=http://www.reinholdtsen.name/freedombox/preseed-wheezy.dat
  4. Answer the few language/region/password questions and pick disk to install on.
  5. When the installation is finished and the machine have rebooted a few times, your Freedombox is ready for testing.

Raspberry Pi Raspbian

  1. Fetch a Raspbian SD card image, create SD card.
  2. Boot from SD card, extend file system to fill the card completely.
  3. Log in and add this to /etc/sources.list:

    deb http://www.reinholdtsen.name/freedombox wheezy main
    
  4. Run this as root:

    wget -O - http://www.reinholdtsen.name/freedombox/BE1A583D.asc | \
       apt-key add -
    apt-get update
    apt-get install freedombox-setup
    /usr/lib/freedombox/setup
    
  5. Reboot into your freshly created Freedombox.

You can test it on other architectures too, but because the freedombox-privoxy package is binary, it will only work as intended on the architectures where I have had time to build the binary and put it in my APT repository. But do not let this stop you. It is only a short "apt-get source -b freedombox-privoxy" away. :)

Note that by default Freedombox is a DHCP server on the 192.168.1.0/24 subnet, so if this is your subnet be careful and turn off the DHCP server by running "update-rc.d isc-dhcp-server disable" as root.

Please let me know if this works for you, or if you have any problems. We gather on the IRC channel #freedombox on irc.debian.org and the project mailing list.

Once you get your freedombox operational, you can visit http://your-host-name:8001/ to see the state of the plint welcome screen (dead end - do not be surprised if you are unable to get past it), and next visit http://your-host-name:8001/help/ to look at the rest of plinth. The default user is 'admin' and the default password is 'secret'.

Tags: debian, english, freedombox, sikkerhet, surveillance, web.
Dr. Richard Stallman, founder of Free Software Foundation, give a talk in Oslo March 1st 2013
27th February 2013

Dr. Richard Stallman, founder of Free Software Foundation, is giving a talk in Oslo March 1st 2013 17:00 to 19:00. The event is public and organised by Norwegian Unix Users Group (NUUG) (where I am the chair of the board) and The Norwegian Open Source Competence Center. The title of the talk is «The Free Software Movement and GNU», with this description:

The Free Software Movement campaigns for computer users' freedom to cooperate and control their own computing. The Free Software Movement developed the GNU operating system, typically used together with the kernel Linux, specifically to make these freedoms possible.

The meeting is open for everyone. Due to space limitations, the doors opens for NUUG members at 16:15, and everyone else at 16:45. I am really curious how many will show up. See the event page for the location details.

Tags: english, opphavsrett, personvern, sikkerhet, surveillance.
1.4 millioner potensielle journalistsamtaler i politiets hender
27th November 2012

I fjor meldte Dagbladet og andre medier at politiet hadde samlet inn informasjon om 1.4 millioner telefonsamtaler i området rundt Akersgata, regjeringskvartalet og Utøya, i forbindelse med etterforskningen rundt bombeattentatet og massemordet 22. juli 2011. Politiadvokat Pål-Fredrik Hjort Kraby fortalte i følge artikkelen at

- «Dette er ikke kun samtaler som knyttes til Breivik. Dette er alle samtaler som er registrert på basestasjoner i tilknytning til både bomba i Regjeringskvartalet og aksjonen på Utøya. Vi må analysere tid, lengde og fra hvilke basestasjoner de er registrert på. Vi prøver å finne ut hvem som har ringt til en hver tid, også i dagene før.»

Det triste og merkelige er at ingen presseoppslag tok opp hva dette egentlig betød for kildevernet. Et stenkast fra regjeringskvartalet befinner redaksjonene til blant annet VG, Dagbladet og Aftenposten seg. Det betyr at et betydelig antall av journalisters samtaler var og er tilgjengelig for politiet. Og dette var ikke en unik hendelse. Politiet henter rutinemessig ut informasjon om telefonsamtaler i kriminaletterforskningen, og en kan gå ut ifra at det ofte vil være noe kriminelt å undersøke nær en redaksjon da redaksjoner holder til i sentrum og tettsteder, der det meste av annen aktivitet i et område også foregår. F.eks. befinner Aftenposten seg like ved Oslo Sentralstasjon, et ganske kriminelt belastet område, der jeg mistenker politiet ofte hente ut samtaleinformasjon. Og avisen Aftenposten annonserte jo for noen år siden at ansatte kun skulle ha mobiltelefon (noe de kanskje angret på da mobilnettet brøt sammen), hvilket betyr at alle samtaler journalistene gjennomfører går via nabolagets mobilbasestasjoner og dermed blir med og analysert når politiet ber om informasjon om mobilsamtaler i området. Det samme gjelder antagelig de fleste mediehus nå for tiden.

Konsekvensen er at en må gå ut i fra at politiet kan få tilgang til informasjon om alle samtaler med journalister, hvilket bør få varslere og andre som vil tipse journalister til å tenke seg to ganger før de ringer en journalist. Det er for meg en svært uheldig situasjon.

Anders Brenne tipset meg om dette tidligere i år, og har skrevet om problemstillingen i sin bok Digitalt kildevern som ble lansert i år og presentert på et NONA-møte i april. Oppsummeringen fra møtet inneholder flere detaljer og bakgrunnsinformasjon. Jeg synes det er besynderlig at så få journalister tar opp denne problemstillingen, og ikke stiller flere kritiske spørsmål til innføringen av datalagringsdirektivet og den raderingen av personvernet som har foregått i Norge i løpet av mange år nå.

Tags: dld, norsk, personvern, sikkerhet, surveillance.
FAD tvinger igjennom BankID-tilgang til personsensitiv informasjon om meg
21st November 2012

I dag fikk jeg svar fra fornyingsdepartementet på min forespørsel om å reservere meg mot at BankID brukes til å få tilgang til informasjon om meg via ID-porten. Like etter at svaret kom fikk jeg beskjed om at min henvendelse har fått saksnummer 12/3446 hos FAD, som dessverre ikke har dukket opp i Offentlig Elektronisk Postjournal ennå. Her er svaret jeg fikk:

Date: Wed, 21 Nov 2012 11:18:52 +0000
From: Hornnes Stig <Stig.Hornnes (at) fad.dep.no>
To: Petter Reinholdtsen
Subject: Reservasjon mot BankID

Hei Petter,

Du har sendt oss forespørsel om at din bruker blir reservert mot bruk av BankID i ID-porten. Det er ikke lagt opp til at enkeltpersoner kan reservere seg på denne måten.

Tanken bak ID-porten er at innbyggerne skal kunne velge hvilken eID de ønsker å bruke for å logge på offentlige tjenester. For å sikre valgfriheten har vi inngått avtaler med BankID, Buypass og Commfides. I tillegg har vi den offentlige MinID, men hvor utstedelse skjer til adresse registrert i folkeregisteret, og derfor ikke er egnet til tjenestene med det høyeste sikkerhetsbehovet.

Sikkerhet er et viktig tema for oss. Alle leverandørene som er i ID-porten i dag, inkl. BankID, har oppfylt både kravene som fremgår av Kravspek PKI (pluss noen tilleggskrav fra Difi i anskaffelsen) og er selvdeklarerte hos Post og Teletilsynet (PT) som har tilsynsansvar for denne typen virksomheter. For BankID sin del ble det gjennomført revisjon av løsningen i 2009, på bestilling fra PT etter en del negative oppslag knyttet til nettopp sikkerheten i løsningen. Det fremkom ingen alvorlige sikkerhetsproblemer i revisjonen.

Når dette er sagt; Ingen løsninger er 100 prosent sikre, verken papirbaserte systemer eller elektroniske. Eksempelvis vil misbruk av identitetsbevis for å urettmessig skaffe seg en e-ID, alltid være en risiko. Men det er en generell risiko for alle nivå 4-e-id-er vi har i Norge per i dag. Det er kriminelt, men det er umulig å være ett hundre prosent sikker på at det ikke kan skje. Vi har imidlertid fokus på å redusere risikoen så mye som mulig, og skal jobbe videre sammen med blant annet Justisdepartementet med ulike tiltak som vil bidra til bedre grunnidentifisering av innbyggere.

Mvh
Stig Hornnes
Rådgiver - FAD

Litt merkelig at de har glemt å legge opp til at enkeltpersoner kan reservere seg på denne måten. FAD burde være klar over problemstillingen med reservasjon, da jeg tok det opp med dem da de presenterte MinID på en presentasjon de holdt på Gardermoen for noen år siden. Det burde jo også være teknisk svært enkelt å få støtte for slikt i en ID-portal. Her må det visst tyngre virkemidler til enn en vennlig forespørsel om å reservere seg. Får tenke igjennom neste steg.

Du lurer kanskje på hva som er problemet med BankID? For å forklare det, er det greit å gå et steg tilbake og beskrive offentlig nøkkel-kryptering, eller asymmetrisk kryptografi som det også kalles. En fin beskrivelse finnes på matematikk.org:

Se for deg at person A har en hengelås og at han sender den til deg (i åpen tilstand), men beholder nøkkelen. Du kan dermed låse inn en hemmelighet ved hjelp av hengelåsen og sende den til A. Bare A kan låse opp igjen, siden bare A har den riktige nøkkelen.

Signering med asymmetrisk kryptering gjør at en kan vite at kun de som har tilgang til nøkkelen har signert et gitt dokument. Mitt problem med BankID er det er utformet slik at banken beholder nøkkelen til hengelåsen og kontraktsmessig har lovet å kun bruke den når jeg ber om det. Det er ikke godt nok for meg. Jeg forventer et system der kun jeg har nøkkelen hvis det skal kunne brukes til å inngå avtaler på mine vegne eller få tilgang til min personsensitive informasjon. Jeg forventer at det velges en teknisk løsning der det er tvingende nødvendig at jeg er involvert når det skal signeres noe på mine vegne. BankID er ikke en slik.

Tags: bankid, norsk, personvern, sikkerhet.
BankID skal ikke gi tilgang til min personsensitive informasjon
16th November 2012

Onsdag i denne uka annonserte Fornyingsdepartementet at de har inngått kontrakt med BankID Norge om bruk av BankID for å la borgerne logge inn på offentlige nettsider der en kan få tilgang til personsensitiv informasjon. Jeg skrev i 2009 litt om hvorfor jeg ikke vil ha BankID — jeg stoler ikke nok på en bank til å gi dem mulighet til å inngå avtaler på mine vegne. Jeg forlanger at jeg skal være involvert når det skal inngås avtaler på mine vegne.

Jeg har derfor valgt å bruke Skandiabanken (det er flere banker som ikke krever BankID, se Wikipedia for en liste) på grunn av at de ikke tvinger sine kunder til å bruke BankID. I motsetning til Postbanken, som løy til meg i 2009 da kundestøtten der sa at det var blitt et krav fra Kreditttilsynet og BBS om at norske banker måtte innføre BankID, har ikke Skandiabanken forsøkt å tvinge meg til å ta i bruk BankID. Jeg fikk nylig endelig spurt Finanstilsynet (de har byttet navn siden 2009), og fikk beskjed fra Frank Robert Berg hos Finanstilsynet i epost 2012-09-17 at Finanstilsynet ikke har fremsatt slike krav. Med andre ord snakket ikke Postbankens kundestøtte sant i 2009.

Når en i tillegg fra oppslag i Aftenposten vet at de som jobber i alle bankene som bruker BankID i dag, det være seg utro tjenere, eller de som lar seg lure av falsk legitimasjon, kan lage og dele ut en BankID som gir tilgang til mine kontoer og rett til å inngå avtaler på mine vegne, blir det viktigere enn noen gang å få reservert seg mot BankID. Det holder ikke å la være å bruke det selv. Jeg sendte derfor følgende epost-brev til Fornyingsdepartementet i går:

Date: Thu, 15 Nov 2012 11:08:31 +0100
From: Petter Reinholdtsen <pere (at) hungry.com>
To: postmottak (at) fad.dep.no
Subject: Forespørsel om reservasjon mot bruk av BankID i ID-porten

Jeg viser til nyheten om at staten har tildelt kontrakt for å levere elektronisk ID for offentlige digitale tjenester til BankID Norge, referert til blant annet i Digi[1] og i FADs pressemelding[2].

1) <URL: http://www.digi.no/906093/staten-gaar-for-bankid >
2) <URL: http://www.regjeringen.no/nb/dep/fad/pressesenter/pressemeldinger/2012/staten-inngar-avtale-med-bankid.html >

Gitt BankIDs utforming, der BankID-utsteder har både privat og offentlig del av kundens nøkkel hos seg, er jeg ikke villig til å gi tilgang til informasjon som hører til min min privatsfære ved hjelp av innlogging med BankID.

Jeg ber derfor herved om at løsningen settes opp slik at ingen kan logge inn som meg på offentlige digitale tjenester ved hjelp av BankID, det vil si at jeg reserverer meg mot enhver bruk av BankID for å logge meg inn på slike tjenester som kan inneholde personsensitiv informasjon om meg.

Jeg har ikke BankID i dag, men som en kan se i oppslag i Aftenposten 2012-09-13[3] er det ikke til hindrer for at andre kan bruke BankID på mine vegne for å få tilgang. Det sikkerhetsproblemet kommer i tillegg til utformingsproblemet omtalt over, og forsterker bare mitt syn på at BankID ikke er aktuelt for meg til noe annet enn å logge inn i en nettbank der banken i større grad bærer risikoen ved misbruk.

3) <URL: http://www.aftenposten.no/nyheter/iriks/Tyver-kan-tappe-kontoen-din---selv-uten-passord-og-pinkode--6989793.html >

Jeg ber om rask tilbakemelding med saksnummer for min henvendelse. Jeg ber videre om bekreftelse på at BankID-innlogging er blokkert når det gjelder tilgang til "min" informasjon hos det offentlige, i forkant av BankID-integrasjon mot ID-porten som i følge pressemeldingen skal komme på plass i løpet av et par uker.

--
Vennlig hilsen
Petter Reinholdtsen

Jeg venter spent på svaret. Jeg mistenker jeg må sende tilsvarende beskjed til mine bankforbindelser for å sikre mine bankkontoer.

Hvis det skal brukes offentlig nøkkel-teknologi til å inngå avtaler på mine vegne og skaffe seg personsensitiv informasjon om meg, så er mitt krav at det kun er jeg som har tilgang på min private nøkkel. Alt annet blir å gi for mye tillit til andre. Med BankID sitter andre på både "min" offentlige og private nøkkel.

Tags: bankid, norsk, personvern, sikkerhet.
The European Central Bank (ECB) take a look at bitcoin
4th November 2012

Slashdot just ran a story about the European Central Bank (ECB) releasing a report (PDF) about virtual currencies and bitcoin. It is interesting to see how a member of the bitcoin community receive the report. As for the future, I suspect the central banks and the governments will outlaw bitcoin if it gain any popularity, to avoid competition. My thoughts go to the Wörgl experiment with negative inflation on cash which was such a success that it was terminated by the Austrian National Bank in 1933. A successful alternative would be a threat to the current money system and gain powerful forces to work against it.

While checking out the current status of bitcoin, I also discovered that the community already seem to have experienced its first pyramid game / Ponzi scheme. Not very surprising, given how members of "small" communities tend to trust each other. I guess enterprising crocks will try again and again, as they do anywhere wealth is available.

Tags: bitcoin, english, personvern, sikkerhet.
The fight for freedom and privacy
18th October 2012

Civil liberties and privacy in the western world are going down the drain, and it is hard to fight against it. I try to do my best, but time is limited. I hope you do your best too. A few years ago I came across a marvellous drawing by Clay Bennett visualising some of what is going on.

«They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.» - Benjamin Franklin

Do you feel safe at the airport? I do not. Do you feel safe when you see a surveillance camera? I do not. Do you feel safe when you leave electronic traces of your behaviour and opinions? I do not. I just remember the Panopticon, and can not help to think that we are slowly transforming our society to a huge Panopticon on our own.

Tags: english, personvern, sikkerhet, surveillance.
Using NVD and CPE to track CVEs in locally maintained software
28th January 2011

The last few days I have looked at ways to track open security issues here at my work with the University of Oslo. My idea is that it should be possible to use the information about security issues available on the Internet, and check our locally maintained/distributed software against this information. It should allow us to verify that no known security issues are forgotten. The CVE database listing vulnerabilities seem like a great central point, and by using the package lists from Debian mapped to CVEs provided by the testing security team, I believed it should be possible to figure out which security holes were present in our free software collection.

After reading up on the topic, it became obvious that the first building block is to be able to name software packages in a unique and consistent way across data sources. I considered several ways to do this, for example coming up with my own naming scheme like using URLs to project home pages or URLs to the Freshmeat entries, or using some existing naming scheme. And it seem like I am not the first one to come across this problem, as MITRE already proposed and implemented a solution. Enter the Common Platform Enumeration dictionary, a vocabulary for referring to software, hardware and other platform components. The CPE ids are mapped to CVEs in the National Vulnerability Database, allowing me to look up know security issues for any CPE name. With this in place, all I need to do is to locate the CPE id for the software packages we use at the university. This is fairly trivial (I google for 'cve cpe $package' and check the NVD entry if a CVE for the package exist).

To give you an example. The GNU gzip source package have the CPE name cpe:/a:gnu:gzip. If the old version 1.3.3 was the package to check out, one could look up cpe:/a:gnu:gzip:1.3.3 in NVD and get a list of 6 security holes with public CVE entries. The most recent one is CVE-2010-0001, and at the bottom of the NVD page for this vulnerability the complete list of affected versions is provided.

The NVD database of CVEs is also available as a XML dump, allowing for offline processing of issues. Using this dump, I've written a small script taking a list of CPEs as input and list all CVEs affecting the packages represented by these CPEs. One give it CPEs with version numbers as specified above and get a list of open security issues out.

Of course for this approach to be useful, the quality of the NVD information need to be high. For that to happen, I believe as many as possible need to use and contribute to the NVD database. I notice RHEL is providing a map from CVE to CPE, indicating that they are using the CPE information. I'm not aware of Debian and Ubuntu doing the same.

To get an idea about the quality for free software, I spent some time making it possible to compare the CVE database from Debian with the CVE database in NVD. The result look fairly good, but there are some inconsistencies in NVD (same software package having several CPEs), and some inaccuracies (NVD not mentioning buggy packages that Debian believe are affected by a CVE). Hope to find time to improve the quality of NVD, but that require being able to get in touch with someone maintaining it. So far my three emails with questions and corrections have not seen any reply, but I hope contact can be established soon.

An interesting application for CPEs is cross platform package mapping. It would be useful to know which packages in for example RHEL, OpenSuSe and Mandriva are missing from Debian and Ubuntu, and this would be trivial if all linux distributions provided CPE entries for their packages.

Tags: debian, english, sikkerhet.
Some thoughts on BitCoins
11th December 2010

As I continue to explore BitCoin, I've starting to wonder what properties the system have, and how it will be affected by laws and regulations here in Norway. Here are some random notes.

One interesting thing to note is that since the transactions are verified using a peer to peer network, all details about a transaction is known to everyone. This means that if a BitCoin address has been published like I did with mine in my initial post about BitCoin, it is possible for everyone to see how many BitCoins have been transfered to that address. There is even a web service to look at the details for all transactions. There I can see that my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b have received 16.06 Bitcoin, the 1LfdGnGuWkpSJgbQySxxCWhv8MHqvwst3 address of Simon Phipps have received 181.97 BitCoin and the address 1MCwBbhNGp5hRm5rC1Aims2YFRe2SXPYKt of EFF have received 2447.38 BitCoins so far. Thank you to each and every one of you that donated bitcoins to support my activity. The fact that anyone can see how much money was transfered to a given address make it more obvious why the BitCoin community recommend to generate and hand out a new address for each transaction. I'm told there is no way to track which addresses belong to a given person or organisation without the person or organisation revealing it themselves, as Simon, EFF and I have done.

In Norway, and in most other countries, there are laws and regulations limiting how much money one can transfer across the border without declaring it. There are money laundering, tax and accounting laws and regulations I would expect to apply to the use of BitCoin. If the Skolelinux foundation (SLX Debian Labs) were to accept donations in BitCoin in addition to normal bank transfers like EFF is doing, how should this be accounted? Given that it is impossible to know if money can cross the border or not, should everything or nothing be declared? What exchange rate should be used when calculating taxes? Would receivers have to pay income tax if the foundation were to pay Skolelinux contributors in BitCoin? I have no idea, but it would be interesting to know.

For a currency to be useful and successful, it must be trusted and accepted by a lot of users. It must be possible to get easy access to the currency (as a wage or using currency exchanges), and it must be easy to spend it. At the moment BitCoin seem fairly easy to get access to, but there are very few places to spend it. I am not really a regular user of any of the vendor types currently accepting BitCoin, so I wonder when my kind of shop would start accepting BitCoins. I would like to buy electronics, travels and subway tickets, not herbs and books. :) The currency is young, and this will improve over time if it become popular, but I suspect regular banks will start to lobby to get BitCoin declared illegal if it become popular. I'm sure they will claim it is helping fund terrorism and money laundering (which probably would be true, as is any currency in existence), but I believe the problems should be solved elsewhere and not by blaming currencies.

The process of creating new BitCoins is called mining, and it is CPU intensive process that depend on a bit of luck as well (as one is competing against all the other miners currently spending CPU cycles to see which one get the next lump of cash). The "winner" get 50 BitCoin when this happen. Yesterday I came across the obvious way to join forces to increase ones changes of getting at least some coins, by coordinating the work on mining BitCoins across several machines and people, and sharing the result if one is lucky and get the 50 BitCoins. Check out BitCoin Pool if this sounds interesting. I have not had time to try to set up a machine to participate there yet, but have seen that running on ones own for a few days have not yield any BitCoins througth mining yet.

Update 2010-12-15: Found an interesting criticism of bitcoin. Not quite sure how valid it is, but thought it was interesting to read. The arguments presented seem to be equally valid for gold, which was used as a currency for many years.

Tags: bitcoin, debian, english, personvern, sikkerhet.
Pornoskannerne på flyplassene bedrer visst ikke sikkerheten
11th December 2010

Via en blogpost fra Simon Phipps i går, fant jeg en referanse til en artikkel i Washington Times som igjen refererer til en artikkel i det fagfellevurderte tidsskriftet Journal of Transportation Security med tittelen "An evaluation of airport x-ray backscatter units based on image characteristics" som enkelt konstaterer at pornoscannerne som kler av reisende på flyplasser ikke er i stand til å avsløre det produsenten og amerikanske myndigheter sier de skal avsløre. Kort sagt, de bedrer ikke sikkerheten. Reisende må altså la ansatte på flyplasser se dem nakne eller la seg beføle i skrittet uten grunn. Jeg vil fortsette å nekte å bruke disse pornoskannerne, unngå flyplasser der de er tatt i bruk, og reise med andre transportmidler enn fly hvis jeg kan.

Tags: norsk, personvern, sikkerhet.
Now accepting bitcoins - anonymous and distributed p2p crypto-money
10th December 2010

With this weeks lawless governmental attacks on Wikileak and free speech, it has become obvious that PayPal, visa and mastercard can not be trusted to handle money transactions. A blog post from Simon Phipps on bitcoin reminded me about a project that a friend of mine mentioned earlier. I decided to follow Simon's example, and get involved with BitCoin. I got some help from my friend to get it all running, and he even handed me some bitcoins to get started. I even donated a few bitcoins to Simon for helping me remember BitCoin.

So, what is bitcoins, you probably wonder? It is a digital crypto-currency, decentralised and handled using peer-to-peer networks. It allows anonymous transactions and prohibits central control over the transactions, making it impossible for governments and companies alike to block donations and other transactions. The source is free software, and while the key dependency wxWidgets 2.9 for the graphical user interface is missing in Debian, the command line client builds just fine. Hopefully Jonas will get the package into Debian soon.

Bitcoins can be converted to other currencies, like USD and EUR. There are companies accepting bitcoins when selling services and goods, and there are even currency "stock" markets where the exchange rate is decided. There are not many users so far, but the concept seems promising. If you want to get started and lack a friend with any bitcoins to spare, you can even get some for free (0.05 bitcoin at the time of writing). Use BitcoinWatch to keep an eye on the current exchange rates.

As an experiment, I have decided to set up bitcoind on one of my machines. If you want to support my activity, please send Bitcoin donations to the address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Thank you!

Tags: bitcoin, debian, english, personvern, sikkerhet.
DND hedrer overvåkning av barn med Rosingsprisen
23rd November 2010

Jeg registrerer med vond smak i munnen at Den Norske Dataforening hedrer overvåkning av barn med Rosingsprisen for kreativitet i år. Jeg er glad jeg nå er meldt ut av DND.

Å elektronisk overvåke sine barn er ikke å gjøre dem en tjeneste, men et overgrep mot individer i utvikling som bør læres opp til å ta egne valg.

For å sitere Datatilsynets nye leder, Bjørn Erik Thon, i et intervju med Computerworld Norge:

- For alle som har barn, meg selv inkludert, er førstetanken at det hadde vært fint å vite hvor barnet sitt er til enhver tid. Men ungene har ikke godt av det. De er små individer som skal søke rundt og finne sine små gjemmesteder og utvide horisonten, uten at foreldrene ser dem i kortene. Det kan være fristende, men jeg ville ikke gått inn i dette.

Det er skremmende å se at DND mener en tjeneste som legger opp til slike overgrep bør hedres. Å flytte oppveksten for barn inn i en virtuell Panopticon er et grovt overgrep og vil gjøre skade på barnenes utvikling, og foreldre burde tenke seg godt om før de gir etter for sine instinkter her.

Blipper-tjenesten får meg til å tenke på bøkene til John Twelve Hawks, som forbilledlig beskriver hvordan et totalitært overvåkningssamfunn bygges sakte men sikkert rundt oss, satt sammen av gode intensjoner og manglende bevissthet om hvilke prinsipper et liberalt demokrati er fundamentert på. Jeg har hatt stor glede av å lese alle de tre bøkene.

Tags: norsk, personvern, sikkerhet.
Datatilsynet mangler verktøyet som trengs for å kontrollere kameraovervåkning
9th November 2010

En stund tilbake ble jeg oppmerksom på at Datatilsynets verktøy for å holde rede på overvåkningskamera i Norge ikke var egnet til annet enn å lage statistikk, og ikke kunne brukes for å kontrollere om et overvåkningskamera i det offentlige rom er lovlig satt opp og registrert. For å teste hypotesen sendte jeg for noen dager siden følgende spørsmål til datatilsynet. Det omtalte kameraet står litt merkelig plassert i veigrøften ved gangstien langs Sandakerveien, og jeg lurer oppriktig på om det er lovlig plassert og registrert.

Date: Tue, 2 Nov 2010 16:08:20 +0100
From: Petter Reinholdtsen <pere (at) hungry.com>
To: postkasse (at) datatilsynet.no
Subject: Er overvåkningskameraet korrekt registrert?

Hei.

I Nydalen i Oslo er det mange overvåkningskamera, og et av dem er spesielt merkelig plassert like over et kumlokk. Jeg lurer på om dette kameraet er korrekt registrert og i henhold til lovverket.

Finner ingen eierinformasjon på kameraet, og dermed heller ingenting å søke på i <URL: http://hetti.datatilsynet.no/melding/report_search.pl >. Kartreferanse for kameraet er tilgjengelig fra <URL: https://people.skolelinux.no/pere/surveillance-norway/?zoom=17&lat=59.94918&lon=10.76962&layers=B0T >.

Kan dere fortelle meg om dette kameraet er registrert hos Datatilsynet som det skal være i henhold til lovverket?

Det hadde forresten vært fint om rådata fra kameraregisteret var tilgjengelig på web og regelmessig oppdatert, for å kunne søke på andre ting enn organisasjonsnavn og -nummer ved å laste det ned og gjøre egne søk.

Vennlig hilsen,
--
Petter Reinholdtsen

Her er svaret som kom dagen etter:

Date: Wed, 3 Nov 2010 14:44:09 +0100
From: "juridisk" <juridisk (at) Datatilsynet.no>
To: Petter Reinholdtsen
Subject: VS: Er overvåkningskameraet korrekt registrert?

Viser til e-post av 2. november.

Datatilsynet er det forvaltningsorganet som skal kontrollere at personopplysningsloven blir fulgt. Formålet med loven er å verne enkeltpersoner mot krenking av personvernet gjennom behandling av personopplysninger.

Juridisk veiledningstjeneste hos Datatilsynet gir råd og veiledning omkring personopplysningslovens regler på generelt grunnlag.

Datatilsynet har dessverre ikke en fullstendig oversikt over alle kameraer, den oversikten som finner er i vår meldingsdatabase som du finner her: http://www.datatilsynet.no/templates/article____211.aspx

Denne databasen gir en oversikt over virksomheter som har meldt inn kameraovervåkning. Dersom man ikek vet hvilken virksomhet som er ansvarlig, er det heller ikke mulig for Datatilsynet å søke dette opp.

Webkameraer som har så dårlig oppløsning at man ikke kan gjenkjenne enkeltpersoner er ikke meldepliktige, da dette ikke anses som kameraovervåkning i personopplysningslovens forstand. Dersom kameraet du sikter til er et slikt webkamera, vil det kanskje ikke finnes i meldingsdatabasen på grunn av dette. Også dersom et kamera med god oppløsning ikke filmer mennesker, faller det utenfor loven.

Datatilsynet har laget en veileder som gjennomgår når det er lov å overvåke med kamera, se lenke: http://www.datatilsynet.no/templates/article____401.aspx

Dersom det ikke er klart hvem som er ansvarlig for kameraet, er det vanskelig for Datatilsynet å ta kontakt med den ansvarlige for å få avklart om kameraet er satt opp i tråd med tilsynets regelverk. Dersom du mener at kameraet ikke er lovlig ut fra informasjonen ovenfor, kan kameraet anmeldes til politiet.

Med vennlig hilsen

Maria Bakke
Juridisk veiledningstjeneste
Datatilsynet

Personlig synes jeg det bør være krav om å registrere hvert eneste overvåkningskamera i det offentlige rom hos Datatilsynet, med kartreferanse og begrunnelse om hvorfor det er satt opp, slik at enhver borger enkelt kan hente ut kart over områder vi er interessert i og sjekke om det er overvåkningskamera der som er satt opp uten å være registert. Slike registreringer skal jo i dag fornyes regelmessing, noe jeg mistenker ikke blir gjort. Dermed kan kamera som en gang var korrekt registrert nå være ulovlig satt opp. Det burde også være bøter for å ha kamera som ikke er korrekt registrert, slik at en ikke kan ignorere registrering uten at det får konsekvenser.

En ide fra England som jeg har sans (lite annet jeg har sans for når det gjelder overvåkningskamera i England) for er at enhver borger kan be om å få kopi av det som er tatt opp med et overvåkningskamera i det offentlige rom, noe som gjør at det kan komme løpende utgifter ved å sette overvåkningskamera. Jeg tror alt som gjør det mindre attraktivt å ha overvåkningskamera i det offentlige rom er en god ting, så et slikt lovverk i Norge tror jeg hadde vært nyttig.

Tags: norsk, personvern, sikkerhet, surveillance.
Datatilsynet svarer om Bilkollektivets ønske om GPS-sporing
14th October 2010

I forbindelse med Bilkollektivets plan om å skaffe seg mulighet til å GPS-spore sine medlemmers bevegelser (omtalt tidligere), sendte jeg avgårde et spørsmål til Datatilsynet for å gjøre dem oppmerksom på saken og høre hva de hadde å si. Her er korrespondansen så langt.

Date: Thu, 23 Sep 2010 13:38:55 +0200
From: Petter Reinholdtsen
To: postkasse@datatilsynet.no
Subject: GPS-sporing av privatpersoners bruk av bil?

Hei. Jeg er med i Bilkollektivet[1] her i Oslo, og ble i dag orientert om at de har tenkt å innføre GPS-sporing av bilene og krever at en for fremtidig bruk skal godkjenne følgende klausul i bruksvilkårene[2]:

Andelseier er med dette gjort kjent med at bilene er utstyrt med sporingsutstyr, som kan benyttes av Bilkollektivet til å spore biler som brukes utenfor gyldig reservasjon.

Er slik sporing meldepliktig til datatilsynet? Har Bilkollektivet meldt dette til Datatilsynet? Forsøkte å søke på orgnr. 874 538 892 på søkesiden for meldinger[3], men fant intet der.

Hva er datatilsynets syn på slik sporing av privatpersoners bruk av bil?

Jeg må innrømme at jeg forventer å kunne ferdes anonymt og uten radiomerking i Norge, og synes GPS-sporing av bilen jeg ønsker å bruke i så måte er et overgrep mot privatlivets fred. For meg er det et prinsipielt spørsmål og det er underordnet hvem og med hvilket formål som i første omgang sies å skulle ha tilgang til sporingsinformasjonen. Jeg vil ikke ha mulighet til å sjekke eller kontrollere når bruksområdene utvides, og erfaring viser jo at bruksområder utvides når informasjon først er samlet inn.

1 <URL: http://www.bilkollektivet.no/ >
2 <URL: http://www.bilkollektivet.no/bilbruksregler.26256.no.html >
3 <URL: http://hetti.datatilsynet.no/melding/report_search.pl >

Vennlig hilsen,
--
Petter Reinholdtsen

Svaret fra Datatilsynet kom dagen etter:

Date: Fri, 24 Sep 2010 11:24:17 +0200
From: Henok Tesfazghi
To: Petter Reinholdtsen
Subject: VS: GPS-sporing av privatpersoners bruk av bil?

Viser til e-post av 23. september 2010.

Datatilsynet er det forvaltningsorganet som skal kontrollere at personopplysningsloven blir fulgt. Formålet med loven er å verne enkeltpersoner mot krenking av personvernet gjennom behandling av personopplysninger. Vi gjør oppmerksom på at vår e-post svartjeneste er ment å være en kortfattet rådgivningstjeneste, slik at vi av den grunn ikke kan konkludere i din sak, men gi deg innledende råd og veiledning. Vårt syn er basert på din fremstilling av saksforholdet, andre opplysninger vi eventuelt ikke kjenner til og som kan være relevante, vil kunne medføre et annet resultat.

Det er uklart for Datatilsynet hva slags GPS-sporing Bilkollektivet her legger opp til. Dette skyldes blant annet manglende informasjon i forhold til hvilket formål GPS-sporingen har, hvordan det er ment å fungere, hvilket behandlingsgrunnlag som ligger til grunn, samt om opplysningene skal lagres eller ikke.

Behandlingen vil i utgangspunket være meldepliktig etter personopplysningslovens § 31. Det finnes en rekke unntak fra meldeplikten som er hjemlet i personopplysningsforskriftens kapittel 7. Da dette er et andelslag, og andelseiere i en utstrekning også kan karakteriseres som kunder, vil unntak etter personopplysningsforskriftens § 7-7 kunne komme til anvendelse, se lenke: http://lovdata.no/for/sf/fa/ta-20001215-1265-009.html#7-7

Datatilsynet har til orientering en rekke artikler som omhandler henholdsvis sporing og lokalisering, samt trafikanter og passasjerer, se lenke:
http://www.datatilsynet.no/templates/article____1730.aspx og
http://www.datatilsynet.no/templates/article____1098.aspx

Vennlig hilsen
Henok Tesfazghi
Rådgiver, Datatilsynet

Vet ennå ikke om jeg har overskudd til å ta opp kampen i Bilkollektivet, mellom barnepass og alt det andre som spiser opp dagene, eller om jeg bare finner et annet alternativ.

Tags: norsk, personvern, sikkerhet.
Bilkollektivet vil ha retten til å se hvor jeg kjører...
23rd September 2010

Jeg er med i Bilkollektivet her i Oslo, og har inntil i dag vært fornøyd med opplegget. I dag kom det brev fra bilkollektivet, der de forteller om nytt webopplegg og nye rutiner, og at de har tenkt å angripe min rett til å ferdes anonymt som bruker av Bilkollektivet. Det gjorde meg virkelig trist å lese.

Brevet datert 2010-09-16 forteller at Bilkollektivet har tenkt å gå over til biler med "bilcomputer" og innebygget sporings-GPS som lar administrasjonen i bilkollektivet se hvor bilene er til en hver tid, noe som betyr at de også kan se hvor jeg kjører når jeg bruker Bilkollektivet. Retten til å ferdes anonymt er som tidligere nevnt viktig for meg, og jeg finner det uakseptabelt å måtte godta å bli radiomerket for å kunne bruke bil. Har ikke satt meg inn i hva som er historien for denne endringen, så jeg vet ikke om det er godkjent av f.eks. andelseiermøtet. Ser at nye bilbruksregler med følgende klausul ble vedtatt av styret 2010-08-26:

Andelseier er med dette gjort kjent med at bilene er utstyrt med sporingsutstyr, som kan benyttes av Bilkollektivet til å spore biler som brukes utenfor gyldig reservasjon.

For meg er det prinsipielt uakseptabelt av Bilkollektivet å skaffe seg muligheten til å se hvor jeg befinner meg, og det er underordnet når informasjonen blir brukt og hvem som får tilgang til den. Får se om jeg har energi til å forsøke å endre planene til Bilkollektivet eller bare ser meg om etter alternativer.

Tags: norsk, personvern, sikkerhet.
Anonym ferdsel er en menneskerett
15th September 2010

Debatten rundt sporveiselskapet i Oslos (Ruter AS) ønske om å radiomerke med RFID alle sine kunder og registrere hvor hver og en av oss beveger oss pågår, og en ting som har kommet lite frem i debatten er at det faktisk er en menneskerett å kunne ferdes anonymt internt i ens eget land.

Fant en grei kilde for dette i et skriv fra Datatilsynet til Samferdselsdepartementet om tema:

Retten til å ferdes anonymt kan utledes av menneskerettskonvensjonen artikkel 8 og av EUs personverndirektiv. Her heter det at enkeltpersoners grunnleggende rettigheter og frihet må respekteres, særlig retten til privatlivets fred. I både personverndirektivet og i den norske personopplysningsloven er selvråderetten til hver enkelt et av grunnprinsippene, hovedsaklig uttrykt ved at en må gi et frivillig, informert og uttrykkelig samtykke til behandling av personopplysninger.

For meg er det viktig at jeg kan ferdes anonymt, og det er litt av bakgrunnen til at jeg handler med kontanter, ikke har mobiltelefon og forventer å kunne reise med bil og kollektivtrafikk uten at det blir registrert hvor jeg har vært. Ruter angriper min rett til å ferdes uten radiopeiler med sin innføring av RFID-kort, og dokumenterer sitt ønske om å registrere hvor kundene befant seg ved å ønske å gebyrlegge oss som ikke registrerer oss hver gang vi beveger oss med kollektivtrafikken i Oslo. Jeg synes det er hårreisende.

Tags: betalkontant, norsk, nuug, personvern, ruter, sikkerhet.
Forslag i stortinget om å stoppe elektronisk stemmegiving i Norge
31st August 2010

Ble tipset i dag om at et forslag om å stoppe forsøkene med elektronisk stemmegiving utenfor valglokaler er til behandling i Stortinget. Forslaget er fremmet av Erna Solberg, Michael Tetzschner og Trond Helleland.

Håper det får flertall.

Tags: norsk, nuug, sikkerhet, valg.
Sikkerhetsteateret på flyplassene fortsetter
28th August 2010

Jeg skrev for et halvt år siden hvordan samfunnet kaster bort ressurser på sikkerhetstiltak som ikke fungerer. Kom nettopp over en historie fra en pilot fra USA som kommenterer det samme. Jeg mistenker det kun er uvitenhet og autoritetstro som gjør at så få protesterer. Har veldig sans for piloten omtalt i Aftenposten 2007-10-23, og skulle ønske flere rettet oppmerksomhet mot problemet. Det gir ikke meg trygghetsfølelse på flyplassene når jeg ser at flyplassadministrasjonen kaster bort folk, penger og tid på tull i stedet for ting som bidrar til reell økning av sikkerheten. Det forteller meg jo at vurderingsevnen til de som burde bidra til økt sikkerhet er svært sviktende, noe som ikke taler godt for de andre tiltakene.

Mon tro hva som skjer hvis det fantes en enkel brosjyre å skrive ut fra Internet som forklarte hva som er galt med sikkerhetsopplegget på flyplassene, og folk skrev ut og la en bunke på flyplassene når de passerte. Kanskje det ville fått flere til å få øynene opp for problemet.

Personlig synes jeg flyopplevelsen er blitt så avskyelig at jeg forsøker å klare meg med tog, bil og båt for å slippe ubehaget. Det er dog noe vanskelig i det langstrakte Norge og for å kunne besøke de delene av verden jeg ønsker å nå. Mistenker at flere har det slik, og at dette går ut over inntjeningen til flyselskapene. Det er antagelig en god ting sett fra et miljøperspektiv, men det er en annen sak.

Tags: norsk, nuug, personvern, sikkerhet.
Elektronisk stemmegiving er ikke til å stole på - heller ikke i Norge
23rd August 2010

I Norge pågår en prosess for å innføre elektronisk stemmegiving ved kommune- og stortingsvalg. Dette skal introduseres i 2011. Det er all grunn til å tro at valg i Norge ikke vil være til å stole på hvis dette blir gjennomført. Da det hele var oppe til høring i 2006 forfattet jeg en høringsuttalelse fra NUUG (og EFN som hengte seg på) som skisserte hvilke punkter som må oppfylles for at en skal kunne stole på et valg, og elektronisk stemmegiving mangler flere av disse. Elektronisk stemmegiving er for alle praktiske formål å putte ens stemme i en sort boks under andres kontroll, og satse på at de som har kontroll med boksen er til å stole på - uten at en har mulighet til å verifisere dette selv. Det er ikke slik en gjennomfører demokratiske valg.

Da problemet er fundamentalt med hvordan elektronisk stemmegiving må fungere for at også ikke-krypografer skal kunne delta, har det vært mange rapporter om hvordan elektronisk stemmegiving har sviktet i land etter land. En liten samling referanser finnes på NUUGs wiki. Den siste er fra India, der valgkomisjonen har valgt å pusse politiet på en forsker som har dokumentert svakheter i valgsystemet.

Her i Norge har en valgt en annen tilnærming, der en forsøker seg med teknobabbel for å få befolkningen til å tro at dette skal bli sikkert. Husk, elektronisk stemmegiving underminerer de demokratiske valgene i Norge, og bør ikke innføres.

Den offentlige diskusjonen blir litt vanskelig av at media har valgt å kalle dette "evalg", som kan sies å både gjelde elektronisk opptelling av valget som Norge har gjort siden 60-tallet og som er en svært god ide, og elektronisk opptelling som er en svært dårlig ide. Diskusjonen gir ikke mening hvis en skal diskutere om en er for eller mot "evalg", og jeg forsøker derfor å være klar på at jeg snakker om elektronisk stemmegiving og unngå begrepet "evalg".

Tags: norsk, nuug, sikkerhet, valg.
Rob Weir: How to Crush Dissent
15th August 2010

I found the notes from Rob Weir on how to crush dissent matching my own thoughts on the matter quite well. Highly recommended for those wondering which road our society should go down. In my view we have been heading the wrong way for a long time.

Tags: english, lenker, nuug, personvern, sikkerhet.
One step closer to single signon in Debian Edu
25th July 2010

The last few months me and the other Debian Edu developers have been working hard to get the Debian/Squeeze based version of Debian Edu/Skolelinux into shape. This future version will use Kerberos for authentication, and services are slowly migrated to single signon, getting rid of password questions one at the time.

It will also feature a roaming workstation profile with local home directory, for laptops that are only some times on the Skolelinux network, and for this profile a shortcut is created in Gnome and KDE to gain access to the users home directory on the file server. This shortcut uses SMB at the moment, and yesterday I had time to test if SMB mounting had started working in KDE after we added the cifs-utils package. I was pleasantly surprised how well it worked.

Thanks to the recent changes to our samba configuration to get it to use Kerberos for authentication, there were no question about user password when mounting the SMB volume. A simple click on the shortcut in the KDE menu, and a window with the home directory popped up. :)

One step closer to a single signon solution out of the box in Debian Edu. We already had PAM, LDAP, IMAP and SMTP in place, and now also Samba. Next step is Cups and hopefully also NFS.

We had planned a alpha0 release of Debian Edu for today, but thanks to the autobuilder administrators for some architectures being slow to sign packages, we are still missing the fixed LTSP package we need for the release. It was uploaded three days ago with urgency=high, and if it had entered testing yesterday we would have been able to test it in time for a alpha0 release today. As the binaries for ia64 and powerpc still not uploaded to the Debian archive, we need to delay the alpha release another day.

If you want to help out with implementing Kerberos for Debian Edu, please contact us on debian-edu@lists.debian.org.

Tags: debian edu, english, nuug, sikkerhet.
Åpne trådløsnett er et samfunnsgode
12th June 2010

Veldig glad for å oppdage via Slashdot at folk i Finland har forstått at åpne trådløsnett er et samfunnsgode. Jeg ser på åpne trådløsnett som et fellesgode på linje med retten til ferdsel i utmark og retten til å bevege seg i strandsonen. Jeg har glede av åpne trådløsnett når jeg finner dem, og deler gladelig nett med andre så lenge de ikke forstyrrer min bruk av eget nett. Nettkapasiteten er sjelden en begrensning ved normal browsing og enkel SSH-innlogging (som er min vanligste nettbruk), og nett kan brukes til så mye positivt og nyttig (som nyhetslesing, sjekke været, kontakte slekt og venner, holde seg oppdatert om politiske saker, kontakte organisasjoner og politikere, etc), at det for meg er helt urimelig å blokkere dette for alle som ikke gjør en flue fortred. De som mener at potensialet for misbruk er grunn nok til å hindre all den positive og lovlydige bruken av et åpent trådløsnett har jeg dermed ingen forståelse for. En kan ikke la eksistensen av forbrytere styre hvordan samfunnet skal organiseres. Da får en et kontrollsamfunn de færreste ønsker å leve i, og det at vi har et samfunn i Norge der tilliten til hverandre er høy gjør at samfunnet fungerer ganske godt. Det bør vi anstrenge oss for å beholde.

Tags: fildeling, norsk, nuug, opphavsrett, personvern, sikkerhet.
Magnetstripeinnhold i billetter fra Flytoget og Hurtigruten
21st May 2010

For en stund tilbake kjøpte jeg en magnetkortleser for å kunne titte på hva som er skrevet inn på magnetstripene til ulike kort. Har ikke hatt tid til å analysere mange kort så langt, men tenkte jeg skulle dele innholdet på to kort med mine lesere.

For noen dager siden tok jeg flyet til Harstad og Hurtigruten til Bergen. Flytoget fra Oslo S til flyplassen ga meg en billett med magnetstripe. Påtrykket finner jeg følgende informasjon:

Flytoget Airport Express Train

Fra - Til        : Oslo Sentralstasjon
Kategori         : Voksen
Pris             : Nok 170,00
Herav mva. 8,00% : NOK 12,59
Betaling         : Kontant
Til - Fra        : Oslo Lufthavn
Utstedt:         : 08.05.10
Gyldig Fra-Til   : 08.05.10-07.11.10
Billetttype      : Enkeltbillett

102-1015-100508-48382-01-08

På selve magnetstripen er innholdet ;E?+900120011=23250996541068112619257138248441708433322932704083389389062603279671261502492655?. Aner ikke hva innholdet representerer, og det er lite overlapp mellom det jeg ser trykket på billetten og det jeg ser av tegn i magnetstripen. Håper det betyr at de bruker kryptografiske metoder for å gjøre det vanskelig å forfalske billetter.

Den andre billetten er fra Hurtigruten, der jeg mistenker at strekkoden på fronten er mer brukt enn magnetstripen (det var i hvert fall den biten vi stakk inn i dørlåsen).

Påtrykket forsiden er følgende:

Romnummer 727
Hurtigruten
Midnatsol
Reinholdtsen
Petter
Bookingno: SAX69   0742193
Harstad-Bergen
Dep: 09.05.2010 Arr: 12.05.2010
Lugar fra Risøyhamn
Kost: FRO=4

På selve magnetstripen er innholdet ;1316010007421930=00000000000000000000?+E?. Heller ikke her ser jeg mye korrespondanse mellom påtrykk og magnetstripe.

Tags: norsk, nuug, sikkerhet.
Forcing new users to change their password on first login
2nd May 2010

One interesting feature in Active Directory, is the ability to create a new user with an expired password, and thus force the user to change the password on the first login attempt.

I'm not quite sure how to do that with the LDAP setup in Debian Edu, but did some initial testing with a local account. The account and password aging information is available in /etc/shadow, but unfortunately, it is not possible to specify an expiration time for passwords, only a maximum age for passwords.

A freshly created account (using adduser test) will have these settings in /etc/shadow:

root@tjener:~# chage -l test
Last password change                                    : May 02, 2010
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7
root@tjener:~#

The only way I could come up with to create a user with an expired account, is to change the date of the last password change to the lowest value possible (January 1th 1970), and the maximum password age to the difference in days between that date and today. To make it simple, I went for 30 years (30 * 365 = 10950) and January 2th (to avoid testing if 0 is a valid value).

After using these commands to set it up, it seem to work as intended:

root@tjener:~# chage -d 1 test; chage -M 10950 test
root@tjener:~# chage -l test
Last password change                                    : Jan 02, 1970
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 10950
Number of days of warning before password expires       : 7
root@tjener:~#  

So far I have tested this with ssh and console, and kdm (in Squeeze) login, and all ask for a new password before login in the user (with ssh, I was thrown out and had to log in again).

Perhaps we should set up something similar for Debian Edu, to make sure only the user itself have the account password?

If you want to comment on or help out with implementing this for Debian Edu, please contact us on debian-edu@lists.debian.org.

Update 2010-05-02 17:20: Paul Tötterman tells me on IRC that the shadow(8) page in Debian/testing now state that setting the date of last password change to zero (0) will force the password to be changed on the first login. This was not mentioned in the manual in Lenny, so I did not notice this in my initial testing. I have tested it on Squeeze, and 'chage -d 0 username' do work there. I have not tested it on Lenny yet.

Update 2010-05-02-19:05: Jim Paris tells me via email that an equivalent command to expire a password is 'passwd -e username', which insert zero into the date of the last password change.

Tags: debian edu, english, nuug, sikkerhet.
Great book: "Content: Selected Essays on Technology, Creativity, Copyright, and the Future of the Future"
19th April 2010

The last few weeks i have had the pleasure of reading a thought-provoking collection of essays by Cory Doctorow, on topics touching copyright, virtual worlds, the future of man when the conscience mind can be duplicated into a computer and many more. The book titled "Content: Selected Essays on Technology, Creativity, Copyright, and the Future of the Future" is available with few restrictions on the web, for example from his own site. I read the epub-version from feedbooks using fbreader and my N810. I strongly recommend this book.

Tags: english, fildeling, nuug, opphavsrett, personvern, sikkerhet, web.
Sikkerhet, teater, og hvordan gjøre verden sikrere
30th December 2009

Via Slashdot fant jeg en nydelig kommentar fra Bruce Schneier som ble publisert hos CNN i går. Den forklarer forbilledlig hvorfor sikkerhetsteater og innføring av totalitære politistatmetoder ikke er løsningen for å gjøre verden sikrere. Anbefales på det varmeste.

Oppdatering: Kom over nok en kommentar om den manglende effekten av dagens sikkerhetsteater på flyplassene.

Tags: norsk, nuug, personvern, sikkerhet.
Jeg vil ikke ha BankID
30th October 2009

Min hovedbankforbindelse, Postbanken, har fra 1. oktober blokkert tilgangen min til nettbanken hvis jeg ikke godtar vilkårene for BankID og går over til å bruke BankID for tilgangskontroll. Tidligere kunne jeg bruke en kodekalkulator som ga tilgang til nettbanken, men nå er dette ikke lenger mulig. Jeg blokkeres ute fra nettbanken og mine egne penger hvis jeg ikke godtar det jeg anser som urimelige vilkår i BankID-avtalen.

BankID er en løsning der banken gis rett til å handle på vegne av meg, med avtalemessig forutsetning at jeg i hvert enkelt tilfelle har bedt banken gjøre dette. BankID kan brukes til å signere avtaler, oppta lån og andre handlinger som har alvorlige følger for meg. Problemet slik jeg ser det er at BankID er lagt opp slik at banken har all informasjon og tilgang som den trenger for å bruke BankID, også uten at jeg er involvert. Avtalemessing og juridisk skal de kun bruke min BankID når jeg har oppgitt pinkode og passord, men praktisk og konkret kan de gjøre dette også uten at min pinkode eller mitt passord er oppgitt, da de allerede har min pinkode og passord tilgjengelig hos seg for å kunne sjekke at riktig pinkode og passord er oppgitt av meg (eller kan skaffe seg det ved behov). Jeg ønsker ikke å gi banken rett til å inngå avtaler på vegne av meg.

Rent teknisk er BankID et offentlig nøkkelpar, en privat og en offentlig nøkkel, der den private nøkkelen er nødvendig for å "signere" på vegne av den nøkkelen gjelder for, og den offentlige nøkkelen er nødvendig for å sjekke hvem som har signert. Banken sitter på både den private og den offentlige nøkkelen, og sier de kun skal bruke den private hvis kunden ber dem om det og oppgir pinkode og passord.

I postbankens vilkår for BankID står følgende:

"6. Anvendelsesområdet for BankID

PersonBankID kan benyttes fra en datamaskin, eller etter nærmere avtale fra en mobiltelefon/SIM-kort, for pålogging i nettbank og til identifisering og signering i forbindelse med elektronisk meldingsforsendelse, avtaleinngåelse og annen form for nettbasert elektronisk kommunikasjon med Banken og andre brukersteder som har tilrettelagt for bruk av BankID. Dette forutsetter at brukerstedet har inngått avtale med bank om bruk av BankID."

Det er spesielt retten til "avtaleinngåelse" jeg synes er urimelig å kreve for at jeg skal få tilgang til mine penger via nettbanken, men også retten til å kommunisere på vegne av meg med andre brukersteder og signering av meldinger synes jeg er problematisk. Jeg må godta at banken skal kunne signere for meg på avtaler og annen kommunikasjon for å få BankID.

På spørsmål om hvordan jeg kan få tilgang til nettbank uten å gi banken rett til å inngå avtaler på vegne av meg svarer Postbankens kundestøtte at "Postbanken har valgt BankID for bl.a. pålogging i nettbank , så her må du nok ha hele denne løsningen". Jeg nektes altså tilgang til nettbanken inntil jeg godtar at Postbanken kan signere avtaler på vegne av meg.

Postbankens kundestøtte sier videre at "Det har blitt et krav til alle norske banker om å innføre BankID, bl.a på grunn av sikkerhet", uten at jeg her helt sikker på hvem som har framsatt dette kravet. [Oppdatering: Postbankens kundestøtte sier kravet er fastsatt av kreditttilsynet og BBS.] Det som er situasjonen er dog at det er svært få banker igjen som ikke bruker BankID, og jeg vet ikke hvilken bank som er et godt alternativ for meg som ikke vil gi banken rett til å signere avtaler på mine vegne.

Jeg ønsker mulighet til å reservere meg mot at min BankID brukes til annet enn å identifisere meg overfor nettbanken før jeg vil ta i bruk BankID. Ved nettbankbruk er det begrenset hvor store skader som kan oppstå ved misbruk, mens avtaleinngåelse ikke har tilsvarende begrensing.

Jeg har klaget vilkårene inn for forbrukerombudet, men regner ikke med at de vil kunne bidra til en rask løsning som gir meg nettbankkontroll over egne midler. :(

Oppdatering 2012-09-13: Aftenposten melder i dag at det er sikkerhetsproblem med BankID som gjør at ens bankkonto kan tappes helt uten at en har delt passord og pinkode med noen. Dette illustrerer veldig bra mitt poeng om at banken kan operere på kontoen (og signere avtaler etc) helt uten at jeg er involvert. Jeg takker derfor fortsatt nei til BankID-modellen.

Oppdatering 2015-11-17: Fant en bloggpost fra Britt Lysaa som belyser hvilke inngrep i privatsfæren bruken av BankID utgjør, i tillegg til de sikkerhetsmessige vurderingene omtalt over. Anbefalt lesning.

Tags: bankid, norsk, personvern, sikkerhet.
Sikkerhet til sjøs trenger sjøkart uten bruksbegresninger
23rd August 2009

Sikkerhet til sjøs burde være noe som opptar mange etter den siste oljeutslippsulykken med Full City, som har drept mye liv langs sjøen. En viktig faktor for å bedre sikkerheten til sjøs er at alle som ferdes på sjøen har tilgang til oppdaterte sjøkart som forteller hvor det grunner og annet en må ta hensyn til på sjøen.

Hvis en er enig i at tilgang til oppdaterte sjøkart er viktig for sikkerheten på sjøen, så er det godt å vite at det i dag er teknisk mulig å sikre alle enkel tilgang til oppdaterte digitale kart over Internet. Det trenger heller ikke være spesielt kostbart.

Både ved Rocknes-ulykken i Vatlestraumen, der 18 mennesker mistet livet, og ved Full City-ulykken utenfor Langesund, der mange tonn olje lekket ut i havet, var det registrert problemer relatert til oppdaterte sjøkart. Ved Rocknes-ulykken var de elektroniske kartene som ble brukt ikke oppdatert med informasjon om nyoppdagede grunner og losen kjente visst ikke til disse nye grunnene. Papirkartene var dog oppdaterte. Ved Full City-ulykken hadde en kontroll av skipet noen uker tidligere konstatert manglende sjøkart.

Jeg tror en løsning der digitale sjøkart kunne lastes ned direkte fra sjøkartverket av alle som ønsket oppdaterte sjøkart, uten brukerbetaling og uten bruksbegresninger knyttet til kartene, vil gjøre at flere folk på sjøen vil holde seg med oppdaterte sjøkart, eller sjøkart i det hele tatt. Resultatet av dette vil være økt sikkerhet på sjøen. En undersøkelse gjennomført av Opinion for Gjensidige i 2008 fortalte at halvparten av alle båteierne i landet ikke har sjøkart i båten.

Formatet på de digitale sjøkartene som gjøres tilgjengelig fra sjøkartverket må være i henhold til en fri og åpen standard, slik at en ikke er låst til enkeltaktørers godvilje når datafilene skal tolkes og forstås, men trenger ikke publiseres fra sjøkartverket i alle formatene til verdens skips-GPS-er i tillegg. Hvis det ikke er kostbart for sjøkartverket bør de gjerne gjøre det selv, men slik konvertering kan andre ta seg av hvis det er et marked for det.

Hvis staten mener alvor med å forbedre sikkerheten til sjøs, må de gjøre sitt for at alle båteiere har oppdaterte kart, ikke bare snakke om hvor viktig det er at de har oppdaterte kart. Det bør være viktigere for staten at båtene har oppdaterte kart enn at de er pålagt å ha oppdaterte kart.

Sjøkartene er tilgjengelig på web fra kystverket, men så vidt jeg har klart å finne, uten bruksvilkår som muliggjør gjenbruk uten bruksbegresninger.

OpenStreetmap.org-folk er lei av mangel på sjøkart, og har startet på et dugnadsbasert fribrukskart for havet, OpenSeaMap. Datagrunnlaget er OpenStreetmap, mens framvisningen er tilpasset bruk på sjøen. Det gjenstår mye før en kan bruke dette til å seile sikkert på havet, men det viser at behovet for fribruks-sjøkart er til stedet.

Tags: kart, norsk, nuug, opphavsrett, sikkerhet.
Litt om valgfusk og problemet med elektronisk stemmegiving
17th June 2009

Aftenposten melder at det kan se ut til at Iran ikke har lært av USA når det gjelder valgfusk. En bør endre tallene før de publiseres, slik at en kandidat aldri får færre stemmer under opptellingen, ellers blir det veldig tydelig at tallene ikke er til å stole på. I USA er det derimot rapporter om at tallene har vært endret på tur mot opptellingen, ikke etter at tallene er publiserte (i tillegg til en rekke andre irregulariteter). En ting Iran åpenbart har forstått, er verdien av å kunne kontrolltelle stemmer. Det ligger an til kontrolltelling i hvert fall i noen områder. Hvorvidt det har verdi, kommer an på hvordan stemmene har vært oppbevart.

Universitetet i Oslo derimot, har ikke forstått verdien av å kunne kontrolltelle. Her har en valgt å ta i bruk elektronisk stemmegiving over Internet, med et system som ikke kan kontrolltelles hvis det kommer anklager om juks med stemmene. Systemet har flere kjente problemer og er i mine øyne ikke bedre enn en spørreundersøkelse, og jeg har derfor latt være å stemme ved valg på UiO siden det ble innført.

Universitet i Bergen derimot har klart det kunststykket å aktivt gå inn for å gjøre det kjent at det elektroniske stemmegivingssystemet over Internet kan spore hvem som stemmer hva (det kan en forøvrig også ved UiO), og tatt kontakt med stemmegivere for å spørre hvorfor de stemte som de gjorde. Hemmelige valg står for fall. Mon tro hva stemmesedlenne hadde inneholdt i Iran hvis de ikke hadde hemmelige valg?

Tags: norsk, nuug, personvern, sikkerhet, valg.
Kryptert harddisk - naturligvis
2nd May 2009

Dagens IT melder at Intel hevder at det er dyrt å miste en datamaskin, når en tar tap av arbeidstid, fortrolige dokumenter, personopplysninger og alt annet det innebærer. Det er ingen tvil om at det er en kostbar affære å miste sin datamaskin, og det er årsaken til at jeg har kryptert harddisken på både kontormaskinen og min bærbare. Begge inneholder personopplysninger jeg ikke ønsker skal komme på avveie, den første informasjon relatert til jobben min ved Universitetet i Oslo, og den andre relatert til blant annet foreningsarbeide. Kryptering av diskene gjør at det er lite sannsynlig at dophoder som kan finne på å rappe maskinene får noe ut av dem. Maskinene låses automatisk etter noen minutter uten bruk, og en reboot vil gjøre at de ber om passord før de vil starte opp. Jeg bruker Debian på begge maskinene, og installasjonssystemet der gjør det trivielt å sette opp krypterte disker. Jeg har LVM på toppen av krypterte partisjoner, slik at alt av datapartisjoner er kryptert. Jeg anbefaler alle å kryptere diskene på sine bærbare. Kostnaden når det er gjort slik jeg gjør det er minimale, og gevinstene er betydelige. En bør dog passe på passordet. Hvis det går tapt, må maskinen reinstalleres og alt er tapt.

Krypteringen vil ikke stoppe kompetente angripere som f.eks. kjøler ned minnebrikkene før maskinen rebootes med programvare for å hente ut krypteringsnøklene. Kostnaden med å forsvare seg mot slike angripere er for min del høyere enn gevinsten. Jeg tror oddsene for at f.eks. etteretningsorganisasjoner har glede av å titte på mine maskiner er minimale, og ulempene jeg ville oppnå ved å forsøke å gjøre det vanskeligere for angripere med kompetanse og ressurser er betydelige.

Tags: debian, norsk, nuug, sikkerhet.

RSS Feed

Created by Chronicle v4.6