This probably should be in it's own thread.
Hey, can you guys help verify that the below information makes sense? It's not 100% accurate, but it's designed to explain Bitcoin to non-programmers in sufficent detail so that they will trust the system. I stole a bunch of ideas from this thread and from the technical paper (but don't worry I'm going to add in a section giving credit where it is due).
Actually, I'm planning on publishing this as part of a Bitcoin article that will go out to 20K+ people soon, so I want to get it right! But they're not programmers so I'm trying to keep it simple.
Any feedback would be IMMENSELY appreciated.
How no-technical is your audience? My Mom wouldn't understand any of this.
I just ended up confused. (and I know how the system works!)
How does Bitcoin work?
Part 1: Digital Signatures
The foundation of Bitcoin lies with digital signatures, which are related to cryptography. Consider two people, Dick and Roberto. Dick wants to send Roberto messages over the internet, and Dick wants to be certain that nobody impersonates him. To accomplish this, Dick uses a pair of what are called asymmetric cryptographic keys. Asymmetric keys have the special property that a message encrypted using one key can only be decrypted using the other matching key.
Dick can publish one of his keys for everyone to see (his “public” key), and keep the other secret (his “private” key). Before sending a message to Roberto, he first encrypts the message using his private key. Although anyone can decrypt and read the message (because everyone can access his public key), everyone knows that Dick truly wrote the message because only he could have encrypted it using his private key. This is the basis for a digital signature.
Finally, it should be noted that real world digital signatures can also verify that the signed document has not been tampered with or modified since it was signed.
Traditionally when explaining cryptography you use Alice and Bob.
Starting with explaining asymmetric cryptography is not a good way to start.
Part 2: Neighborly Agreement
In the world of Bitcoin, every user has a wallet which contains (1) their personal public/private key pair and (2) all transactions between all Bitcoin users. A transaction is just a record of money changing hands from one Bitcoin wallet to another: it contains the public key to identify the spender, the public key of the receiver, and the amount. Additionally, the transaction is digitally signed by the spender, proving that they agreed to the transaction.
To check your current balance, you take a look at all the transactions, and add up all the ones that have been signed over to you. You can verify this balance with all of your neighbors, since everyone knows about all transactions.
To give someone money, you simply digitally sign a new transaction, and broadcast it publicly to everyone. Everyone else will audit your transaction before they accept it to be sure you have a sufficient balance. The receiver will get confirmations from auditors as they accept the transaction. In this manner, you cannot spend money that you don’t have.
People have more than 1 key pair.
This is what a bitcoin address is.
A wallet is the sum of the transactions made with an address to which you have a private key.
The block chain is independent of the wallet.
Part 3: Dealing with Dishonesty
When someone publishes a transaction to be audited by everyone else, not everyone can send confirmations to the receiver. If this were true, then it would be too easy to fool receivers if a large number of auditors were dishonest. To solve this problem, everyone who agrees with a transaction must also work together to perform a very difficult computational operation on that transaction, that when complete seals the transaction as valid.
The computational operation that must be performed on each new transaction also relates to previous old transactions, much like a stack of blocks. The tallest stack of valid, sealed transactions is regarded as “the truth”, and receivers will therefore only trust auditors with the tallest valid stack. Since it takes enormous computing power to build a valid stack, any group of dishonest users would need more computational power than all of the honest users to continue to grow and propagate a false stack of transactions.
Finally, even if a group of dishonest users managed to accumulate more processing power than all of the honest users, they would have to decide between using that power to defraud the system (thus invalidating their claim to wealth) or using it to collect legitimate transaction fees (which are earned by helping to seal transactions onto the stack). Someone who worked hard to accumulate such immense computational resources would find it more profitable to use it to earn legitimate wealth rather than destroy the currency.
This section confused me.
Part 4: Anonymity
Previously it was mentioned that each wallet has a pair of cryptographic keys. Actually, however, each wallet can contain an indefinite amount of public/private key pairs. Ideally one could use a new key pair for every single transaction. In this way, even though everyone has a record of all transactions, there is no way for them to (1) discover or track individual account balances and (2) discover the common source or destination of multiple transactions. To audit, the wallet owner merely need to prove that they own enough Bitcoins for any particular transaction, which they can do without revealing their total balance.
This section confused me too.
Overall much of what you are saying is mostly true, and I can kinda see what you're trying to do, but the whole thing just left me confused.
It's hard to tell which points you're 'simplifying' and which points you don't actually understand yourself. I suspect you understand things better than you've explained them here.
Who is your target audience?
What is your goal with this piece?
Why did you choose to explain things in the order you did?
Sections that are missing:
What is Bitcoin?
Why should I care about Bitcoin?
What is in it for me? (hint: it's not minting coins by generating blocks)
I suggest you start a new thread about this topic.
I think you've made a good start on things here, it just needs some refining.
I'd be happy to keep working on this with you.
Sorry my criticism was not more constructive.