The technology behind bitcoin is surprisingly simple. The code
is open source, and anyone can download the bitcoin client
compiled from this code. When your computer runs this program
it knows how many bitcoins that are on each and every bitcoin
address in the world. When you want to spend from an address
that you own, you broadcasts this to the network. All computers
connected to you receives your trade request, and then forwards
this to all of their connections, and so on, until the entire
network (within seconds) has received this information.
Ownership of an address is not registered anywhere, but requires
a string of letters and numbers called a private key. Only he or
she who possesses an address' private key can spend from that
address. As a user of bitcoin you don't need to know your private
key. The software takes care of this automatically. But it is
important to know that the concept of ownership is different
from anything you're used to. If a thief steals your private key he
can take all your bitcoins and feel safe that neither you nor law
enforcement will ever find out who did it.
You shouldn't worry though, granted you don't reveal your
private key, that no one will ever steal your bitcoins. The system
is based on a cryptographic hash function called SHA-256. It
was developed by the U.S. National Security Agency in 2001 for
top secret government communication. A hash function takes
any input and creates a completely new string called a hash. The
SHA-256 function creates a string of 64 characters' length,
where each character can be sixteen different symbols and each
symbol is equally likely. For example, “bitcoin is awesome”
creates this hash:
23d4a09295be678b21a5f1dceae1f634a69c1b41775f680ebf8165266471401b
An almost identical sentence, “Bitcoin is awesome” where the
only difference is the capital letter, creates a completely different
hash:
3aace886fca42c6f358474df26aa6623149219e9fb11557b6dbd3bf5c3f38cfb
There's no need to go further into depth here, but it is good to
know the fundamental principle which is that by knowing the
hash output you have no way of figuring out the input.