All Projects → rot256 → Fugl

rot256 / Fugl

A warrant canary system

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Labels

Projects that are alternatives of or similar to Fugl

hwsecurity
Hardware Security SDK - open source version (GPLv3). Full version can be found on https://hwsecurity.dev.
Stars: ✭ 28 (+3.7%)
Mutual labels:  pgp
Krypton Ios
Krypton turns your iOS device into a WebAuthn/U2F Authenticator: strong, unphishable 2FA.
Stars: ✭ 305 (+1029.63%)
Mutual labels:  pgp
Pipethis
Replace your `curl | sh` installers
Stars: ✭ 404 (+1396.3%)
Mutual labels:  pgp
interesting-keys
Interesting collected (leaked) encryption/decryption keys
Stars: ✭ 33 (+22.22%)
Mutual labels:  pgp
Gpgsync
🔒 GPG Sync is designed to let users always have up-to-date public keys for other members of their organization
Stars: ✭ 301 (+1014.81%)
Mutual labels:  pgp
Felony
🔑🔥📈 Next Level PGP
Stars: ✭ 3,478 (+12781.48%)
Mutual labels:  pgp
piv-agent
An SSH and GPG agent which you can use with your PIV hardware security device (e.g. a Yubikey).
Stars: ✭ 31 (+14.81%)
Mutual labels:  pgp
Objectivepgp
OpenPGP library for iOS and macOS
Stars: ✭ 557 (+1962.96%)
Mutual labels:  pgp
Deltachat Core Rust
Delta Chat Rust Core library, used by Android/iOS/desktop apps and bindings
Stars: ✭ 300 (+1011.11%)
Mutual labels:  pgp
Trezor Agent
Hardware-based SSH/PGP agent
Stars: ✭ 400 (+1381.48%)
Mutual labels:  pgp
EasyPGP
No description or website provided.
Stars: ✭ 19 (-29.63%)
Mutual labels:  pgp
Webclient
Monorepo hosting the proton web clients
Stars: ✭ 3,079 (+11303.7%)
Mutual labels:  pgp
Echoplexus
Socket.io powered chat, JavaScript REPL, whiteboard, and WebRTC calls
Stars: ✭ 392 (+1351.85%)
Mutual labels:  pgp
OpenPGP
A C++ Implementation of RFC 4880
Stars: ✭ 87 (+222.22%)
Mutual labels:  pgp
Mailkit
A cross-platform .NET library for IMAP, POP3, and SMTP.
Stars: ✭ 4,477 (+16481.48%)
Mutual labels:  pgp
secretman
Managing secrets with Yubikey
Stars: ✭ 17 (-37.04%)
Mutual labels:  pgp
Deltachat Core
Delta.Chat C-Library with e2e chat-over-email functionality & Python bindings
Stars: ✭ 308 (+1040.74%)
Mutual labels:  pgp
Sephia Five
A secure and PGP enabled webmail module for Phosphorus Five
Stars: ✭ 21 (-22.22%)
Mutual labels:  pgp
Enchive
Encrypted personal archives
Stars: ✭ 527 (+1851.85%)
Mutual labels:  pgp
Gosint
OSINT Swiss Army Knife
Stars: ✭ 401 (+1385.19%)
Mutual labels:  pgp

Build Status

Fugl

Fugl ("bird" in Danish) is a warrant canary solution/system. The project attempts to mitigate problems with existing canary solutions:

We have seen canaries that are updated on a daily basis and canaries which are updated once per year. We have seen canaries that were created once and then never updated again. Again, the fact that canaries are non-standard makes it difficult to automatically monitor them for changes or takedowns.

  • EFF (Canary Watch – One Year Later)

The goal is to provide canaries which are:

  • Readable for humans
  • Easy to parse for machines
  • Simple to update and validate systematically

Unlike existing canaries this allows for:

  • Automatic creation and submission of new canaries
  • Automatic validation of canaries from hundreds of different organizations
  • The creation of central services which verify canaries and notifies subscribed users

