This is well explained in chia’s documentation. A server issues “challenges” and the harvesters respond if they have the answer to that challenge. Think of it like bingo but with a gazillion squares.
The trick is that calculating the response to a challenge takes a very long time and the server only waits for a very short time to get any valid responses. So it follows that the harvesters must compute the responses in advance and store them on disk, which serves as proof that you had that disk space allocated to chia harvesting.
It's built on large files that act as bingo cards. You have a limited time to respond when you get a bingo. The more cards you have, the more likely you are to win.
They are designed so that precomputing the bingo card is expensive but once you have them, checking to see if you have a bingo is cheap. It's thought that nobody will be able to compute a winning bingo cards on the fly ("grinding"), so it will be cheaper to store and reuse them once you have them.
(I don't know the details of the algorithms though.)
I haven't read any papers about this, so this is just a first speculative guess that I will update if/when I learn more:
I suspect nodes ask one another to perform computations on random subsets of very large amounts of data. Since the subsets requested would be random, nodes can't predict the requests and thus have to store all the data. The data would then be augmented with the consensus results of these computations, so that future computations would be able to reference them.
The way it was explained to me is that when you "farm" your "plots" the first time, you are just generating and writing a lot of numbers that are written in the 100GB plots.
Then the transaction validation is done by whoever finds value in their storage (instead of doing a lot of computations online, they are pre-generated).
I assume there's a bunch of tree-like structures in the middle to make the search faster.
The trick is that calculating the response to a challenge takes a very long time and the server only waits for a very short time to get any valid responses. So it follows that the harvesters must compute the responses in advance and store them on disk, which serves as proof that you had that disk space allocated to chia harvesting.