But how does it do it?
Does it
a) make it harder to create the actual hashes thus making the hardware take more time to create them?
or
b) increase the total number of hashes that can be created thus decreasing the percentile of the hashes that are valid for the current block?
A higher "difficulty" is associated with a lower "target". And a block is considered valid if it has a hash value lower than the target value.
So, it is less likely to get a valid block with each of your hashes when difficulty is higher.
For example, current difficulty is 10.45G (https://blockexplorer.com/q/getdifficulty).
The corresponding target (https://blockexplorer.com/q/hextarget) is
So, the hash of all blocks find now need to be smaller than that value.
Block 302883 is: