mute

module
v0.0.0-...-30b4a77 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 28, 2016 License: BSD-3-Clause

README

Mute — secure messaging — α release GoDoc Build Status License

This is an alpha release of Mute — use at your own risk! There are known bugs, all sorts of things might go wrong, and you might not be able to keep registered user IDs. At the moment, you can only play with the command-line interface mutectrl, a graphical user interface will be released at a later stage.

Features

  • End-to-end encryption.
  • Communication with forward secrecy (keys required to decrypt past messages are frequently replaced and destroyed).
  • Establish forward secret communication with first message (no synchronous two-way handshake).
  • Asynchronous communication between peers.
  • Authenticity of the identity-key relationship is established and preserved.
  • Human-readable/human-memorizable identities.
  • Communication with established standards where possible (e.g., using SMTP as the transport protocol).
  • Sending messages and changing the state of one's own identity requires payment by the user to both finance the system and to limit SPAM.
  • Better-than-nothing anonymity: mixing/delaying of messages to prevent simple discovery of sender-recipient relationship by third party passive observer.
  • Both sender and recipient anonymity.
  • Plausible deniability of message content and some deniability of communication relationship.

Installation

At the moment, only installation from source is supported. You must have at least Go 1.5 installed (with GOPATH set accordingly and $GOPATH/bin being part of your PATH). The environment variable GO15VENDOREXPERIMENT must be set to 1, to make sure that Mute uses the external dependencies from the vendor/ directory.

To install mutectrl execute the following three commands:

go get -u -v github.com/mutecomm/mute/cmd/mutegenerate
go generate -v github.com/mutecomm/mute/release
go get -u -v github.com/mutecomm/mute/cmd/...

Setup

Before you can start using mutectrl you have to create your encrypted database files with a passphrase. The following command does just that (and reads the passphrase from stdin):

mutectrl --passphrase-fd stdin db create

This also fetches the necessary configuration settings from our config server and prints your WALLETPUBKEY (you can always print your wallet key with mutectrl wallet pubkey).

To be able to use Mute we have to charge your wallet. For now, this is absolutely free of charge. Just send an email to frank@cryptogroup.net with your wallet pubkey. The payment tokens you receive are fully blinded before they are used to pay for Mute services, there is no way for us to connect the used tokens to your wallet pubkey!

Example usage

For the following commands you either have to enter your passphrase every time:

exec 3<`tty`; mutectrl ...

Or you can use the interactive mode described below.

To be able to send and receive messages you have to create a unique user ID (UID) for the @mute.one domain first:

mutectrl uid new --id your.name@mute.one

To be able to write somebody, you have to add him as a contact first:

mutectrl contact add --id your.name@mute.one --contact a_friend@mute.one

This automatically fetches all the necessary key material.

Now you can add a message to your friend to the outqueue (without actually sending it)

mutectrl msg add --from your.name@mute.one --to a_friend@mute.one --file msg.txt

Then send (all) messages from the outqueue:

mutectrl msg send --id your.name@mute.one

To check if your friend wrote you back already use the following commands:

mutectrl msg fetch --id your.name@mute.one
mutectrl msg list --id your.name@mute.one
mutectrl msg read --id your.name@mute.one --msgid X

(add help to a command to get help).

Messages are delayed and mixed with other messages on the server, so do not be surprised if your message is not delivered instantly.

Interactive mode

You can also use mutectrl in interactive mode:

exec 3<`tty`; mutectrl

help shows you all possible commands and with quit you can leave the interactive mode.

In interactive mode you have an active user ID which is used as the --id argument, if you do not specify it explicitly. Use mutectrl uid switch to switch the active UID.

Updates

You can automatically update mutectrl from source:

mutectrl upkeep update

Since this is an alpha release the software is evolving at a very high speed, please update frequently. We enforce an update, if your version is older than two weeks.

Backups

mutectrl writes its keys and messages to two encrypted databases in the directory given by option --homedir (default: ~/.config/mute). To backup your keys and messages, backup the following files in this directory:

keys.db
keys.key
msgs.db
msgs.key

The *.db files are the database files which are encrypted with a random key stored in the corresponding *.key file. The *.key files are protected by your passphrase. Make sure you keep backups of all four files and do not loose your passphrase!

