[C#] SafeShare
#1
Hello everyone,

I'm making an application named SafeShare (its really not finished),

A filesharing example:

Client A and Client B both want to share a file with each other.
Client A already uses SafeShare and Client B is new. Client A gave Client B the hash of the file, Client B has downloaded SafeShare and just got his freshly generated ID. He then downloads the nodelist from one of the supernodes, and then every 50min he requests other nodes known nodes. After being connected to some nodes he searches the network for the file hash, one node knows the existance of the file and routes the connection from Client B to Client A while remaining in the middle. Client B sets up a connection with Client A and both verify each others identity and download each others public key, then an ssl connection is made between the 2 and outgoing traffic is encrypted with the other Clients public key and incoming is decrypted with own private key.

Once its fully finished I hope it will serve as: secure filesharing, communications, sites and a self contained network.

You can find its repository on Github
[url=https://github.com/dmgamingstudios/SafeShare][/url]
You can give me feedback or your ideas for it to grow, or you can always fix an issue if you want to help Smile
Reply
#2
Looks pretty neat, I like decentralization. Since I'm guessing you drew inspiration from IPFS, do you intend to make files browseable or can you only retrieve files that you only know the hash?

Quote:Client B sets up a connection with Client A and both verify each others identity and download each others public key,

What kind of scheme are you going to use here (like x509 /'normal' certificates, or PGP)? Does the user manually verify the fingerprint? Trust on the Internet only works because all browsers come with a handful of CA certificates pre-installed, without those you either have to blindly trust or get them in some other means.

Quote:then an ssl connection is made between the 2 and outgoing traffic is encrypted with the other Clients public key and incoming is decrypted with own private key.
Just to nitpick, SSL only uses the pub/priv to authenticate the Diffie Hellman exchange. Then the generated shared key is used to encrypt. Otherwise it would be extremely slow and resource intensive. The libraries probably take care of a lot of that, but you may want to give some thought to the default values, there's a lot more than just picking the symmetric cipher.
Reply
#3
Thanks, well for the files I was thinking, maybe you can set files to private or public, when public you can access them from a list otherwise only with the hash, but thats just an idea.

It currently only uses X509certificates. The common name on the certificate is the hash of the node name and encrypted private key and then it should be signed by a valid CA from one of the SuperNodes. Every supernode has a CA file which will be installed either at first setup or later on if pushed by an already valid SuperNode.

hmm interesting, okay, thanks for the feedback Smile its still in babysteps but thanks to your feedback I can make this better
Reply