updates.
[runtime.git] / README
1 SILC - Secure Internet Live Conferencing
2 ========================================
3
4 [NOTE: SILC is still in middle of development and this package is known
5 as Developer's Version which means that the package is in no means stable
6 or ready to be in production use.  This package is for those who wants
7 to test SILC, find bugs and maybe contribute some time and code for the
8 SILC project.  There is no guarantees that this package even compiles and
9 even if it compiles there is no guarantees that it would work, and even
10 if it works there is no guarantees that it would work correctly, and even
11 if it seems to work correctly it may be just plain luck.]
12
13
14 Description
15 ===========
16
17 SILC (Secure Internet Live Conferencing) is a protocol which provides
18 secure conferencing services in the Internet over insecure channel.
19 SILC is IRC like softwarre although internally they are very different.
20 Biggest similarity between SILC and IRC is that they both provide
21 conferencing services and that SILC has almost same commands as IRC.  Other
22 than that they are nothing alike.  Biggest differences are that SILC is 
23 secure what IRC is not in any way.  The network model is also entirely
24 different compared to IRC.
25
26
27 Running SILC
28 ============
29
30 The development version is still preliminary version and requires some
31 work to get it working.  You should, first of all, check the example
32 configuration files in ./doc/ directory.  Change them according to your
33 needs.
34
35 To run SILC client:
36
37         cd silc
38         ./silc -f <config file>
39
40 To run SILC server
41
42         cd silcd
43         ./silcd -f <config file>
44
45
46 SILC Commands
47 =============
48
49
50         /SERVER [<server>[:<port>]]
51
52                 Connects to remote SILC server.
53
54         /NICK   [<nickname>]
55
56                 Changes/sets nickname.  Note that in SILC there can be
57                 multiple same nicknames.  However, the logic on working
58                 with multiple nicknames on user interface is pretty much
59                 still missing.  Also note that nicknames in SILC are
60                 case-sensitive.
61
62         /JOIN   <channel>
63
64                 Joins to a channel.  Channel names start with `#'
65                 character.
66
67         /LEAVE  <channel>
68
69                 Leaves the channel.  If /leave * is given the client
70                 leaves the current channel.
71
72         /CMODE  <channel> +|-<modes> [{ <arguments>}]
73
74                 Changes/sets channel mode.  Most of the modes require
75                 special privileges, such as channel operator or channel
76                 founder privileges to work.  The mode is added by adding
77                 + before the option(s) and removed by adding - before
78                 the option(s).  Following modes are available:
79
80                 p               Set/unset channel as private channel
81                 s               Set/unset channel as secret channel
82                 k               Set/unset that channel uses private channel key
83                 i               Set/unset channel as invite only channel
84                 t               Set/unset that only channel operator or 
85                                 founder may set channel topic
86                 l <limit>       Set/unset channel's user limit
87                 a <passphrase>  Set/unset passphrase for channel that must
88                                 be provided when joining to the channel.
89                 c <cipher>      Set/unset channel's cipher
90                 h <hmac>        Set/unset channel's hmac
91
92                 Multiple modes can be set/unset at once if the modes does not
93                 require any arguments.  If mode requires an argument then only
94                 one mode can be set at once.
95
96         /CUMODE <channel> +|-<modes> <nickname>[@<server>]
97
98                 Changes/set user's mode on a channel.  Most of the modes 
99                 require that the client who changes some client's mode must
100                 be channel founder or channel operator.  Following channel
101                 user modes are available:
102
103                 a <nickname>[@<server>]
104                                 Set/unset all modes (cannot be used to set
105                                 both founder and operator rights, can be used
106                                 only to remove both modes at once).
107                 f <nickname>[@<server>]
108                                 Unset channel founder.  Channel founder rights
109                                 cannot be set by user (only by server) so this
110                                 can be used only to unset the mode.
111                 o <nickname>[@<server>]
112                                 Set/unset channel operator.  Requires that 
113                                 you are channel operator or channel founder.
114
115         /UMODE  +|-<modes>
116
117                 Sets/unsets user mode.  Currently none of the modes can
118                 be set by the user so this command can be merely used to
119                 unset some mode.  Following user modes are available:
120
121                 a       Unset all modes
122                 s       Unset server operator privileges
123                 r       Unset router operator privileges
124
125         /MSG    <nickname> <message>
126
127                 Sends private message to remote client.  Support for
128                 handling multiple same nicknames with /MSG command is
129                 still missing.
130
131         /WHOIS  <nickname>[@<server>] [<count>]
132
133                 Gives a little information about a client.  Support for
134                 handling multiple same nicknames with this command is
135                 still missing.
136
137         /WHOWAS  <nickname>[@<server>] [<count>]
138
139                 Gives a little history information about a client.
140
141         /INVITE <channel> [<nickname>[@server>]
142                 [+|-[<nickname>[@<server>[!<username>[@hostname>]]]]]
143
144                 Invites client to a channel or manages the invite list of
145                 the channel.  The first <nickname> argument is used if an
146                 client is invited to the channel.  The second +|-<nickname>
147                 argument is used to either add or delete invite from the
148                 channel's invite list.  Wildcards may be used with this
149                 command.
150
151         /BAN    <channel> [+|-[<nickname>[@<server>[!<username>[@hostname>]]]]]
152
153                 Manages the ban list of the channel.  Wildcards may be used
154                 with this command.  You must be channel operator to be
155                 able to use this command.
156
157         /KICK   <channel> <nickname>[@<server>] [<comment>]
158
159                 Kicks client from channel. You have to be at least channel
160                 operator to be able to kick client from channel.  Note:
161                 you cannot kick channel founder even if you are channel
162                 operator.
163
164         /PING   [<server>]
165
166                 Pings server.  Only locally connected server may be 
167                 pinged.
168
169         /INFO   [<server>]
170
171                 Requests information about a server.  If argument is
172                 not specified current server is used.
173
174         /AWAY   [<message>]
175
176                 Sets away message.  When private message is received and
177                 away message is set the client automatically replies to
178                 the sender with the away message.  To remove away message
179                 give the command without arguments.
180
181         /QUIT
182
183                 Quits session.  Connection to remote server is closed.
184
185         /CLEAR
186
187                 Clears current screen.
188
189         /VERSION
190
191                 Shows client version.
192
193         /OPER   <username> [<public key>]
194
195                 Obtains server operator privileges.
196
197         /SILCOPER <username> [<public key>]
198
199                 Obtains router operator privileges.
200
201         /KILL   <nickname> [<comment>]
202
203                 Router operator can use this command to remove an client
204                 from the SILC Network temporarily.
205
206         /CONNECT <server> [<port>]
207
208                 Connects to server the remote <server>.  You must be
209                 server operator to be able to do this.
210
211
212         /CLOSE  <server> [<port>]
213
214                 Closes connection to the <server>.  You must be server
215                 operator to be able to do this.
216
217         /SHUTDOWN
218
219                 Shutdowns the server.  You must be server operator to be
220                 able to do this.
221
222         /MOTD   [<server>]
223
224                 Display the MOTD of the server.  If server is not specified
225                 the current server is used.
226
227         /LIST   [<channel>]
228
229                 Lists all channels in the current server, or the channel
230                 specified.  If the channel cannot be found then all
231                 channels are listed.
232
233         /KEY    msg|channel <nickname|channel> 
234                 set|unset|list|agreement|negotiate [<arguments>]
235
236                 This command is used to set and unset private keys for
237                 channels, set and unset private keys for private messages
238                 with remote clients and to send key agreement requests and
239                 negotiate the key agreement protocol with remote client.
240                 The key agreement is supported only to negotiate private
241                 message keys, it currently cannot be used to negotiate
242                 private keys for channels, as it is not convenient for that
243                 purpose.
244
245                 Types:          
246
247                 msg     The command is performed for private messages
248                         affecting the <nickname>.
249
250                 channel The command is performed for channel affecting
251                         the <channel>.
252
253
254                 Commands:
255
256                 set     [<key> [<cipher>] [<hmac>]]
257
258                         Set the key into use.  If the <key> is provided it
259                         is used as the key material.  If the <key> is not
260                         provided the negotiated key material is used.  If
261                         the negotiation has not been performed this command
262                         has no effect.
263
264                         If the type is `msg' and the <key> is `*' then
265                         random key will be generated automatically.
266
267                         The <cipher> may be set for both private message
268                         and channel private keys and the <hmac> may be set
269                         only to the channel private keys.
270
271                 unset   [<number>]
272
273                         Unset the key.  The private key is not used after
274                         this command.  The key must be set again or the key
275                         material must be re-negotiated to be able to use
276                         the private keys again.
277
278                         The channel may have several private keys set.  The
279                         <number> can be used to indicate what key is being
280                         unset.  If it is not provided all keys are removed.
281
282
283                 list    List all private keys that has been set.
284
285                         If the type is `msg' and the <nickname> is ´*' then
286                         all private message keys that you've set will be
287                         listed.
288
289                 agreement [<hostname> [<port>]]
290
291                         Send key agreement request to remote client.  If
292                         the <hostname> is provided it is sent in the request.
293                         The receiver may use the hostname to start the
294                         key agreement.  If the <port> is also provided your
295                         key agreement protocol server is bound to that
296                         port.  Note that it cannot be privileged port (<1023).
297                         If the <hostname> and <port> is not provided then
298                         the receiver will never initiate the key agreement.
299                         In this case you must start the key agreement after
300                         receiving the reply to the request, by giving the
301                         /KEYAGR start command.
302
303                         This command may be used to send reply to the
304                         remote client.  When receiving empty key agreement
305                         you can reply to the sender with the hostname and
306                         port of your key agreement server with this command.
307
308                 negotiate [<hostname> [<port>]]
309
310                         This may be called to start the key agreement with
311                         <nickname>.  This command has effect only if the
312                         <nickname> has replied to your key agreement request.
313                         You will see a notify on the screen when the reply
314                         arrives.  The <hostname> and <port> is the hostname
315                         and port of the remote client's key agreement
316                         server.
317
318         /ME     <channel> <action message>
319
320                 This command is used to send an action to the channel.
321                 This equals to CTCP's ACTION (IRC's /ME) command.
322
323 Features
324 ========
325
326 Features to be included into the final release of SILC.  [Note that the
327 current Developer's Version does not include all of these features, read
328 TODO file for more information.]
329
330  o Normal conferencing services such as private messages, channels,
331    channel messages, etc.  All traffic is secured and authenticated.
332
333  o No unique nicknames.  There can same nicknames in SILC without
334    collisions.  SILC has unique Client ID's, Server ID's and Channel ID's
335    to assure that there are no collisions.
336
337  o Secure key exchange and authentication protocol.  SILC Key Exchange
338    protocol provides key material used in the SILC sessions in secure
339    manner.  The protocol is immune for example to man-in-the-middle 
340    attacks.  The SILC Authentication protocol provides strong 
341    authentication.  Authentication may be based on passphrase or public
342    key (RSA) authentication.  For clients there is an option not to
343    use authentication when connecting to servers.
344
345  o All traffic is encrypted and authenticated using the best cryptographic
346    algorithms out there.  Command messages, private messages and channel
347    messages are all protected by encryption.  User can set private keys
348    for both private message and for channels so that even SILC servers do
349    not know the keys.  Cipher keys are, by default, 128 bits in length and
350    public keys, by default, 1024 bits in length.
351
352  o Supports data compression with GZIP to improve performance.
353
354  o Supports SOCKS4 and SOCKS5 firewall traversal protocols.
355
356  o SIM (SILC Module) support.  Support for loading of shared objects at 
357    run-time that provides new and extended features to both SILC client
358    and server.  These can provide extra ciphers and extra features to
359    the software.
360
361  o SILC client can be installed and used without root privileges.
362
363  o SILC client can be configured by system wide configuration files but
364    with user specific configuration files as well.
365
366
367 History
368 =======
369
370 Even though SILC were just released to the public the idea and the protocol
371 itself is quite old.  I got the idea about SILC in its current form in
372 the year 1996 and first lines of codes were written in early 1997.  This
373 release is now third rewrite of the SILC.  The very first version were
374 written in 1997 and it included SILC client and very very preliminary
375 SILC server.  The server actually weren't usable but the client looked
376 pretty much the same as it does now.  At that time the SILC also included
377 RSA implementation and 3DES implementation.  The random number generator
378 that exists in this current release is actually based on the RNG written
379 in 1997.  The RNG written in 1997, on the other hand, were based on
380 the SSH's random number generator.  The RNG has been rewritten twice
381 since the first version.
382
383 I stopped writing the SILC later in 1997 when I got busy at school and
384 in work.  The pause lasted several months.  The development resumed in
385 1998 when my friend (Juha Räsänen) and I implemented ElGamal algorithm.
386 I rewrote some other parts as well.  However, for the same reasons as
387 previously the development stopped again.  I resumed the development
388 later in 1998 by doing rewrite of the SILC in C++.  This was obviously 
389 a mistake but at that time it seemed like a good idea.  Again, in the 
390 winter 1999 I got very busy writing my thesis and was forced to stop the 
391 development again.  I also, started a new job in the spring.
392
393 Later, in 1999, I decided that this time I'm going to make it the right
394 way.  C++ was obviously a bad choice so I decided to fall back to plain
395 C language.  I also decided to do complete rewrite and started doing
396 more thorough planning of what the SILC actually should include.  I also
397 decided that this time it is going to kill me before I stop the 
398 development.  I started writing SILC in the weekends and actually 
399 everytime I had some spare time.  I also started a new job but I didn't
400 let that get to my way.  The result of this development effort is the
401 release now in public.
402
403 I've learned a lot by doing the SILC.  I guess, when I started it I wasn't
404 that good of a C programmer.  That alone was a reason why SILC hasn't
405 seen the day of light before now.  My programming style has also changed 
406 dramatically during these years.  Actually, it has changed couple times 
407 since this last rewrite as well.  However, the code style of current SILC 
408 release is quite consistent (actually the coding style SILC has been 
409 written now I've learned in my current job).
410
411 There is probably over 85% of new code in this third rewrite.  Rest has 
412 just been copied from the old versions and only minor changes has been
413 made (like changed function names and overall coding style).  I've 
414 preserved the dates of the old files (dating back to 1997) that has 
415 existed in some forms in the old versions.  There is a lot of new code but
416 already I see a lot that needs rewriting.  The development continues.
417
418
419 Contact
420 =======
421
422 Feedback and comments are welcome.  You can reach me in the following
423 Address. 
424
425 Official SILC project web site is   : http://silc.pspt.fi
426 FTP archive for SILC project is     : ftp://silc.pspt.fi/pub/silc/
427 Development mailing list address is : silc-devel@lists.sourceforge.net
428
429                                 Pekka Riikonen <priikone@poseidon.pspt.fi>