How to Create a Public Key

Use GnuPG to generate a set of public and private keys, with the gpg --gen-key command.

Make sure to choose at least 4096 bits for the keysize, and use a reasonable expiration interval, as in this example:

$ gpg --gen-key
gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0) 6m
Key expires at Wed 24 May 2017 07:33:40 PM EDT
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Sherlock Holmes
E-mail address: sholmes@example.org
Comment: 
You selected this USER-ID:
    "Sherlock Holmes <sholmes@example.org>"

Change (N)ame, (C)omment, (E)-mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.
<type your passphrase>

Export the public key with the armor option, to create a plain ASCII text version:

$ gpg --export --armor sholmes@example.org > sholmes@example.org.public.asc

The ASCII-armored text file ("sholmes@example.org.public.asc" in the example) is what you should use to upload to this site.

Never share your private keys with anyone.

Making subkeys, along with some of the other advice described here, is recommended.

Obtaining and Running GnuPG

GnuPG is available for multiple operating systems, and there are also some good guides here:

Remember, never share your private keys with anyone.

How to login: session challenges instead of passwords

Instead of relying on passwords, which can be easily stolen, broken, or forgotten, login sessions are based on encryption challenges.

Logging in (a.k.a. creating a new session) sends an email to your address with the subject line "Your TeamWork.io session" and an armored text attachment.

Decrypting the attached message results in a list of six random words, which need to be copied into the login (a.k.a. session confirmation) form to take effect.

Only the private key holder can decrypt the attachment (which is why private keys should never be shared with anyone).

Use the gpg --decrypt command, as in this example (the trailing awk statement just adds a few carriage returns so that the decryption result can be read more easily):

$ gpg --decrypt ~/Downloads/TeamWork.io-session-2016-11-27T19_07_21Z.asc | awk -F/ '{printf "%s\n\n", $NF}'

You need a passphrase to unlock the secret key for
user: "Sherlock Holmes <sholmes@example.org>"
4096-bit RSA key, ID 17748D44, created 2016-10-15 (main key ID DCCEC2A5)

Enter passphrase: <type your passphrase>

gpg: encrypted with 4096-bit RSA key, ID 17748D44, created 2016-10-15
      "Sherlock Holmes <sholmes@example.org>"
versifies resume's wees portentously mollify Shasta's

For this example,

versifies resume's wees portentously mollify Shasta's

are the words to copy into the session confirmation form.

Each login session lasts for thirty (30) minutes.

How to decrypt a message

Similar to the process for decrypting the session information, use the gpg --decrypt command on the downloaded message.

For long messages, skipping the trailing awk is advisable, since it adds unwanted newlines in between, though the end of the message will get jammed up against the next prompt, as in this example:

$ gpg --decrypt ~/Downloads/0450e6fc-fd68-4c4c-9c5a-9d68c80a57e9.asc 

You need a passphrase to unlock the secret key for
user: "Sherlock Holmes <sholmes@example.org>"
4096-bit RSA key, ID 17748D44, created 2016-10-15 (main key ID DCCEC2A5)

Enter passphrase: <type your passphrase>

gpg: encrypted with 4096-bit RSA key, ID 17748D44, created 2016-10-15
      "Sherlock Holmes <sholmes@example.org>"
Hello Watson,
This is a secret message for you.
Sherlock$

Thus the decrypted message text for this example is:

Hello Watson,
This is a secret message for you.
Sherlock