And if Bob is your only connection..
That is great.
I'm not saying that you CAN'T change your key.
In fact, you can. Any time you want. And each time, you will need to reinitialize yourself with the entire network, unless they are replicating trusted keys internally.
So its more like this..
Hey Bob....
Hey Tim...
Hey bill...
etc etc.
expecting that most networks will need at least 100+ members to have a decent collection of files and download points, that's not a negligible work.
And also, they would want the ability to change keys as well. giving that it is probably more work than anyone would wont to do, say one key addition per day. That means you have your key for a minimum of 4 months before being able to change it. Since 100 people, 1 per day, 100 days, etc.
Or find an easier method, such as dynamically created keys based on request, ttl of packets, etc.
then jumble the actual data, etc.
There are ways.
I suggest reading more on what this software actually does, and its limitations. I was surprised as to how robust the software was, but again, its limitations are not negligible.
Its strength comes from having a trusted set of users (keys) that do not allow anyone else to share their private keys.
The default setting is that if any user in that group accepts that new users key, it is broadcast as a trusted key into the rest of the group.
You can set it so that you must manually approve, but then you run into the 4 month limitation... where everyone must manually approve everyone else and all their changes as they happen.
If this is manageable for you, then so be it. I think it is a great alternative for some, but the last thing people need to think is that in its default configuration it is somehow secure.
It is more secure than what is currently available.
That's all that can be said.
...
...
Pure-- they do have a *ux client.
Its command line, but writing a quickie GTK wrapper I'm sure is in the works. doesn't look all that hard.
That's the source that I looked through to see how it was designed to work.
Interesting read.
..
For instance -->
WASTE cryptography
Since WASTE requires a small trusted network to function efficiently, it benefits greatly from cryptography. Using public-key encryption for session key negotiation and user authentication allows both the prevention of unknown users from joining the network as well link data security to prevent unknown users from “sniffing” network traffic.
WASTE also provides for an additional “network name or ID” that can be used to secure a network against people who do not have the name or ID. This can be useful if you wish to easily prevent multiple networks from merging, or change it to easily remove access of user(s) without having to make everybody ban those user(s) public keys.
WASTE uses a (hopefully) cryptographically secure random number generator based on the implementation in the RSA reference code. The code uses a 32 byte state, with 16 bytes of counter and 16 bytes of system entropy constantly mixed in, and produces random values by using MD5.
WASTE connections use RSA (with 1024 bit or greater public key sizes) for exchange of 56 byte Blowfish session keys, and 8 byte PCBC initialization vectors.
The link connection negotiation, where A is connecting to B, goes something like this:
1. A sends B 16 random bytes (randA), or blowFish(SHA(netname),randA) if a network name is used.
2. A sends B blowFish(randA, 20 byte SHA-1 of public key + 4 pad bytes).
3. B decrypts to get the SHA-1 of A’s public key.
4. If B does not know the public key hash sent to it, B disconnects.
5. B sends A 16 random bytes (randB), or blowFish(SHA(netname),randB) if a network name is used.
6. B sends A blowFish(randB,20 byte SHA-1 of public key + 4 pad bytes).
7. A decrypts to get the SHA-1 of B’s public key.
8. If A does not know the public key hash sent to it, A disconnects.
9. A looks up B’s public key hash in A’s local database to find B’s public key (pubkey_B).
10. A generates sKeyA, which is 64 random bytes.
11. If a network name is used, A encrypts the first 56 bytes of sKeyA using the SHA-1 of the network name, to produce EsKeyA. Otherwise, EsKeyA is equal to sKeyA.
12. A sends B: RSA(pubkey_B,EsKeyA + randB) (+ = concatenated).
13. B looks up A’s public key hash in B’s local database to find A’s public key (pubkey_A).
14. B generates sKeyB, which is 64 random bytes.
15. If a network name is used, B encrypts the first 56 bytes of sKeyB using the SHA-1 of the network name, to produce EsKeyB. Otherwise, EsKeyB is equal to sKeyB.
16. B sends A: RSA(pubKey_A, EsKeyB + randA), (+ = concatenated).
17. A decrypts using A’s private key, and verifies that the last 16 bytes are equal to randA.
18. B decrypts using B’s private key, and verifies that the last 16 bytes are equal to randB
19. If a network name is used, A decrypts the first 56 bytes of sKeyB using the SHA-1 of the network name.
20. If a network name is used, B decrypts the first 56 bytes of sKeyA using the SHA-1 of the network name.
21. Both A and B check to make sure that the first 56 bytes of sKeyA does not equal the first 56 bytes of sKeyB. If they do (which is statistically unrealistic and would lead one to believe it is an attack), they disconnect.
22. Both A and B check to make sure the final 8 bytes of sKeyA differs from the final 8 bytes of sKeyB. If they are equal, disconnect.
23. A uses the first 56 bytes of sKeyA XOR sKeyB to initialize Blowfish for send and receive. A uses the final 8 bytes of sKeyA as the PCBC IV for send, and the final 8 bytes of sKeyB as the PCBC IV for receive.
24. B uses the first 56 bytes of sKeyA XOR sKeyB to intialize Blowfish for send and receive. B uses the final 8 bytes of sKeyB as the PCBC IV for send, and the final 8 bytes of sKeyA as the PCBC IV for receive.
25. All further communications in both directions are encrypted using the initialized Blowfish keys and PCBC IVs.
26. A sends B the constant 16 byte signature (“MUGWHUMPJISMSYN2”)
27. B decrypts verifies the signature
28. B sends A the constant 16 byte signature (“MUGWHUMPJISMSYN2”)
29. A decrypts and verifies the signature
30. Message communication begins (each message uses a MD5 to detect tampering – if detected, connection is dropped)
to repeat, its for a small network, and it makes no allowance of rotating keys. The entire conversation is based on the keys which, by another "trusted" user of both the sender and reciever, has access to, and the "unencryption" piece is defined above. If you have the keys, you have the conversation.