The Wayback Machine - https://web.archive.org/web/20140924170251/https://guardianproject.info/blog/

Question: central server, federated, or p2p? Answer: all!

There are many ideas of core architectures for providing digital services, each with their own advantages and disadvantages. I break it down along the lines of central servers, federated servers, and peer-to-peer, serverless systems.

a central service with clients connecting to it

a central service with clients connecting to it

Most big internet companies operate in effect as a central server (even though they are implemented differently). There is only facebook.com, there are no other services that can inter-operate with facebook.com. Have a single, central repo makes problems of finding the service and finding people within the service a lot easier. Once you are in Facebook, you just need to know the name of the person you want to contact and you are connected. The Facebook apps just need to talk to facebook.com, so the user does not need to know which service they are using in order to configure the app.

email as federated service

email as federated service

Email is a great example of a federated system. Each email provider acts like a central server, but then each of those central servers can easily talk to each other and exchange data. So fastmail.fm and gmail.com are both centralized services, but users do not need to know any extra information in order to exchange emails between the two services, or any other of the millions of email servers out there. A federated system provides a lot of the benefits of a centralized server with more flexibility. The downside is that federated services generally require more configuration to use them (though webmail makes that much less of an issue).

a peer-to-peer network

a peer-to-peer network

Peer-to-peer systems can provide unique benefits of bandwidth efficiency as well as working around blockages in the internet. Sharing large files with thousands of people is quite expensive when using a central server, but with bittorrent, anyone can share large files to many many people using only a basic broadband connection.

Over the past year and a half of our Bazaar project, we have been thinking a lot about how to distribute apps to people who face a number of challenges. Each of these systems offers distinct advantages and disadvantages, so it is quite difficult to choose only one. Instead, we thought why not try to make a system that combines all three? Android’s APK app package format is a good format to work in this model because they are self-contained and containing a form of embedded identity in the app signature. So if you already have an Android app installed, then Android will enforce that only APKs signed by the same key as the installed app can be installed over it.

That means in theory, it does not matter where the APK came from as long as it has a valid signature. There are some details where it does matter, mostly related to exploits like “Master Key” that can inject code into an existing APK. The FDroid app repository signature has a similar property: once you trust the repository signing key, it does not matter how you got the repository files as long as the signature validates. This is a model proven by GNU/Linux distros like Debian. The repository metadata also provides a way to validate APKs have not been modified since they were added to the signed repository. Since both of these do not rely on the method of transport to prove their authenticity, this combination provides a great testbed for this idea of combining a central service, with decentralized servers and peer-to-peer distribution.

This work was all incorporated in the FDroid app store for Android. The central f-droid.org app repository means that FDroid can deliver well over one thousand apps without any configuration on the part of the user. The “fdroidserver” developer tools means that anyone can set up their own repository of apps, and users can easily add that repository to FDroid. It is not quite zero configuration, but the process is not too difficult, and there is more we are planning to do to smooth out that process even more. This also provides a channel for users to get apps via “collateral freedom” techniques like using Amazon S3, Akamai, etc. to distribute files where many such services are filtered or blocked. Lastly, we made it possible to have the FDroid app itself act as an app repository, and other devices can connect to that repository using local WiFi, mesh, Bluetooth, and removable media.

This stuff is all implemented and included in the FDroid app and fdroidserver developer tools. The big remaining challenge is combining them all into a usable experience for people who do not know the technical details. This has been tested, discussed, sketched out, and there is a prototype implementation in the works. So I can end with a quick overview of some positive and negative observations about the various peer-to-peer connections that we experimented with:

  • + bluetooth is ubiquitous
  • very slow datarate
  • pairing is difficult
  • + wifi is very widespread
  • + local connections are very fast
  • access points can block host-to-host connections
  • running an acccess points on a device is not common nor easy
  • + NFC makes bluetooth very easy to use
  • NFC is not commonly used or available
  • NFC is far to slow and fiddly to be used as the data transmision medium
  • + SDcards can move lots of data securely
  • not all devices have removeable SDCards
  • swapping SD cards can be a fiddly process
  • swapping SD cards can not be automatic
  • + USB thumb drives can move lots of data securely
  • + they can be easily swapped between devices
  • swapping SD cards can not be automatic
  • not all devices support USB-OTG i.e. attached devices
  • USB-OTG is not widely used
Posted in News Tagged with: , , , , ,

ChatSecure for Android v14 is FINALLY here!

I am so happy to announce that ChatSecure for Android v14 IS FINALLY HERE!

