+Mon Apr 29 20:10:42 EEST 2002 Pekka Riikonen <priikone@silcnet.org>
+
+ * Added `Compressed' packet flag to indicate that the packet
+ payload is compressed by the sender. Updated the protocol
+ specs and the core library. The compression still is not
+ implemented in the sources. Affected file is
+ lib/silccore/silcpacket.h.
+
Mon Apr 29 09:48:12 CEST 2002 Pekka Riikonen <priikone@silcnet.org>
* Remove pending command callbacks also if the connection
set the key only if application wishes to set (accept the key) it
(Do this to 1.0).
- o Remove conn->current_channel.
-
o Additions to do after protocol version 1.1:
o Add support for list of errors in command replies. Protocol
This attribute includes general information about the user, their
name and contact information. The content of this attribute is
- a VCard version 3.0 as defined in RFC 2425 [RFC2425] and RFC 2426
- [RFC2426]. Note that some of the information that VCard provides
+ a VCard version 3.0 as defined in RFC 2426 [RFC2426] and RFC 2425
+ [RFC2425]. Note that some of the information that VCard provides
can be also provided in the means of providing other attributes.
The rationale for this is that the VCard does not provide all the
information, or with the required precision that may be desired in
This attribute indicates that the attribute value is vendor,
application or service specific attribute extension. This field
- MUST include MIME object, which is the extension value. This
+ MUST include a MIME object, which is the extension value. This
document does not specify any explicit MIME objects for this
attribute.
x509v3-sign-rsa X.509 Version 3 RSA certificate [RFC2459]
x509v3-sign-dss X.509 Version 3 DSS certificate [RFC2459]
- These public key/certificate types are equivalent to the types
- specified for SSH protocol [SSH-TRANS] and are expected to be
- officially assigned by IANA. The silc-rsa and silc-dss are not
- currently specified in SSH, however they are considered to be
- IANA assigned later anyway.
+ Most of these public key/certificate types are equivalent to
+ the types specified for SSH protocol [SSH-TRANS] and are expected
+ to be officially assigned by IANA.
The encoding of the public key/certificate data in the attribute
is done in the manner defined in their respective definitions.
Note that these public keys are intended for signing. Some
certificates may have a key usage restrictions and same key cannot
be used for both encryption and signing. Therefore, the name
- of the certificate type indicates that they are intended for
- signing.
+ of the certificate type indicates if they are intended for
+ signing only.
x ATTRIBUTE_SERVER_PUBLIC_KEY
.ti 0
5 References
+[RFC2119] Bradner, S., "Key Words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+[RFC2279] Yergeau, F., "UTF-8, a transformation format of ISO
+ 10646", RFC 2279, January 1998.
+
+[RFC2425] Howes, T., et al, "A MIME Content-Type for Directory
+ Information", RFC 2425, September 1998.
+
+[RFC2426] Dawson, F., et al, "vCard MIME Directory Profile",
+ RFC 2426, September 1998.
+
+[SILC1] Riikonen, P., "Secure Internet Live Conferencing (SILC),
+ Protocol Specification", Internet Draft, April 2001.
+
+[RFC2440] Callas, J., et al, "OpenPGP Message Format", RFC 2440,
+ November 1998.
+
+[RFC2459] Housley, R., et al, "Internet X.509 Public Key
+ Infrastructure, Certificate and CRL Profile", RFC 2459,
+ January 1999.
+
+[SSH-TRANS] Ylonen, T., et al, "SSH Transport Layer Protocol",
+ Internet Draft.
+
+[PKCS7] Kalinski, B., "PKCS #7: Cryptographic Message Syntax,
+ Version 1.5", RFC 2315, March 1998.
.ti 0
Channel founder may set this mode to be able to regain
channel founder rights even if the client leaves the
channel. The <auth payload> is the Authentication Payload
- consisting of the authentication method and authentication
- data to be used in the authentication. The server MUST
- NOT accept NONE authentication method. Also, if the
- method is public key authentication the server MUST NOT
- save the authentication data from the payload as the
- data is different on all authentications. In this case the
- server only saves the authentication method. However,
- server MUST verify the sent authentication payload and
- set the mode only if the verification was successful.
-
- Note that this mode is effective only in the current server.
- The client MUST connect to the same server later to be able
- to regain the channel founder rights. The server MUST save
- the public key of the channel founder and use that to identify
- the client which is claiming the channel founder rights.
- The rights may be claimed by the SILC_CUMODE_FOUNDER
- channel user mode using SILC_COMMAND_CUMODE command. The
- set authentication data remains valid as long as the channel
- exists or until the founder unsets this mode.
+ consisting of the public key authentication method and the
+ authentication data for that method. The passphrase
+ method cannot be used with this mode. The server MUST NOT
+ accept NONE authentication method. The server does not
+ save <auth payload> but MUST verify it. The public key
+ used to verify the payload is the public key of the
+ client sending this command. The mode may be set only
+ if the <auth payload> was verified successfully. The
+ server also MUST save the founder's public key.
+
+ The public key of the founder is sent in the
+ SILC_NOTIFY_TYPE_CMODE_CHANGE notify type so that other
+ routers and servers in the network may save the public key.
+ This way the founder can reclaim the founder rights back
+ to the channel from any server in the network. The founder
+ rights can be regained by the SILC_CUMODE_FOUNDER channel
+ user mode, or during joining procedure with the command
+ SILC_COMMAND_JOIN.
+
+ When this channel mode is set the channel also becomes
+ permanent. If all clients leave the channel while this
+ mode is set the channel MUST NOT be destroyed. The founder
+ can reclaim the founder mode back on these empty channels
+ at any time. Implementations MAY limit the number of how
+ many channels a user can own.
Typical implementation would use [+|-]f on user interface
to set/unset this mode.
been set, the client can claim channel founder privileges
by providing the <auth payload> that the server will use
to authenticate the client. The public key that server will
- use to verify the <auth payload> must the same public key
+ use to verify the <auth payload> MUST the same public key
that was saved when the SILC_CMODE_FOUNDER_AUTH channel
mode was set. The client MAY remove this mode at any time.
protocol describes the packet types and packet payloads which defines
the contents of the packets. The protocol provides secure binary packet
protocol that assures that the contents of the packets are secured and
-authenticated.
+authenticated. The packet protocol is designed to be compact to avoid
+unnecessary overhead as much as possible. This makes the SILC suitable
+also in environment of low bandwith requirements such as mobile networks.
+All packet payloads can also be compressed to further reduce the size
+of the packets.
The basis of SILC protocol relies in the SILC packets and it is with
out a doubt the most important part of the protocol. It is also probably
section 2.12 Packet Broadcasting for description of
packet broadcasting.
+
+ Compressed 0x08
+
+ Marks that the payload of the packet is compressed.
+ The sender of the packet marks this flag when it
+ compresses the payload, and any server or router
+ en route to the receipient MUST NOT unset this flag.
+ See section 2.8 Packet Compression for description of
+ packet compressing.
+
.in 3
to the clients which is joined on the channel which mode was
changed.
- Max Arguments: 5
+ Max Arguments: 6
Arguments: (1) <ID Payload> (2) <mode mask>
(3) [<cipher>] (4) <[hmac>]
- (5) [<passphrase>]
+ (5) [<passphrase>] (6) [<founder public key>]
The <ID Payload> is the ID (usually Client ID but it can be
Server ID as well when the router is enforcing channel mode
packet will force the new channel key change anyway. The <hmac>
argument is important since the client is responsible of setting
the new HMAC and the hmac key into use. The <passphrase> is
- the passphrase of the channel, if it was now set.
+ the passphrase of the channel, if it was now set. The <founder
+ public key> argument is sent when the founder mode on the
+ channel was set. All routers and servers that receive the packet
+ MUST save the founder's public key so that the founder can
+ reclaim the channel founder rights back for the channel on any
+ server in the network.
8 SILC_NOTIFY_TYPE_CUMODE_CHANGE
other parts of the packet.
o MAC (variable length) - The MAC computed from the
- Message Length, Message Data, Padding Length, Padding and
- Initial Vector fields. This protects the integrity of the
- plaintext channel message. The receiver can verify from
- the MAC whether the message decrypted correctly. Also, if
- more than one private key has been set for the channel, the
- receiver can verify which of the keys decrypted the message
- correctly. Note that, this field is encrypted and MUST
- be added to the padding calculation.
+ Message Flags, Message Length, Message Data, Padding Length,
+ Padding and Initial Vector fields in that order. This
+ protects the integrity of the plaintext channel message.
+ The receiver can verify from the MAC whether the message
+ decrypted correctly. Also, if more than one private key
+ has been set for the channel, the receiver can verify which
+ of the keys decrypted the message correctly. Note that,
+ this field is encrypted and MUST be added to the padding
+ calculation.
o Initial Vector (variable length) - The initial vector
that has been used in packet encryption. It needs to be
used in the packet decryption as well. What this field
includes is implementation issue. However, it is
- RECOMMENDED that it would be random data or, perhaps,
+ RECOMMENDED that it would be random data, or perhaps
a timestamp. It is NOT RECOMMENDED to use zero (0) as an
initial vector. This field is not encrypted. This field
is not included into the padding calculation. Length
the packet is received and decrypted the data area MUST be decompressed.
Note that the true sender of the packet MUST apply the compression and
the true receiver of the packet MUST apply the decompression. Any
-server or router en route MUST NOT decompress the packet.
+server or router en route SHOULD NOT decompress the packet.
.ti 0
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
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
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
[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
#define SILC_PACKET_FLAG_PRIVMSG_KEY 0x01 /* Private message key */
#define SILC_PACKET_FLAG_LIST 0x02 /* Packet is a list */
#define SILC_PACKET_FLAG_BROADCAST 0x04 /* Packet is a broadcast */
+#define SILC_PACKET_FLAG_COMPRESSED 0x08 /* Payload is compressed */
/***/
/* Rest of flags still available
-#define SILC_PACKET_FLAG_XXX 0x08
#define SILC_PACKET_FLAG_XXX 0x10
#define SILC_PACKET_FLAG_XXX 0x20
#define SILC_PACKET_FLAG_XXX 0x40