Giter Site home page Giter Site logo

showme's Introduction

Overview

ShowMe is an application for securing sharing non-private and private photos with trusted friends.

Besides sending photos (with an optional text caption and optionally marked private) - you can save drafts, view the status of sent messages, and share (non-private) photos you receive to other applications.

It uses Axolotl for end-to-end encryption. Friends (and their keys/prekeys) are added via QR scanning; key verification is built-in. A built-in camera is used by default to avoid leaking taken photos to any other application/gallery. Photos are stored encrypted on disk. Tor is supported via Orbot. To prevent casual data leakage, private photos auto-delete after 4 hours and request not to be screenshotted.

The server is open source, and intended to be run by individuals, although a central server may be run also. It is possible to configure the server as an onion service, in which case routing over Tor is required.

Screenshots

Setup

Add A Friend

Friendslist

Take a Photo, Save For Later

Friendslist w/ Drafts

Recieving a Message

Recieving a Private Message

Settings

--

FAQ

Why not Signal?

If you have read this and don't know why you would use this instead of Signal; use Signal.

Crypto

End-to-End

Axolotl 1.4.3, patched to serailize things.

Axolotl (and ShowMe) leak sender/recipient metadata. Want to use keys derived from Axolotl leafs to encrypt the axolotl ciphertext (and senderkeyid that ShowMe adds) to make sender anonymous from POV of server. Recipient uses trial decryption to find sender. Could make recipient anonymous too if users would poll and buckets generated from Axolotl leafs, but this does not allow Push notifications (also below).

TLS

TLS with random Client Certs. Efficiency goal is Request-Response, no round trip. Security goal is attacker who breaks TLS once cannot impersonate user with replay. This requires user to sign w/ identity key, but signed request must be bound to session to prevent replay. Sign client cert w/ identity key to prevent replay of stolen request from user; server accepts and ignores client cert (except for signature check). Rotate client certs on every network change to reduce passive fingerprinting.

Would be MUCH BETTER to use TLS channel binding, but not supported in Android or Python.

Tor

Option, user can enable on Setup before first network use. Prompts user to install Orbot. Manually sets proxy settings. Should examine App/ACRA for proxy leaks.

If server is .onion, Tor required.

Deleting

Not secure. Assuming participants trust each other; deleting private messages is good security. Private photos delete 4 hours after first viewed. Sent private photos (if storing enabled, not default) deleted 5 days after sending, if photo has been recieved.

Crashes

Out of memory? Lot of items? Yes, want to fix.

Build This

(No) Google Cloud Messaging

GCM is needed to provide efficient notification to users when a message is recieved. Alternatives are nice, provide suggestions at issue.

Likely push notifications always needed, but pure-polling solution attractive. Can eliminate all registration from server - client polls at predefined buckets (one per Axolotl leaf) to retrieve new messages. Separating those polls would completely anonymize clients; but for efficiency probably will batch. (Plus, separate polling for different buckets would need random polling times.)

SQLCipher / IOCipher

Want, see issue, issue

Password

Should be configurable in settings, ask on open, cache for 5 minutes. Would be used to unlock sqlcipher and iocipher. How to handle receiving messages with GCM push notification when app not unlocked?

Text Replies/Chat

Want, see issue.

Group Messages

Want, but long time from now.

--

Setup

  • git submodule init
  • git submodule update

Android

  • Compile libaxolotl-java with serialization modifications (probably must disable signing in build.gradles), and place output jar in android/ShowMe/libs
  • Sign up for Google Cloud Messaging
  • Get google-services.json, put it in app/google-services.json
  • Edit app/src/main/java/invalid/showme/model/server/ServerConfiguration.java
  • Create app/src/main/res/raw/acra_cert.pem with leaf certificate for bug endpoint

Server

cp config.sample config
vi config
./main.py
./v1tests.py

With and WithOut Bug Reporting

WithOut bug reporting (untested):

  • Set constant in app/src/main/java/invalid/showme/model/server/ServerConfiguration.java to false
  • Fill in enough of server config to get server running (no couchdb endpoint, username/password)
  • No requests should go to endpoints, no errors should occur

With central bug reporting:

  • Bug reporting can go to central bug logging server while app data can go to custom server. Lets development get crashes but no metadata!

With custom bug reporting:

  • Install CouchDB
  • Install acralyzer
  • Edit server config, ServerConfiguration.java to report bugs and point at correct location
  • Edit Files for testing, uncomment Debug Tools in:
  • onOptionsItemSelected in android/ShowMe/app/src/main/java/invalid/showme/activities/friendslist/FriendsListActivity.java
  • android/ShowMe/app/src/main/res/menu/menu_friends_list.xml
  • File Test Bug

License

ShowMe uses

  • libaxolotl-java GPL v3
  • curve25519-java GPL v3
  • ACRA Apache
  • Android Priority Queue MIT
  • Bouncycastle MIT
  • EventBus Apache
  • NetCipher Apache
  • Google Play Services ??? Java Protobuf ??? AppCompat???

So ShowMe is ???? GPLv3?

showme's People

Contributors

archiebell avatar

Stargazers

Nathan Freitas avatar  avatar

Watchers

James Cloos avatar  avatar

showme's Issues

senderkeyid in plaintext

server sees who message to (bucket to put in) and from (plaintext senderkeyid).

simple: user generates aes key per-contact, used for senderkeyid encryption, trial decryption

better: derive aes key from current leaf in axolotl, use to encrypt senderkeyid. trial decryption (takes longer, more keys)

app password

Should be configurable in settings, ask on open, cache for 5 minutes. Would be used to unlock sqlcipher and iocipher. How to handle receiving messages with GCM push notification when app not unlocked?

randomize prekeyid

prekeyid number tells friend about how many previous friends you have

extra permissions???

READ_PHOTO_STATE and EXTERNAL_STORAGE permissions requested by app. not in manifest. why???

one qr contact adding

user a generates token & key; gives a's pub key, token, and key to B via qr sharing; polls rendezvous server at token; b puts b's pub key encrypted to key on rendezvous server at token

one qr scan

federate

users have different servers. give server in friend add.

problems: version differences, onion server, server shuts down, more

do not use ACRA INSTALLATION_ID

unique identifier per user. but useful for crash reports. only can tie forensic analysis of device to crash report. keep for now

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.