Begin with initial data (genesis block)
Apply SHA256 hash function
Use output as next input
Save hash & counter periodically
Each hash depends on the previous one. To get from hash #100 to hash #200, you MUST compute all 100 intermediate hashes. This computational work proves time has passed.
When data is inserted, it's combined with the current hash. This anchors the data at a specific point in time. You can't retroactively insert data without recomputing all subsequent hashes.
Anyone can verify the chain by recomputing the hashes. If the computed hashes match the recorded ones, the history is valid and unaltered.