BUT This is our first “release candidate” of v14 for public use, and while we love it dearly, you may want to wait for 14.0.1 for us to work out any hiccups.

The update should be out on Google Play shortly, and FDroid in the next few days. Otherwise, you can always download the APK direct from us:

APK: https://guardianproject.info/releases/ChatSecure-v14.0.0.apk
Sig: https://guardianproject.info/releases/ChatSecure-v14.0.0.apk.asc

chatsecurev14

* Major UI update for fun and enjoyment!
* Easy to add and verify new contacts with QR codes
* Improved encrypted file sharing!
* Updated SSL/TLS settings and secure code libraries
* 20% reduction in size!

PLEASE CONTACT US with any upgrade problems!

 

 

 

 

 

Source tag: https://github.com/guardianproject/ChatSecureAndroid/releases/tag/14.0.0

Full changelog for all the v13/v14 work is here: https://github.com/guardianproject/ChatSecureAndroid/blob/master/CHANGELOG

 

Posted in New Release

ChatSecure 13.2: Important Beta!

Today is the first public beta of ChatSecure v13.2, an important update of the user interface, networking code, and overall stability. We’ve spent the last six months tracking down crashes, memory leaks and performance issues, and have reached a stable, functional point which we want to share for public use. Reliability and simplicity our the goals, as we move towards v14 in the next few months.

This beta also features a new account setup wizard that we are eager for feedback on. Our goal is to enable new users to have a much simpler experience in setting up ChatSecure to connect to existing or create new accounts. We have also provided a “one-click burner” option to quickly create throwaway accounts, that require Tor and OTR encryption always, for chatting with a single contact or even just a single conversation.

We have also removed some features (for now), with the goal of focus on stripping down the experience, and then building it back up again. For example, there is now ONE contact list, that merges all contacts from all accounts together. It can be easily searched, and you don’t have to worry about which account is active – you just selected the person you want to communicate with, and we know which account they are associated with.

We have also removed the ability to manually set presence and status (for now), while we re-think how they should work in a mobile context a bit more. The vast majority of our users do not change either value anyhow, but we do know that smartly managing online vs away, especially if you are logged in from multiple locations to the same account, is important. Expect an update here shortly, and we’d love to have your feedback and fresh ideas on mobile presence.

You can currently access the beta directly via APK download (below),  through our F-Droid Test Build “Nightlies” Repo, or through our Google+ Community Beta Access. We will roll out to our release repos and Google Play public once we get through our initial feedback on the beta.

Download ChatSecure v13.2 Beta 1 Now

chatsecure-latest-qr
APK: https://guardianproject.info/releases/ChatSecure-v13.2.0-BETA-1.apk

PGP Sig: https://guardianproject.info/releases/ChatSecure-v13.2.0-alpha-10.apk.asc

 

 

The source is tagged here: https://github.com/guardianproject/ChatSecureAndroid/releases/tag/13.2.0-beta-1

