Blockchain is a piece of software designed to create decentralized databases.
The system is entirely "open source", meaning that anyone is able to view, edit and propose changes to its underlying codebase.
Whilst it has become increasingly popular thanks to Bitcoin's growth - it's actually been around since 2008, making it around a decade old (ancient in computing terms).
The most important point about "blockchain" is that it was designed to create applications that don't require a central data processing service. This means that if you're using a system build on top of it (namely Bitcoin) - your data will be stored on 1,000's of "independent" servers around the world (not owned by any central service).
The way the service works is by creating a "ledger". This ledger allows users to create "transactions" with each other - having the contents of those transactions stored in new "blocks" of each "blockchain" database.
Depending on the application creating the transactions, they should be encrypted with different algorithms. Because this encryption uses cryptography to "scramble" the data stored in each new "block", the term "crypto" describes the process of cryptographically securing any new blockchain data that an application may create.
To fully understand how it works, you must appreciate that "blockchain" is not a new technology - it just uses technology in a slightly different way. The core of it is a data graph known as "Merkle trees". Merkle trees are essentially ways for computer systems to store chronologically ordered "versions" of a data-set, allowing them to manage continual upgrades to that data.
The reason this is important is that current "data" systems are what could be described as "2D" - meaning they don't have any way to track updates to the core dataset. The data is basically kept entirely as it is - with any updates applied directly to it. Whilst there's nothing wrong with this, it does pose a problem in that it means that data either has to be updated manually or his very difficult to update.
The solution that "blockchain" provides is essentially the creation of "versions" of the data. Each "block" added to a "chain" (a "chain" being a database) gives a list of new transactions for that data. This means that if you're able to tie this functionality into a system that facilitates the transaction of data between two or more users (messaging etc), you'll be able to create an entirely independent system.
This is what we've seen with the likes of Bitcoin. Contrary to popular belief, Bitcoin isn't a "currency" in itself; it's a public ledger of financial transactions.
This public ledger is encrypted so that only the participants in the transactions are able to see/edit the data (hence the name "crypto")... but more so, the fact that the data is stored-on, and processed-by 1,000's of servers around the world means the service can operate independently of any banks (its main draw).
Obviously, problems with Bitcoin's underlying idea, etc aside, the underpin of the service is that it's basically a system that works across a network of processing machines (called "miners"). These are all running the "blockchain" software - and work to "compile" new transactions into "blocks" that keep the Bitcoin database as up to date as possible.
Whilst many people have blindly pledged support for blockchain, it's actually got a number of vulnerabilities - most notably that it relies almost entirely on the encryption algorithms employed by its various applications. If one of these algorithms fails, or users are compromised in any way, the entire "blockchain" infrastructure could suffer as a result.