Gossamer is an authority-free PKI for ensuring providers can sign their updates and manage their own signing keys, and that users can verify the authenticity of new keys and updates.
The aim of Gossamer is to allow automatic key/update trust in a way that can be audited by independent third parties.
The basic idea of Gossamer is simple: Use verifiable data structures to create a live snapshot of the current state of affairs for public keys and software updates.
No X.509, no ASN.1, no expiration dates and weird rules.
This lets you write code that looks like this:
$keys = fetch_public_keys('paragonie');
...and then if any keys are compromised, the $keys array will not contain the revoked ones.
For more information, please refer to the security documentation.
Documentation Name | Description |
---|---|
Action |
Describes a change to make: Adding/revoking public keys or releases. |
Message |
A serialized Action . |
SignedMessage |
A cryptographically signed (and identity-bound) Message . |
Packet |
HTTP request or response (i.e. to/from a cryptographic ledger) |
Scribe |
Publishes SignedMessage s to a ledger. |
ReleaseSigner |
Signs a file with your secret key. |
ReleaseVerifier |
Verifies a file against your public key. |
Depending on what you're trying to build with libgossamer, you will need a different subset of our library's built-in functionality.
Use Case Name | Example | Functionality |
---|---|---|
Update Server | api.wordpress.org | Scribe |
Federated Key Management | Hosting Provider | Synchronizer |
Deployed System | WordPress blog | ReleaseVerifier , Synchronizer (optional) |
Developer Tools | PHPStorm | ReleaseSigner |
- Someone defines an
Action
they wish to perform. Typically this will be done through tooling rather than manual code snippets. Each action will have one of the following "verbs":AppendKey
(This must be the first action for a given provider.)RevokeKey
AppendUpdate
RevokeUpdate
AttestUpdate
- The
Action
is serialized and signed with the user's secret key, forming aSignedMessage
object. - The
SignedMessage
is serialized and sent to the update server. - The update server verifies the incoming
SignedMessage
(performing not only integrity checks, but access controls as well). - The update server uses the
Scribe
to publish theSignedMessage
onto the cryptographic ledger. - Replica nodes verify and mirror the new ledger records.
- An end system (which can be an individual deployed system or a federated standalone key server that deployed systems trust) queries a replica node of the cryptographic ledger.
- The end system downloads each new record and extracts a
SignedMessage
object. - The end system uses the currently-trusted public keys for a given provider
to authenticate the
SignedMessage
. If successful, it returns anAction
. - The
Action
is performed against the database.
- API Reference - Internals, class definitions, etc. Basic API documentation.
- Specification - Protocol description to aid cross-platform implementations.
- Tutorials - How to integrate libgossamer into your package ecosystem.
- Discussions - Blog posts and message board threads worth reading.