Many corona apps are developed in the moment, and some of them e.g. In Germany are open source.

Many people fear to be spied by this app. Im definitely Not one of them.

Still it raised the question in me:How can we make sure that the open source code is actually deployed without modifications?

On the client side that is easy, you just decompile the Apk.

But what about the server code?

In theory I could make changes to the opesource code before deploying it and nobody would know?

Are there mechanisms out there to ensure that?

  • 2
    My mail server runs entirely open-source code: sendmail, procmail, dovecot. If you store your mail on it, the question of whether or not I'm reading your private email is not related to whether I've secretly modified the server-side code and entirely related to the trustworthiness of me and the other operators. Free software guarantees your security server-side by allowing you to run your own copy of the server code on hardware you trust. – MadHatter Jun 14 at 9:33
  • What is the license of the code in question? The AGPL requires making available the version that is deployed on a server, for example. Other open source licenses do not. – Brandin Jun 17 at 4:45

Not only can you not verify that the code is running unmodified, you cannot verify that there is any code running at all: perhaps the entire service is operated by a clever hacker tapping out electrical pulses into an Ethernet cable, and you'd have no way of knowing.

Okay, so maybe you could tell (for one, such a hacker would have to sleep eventually -- but if there were two hackers...), but the larger point here is that a service is always completely opaque to its users. Any code-verification methods afforded by the service are also part of the service and could therefore lie, undetectably, to users.

Two solutions (or, really, workarounds) to this issue:

  1. Since the code is available, you can run your own instance of the service. Since you are the operator of the service, you know firsthand what code is running and do not have the verification problem that users of the service do.

  2. A service may be architected such that a client never sends any sensitive data to the service. This is considered under the field of secure multi-party computation, which Wikipedia defines as:

    a subfield of cryptography with the goal of creating methods for parties to jointly compute a function over their inputs while keeping those inputs private

    In other words, you may encrypt or transform data on the client in such a way that the service can operate on submitted data but not understand its substance. (Related concepts include homomorphic encryption, zero-knowledge proofs, and oblivious transfer.) One such simple service is Clipperz, a password manager that holds a user's encrypted passwords and never exposes the unencrypted data to the server. We do not know if the service is authentic, but we limit the worst case of what an evil service can possibly do.

    This relies on trustworthy client participation in the scheme, but clients are actually verifiable, unlike services. (Client verification may not be easy but is at least informatically possible.)

| improve this answer | |
  • Thank you for your answer – Ludi Jun 14 at 19:08
  • For instance, the German coronavirus app is designed so that the client downloads a list of random nonces of everyone who's been infected recently. You don't ask the server "hey, I've been near #68760352 and #0794950653 and #34537656, can you tell me if any of those have coronavirus?" because that would leak information. Also your number changes periodically, so other people can't tell whether they've been near the same person twice or two different people. – user253751 Jun 24 at 11:01

The idea of the Corona Apps data protection feature is, that your data does not leave the mobile unless you upload it in case of a positive test. This is good insofar as the integrity of a server application is less relevant and would be hard to proof by users.

So in order for you (or somebody doing that as a public service) to verify that the critical client app (on the app stores) actually reflects the open source code you would have to compare the binaries with a self build binary. This is tedious since you need the exact same buildchain and you might need to account for differences in things like hostnames, timestamps and random file ordering.

There is a whole movement around reproducible/deterministic and verifiable builds which would make that easier, but I don't think that was part of the requirements (and is not so common for mobile apps).

Another option is to actually analyze the network traffic of the app. This can however be hard depending on the encryption and is not entirely reliable as there can be hard to find side channels or the app can decide to wait with unauthorized transfers till a certain time/signal.

So generally I expect people will try to poke holes and they could discover malicious builds, but there is no guarantee. Especially not since it also depends on the vendor provided Bluetooth tracking API.

However, I would think the risk (for example for the German App) is small, SAP, Telekom or Government has all to lose and nothing to gain from a backdoor in the covid app.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.