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
91                 Multiple modes can be set/unset at once if the modes does not
92                 require any arguments.  If mode requires an argument then only
93                 one mode can be set at once.
94
95         /CUMODE <channel> +|-<modes> <nickname>[@<server>]
96
97                 Changes/set user's mode on a channel.  Most of the modes 
98                 require that the client who changes some client's mode must
99                 be channel founder or channel operator.  Following channel
100                 user modes are available:
101
102                 a <nickname>[@<server>]
103                                 Set/unset all modes (cannot be used to set
104                                 both founder and operator rights, can be used
105                                 only to remove both modes at once).
106                 f <nickname>[@<server>]
107                                 Unset channel founder.  Channel founder rights
108                                 cannot be set by user (only by server) so this
109                                 can be used only to unset the mode.
110                 o <nickname>[@<server>]
111                                 Set/unset channel operator.  Requires that 
112                                 you are channel operator or channel founder.
113
114         /UMODE  +|-<modes>
115
116                 Sets/unsets user mode.  Currently none of the modes can
117                 be set by the user so this command can be merely used to
118                 unset some mode.  Following user modes are available:
119
120                 a       Unset all modes
121                 s       Unset server operator privileges
122                 r       Unset router operator privileges
123
124         /MSG    <nickname> <message>
125
126                 Sends private message to remote client.  Support for
127                 handling multiple same nicknames with /MSG command is
128                 still missing.
129
130         /WHOIS  <nickname>[@<server>] [<count>]
131
132                 Gives a little information about a client.  Support for
133                 handling multiple same nicknames with this command is
134                 still missing.
135
136         /WHOWAS  <nickname>[@<server>] [<count>]
137
138                 Gives a little history information about a client.
139
140         /INVITE <channel> [<nickname>[@server>]
141                 [+|-[<nickname>[@<server>[!<username>[@hostname>]]]]]
142
143                 Invites client to a channel or manages the invite list of
144                 the channel.  The first <nickname> argument is used if an
145                 client is invited to the channel.  The second +|-<nickname>
146                 argument is used to either add or delete invite from the
147                 channel's invite list.  Wildcards may be used with this
148                 command.
149
150         /BAN    <channel> [+|-[<nickname>[@<server>[!<username>[@hostname>]]]]]
151
152                 Manages the ban list of the channel.  Wildcards may be used
153                 with this command.  You must be channel operator to be
154                 able to use this command.
155
156         /KICK   <channel> <nickname>[@<server>] [<comment>]
157
158                 Kicks client from channel. You have to be at least channel
159                 operator to be able to kick client from channel.  Note:
160                 you cannot kick channel founder even if you are channel
161                 operator.
162
163         /PING   [<server>]
164
165                 Pings server.  Only locally connected server may be 
166                 pinged.
167
168         /INFO   [<server>]
169
170                 Requests information about a server.  If argument is
171                 not specified current server is used.
172
173         /AWAY   [<message>]
174
175                 Sets away message.  When private message is received and
176                 away message is set the client automatically replies to
177                 the sender with the away message.  To remove away message
178                 give the command without arguments.
179
180         /QUIT
181
182                 Quits session.  Connection to remote server is closed.
183
184         /CLEAR
185
186                 Clears current screen.
187
188         /VERSION
189
190                 Shows client version.
191
192         /OPER   <username> [<public key>]
193
194                 Obtains server operator privileges.
195
196         /SILCOPER <username> [<public key>]
197
198                 Obtains router operator privileges.
199
200         /KILL   <nickname> [<comment>]
201
202                 Router operator can use this command to remove an client
203                 from the SILC Network temporarily.
204
205         /CONNECT <server> [<port>]
206
207                 Connects to server the remote <server>.  You must be
208                 server operator to be able to do this.
209
210
211         /CLOSE  <server> [<port>]
212
213                 Closes connection to the <server>.  You must be server
214                 operator to be able to do this.
215
216         /SHUTDOWN
217
218                 Shutdowns the server.  You must be server operator to be
219                 able to do this.
220
221         /MOTD   [<server>]
222
223                 Display the MOTD of the server.  If server is not specified
224                 the current server is used.
225
226         /LIST   [<channel>]
227
228                 Lists all channels in the current server, or the channel
229                 specified.  If the channel cannot be found then all
230                 channels are listed.
231
232
233 Features
234 ========
235
236 Features to be included into the final release of SILC.  [Note that the
237 current Developer's Version does not include all of these features, read
238 TODO file for more information.]
239
240  o Normal conferencing services such as private messages, channels,
241    channel messages, etc.  All traffic is secured and authenticated.
242
243  o No unique nicknames.  There can same nicknames in SILC without
244    collisions.  SILC has unique Client ID's, Server ID's and Channel ID's
245    to assure that there are no collisions.
246
247  o Secure key exchange and authentication protocol.  SILC Key Exchange
248    protocol provides key material used in the SILC sessions in secure
249    manner.  The protocol is immune for example to man-in-the-middle 
250    attacks.  The SILC Authentication protocol provides strong 
251    authentication.  Authentication may be based on passphrase or public
252    key (RSA) authentication.  For clients there is an option not to
253    use authentication when connecting to servers.
254
255  o All traffic is encrypted and authenticated using the best cryptographic
256    algorithms out there.  Command messages, private messages and channel
257    messages are all protected by encryption.  User can set private keys
258    for both private message and for channels so that even SILC servers do
259    not know the keys.  Cipher keys are, by default, 128 bits in length and
260    public keys, by default, 1024 bits in length.
261
262  o Supports data compression with GZIP to improve performance.
263
264  o Supports SOCKS4 and SOCKS5 firewall traversal protocols.
265
266  o SIM (SILC Module) support.  Support for loading of shared objects at 
267    run-time that provides new and extended features to both SILC client
268    and server.  These can provide extra ciphers and extra features to
269    the software.
270
271  o SILC client can be installed and used without root privileges.
272
273  o SILC client can be configured by system wide configuration files but
274    with user specific configuration files as well.
275
276
277 History
278 =======
279
280 Even though SILC were just released to the public the idea and the protocol
281 itself is quite old.  I got the idea about SILC in its current form in
282 the year 1996 and first lines of codes were written in early 1997.  This
283 release is now third rewrite of the SILC.  The very first version were
284 written in 1997 and it included SILC client and very very preliminary
285 SILC server.  The server actually weren't usable but the client looked
286 pretty much the same as it does now.  At that time the SILC also included
287 RSA implementation and 3DES implementation.  The random number generator
288 that exists in this current release is actually based on the RNG written
289 in 1997.  The RNG written in 1997, on the other hand, were based on
290 the SSH's random number generator.  The RNG has been rewritten twice
291 since the first version.
292
293 I stopped writing the SILC later in 1997 when I got busy at school and
294 in work.  The pause lasted several months.  The development resumed in
295 1998 when my friend (Juha Räsänen) and I implemented ElGamal algorithm.
296 I rewrote some other parts as well.  However, for the same reasons as
297 previously the development stopped again.  I resumed the development
298 later in 1998 by doing rewrite of the SILC in C++.  This was obviously 
299 a mistake but at that time it seemed like a good idea.  Again, in the 
300 winter 1999 I got very busy writing my thesis and was forced to stop the 
301 development again.  I also, started a new job in the spring.
302
303 Later, in 1999, I decided that this time I'm going to make it the right
304 way.  C++ was obviously a bad choice so I decided to fall back to plain
305 C language.  I also decided to do complete rewrite and started doing
306 more thorough planning of what the SILC actually should include.  I also
307 decided that this time it is going to kill me before I stop the 
308 development.  I started writing SILC in the weekends and actually 
309 everytime I had some spare time.  I also started a new job but I didn't
310 let that get to my way.  The result of this development effort is the
311 release now in public.
312
313 I've learned a lot by doing the SILC.  I guess, when I started it I wasn't
314 that good of a C programmer.  That alone was a reason why SILC hasn't
315 seen the day of light before now.  My programming style has also changed 
316 dramatically during these years.  Actually, it has changed couple times 
317 since this last rewrite as well.  However, the code style of current SILC 
318 release is quite consistent (actually the coding style SILC has been 
319 written now I've learned in my current job).
320
321 There is probably over 85% of new code in this third rewrite.  Rest has 
322 just been copied from the old versions and only minor changes has been
323 made (like changed function names and overall coding style).  I've 
324 preserved the dates of the old files (dating back to 1997) that has 
325 existed in some forms in the old versions.  There is a lot of new code but
326 already I see a lot that needs rewriting.  The development continues.
327
328
329 Contact
330 =======
331
332 Feedback and comments are welcome.  You can reach me in the following
333 Address. 
334
335 Official SILC project web site is   : http://silc.pspt.fi
336 FTP archive for SILC project is     : ftp://silc.pspt.fi/pub/silc/
337 Development mailing list address is : silc-devel@lists.sourceforge.net
338
339                                 Pekka Riikonen <priikone@poseidon.pspt.fi>