In Bitcoin, the difficult is parametrized by the number of leading 0's at the beginning of an acceptable hash. Since hashes are a psuedorandom process, the likelihood of an output sitting in a certain range is roughly calculable statistically. This allows the difficulty to be increased by restricting the acceptable range of outputs to a smaller set — i.e. increasing the number of leading 0's required. This difficulty is set dynamically, adjusting for variations in hash rate to maintain an average block time of ten minutes (in Bitcoin).