Articles

Specification documents

Directories

Path Synopsis
Package cipher defines all ciphers used in Mute.
Package cipher defines all ciphers used in Mute.
cmd
mutecrypt
mutecrypt is the crypt tool for Mute which handles message encryption, message decryption and key management.
mutecrypt is the crypt tool for Mute which handles message encryption, message decryption and key management.
mutectrl
mutectrl is the message control client for Mute.
mutectrl is the message control client for Mute.
mutegenerate
mutegenerate can be used by go:generate to generate code that includes the current git HEAD commit hash and date as constants.
mutegenerate can be used by go:generate to generate code that includes the current git HEAD commit hash and date as constants.
muteproto
muteproto implements the Mute message protocol for sending and receiving encrypted messages.
muteproto implements the Mute message protocol for sending and receiving encrypted messages.
Package configclient implements a configuration fetcher.
Package configclient implements a configuration fetcher.
cahash
Package cahash verifies a pem-encoded certificate and returns the hash
Package cahash verifies a pem-encoded certificate and returns the hash
roundrobin
Package roundrobin implements the round-robin server selection used in the configclient package.
Package roundrobin implements the round-robin server selection used in the configclient package.
sortedmap
Package sortedmap implements sorted and signed maps.
Package sortedmap implements sorted and signed maps.
Package cryptengine implements the command engine for mutecrypt.
Package cryptengine implements the command engine for mutecrypt.
cache
Package cache caches the key server capabilities and clients used for mutecrypt's cryptengine.
Package cache caches the key server capabilities and clients used for mutecrypt's cryptengine.
Package ctrlengine implements the command engine for mutectrl.
Package ctrlengine implements the command engine for mutectrl.
mail
Package mail implements email input messages in Mute.
Package mail implements email input messages in Mute.
def
Package def defines all default values used in Mute.
Package def defines all default values used in Mute.
version
Package version defines the current Mute version number.
Package version defines the current Mute version number.
Package encdb defines an encrypted database used within Mute.
Package encdb defines an encrypted database used within Mute.
Package encode defines all encodings used in Mute.
Package encode defines all encodings used in Mute.
base64
Package base64 implements base64 helper functions for Mute.
Package base64 implements base64 helper functions for Mute.
Provide test server for angular ui
Provide test server for angular ui
Package keydb defines an encrypted database used to store cryptographic keys.
Package keydb defines an encrypted database used to store cryptographic keys.
keyserver
capabilities
Package capabilities defines the capabilities of the Mute key server.
Package capabilities defines the capabilities of the Mute key server.
hashchain
Package hashchain implements the hash chain for the key server in Mute.
Package hashchain implements the hash chain for the key server in Mute.
Package log implements the Mute logging framework.
Package log implements the Mute logging framework.
mix
client
Package client implements client functionality for the Mute mix system.
Package client implements client functionality for the Mute mix system.
mixaddr
Package mixaddr implements key handling functions for mixes and mix clients.
Package mixaddr implements key handling functions for mixes and mix clients.
mixcrypt
Package mixcrypt implements the client-mix-client message encryption.
Package mixcrypt implements the client-mix-client message encryption.
nymaddr
Package nymaddr implements nym address generation and decoding.
Package nymaddr implements nym address generation and decoding.
smtpclient
Package smtpclient wraps pkg/smtp to make it easy to use.
Package smtpclient wraps pkg/smtp to make it easy to use.
msg
Package msg defines messages in Mute.
Package msg defines messages in Mute.
mime
Package mime implements the MIME encoding used for messages in Mute.
Package mime implements the MIME encoding used for messages in Mute.
msgid
Package msgid contains helper functions for message ID generation and parsing.
Package msgid contains helper functions for message ID generation and parsing.
padding
Package padding contains helper functions to generate cheap paddings.
Package padding contains helper functions to generate cheap paddings.
session
Package session defines session states and session stores in Mute.
Package session defines session states and session stores in Mute.
session/memstore
Package memstore implements a key store in memory (for testing purposes).
Package memstore implements a key store in memory (for testing purposes).
Package msgdb defines an encrypted database used to store messages.
Package msgdb defines an encrypted database used to store messages.
Package protoengine implements the command engine for muteproto.
Package protoengine implements the command engine for muteproto.
Package release implements release specific constants and methods.
Package release implements release specific constants and methods.
serviceguard
client
Package client implements a serviceguard client with wallet backend.
Package client implements a serviceguard client with wallet backend.
client/guardrpc
Package guardrpc implements calls from client -> server for token operations.
Package guardrpc implements calls from client -> server for token operations.
client/keylookup
Package keylookup implements key lookup calls.
Package keylookup implements key lookup calls.
client/packetproto
Package packetproto implements a client of an issuer.
Package packetproto implements a client of an issuer.
client/trivial
Package trivial implements a trivial wrapper for mute/serviceguard/client
Package trivial implements a trivial wrapper for mute/serviceguard/client
client/walletrpc
Package walletrpc implements calls to the walletserver
Package walletrpc implements calls to the walletserver
client/walletstore
Package walletstore implements a wallet storage
Package walletstore implements a wallet storage
client/walletstore/nilstore
Package nilstore implements a walletstore without any abilities.
Package nilstore implements a walletstore without any abilities.
common/constants
Package constants defines common serviceguard constants.
Package constants defines common serviceguard constants.
common/keypool
Package keypool implements a key generation and lookup service for blind signature keys
Package keypool implements a key generation and lookup service for blind signature keys
common/keypool/keydb
Package keydb implements a DB-based keypool storage backend.
Package keydb implements a DB-based keypool storage backend.
common/keypool/keydir
Package keydir implements a file-based keypool storage backend.
Package keydir implements a file-based keypool storage backend.
common/keypool/storagetests
Package storagetests implements tests for the different keypool storage backends.
Package storagetests implements tests for the different keypool storage backends.
common/signkeys
Package signkeys implements key generation and verification methods for keys suitable for blind signature creation.
Package signkeys implements key generation and verification methods for keys suitable for blind signature creation.
common/token
Package token implements token type and handling functions.
Package token implements token type and handling functions.
common/types
Package types implements types shared between client and server(s).
Package types implements types shared between client and server(s).
common/walletauth
Package walletauth implements the wallet authentication scheme.
Package walletauth implements the wallet authentication scheme.
uid
Package uid defines user IDs in Mute and necessary long-term and short-term key material.
Package uid defines user IDs in Mute and necessary long-term and short-term key material.
identity
Package identity contains helper functions for Mute identities.
Package identity contains helper functions for Mute identities.
length
Package length defines the JSON encoded lengths of some uid datastructures (for padding purposes).
Package length defines the JSON encoded lengths of some uid datastructures (for padding purposes).
Package util contains utility functions for Mute.
Package util contains utility functions for Mute.
browser
Package browser defines web browser related helper functions.
Package browser defines web browser related helper functions.
bzero
Package bzero defines helper functions to zero sensitive memory.
Package bzero defines helper functions to zero sensitive memory.
descriptors
Package descriptors defines helper functions for common file descriptors.
Package descriptors defines helper functions for common file descriptors.
digits
Package digits defines helper functions to count the digits of integers.
Package digits defines helper functions to count the digits of integers.
fuzzer
Package fuzzer provides a sequential fuzzer for testing purposes.
Package fuzzer provides a sequential fuzzer for testing purposes.
git
Package git implements git wrappers.
Package git implements git wrappers.
gotool
Package gotool implements wrappers for the Go tool.
Package gotool implements wrappers for the Go tool.
home
Package home provides utility methods for application specific home directories.
Package home provides utility methods for application specific home directories.
interrupt
Package interrupt allows to handle interrupts.
Package interrupt allows to handle interrupts.
jsonclient
Package jsonclient contains a JSON-RPC over HTTPS client for Mute.
Package jsonclient contains a JSON-RPC over HTTPS client for Mute.
msgs
Package msgs defines some test messages for Mute unit tests.
Package msgs defines some test messages for Mute unit tests.
times
Package times contains time utility functions for Mute.
Package times contains time utility functions for Mute.
wallet
Package wallet defines wallet utility functions.
Package wallet defines wallet utility functions.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL