The Keyring module relates to security and encryption related functions. The modules are as follows:
include "keyring.m" keyring:= load Keyring Keyring->PATH; SigAlg: adt { name: string; }; PK: adt { sa: ref SigAlg; owner: string; }; SK: adt { sa: ref SigAlg; owner: string; }; Certificate: adt { sa: ref SigAlg; ha: string; signer: string; exp: int; }; DigestState: adt { x: int; }; Authinfo: adt { mysk: ref SK; mypk: ref PK; cert: ref Certificate; spk: ref PK; alpha: ref IPint; p: ref IPint; };
An IPint can be converted into two external formats: an array of bytes (in which the first byte is the highest order byte of the integer) that is useful when communicating with the kernel's internal ssl device (#D) (see ssl); and a MIME base 64 format that allows an IPint to be stored in files or transmitted across networks in text form.
Public Key Cryptography
Inferno relies on public key cryptography for digital signatures. Each Inferno user can generate a pair of matched keys, one public and one private. The private key is used to digitally sign data, the public one to verify the signature. Public key algorithms have been chosen to make it difficult to spoof a signature or guess the private key.
Authinfo adts are normally created during login and registration.
Authentication
Two parties conversing on a network connection authenticate each other's identity using the keyring->auth function. See auth. Keyring->auth uses the Keyring->Authinfo information to perform a Station-to-Station (STS) authentication protocol. STS authenticates a party's identity to the other and establishes a random bit string known only to the two parties. This bit string is used as a key either to encrypt or to authenticate subsequent messages sent between the two parties.
Secure Communications
After exchanging secrets, communicating parties can encode the conversation to guarantee varying levels of security:
Both login and registration require an out-of-band channel between the CA and the user.
The login procedures are used by typed commands and by programs using the Tk GUI. The login procedure is based on the CA and the user having established a common secret or password. This is done off line either by mail or telephone. This secret is then used to provide a secure path between CA and user machine to transfer the certificate and CA public key. See Limbo Math Modules.
The registration procedure is built into the Mux interface and is intended for the set top box environment. When the set top box is first turned on, it creates a public/private key pair and dials the service provider's CA to get a key signed. The CA returns its public key and a signed certificate, blinded by a random bit string known only to the CA. A hash of the information is then displayed on the user screen. The user must then telephone the CA and compare this hashed foot print with the one at the CA. If they match and the user proves that he is a customer, the CA makes the blinding string publicly known.
Data Types