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