The format

Canaries are PGP (clear) signed messages, with a metadata header. The metadata is stored as JSON and is used for automation, the remaining content is free text. Within the project we call a signed canary a proof: Here is an example of such a proof:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

# Test canary

You can:

* Explain the purpose of the canary
* Maintain a human readable canary
* Win peoples heart
* Or just, Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

The description should be valid markdown, to please your fellow humans.
The machines should have no problem understanding it regardless
(just avoid using the "Metadata" header)

# Metadata

{
    "version": 0,
    "author": "Test author",
    "creation": "2017-02-11T11:27:54+01:00",
    "expiry": "2017-02-21T11:27:54+01:00",
    "promises": null,
    "nonce": "EujmfYMdYu32Uw-F1LCy-dJjWXmsS2Rm",
    "final": false
}
-----BEGIN PGP SIGNATURE-----

wsBcBAEBCAAQBQJYnucqCRB2OicLdup5+QAAAuQIAFplK8DbIxy1WeasCmuGBYpK
9xSHFLHB8zulHZ65zpf2sSDQcFWlF3AXfPsP2GpxDyqY16CaUlxYfdJJt1oN4Vzj
h7SrxsRf8/TdimFB6hpc88KOrQp4VfnECJQOpoC/Aqphmp6ZlcM4TPKrxLNv4zYw
neycggHjqp8Od/PwY8tg26H6FJ0waREE6PfKenac2xp4oWVRGlDQyW6tmWN0Zkb5
RcVToAwQi3FgOhrwZfsJhbFZQ3jUZqUSDrSnGOpbXTjXelVzrCmigBjB41MN8U6/
4/rk1r3HuZGrpHrAZt1T5oADCzMpXAOgYHIr7Zd7yuaOCkVCBv+F7kzKY8QkI9k=
=B3uj
-----END PGP SIGNATURE-----

Metadata

The following fields are found in the current version:

Name Description
Version Canary structure version
Author The purported author of the proof
Creation Time of creation for the canary
Expiry Time of expiry, a new canary must be submitted before this time
Promises A set of statements, if a statement is removed from the set users are notified
Final Flag used for graceful termination of the canary service (see below)
Nonce Random nonce

Termination

An organization no longer wishing to supply canaries can set the "Final" flag, which will indicate to all followers that this canary is the last and users should expect no further canaries from this source.

Proofs are generated by the client (see cmd/client) and saved to a file. This file can then be directly submitted to the server or moved across an air-gap and submitted from another machine. The submission process is a simply HTTP post request (see next section).

The server

The canary server is a simple self-contained HTTP server and does not rely on a database server. All proofs are verified upon submission (using a specified public key) and saved in a directory on the server (sorted by expiry date). The server serves the proofs and the public key, allowing a client to start tracking the proofs.

In addition the Fugl canary server can be used as digital Dead man's switch, by specifying an action (system command) which should be executed by the server if a canary has not been submitted before the expiry time.

Fugl was explicitly designed so that it does not rely on a single model of distribution. If you want to save and store the proofs on e.g. an FTP server this is also possible -- as long as clients know how to retrieve the proofs. The server is included to simplify distribution and automation, the client is the essential part of Fugl.

Getting started

You can start using Fugl, by setting up a go environment and running make in the cmd/client and cmd/server directories.

If there is interest I will provide pre-compiled binaries (but given the setting I would advise against it).

Todo

  • Further documentation
  • JSON input/output option for client

Contributing

Fugl is still a work in progress, if you want to contribute the best way to do so is by:

  • Read the code (it is short and quite readable)
  • Provide suggestions for Canary format/API changes

Simplicity is prioritized over new features!

This repo WILL NOT contain an automatic system for tracking the canaries, such a system should be easy to implement using the client (and I encourage people to do so). Alternatively this repository can be used as a library.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].