SKS - Synchronizing Key Server
sks [options] -debug
SKS is a OpenPGP keyserver whose goal is to provide easy to deploy,
decentralized, and highly reliable synchronization. That means that a
key submitted to one SKS server will quickly be distributed to all key
servers, and even wildly out-of-date servers, or servers that
experience spotty connectivity, can fully synchronize with rest of the
The design of SKS is deliberately simple. The server consists of two
single-threaded processes. The first, "sks db", fulfills the normal
jobs associated with a public key server, such as answering web
requests. The only special functionality of "sks db" is that it keeps a
log summarizing the changes to the key database. "sks recon" does all
the work with respect to reconciling hosts databases. "sks recon" keeps
track of specialized summary information about the database, and can
use that information to efficiently determine the differences between
its database and that of another host.
Highly efficient and reliable reconciliation algorithm
Follows RFC2440 and RFC2440bis carefully - unlike PKS, SKS supports new
and old style packets, photoID packets, multiple subkeys, and pretty
much everything allowed by the RFCs.
Fully compatible with PKS system - can both send and receive syncs from
PKS servers, ensuring seamless connectivity.
Simple configuration: each host just needs a (partial) list of the
other participating key servers. Gossip is used to distribute
information without putting a heavy load an any one host.
Supports HKP/web-based querying, and soon-to-be-standard machine
SKS binary command options are as follows:
Initiates database server.
Initiates reconciliation server.
Apply filters to all keys in database, fixing some common problems.
Build key database, including body of keys directly in database.
fastbuild -n [size] -cache [mbytes]
Build key database, doesn't include keys directly in database,
faster than build. -n specifies the mulitple of 15000 keys to read
in at once, and -cache specifies the database cache to use in
pbuild -cache [mbytes] -ptree_cache [mbytes]
Build prefix-tree database, used by reconciliation server, from key
database. Allows for specification of cache for key database and
for ptree database.
dump #keys dumpdir
Create a raw dump of the keys in the database.
Adds key from key files to existing database.
Drops key from database.
update_subkeys [-n # of updates / 1000]
Updates subkey keyid index to include all current keys. Only useful
when upgrading versions 1.0.4 or before of SKS.
Prints the help message.
You won't need most of the options below for normal operation. These
options can be given in basedir/sksconf or as command line option for
the sks binary.
Debugging level -- sets verbosity of logging.
Number of bits defining a bin.
Number of errors that can be corrected in one shot.
Seed used by RNG.
Number of keys to drop at random when synchronizing.
Multiple of 15,000 keys to load at once.
Maximum number of matches for most specific word in a multi-word
Maximum number of matches that will be returned from a query.
Maximum number of uid fetches performed in a verbose index query.
Pagesize in bytes for key db.
Cache size in megs for key db.
Pagesize in bytes for prefix tree db.
Cache size in megs for prefix tree db.
Set base port number.
Set recon port number.
Set recon binding address. Can be a list of whitespace separated
Set hkp port number.
Set hkp binding address. Can be a list of whitespace separated IP
Have the HKP interface listen on port 80, as well as the hkp_port.
Set base directory.
Send log messages to stdout instead of log file.
Use a disk-based ptree implementation. Slower, but requires far
Use in-mem ptree.
Maximum number of allowed ptree nodes. Only meaningful if
-diskptree is set.
Set probability. Used for testing code only.
Set sync interval for reconserver.
Set time between gossips in minutes.
Don't gossip automatically. Host will still respond to requests
from other hosts.
Set sync interval for dbserver.
Time period between checkpoints.
Time period between checkpoints for reconserver.
Multiple of thresh which specifies minimum node size in prefix
Multiple of thresh which specifies minimum node size that is
included in reconciliation.
Maximum number of differences to recover in one round.
Number of keys for reconserver to fetch from dbserver in one go.
Timeout in seconds for webserver requests.
Timeout for reconciliation runs in minutes.
Hour at which to run database statistics.
Runs database statistics calculation on boot.
Set timeout in seconds for initial exchange of config info in
Timeout in seconds for get_missing_keys.
Timeout in seconds for commands set over command socket.
Command used for sending mail.
From address used in synchronization emails used to communicate
When doing a database dump, only dump new keys, not keys already
contained in a keydump file.
Maximum number of outstanding requests in reconciliation.
Maximum interval (in hours) at which membership file is reloaded.
Displays list of options.
Information about important files located in your SKS basedir.
The main SKS executable.
The executable responsible for parsing incoming mails from PKS key
Script to generate an initial database.
The mailsync should contains a list of email addresses of PKS
keyservers. This file is important, because it ensures that keys
submitted directly to an SKS keyserver are also forwarded to PKS
keyservers. IMPORTANT : don't add someone to your mailsync file
without getting their permission first!
With SKS, two hosts can efficiently compare their databases then
repair whatever differences are found. In order to set up
reconciliation, you first need to find other SKS servers that will
agree to gossip with you. The hostname and port of the server that
has agreed to do so should be added to this file.
The configuration file for your SKS server.
keyserver.ahost.org 11370 # Comments are allowed
keyserver.foo.org 11370 # Another host with default ports
* ^Subject: incremental
| /path/of/sks_add_mail /path/to/sks/directory
pgp-public-keys: "|/path/of/sks_add_mail /path/to/sks/directory"
The SKS website is located at http://minskyprimus.net/sks/.
The first draft was written by Thomas Sjogren