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.