add chaos_calmer branch
[15.05/openwrt.git] / package / network / services / ead / src / tinysrp / Notes
1 t_* stuff is from the srp 1.7.1 dist
2 bn_* stuff is from openssl 0.9.6
3
4 (The 7 in libtinysrp's version number reflects the srp version.)
5
6 Licensing and copyright for srp and openssl are as indicated in the relevant
7 source files.  Everything else here is GPL, including the tinysrp protocol.
8
9 Changelog since initial release:
10
11 0.7.4   more robust terminal modes in t_getpass
12         a potential buffer overflow in tinysrp
13 0.7.5   uninitialized pointer bug in tconf
14
15 Changes from the base srp and openssl distributions:
16
17 I've removed everything that's not needed for client/server operations, and
18 all the bn_* stuff that's only used for prime generation has been moved to
19 t_conf.c, which isn't part of the library anymore.  Also, all the routines
20 used for passphrase file maintenance have been moved to tphrase.c.
21
22 The library has been optimized (a bit) for space instead of speed.  Since
23 authentication is usually only done once, this isn't a big problem.  Modern
24 CPUs are plenty fast for this task, and even 100 MHz CPUs are fine.  If you
25 really need the speed, get the regular distributions.
26
27 Note that if the server sends the client a prime that the client doesn't
28 know about, the client MUST test for primality.  Since this is pretty
29 expensive, and takes 30 seconds on a 100 MHz machine, and uses lots of code,
30 I've removed that ability from the client.  So only KNOWN primes can be
31 used.  You can still generate new ones with tconf, but you have to install
32 them in the table of known primes (pre_params) in t_getconf.c that's common
33 to the client and server, and recompile.  The configuration file is gone.
34
35 The default prime (the last entry in the table) is 1024 bits; there are
36 others with more bits but they will be correspondingly slower.
37
38 The default tpasswd file (which is an ascii file that may be editted with a
39 regular text editor) contains two users: moo (passphrase "glub glub") and
40 "new user" (passphrase "this is a test").  Passphrases may be added or
41 changed with tphrase; you can also change the user's prime.  To delete a
42 user, edit the tpasswd file and remove that line.  The tpasswd file's
43 default name is DEFAULT_PASSWD in t_pwd.h.  Note that you can't change a
44 user's username by editting the file: the username is encoded in the
45 verifier.  If you change a username you must set a new passphrase with
46 tphrase.
47
48 Here is an example session, using the supplied srvtest and clitest.  First,
49 start both programs in different windows, and enter the user names.  Normally,
50 the client would send the username to the server.  Server lines are marked
51 with S>, client lines with C>.
52
53 S> % srvtest
54 S> Enter username: moo
55 S> index (to client): 5
56 S> salt (to client): 19AI0Hc9jEkdFc
57
58 C> % clitest
59 C> Enter username: moo
60 C> Enter index (from server): 5
61 C> Enter salt (from server): 19AI0Hc9jEkdFc
62
63 The server reports the index and salt values used for that user.  They
64 are sent over the network to the client.  (Simulate this by cutting and
65 pasting from one window to the other.)
66
67 C> A (to server): 5wCDXRxLIv/zLazYfKupV/OY3BlhTZuJ71wVgI0HcL1kSJEpkMuWF.xEz/BV2wlJl7vk5Eoz9KMS1ccnaatsVP5D6CBm7UA.yVB59EQFN0dNBirvX29NAFdtdMsMppo5tHRy987XjJWrWSLpeibq6emr.gP8nYyX75GQqSiMY1j
68 C> Enter password:
69
70 S> Enter A (from client): 5wCDXRxLIv/zLazYfKupV/OY3BlhTZuJ71wVgI0HcL1kSJEpkMuWF.xEz/BV2wlJl7vk5Eoz9KMS1ccnaatsVP5D6CBm7UA.yVB59EQFN0dNBirvX29NAFdtdMsMppo5tHRy987XjJWrWSLpeibq6emr.gP8nYyX75GQqSiMY1j
71
72 Now the client calculates A and sends it to the server, and while the
73 server is munching on that, the client gets the password from the user.
74
75 S> B (to client): 9dcCpulxQAbaDXI0NHWY6B.QH6B9fsoXs/x/5SCNBNJm/6H6bYfbVrwNmdquhLZjYMvpcgGc2mBYqL77RNfw1kVQo17//GfsByECBIjRnrAn02ffX9Y/llJcfscAQiii0hyZhJf9PT5wE7pC7WUjIgSqckIZ0JLNDbSr7fJcrgw
76 S> Session key: ebbcf3a45c968defdcfff6e144ad8d4f5412167c9716e79cbf7cacfe18257947ad46fa5d6418a1fd
77
78 The server now calculates B and sends it to the client.  The session key
79 is not sent -- it is a shared secret that can be used for encryption.
80
81 C> Enter B (from server): 9dcCpulxQAbaDXI0NHWY6B.QH6B9fsoXs/x/5SCNBNJm/6H6bYfbVrwNmdquhLZjYMvpcgGc2mBYqL77RNfw1kVQo17//GfsByECBIjRnrAn02ffX9Y/llJcfscAQiii0hyZhJf9PT5wE7pC7WUjIgSqckIZ0JLNDbSr7fJcrgw
82 C> Session key: ebbcf3a45c968defdcfff6e144ad8d4f5412167c9716e79cbf7cacfe18257947ad46fa5d6418a1fd
83 C> Response (to server): b9ea99094a176c4be28eb469982066cc7146d180
84
85 The client uses the B value to calculate its own copy of the shared secret
86 session key, and sends a response to the server proving that it does know
87 the correct key.
88
89 S> Enter response (from client): b9ea99094a176c4be28eb469982066cc7146d180
90 S> Authentication successful.
91 S> Response (to client): cd46c839ccad2d0c76f3ca1905ae8ceda8d1c1dc
92
93 The server authenticates the client.  (You're in!)
94
95 C> Enter server response: cd46c839ccad2d0c76f3ca1905ae8ceda8d1c1dc
96 C> Server authentication successful.
97
98 The client authenticates the server (prevents server spoofing in the case
99 where the session key isn't used to encrypt the channel -- a spoofed server
100 might just respond with random values and _pretend_ to authenticate the
101 client; but the spoofed server won't know the session key and this check
102 catches that).
103
104 Final note:
105
106 Remember that many breaches of security involve buggy software, such as
107 servers susceptible to buffer overflow exploits that totally bypass any
108 passphrase, secure or not.  If an attacker roots your client, or the server,
109 no form of authentication will work.  Consider MAC-based schemes if this
110 worries you.