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 ouput 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).