inblockio / aqua-user-stories

Userstories to improve the UX for Aqua/PKC
0 stars 0 forks source link

Verifying digital files from trusted authors on the Web #9

Open ux-design-dev opened 2 years ago

ux-design-dev commented 2 years ago

An experience which people who install software or download files from the WWW (as opposed to strictly via App Stores) is the complexity of trying to verify the digital data they downloaded.

Hashes

Many, many projects simply publish SHA256 checksums of binary files and call it a day. Like the Hugo static site generator on their Github Releases page:

The Go programming language itself just merely lists a hash on the webpage:

go1.17.6.linux-386.tar.gz -> 06c50fb0d44bb03dd4ea8795f9448379c5825d2765307b51f66905084c3ba541

GPG signatures

Some projects also offer, in addition to the checksum, a GPG signature of the file such as Orbot Android App

This solution, while it works, requires using the cumbersome GPG software to verify the .asc file to verify the data as well the step of first importing the signers GPG key. Links to developers keys are often located elsewhere from the data + signature files. This is a time waste and also opens a user up to confusion (which key is the right key?).

In 2016 Github implemented GPG signature verification of git commits, but this is also rather tricky to make sense of when downloading a binary.

github-gpg-signatures


The following projects experiment beyond the basics of the hashes or GPG verifying digital files

Electrum

One example can be found with the trusted bitcoin wallet Electrum which requires running GPG to verify the .appimage file with not only one, but up to 3 GPG signatures from different authors and suggests verifying more than one signature.

Tails

Tails, the privacy focused operating system, implements a decently user-friendly browser based solution to this verification challenge:

Tails uses a verification checker whereby a user selects a recently downloaded tails-xxx.img` file they downloaded which is then verified via Javascript code.

EteSync

In a slightly different direction (but closer to Aqua's goals), the creator of privacy focused EteSync created a browser extension which verifies a GPG signatures of web pages for their "web app" so that a user can know if the JS code they are loading is indeed authored by the developer or a malicious third party.

Qubes OS

The security obsessed Qubes OS project publishes a git repository of: PGP keys, Security Bulletins, warrant canaries, Bitcoin fund information, and ISO digests.

Hash DBs

There have been a few attempts from cypherpunks to address this issue by creating databases of hashes and signatures.


Fact remains little has been done in the last half a decade post Snowden to make this process more intuitive and user friendly. For a truly secure and decentralized digital world being able to verify data is extremely important and should not be limited to techno elites who know how to hammer commands into a terminal.

This is where the Aqua protocol + tooling could come in...

devrndm commented 2 years ago

Along these lines is https://theupdateframework.io/ https://theupdateframework.github.io/specification/latest/#timestamp

And see also: https://bintra.directory/ (binary transparency) Consider the case of operating system package managers - a key compromise allows replacing packages silently because package managers such as apt do not have a way to verify that the package received is the same package that everyone else receives; only that the key is trusted.

However, these tools may not be user friendly enough for widespread adoption. For example the tails project has a javascript tool for verifying the download (see: https://tails.boum.org/install/dvd-download/index.en.html "VERIFY YOUR DOWNLOAD"), because using tools like gpg is tricky when gpg itself is not available via a package manager on platforms like windows; a browser plugin for verifying/attesting downloads could crowdsource verification without relying on individual software projects to adopt anything.

rht commented 2 years ago

The Go programming language itself just merely lists a hash on the webpage: https://go.dev/dl

I suppose because in this case, you can verify the SSL certificate of the website. A pretty good defense line, but if the website is compromised, then any binaries on the website are considered tampered, vs if each binary is signed by different maintainers.

Meanwhile, Linux distribution packages need to be GPG-signed mainly because they are usually distributed through untrusted mirrors, not because they are concerned about security more than GOOG.