This document describes a Secure Internet Live Conferencing (SILC)
protocol which provides secure conferencing services over insecure
network channel. SILC is IRC [IRC] like protocol, however, it is
-not equivalent to IRC and does not support IRC.
+not equivalent to IRC and does not support IRC. Some of the SILC's
+features are not found in IRC but in traditional Instant Message (IM)
+protocols. SILC combines features from both of these chat protocol
+styles, and SILC can be implemeneted as either IRC-like system or
+IM-like system.
Strong cryptographic methods are used to protect SILC packets inside
the SILC network. Three other Internet Drafts relates very closely
requires message and command sending. The SILC Packet Protocol is
described in [SILC2] and should be read to fully comprehend this
document and protocol. [SILC2] also describes the packet encryption
-and decryption in detail.
+and decryption in detail. The SILC Packet Protocol provides secured
+and authenticated packets, and the protocol is designed to be compact.
+This makes SILC also suitable in environment of low bandwith
+requirements such as mobile networks. All packet payloads in SILC
+can be also compressed.
The security of SILC protocol, and for any security protocol for that
matter, is based on strong and secure key exchange protocol. The SILC
possible to have 2^8 same nicknames from the same
server IP address.
-o MD5 hash - MD5 hash value of the nickname is truncated
- taking 88 bits from the start of the hash value. This
- hash value is used to search the user's Client ID from
- the ID lists.
+o MD5 hash - MD5 hash value of the lowercase nickname is
+ truncated taking 88 bits from the start of the hash value.
+ This hash value is used to search the user's Client ID
+ from the ID lists. Note that the nickname MUST be in
+ lowercase format.
.in 3
Collisions could occur when more than 2^8 clients using same nickname
messages addressed to that channel. The channel is created when first
client requests JOIN command to the channel, and the channel ceases to
exist when the last client has left it. When channel exists, any client
-can reference it using the name of the channel.
+can reference it using the name of the channel. If the channel has
+a founder mode set and last client leaves the channel the channel does
+not cease to exist. The founder mode can be used to make permanent
+channels in the network. The founder of the channel can regain the
+channel founder privileges on the channel later when he joins the
+channel.
Channel names are unique although the real uniqueness comes from 64 bit
Channel ID. However, channel names are still unique and no two global
-channels with same name may exist. The Channel name is a string of
+channels with same name may exist. The channel name is a string of
maximum length of 256 bytes. Channel names MUST NOT contain any
-spaces (` '), any non-printable ASCII characters, commas (`,') and
-wildcard characters.
+whitespaces (` '), any non-printable ASCII characters, commas (`,')
+and wildcard characters.
Channels can have operators that can administrate the channel and
operate all of its modes. The following operators on channel exist on
Client usually sends the commands and server replies by sending a reply
packet to the command. Server MAY also send commands usually to serve
-the original client's request. However, server MUST NOT send commands
-to client and there are some commands that server must not send.
+the original client's request. Usually server cannot send commands to
+clients, however there MAY be commands that allow the server to send
+commands to client. By default servers MAY send commands only to other
+servers and routers.
Note that the command reply is usually sent only after client has sent
the command request but server is allowed to send command reply packet
-to client even if client has not requested the command. Client MAY,
+to client even if client has not requested the command. Client MAY
choose to ignore the command reply.
It is expected that some of the commands may be miss-used by clients
The header in the packet MUST NOT change during the routing of the
packet. The original sender, for example client, assembles the packet
and the packet header and server or router between the sender and the
-receiver MUST NOT change the packet header.
+receiver MUST NOT change the packet header. Note however, that some
+packets such as commands may resent by a server to serve the client's
+original command. In this case the command packet send by the server
+includes the server's IDs.
Note that the packet and the packet header may be encrypted with
different keys. For example, packets to channels are encrypted with
3.9.1 Authentication Payload
Authentication payload is used separately from the SKE and the Connection
-Authentication protocol. It is used during the session to authenticate
+Authentication protocol. It can be used during the session to authenticate
with the remote. For example, the client can authenticate itself to the
server to become server operator. In this case, Authentication Payload is
used.
the signature process, described subsequently.
o Authentication Data Length (2 bytes) - Indicates the
- length of the Authentication Data field.
+ length of the Authentication Data field. If zero (0)
+ value is found in this field the payload MUST be
+ discarded.
o Authentication Data (variable length) - Authentication
method dependent authentication data.
Authentication Data = sign(HASH);
The hash() and the sign() are the hash function and the public key
-cryptography function selected in the SKE protocol. The public key
+cryptography function selected in the SKE protocol, unless otherwise
+stated in the context where this payload is used. The public key
is SILC style public key unless certificates are used. The ID is the
entity's ID (Client or Server ID) which is authenticating itself. The
-ID is raw ID data. The random bytes are non-zero random bytes of
-length between 128 and 4096 bytes, and will be included into the
-Public Data field as is.
+ID encoding is described in [SILC2]. The random bytes are non-zero
+random bytes of length between 128 and 4096 bytes, and will be included
+into the Public Data field as is.
The receiver will compute the signature using the random data received
in the payload, the ID associated to the connection and the public key
(or certificate) received in the SKE protocol. After computing the
-receiver MUST verify the signature. In this case also, the entire
-payload is encrypted.
+receiver MUST verify the signature. In case of public key authentication
+this payload is also encrypted.
.ti 0
Additional public key algorithms MAY be defined to be used in SILC.
+When signatures are computed in SILC the computing of the signature is
+represented as sign(). The signature computing procedure is dependent
+of the public key algorithm, and the public key or certificate encoding.
+When using SILC public key the signature is computed as described in
+previous section for RSA and DSS keys. When using SSH2 public keys
+the signature is computed as described in [SSH-TRANS]. When using
+X.509 version 3 certificates the signature is computed as described
+in [PKCS7]. When using OpenPGP certificates the signature is computed
+as described in [PGP].
+
.ti 0
3.10.3 Hash Functions
.in 3
All fields in the public key are in MSB (most significant byte first)
-order.
+order. All strings in the public key are UTF-8 encoded.
.ti 0
client to its router (or if the server is router, to all routers in
the SILC network). More information about this in [SILC2].
+Router server MUST also check whether some client in the local cell
+is watching for the nickname this new client has, and send the
+SILC_NOTIFY_TYPE_WATCH to the watcher.
+
.ti 0
4.2 Creating Server Connection
it should have cached the Client ID from the SILC Packet Header.
If server receives a private message packet which includes invalid
-destionation Client ID the server MUST send SILC_COMMAND_IDENTIFY
-command reply packet destined to the client with error status.
+destionation Client ID the server MUST send SILC_NOTIFY_TYPE_ERROR
+notify to the client with error status indicating that such Client ID
+does not exist.
See [SILC2] for description of private message encryption and decryption
process.
in [SILC3], however, the HMAC key material MUST be discarded.
If the key is pre-shared-key or randomly generated the implementations
-should use the SILC protocol's mandatory cipher as the cipher. If the
-SKE was used to negotiate key material the cipher was negotiated as well.
+SHOULD use the SILC protocol's mandatory cipher as the cipher. If the
+SKE was used to negotiate key material the cipher was negotiated as well,
+and may be different from default cipher.
+
.ti 0
4.7 Channel Message Sending and Reception
distribute the message to all clients on the channel by sending the
channel message destined explicitly to a client on the channel.
-See the [SILC2] for description of channel messege routing for router
-servers.
+If server receives a channel message packet which includes invalid
+destionation Channel ID the server MUST send SILC_NOTIFY_TYPE_ERROR
+notify to the sender with error status indicating that such Channel ID
+does not exist.
-See [SILC2] for description of channel message encryption and decryption
-process.
+See the [SILC2] for description of channel messege routing for router
+servers, and channel message encryption and decryption process.
.ti 0
Client usually sends the commands in the SILC network. In this case
the client simply sends the command packet to server and the server
-processes it and replies with command reply packet.
+processes it and replies with command reply packet. See the [SILC3]
+for detailed description of all commands.
However, if the server is not able to process the command, it is sent
to the server's router. This is case for example with commands such
local clients that are joined on the same channels with the remote
server's or router's clients.
+Router server MUST also check whether some client in the local cell
+is watching for the nickname this client has, and send the
+SILC_NOTIFY_TYPE_WATCH to the watcher, unless the client which left
+the network has the SILC_UMODE_REJECT_WATCHING user mode set.
+
.ti 0
4.11 Detaching and Resuming a Session
authentication.
When server receives the SILC_PACKET_RESUME_CLIENT packet it MUST
-verify that the Client ID is valid client and that it has the
-SILC_UMODE_DETACHED mode set. It then MUST verify the Authentication
-Payload with the detached client's public key. If it does not have
-the public key it MUST retrieve it by sending SILC_COMMAND_GETKEY
-command to the server that has the public key from the original
-client connection. The server MUST NOT use the public key received
-in the SKE protocol for this connection. If the signature is valid
-the server MUST unset the SILC_UMODE_DETACHED flag, and send the
-SILC_PACKET_RESUME_CLIENT packet to its primary router. The routers
-MUST broadcast the packet and unset the SILC_UMODE_DETACHED flag
-when the packet is received. If the server is router server it also
-MUST send the SILC_PACKET_RESUME_CLIENT packet to the original server
-whom owned the detached client.
+do the following: Server checks that the Client ID is valid client
+and that it has the SILC_UMODE_DETACHED mode set. Then it verifies
+the Authentication Payload with the detached client's public key.
+If it does not have the public key it retrieves it by sending
+SILC_COMMAND_GETKEY command to the server that has the public key from
+the original client connection. The server MUST NOT use the public
+key received in the SKE protocol for this connection. If the
+signature is valid the server unsets the SILC_UMODE_DETACHED flag,
+and sends the SILC_PACKET_RESUME_CLIENT packet to its primary router.
+The routers MUST broadcast the packet and unset the SILC_UMODE_DETACHED
+flag when the packet is received. If the server is router server it
+also MUST send the SILC_PACKET_RESUME_CLIENT packet to the original
+server whom owned the detached client.
The servers and routers that receives the SILC_PACKET_RESUME_CLIENT
packet MUST know whether the packet already has been received for
same server that it originally came from. They must update their
caches according this. The server that now owns the client session
MUST check whether the Client ID of the resumed client is based
-on the server's Server ID. If it is not it MUST create new Client
+on the server's Server ID. If it is not it creates a new Client
ID and send SILC_NOTIFY_TYPE_NICK_CHANGE to the network. It MUST
also send the channel keys of all channels that the client is
joined to the client since it does not have them. Whether the
to the network and may start sending packets and messages.
It is also possible that the server does not know about the channels
-that the client has joined. In this case it MUST join client internally
+that the client has joined. In this case it join the client internally
to the channels, generate new channel keys and distribute the keys
to the channels as described in section 4.4.
[RFC2279] Yergeau, F., "UTF-8, a transformation format of ISO
10646", RFC 2279, January 1998.
+[PKCS7] Kalinski, B., "PKCS #7: Cryptographic Message Syntax,
+ Version 1.5", RFC 2315, March 1998.
.ti 0