https://en.m.wikipedia.org/wiki/CoinJoinCan you please tell me main differences?
For me it seems you guys are doing exactly this. (Bolded in your text)
Also can you please explain the last Bolded part in more detail please? I'm not quite sure what you mean with it.
Thank you for your time.
From my brief understanding, Coin Join is still technically transactionally linked, they just add a bit of misdirection in between sender and receiver. Its kind of like saying that I have $5 and you have $5 and we take both our $5 and swap it for a $10 note at the bank, then we take that $10 and get it changed into 2 differnet $5 at another bank and I buy an ice cream and you buy a can of coke. The $5 we used to buy icecream and coke isnt the same $5 each of us started with but in terms of bitcoin, all the data showing the inputs and outputs is available on the public block chain and is traceable just as if the bank recorded the serial numbers of the notes when we exchanged them. Using the example I have created, you probably couldn't (beyond reasonable doubt) prove it was me who bought ice cream and you who bought the coke. But you could say that One of us bought ice cream and one of us bought coke.
The difference of our system is that we use two block chains, which is kind of like using 2 currencies and it doesn't require a third party to join with. Its more like saying that I have $5 and i go on holiday to Russia, while there, i go to a foreign exchange desk and change the $5 into Roubles. I then give the Roubles to a friend of mine i meet with in Russia who privately changes it back into $5 for me from money he has under his mattress. He then flies to the US while I'm still in holiday in Russia and meets with my friend who I owe $5 to and pays the debt for me.
With this analogy, it is much much harder (i would say impossible) to prove that the $5 my friend received originated from me. I'm not even in the country when he receives the $5!
I hope this makes sense?
To answer your other questions:
Address B is then encrypted by your wallet with the public key the receiving server sent.
When your wallet finds an active anonymous receiving server, the server checks that its Nav Coin and Nav Subchain wallets are running then it finds the latest generated public key and sends it back to your wallet as part of its 200 OK response. Your wallet then uses this public key to encrypt the transactions intended recipient address then sends the transaction to our servers wallet address with the encrypted recipient address attached.
Only the server which issues the public key is able to decrypt with the private key, which never leaves the server and which are periodically deleted.
RSA Private and Public keys are generated in pairs. Only the private key from the same pair can decrypt data which was encrypted with a particular public key. So if i send you publicKey#1 from my server and your wallet encrypts some data with it, then only privateKey#1 from my server can decrypt the data you've encrypted. No other private key on my server or anyother server can decrypt that data. We only ever send out the public key for wallets to encrypt with, we never send anyone the private keys. So there is no danger of someone else being able to decrypt the data which has been encrypted with the public key. We also only use a key pair for a short period of time then we generate a new pair to use. We also delete unused key pairs after a certain buffer period so that we cant access your transaction history, even if we wanted to.
Once Address B is securely encrypted by your wallet, the coins are then sent from Address A to a wallet address owned by the Anonymous receiving server which provided the RSA Public Key to your wallet
Again, i think this is pretty straight forward. Instead of sending NAV from A to B, we encrypt address B and send the money to one of our servers with the encrypted address B attached to the block chain transaction. Then the rest of the magic happens iwth the subchain etc..
When the receiving server sees the unspent Nav transaction in its wallet, it decrypts attached Address B with the private key which matches the public key it sent to Address A's wallet, then communicates to one of the Anonymous sending servers to repeat the initial task. It asks the sending server for its own short lived public RSA key which the receiving server then uses to re-encrypt Address B. The receiving server then creates a random amount of randomly valued transactions NOT on the Nav Coin block chain but on the Nav Subchain (which is an entirely separate block chain).
I'm not sure i can explain this very simply. It is best explained by the diagram.
In a regular Nav transcaction, NAV go directly from NAV(send) to NAV(dest). With our system NAV(send) encrypts NAV(dest) and makes a transaction to NAV(in). NAV(in) listens for incoming transactions, decrypts NAV(dest), asks NAV(out) for its encryption key, rencrypts NAV(dest) with the NAV(out) public key and creates random transactions using SUB(out) which have the reencrypted NAV(dest) attached and add up to the correct amount. These transactions are sent to SUB(in) which decrypts NAV(dest) and instructs NAV(out) to send the correct amount of NAV to NAV(dest).
I will try to draw a better flow diagram when I have the time. I think I am even going to re-do the white paper for both anon send and decentralisation in the near future.
These coins are taken from an existing pool of Nav Coin which are stored on the server and are not the original coins sent from Address A.
We pre-load each receiving server with 100,000 NAV and 100,000 SUB, so when the instruction comes (via the subchain) to send 100 NAV to NAV(dest), the transaction is made using the coins from this pool. The coins which NAV(send) originally sends will eventually join this pool of NAV on NAV(out) to replace the ones which were sent and will be used for future transactions as needed.
If someone were to literally burn our anonymous servers to the ground, as long as there is still a copy of the Nav Coin and Nav Subchain block chains out there somewhere, we can restore their wallet.dat(s) to new servers and they will resume exactly where they left off at the oldest unspent transaction in their wallet.
The receiving and sending servers both work directly by reading unspent transactions on the block chain, there's no database or other datastore necessary to keep track of which transactions they have processed. Once a transaction is processed, it is literally "spent" on the block chain and the wallet knows it has completed processing that transaction.
So since it runs purely off the block chains it is completely restorable. Just like how I could set your laptop on fire and as long as you have a backup of your wallet.dat file and there is at least 1 copy of the Nav Coin block chain out there somehwere, you are able to recover your Nav Coins on a new machine. If we lost a particular server, as long as we have the wallet.dat of the server backed up, we can restore the server and it won't even lose any transactions that were sent to it. It will just look at the block chain, find the latest unspent transaction and begin processing again.
phew, some big concepts in there. Don't be worried if you dont get it all immediately. Im sure it will sink in over time and we are working towards demystifying the technology as soon as possible.
I hope this helps though!