Coder Social home page Coder Social logo

guardianproject / proofmode-android Goto Github PK

View Code? Open in Web Editor NEW
189.0 17.0 40.0 22.15 MB

THIS REPOSITORY IS MIRROR OF: https://gitlab.com/guardianproject/proofmode/proofmode-android

Home Page: https://proofmode.org

License: GNU General Public License v3.0

Java 50.41% Shell 0.34% HTML 0.51% Kotlin 48.74%

proofmode-android's Introduction

Overview

ProofMode is light, minimal "reboot" of our full encrypted, verified secure camera app, CameraV (https://guardianproject.info/apps/camerav). Our hope was to create a lightweight, almost invisible utility, that you can run all of the time on your phone, that automatically extra digital proof data to all photos and videos you take. This data can then be easily shared through a "Share Proof" share action, to anyone you choose.

While we are very proud of the work we did with the CameraV and InformaCam projects, the end results was a complex application and proprietary data format that required a great deal of investment by any user or community that wished to adopt it. Furthermore, it was an app that you had to decide and remember to use, in a moment of crisis. With ProofMode, we both wanted to simplify the adoption of the tool, and make it nearly invisible to the end-user, while making it the adoption of the tool by organizations painless through simple formats like CSV and known formats like PGP signatures.

Design Goals

  • Run all of the time in the background without noticeable battery, storage or network impact
  • Provide a no-setup-required, automatic new user experience that works without requiring training
  • Use strong cryptography for strong identity and verification features, but not encryption
  • Produce "proof" sensor data formats that can be easily parse, imported by existing tools (CSV)
  • Do not modify the original media files; all proof metadata storied in separate file
  • Support chain of custody needs through automatic creation of sha256 hashes and PGP signatures
  • Do not require a persistent identity or account generation

What It Does

  1. User installs ProofMode app
  2. ProofMode app automatically generates a private/public OpenPGP keypair as a persistent "proof" identity within the app
  3. When the user takes a photo or video, ProofMode wakes up, signs the new media file with their private key
    • Additionally, a sensor data snapshot is taken to gather correlating proof. This is saved as a CSV file, and also signed with the OpenPGP key.
  4. If the user wants to share a specific photo or video as "proof", they can just select the "Share Proof" option from the Android global share menu from the Gallery or Photos app.
    • This will then re-share the media file, plus all the related proof files and digital signatures, to the app of the users choice, along with a summary of when the file was created, what the public key identity is, and so on.
    • The user can also select multiple photos and videos to "Share Proof" for, and create a batch of data, with correlating sensor data for all media files, combined together in a single log of an "event"
  5. The user can also choose to publish their public key on pgp.mit.edu directory from within the app menu, or directly share their public key with anyone who would need it for verifying digital signatures.
  6. As the receiver of a ProofMode data set, you can verify the media file was not tampered with, verify the public key idenity of who signed the files, to see if it is consistent with what you expect, and examine all the correlating sensor data around the event, for extra context and evidence.
    • The CSV data can easily be imported into any spreadsheet or visualization type tool to create maps, charts, graphs, and other means of understanding the values included, over time, especially across multiple proof points of media

Screenshots

Screenshot Screenshot Screenshot

Contributions

proofmode-android's People

Contributors

comradekingu avatar ekcnl avatar ihorhordiichuk avatar ingfabby avatar kefir2105 avatar n-pex avatar n8fr8 avatar ngengesenior avatar onanuga00 avatar psixopatios avatar weblate avatar wtuemura avatar yannaries avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

proofmode-android's Issues

Add an FAQ (perhaps as a wiki page?)

I'm sure I'm not the only one who is wondering "Why not put the proof in the image metadata?" and "Okay, I grant that you can't have the signature be part of the thing signed, but you could just have the final signature mean 'the signature of this file when this signature is removed', or am I missing some nuance somewhere?"

It might save some work to have a place for those answers to live.

Improve "share proof" UX

how can we make the user experience of that step more intuitive - i think that it is the weak link in the current workflow from user perspective. Eg, can we not have ShareProof appear as an option at that second step? Also can we limit the number of apps that appear at the second step? Can we make that window look a bit different so users don't get confused with previous step?

current time is wrong

"The current date/time is showing a placeholder (January 1 1970) instead of an actual time"

Launch proofmode website

-- start with work on one pager
-- write content, feature app, library and partners
-- Case studies, demos of sample data
-- Nathan to start posting on how-to things on the github

Make second step of sharing proof intuitive for users

The second step of sharing, after you tap ShareProof - how can we make the user experience of that step more intuitive - Eg, ShareProof should not appear as an option at that second step. Also can we limit the number of apps that appear at the second step? Can we make that window look a bit different so users don't get confused with previous step?

Add remote / cloud storage auto sync

  • Should support real-time backup of proof files and media to external storage (via USB or SD Card) and through remote cloud sync of some kind with minimal user interaction

let people know proofmode replaces camerav?

hey! we were just testing camerav through guardian project's f-droid repos only to discovered after some poking around that camerav's being replaced by proofmode.

but there was no sign of this anywhere the camerav's announcement nor the repo itself, and proofmode isn't included in that repo :)

Support ACTION_IMAGE_CAPTURE For Better Chain of Custody

One problem using FileObserver is that you have a bit of a race condition between your app and anything else (e.g., malware) that is also observing the filesystem. If the malware gets in first, it can tinker with the image before you sign it.

An alternative flow is to use ACTION_IMAGE_CAPTURE and a FileProvider, directing the camera app to save the photo to ProofMode's internal storage. Many camera apps will support this, though some won't. Then, the photo initially is purely under your control (barring root-powered malware), and you can do whatever you want with the image and proof process safely. Then, when ready, you can copy the photo out to DCIM/ProofMode/ or something. As an added bonus, this will work even if the camera app is configured to save its images by default somewhere other than DCIM/, missing your FileObserver.

Attached is a sloppy proof of concept, based on one of my book examples. It uses ACTION_IMAGE_CAPTURE to take a photo, directing the results to the app's internal storage. It then updates an EXIF header, copies the modified image out to DCIM/ChainOfCustody/, indexes it, and brings it up in an image viewer activity. This code sucks (e.g., won't handle configuration changes well with the background thread), but it demonstrates the concept. Where I have the background thread, you would tie into your existing ProofMode flow.

ChainOfCustody.zip

This is just a thought -- obviously, this is your app, and you may have your reasons for not wanting to have this option.

Integrate Google's SafetyNet API

  • provides verification that official ProofMode app was used
  • provides information about if device is rooted or otherwise modified
  • provides signed auto notarization of hashes by Googles server with timestamp and certificate

We won't use it to block use of ProofMode, and the user can disable it, but if this extra blob of data is not in the proofmode.csv it is a warning sign that the content should be closely scrutinized by the receiver by a human.

https://developer.android.com/training/safetynet/index.html
https://www.howtogeek.com/241012/safetynet-explained-why-android-pay-and-other-apps-dont-work-on-rooted-devices/

Integrate with Keybase

It'd be nice if I could add my proofmode pubkey to my keybase account. Even nicer if I could set it to auto-upload proofs of everything I take to my keybase FS private directory. I don't know how possible it is for you to make this happen... should I instead be barking up the keybase tree?

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.