The hash of a bitcoin block is generated from:
- Block version number (partially fixed*, 32 bits)
- Previous block hash (fixed, 256 bits)
- Merkle root (not fixed, 256 bits),
- Time (not fixed, 32 bits),
- Bits (partially fixed*, 32 bits),
- Nonce (not fixed, 32 bits).
So, the block hash is generated from 640 bits. You can change 320 bits freely to try to have a hash that matches the current diff, and 320 bits are immutable.
Is there a property on the SHA-256 function that asserts that on these 320 bits of freedom, one combination will give us a hash that is matching the diff requirements?
If not, does that mean that the blockchain could get stuck on a block because nobody can mine on it?
* "Partially fixed" values could be changed by software updates for example. I assume that partially fixed values are fixed to simplify.