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 similiarity 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 nicknams 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         /MSG    <nickname> <message>
75
76                 Sends private message to remote client.  Support for
77                 handling multiple same nicknames with /MSG command is
78                 still missing.
79
80         /WHOIS  <nickname>[@<server>] [<count>]
81
82                 Gives a little information about a client.  Support for
83                 handling multiple same nicknames with this command is
84                 still missing.
85
86         /PING   [<server>]
87
88                 Pings server.  Only locally connected server may be 
89                 pinged.
90
91         /INFO   [<server>]
92
93                 Requests information about a server.  If argument is
94                 not specified current server is used.
95
96         /QUIT
97
98                 Quits session.  Connection to remote server is closed.
99
100         /CLEAR
101
102                 Clears current screen.
103
104         /VERSION
105
106                 Shows client version.
107
108
109 Features
110 ========
111
112 Features to be included into the final release of SILC.  [Note that the
113 current Developer's Version does not include all of these features, read
114 TODO file for more information.]
115
116  o Normal conferencing services such as private messages, channels,
117    channel messages, etc.  All traffic is secured and authenticated.
118
119  o No unique nicknames.  There can same nicknames in SILC without
120    collisions.  SILC has unique Client ID's, Server ID's and Channel ID's
121    to assure that there are no collisions.
122
123  o Secure key exchange and authentication protocol.  SILC Key Exchange
124    protocol provides key material used in the SILC sessions in secure
125    manner.  The protocol is immune for example to man-in-the-middle 
126    attacks.  The SILC Authentication protocol provides strong 
127    authentication.  Authentication may be based on passphrase or public
128    key (RSA) authentication.  For clients there is an option not to
129    use authentication when connecting to servers.
130
131  o All traffic is encrypted and authenticated using the best cryptographic
132    algorithms out there.  Command messages, private messages and channel
133    messages are all protected by encryption.  User can set private keys
134    for both private message and for channels so that even SILC servers do
135    not know the keys.  Cipher keys are, by default, 128 bits in length and
136    public keys, by default, 1024 bits in length.
137
138  o Supports data compression with GZIP to improve performance.
139
140  o Supports SOCKS4 and SOCKS5 firewall traversal protocols.
141
142  o SIM (SILC Module) support.  Support for loading of shared objects at 
143    run-time that provides new and extended features to both SILC client
144    and server.  These can provide extra ciphers and extra features to
145    the software.
146
147  o SILC client can be installed and used without root privileges.
148
149  o SILC client can be configured by system wide configuration files but
150    with user specific configuration files as well.
151
152
153 History
154 =======
155
156 Even though SILC were just released to the public the idea and the protocol
157 itself is quite old.  I got the idea about SILC in its current form in
158 the year 1996 and first lines of codes were written in early 1997.  This
159 release is now third rewrite of the SILC.  The very first version were
160 written in 1997 and it included SILC client and very very preliminary
161 SILC server.  The server actually weren't usable but the client looked
162 pretty much the same as it does now.  At that time the SILC also included
163 RSA implementation and 3DES implementation.  The random number generator
164 that exists in this current release is actually based on the RNG written
165 in 1997.  The RNG written in 1997, on the other hand, were based on
166 the SSH's random number generator.  The RNG has been rewritten twice
167 since the first version.
168
169 I stopped writing the SILC later in 1997 when I got busy at school and
170 in work.  The pause lasted several months.  The development resumed in
171 1998 when my friend (Juha Räsänen) and I implemented ElGamal algorithm.
172 I rewrote some other parts as well.  However, for the same reasons as
173 previously the development stopped again.  I resumed the development
174 later in 1998 by doing rewrite of the SILC in C++.  This was obviously 
175 a mistake but at that time it seemed like a good idea.  Again, in the 
176 winter 1999 I got very busy writing my thesis and was forced to stop the 
177 development again.  I also, started a new job in the spring.
178
179 Later, in 1999, I decided that this time I'm going to make it the right
180 way.  C++ was obviously a bad choice so I decided to fall back to plain
181 C language.  I also decided to do complete rewrite and started doing
182 more thorough planning of what the SILC actually should include.  I also
183 decided that this time it is going to kill me before I stop the 
184 development.  I started writing SILC in the weekends and actually 
185 everytime I had some spare time.  I also started a new job but I didn't
186 let that get to my way.  The result of this development effort is the
187 release now in public.
188
189 I've learned a lot by doing the SILC.  I guess, when I started it I wasn't
190 that good of a C programmer.  That alone was a reason why SILC hasn't
191 seen the day of light before now.  My programming style has also changed 
192 dramatically during these years.  Actually, it has changed couple times 
193 since this last rewrite as well.  However, the code style of current SILC 
194 release is quite consistent (actually the coding style SILC has been 
195 written now I've learned in my current job).
196
197 There is probably over 85% of new code in this third rewrite.  Rest has 
198 just been copied from the old versions and only minor changes has been
199 made (like changed function names and overall coding style).  I've 
200 preserved the dates of the old files (dating back to 1997) that has 
201 existed in some forms in the old versions.  There is a lot of new code but
202 already I see a lot that needs rewriting.  The development continues.
203
204
205 Contact
206 =======
207
208 Feedback and comments are welcome.  You can reach me in the following
209 Address. 
210
211 [Note that generally bug reports should not be sent just yet as the 
212 Developer's Version is full of them and the bug hunt has not even started 
213 yet.]
214
215                                 Pekka Riikonen <priikone@poseidon.pspt.fi>