The release includes fixes from our completed v13 milestone, and our v14 milestone “Armadillo’s Agram”, which you can view on our project tracker (https://dev.guardianproject.info/projects/gibberbot/).

 

 

Posted in New Release Tagged with: , , , , ,

Introducing TrustedIntents for Android

Following up on our research on secure Intent interactions, we are now announcing the first working version of the TrustedIntents library for Android. It provides methods for checking any Intent for whether the sending and receiving app matches a specified set of trusted app providers. It does this by “pinning” to the signing certificate of the APKs. The developer includes this “pin” in the app, which includes the signing certificate to trust, then TrustedIntents checks Intents against the configured certificate pins. The library includes pins for the Guardian Project and Tor Project signing certificates. It is also easy to generate the pin using our new utility Checkey (available in our FDroid repo and in Google Play).

Checkey displaying the signing certificate of ChatSecure

Checkey displaying the signing certificate of ChatSecure

We hope to make this process as dead simple as possible by providing developers with this library. TrustedIntents is currently set up as an “Android Library Project” but it could easily be a jar too, the code is currently quite simple, the plan is to add more convenience methods and also support for TOFU/POP in addition to pinning. For usage examples, check out TrustedIntentsExample and the test project under the test/ subdir of the TrustedIntents library source repo.

Checkey includes a simple method for generating the certificate pins. The pin is in the format of Java subclass of ApkSignaturePin, which provides all needed utility functions. The create the pin file, first install the app whose certificate you want to trust. Be sure to get it from a trusted source since you are going to be trusting the signing certificate of the APK that you have installed. Launch Checkey and select that app in the list, you will see the certificate details show up on the top. To generate the .java file for pinning Intents, select Generate Pin from the menu and send the resulting file to yourself. That file is the pin, include it in your project, then load it into TrustedIntents by doing in onCreate() or wherever is appropriate:

TrustedIntents ti = TrustedIntents.get(context);
ti.isTrustedSigner(MySigningCertificatePin.class);

How to generate a pin file with Checkey

How to generate a pin file with Checkey

Gathering all the edge cases

One of the things I’ve focused on in the TrustedIntents library is thinking about all the possible edge cases and how to check for them. It is rare that the main part of a security check algorithm fails, its almost always the edge cases that are the gotcha.

One example: TrustedIntents should properly check all signing certificates on an APK. From what I’ve seen, it is rare that APKs are signed by more than one certificate, but the spec allows for that. There might be exploits related to not handling that.

Another thing is that TrustedIntents uses the method that the Android code uses for comparing signatures: it does a byte-by-byte comparison of the signature byte arrays. Some apps area already doing something similar based on the hash of the signing certificate (i.e. the “fingerprint”). The Android technique will also be faster than hashing since the hash algorithm has to read the whole signature byte array anyway.

We’d love to have feedback, flames, comments, etc on any and all of this. Let us know how it works for you!

Posted in News Tagged with: , , ,

New Official Guardian Project app repo for FDroid!

We now have an official FDroid app repository that is available via three separate methods, to guarantee access to a trusted distribution channel throughout the world! To start with, you must have FDroid installed. Right now, I recommend using the latest test release since it has support for Tor and .onion addresses (earlier versions should work for non-onion addresses):

https://f-droid.org/repo/org.fdroid.fdroid_710.apk

In order to add this repo to your FDroid config, you can either click directly on these links on your devices and FDroid will recognize them, or you can click on them on your desktop, and you will be presented with a QR Code to scan. Here are your options:

From here on out, our old FDroid repo (https://guardianproject.info/repo) is considered deprecated and will no longer be updated. It will eventually be removed. Update to the new one!

Also, if you missed it before, all of our test builds are also available for testing only via FDroid. Just remember, the builds in the test repo are only debug builds, not fully trusted builds, so use them for testing only.

Automate it all!

This setup has three distribution channels that are all mirrors of a repo that is generated on a fully offline machine. This is only manageable because of lots of new automation features in the fdroidserver tools for building and managing app repos. You can now set up a USB thumb drive as the automatic courier for shuffling the repo from the offline machine to an online machine. The repo is generated, updated, and signed using fdroid update, then those signed files are synced to the USB thumb drive using fdroid server update. Then the online machine syncs the signed files from that USB thumb drive to multiple servers via SSH and Amazon S3 with a single command: fdroid server update. The magic is in setting up the config options and letting the tools do the rest.

New Repo Signing Key

For part of this, I’ve completed the process of generating a new, fully offline fdroid signing key. So that means there is a new signing key for the FDroid repo, and the old repo signing key is being retired.

The fingerprints for this signing key are:

Owner: EMAILADDRESS=root@guardianproject.info, CN=guardianproject.info, O=Guardian Project, OU=FDroid Repo, L=New York, ST=New York, C=US
Issuer: EMAILADDRESS=root@guardianproject.info, CN=guardianproject.info, O=Guardian Project, OU=FDroid Repo, L=New York, ST=New York, C=US
Serial number: a397b4da7ecda034
Valid from: Thu Jun 26 15:39:18 EDT 2014 until: Sun Nov 10 14:39:18 EST 2041
Certificate fingerprints:
 MD5:  8C:BE:60:6F:D7:7E:0D:2D:B8:06:B5:B9:AD:82:F5:5D
 SHA1: 63:9F:F1:76:2B:3E:28:EC:CE:DB:9E:01:7D:93:21:BE:90:89:CD:AD
 SHA256: B7:C2:EE:FD:8D:AC:78:06:AF:67:DF:CD:92:EB:18:12:6B:C0:83:12:A7:F2:D6:F3:86:2E:46:01:3C:7A:61:35
 Signature algorithm name: SHA1withRSA
 Version: 1
Posted in News Tagged with: , , ,

Important Links

You can always get the latest information on our blog. Also, track our activity on our Project Site; and request features or file bugs on our Issue Tracker.

Free and Free!

All of our software is free/libre and open-source. You can find our app downloads, code repos and issue trackers on Github.

Get Apps



You can get direct APK downloads at https://guardianproject.info/releases or visit our Apps page .

Featuring Recent Posts WordPress Widget development by YD