Вот есть алгоритмы с гарантированной сложностью. И есть алгоритмы которые хорошо работают в среднем, но могут просесть на некоторых данных. На практике обычно предпочтительны вторые, потому что они оказываются лучше и проще. Но злоумышленник легко может вызвать DOS, дав программе плохие данные. Поэтому такие алгоритмы нужно усложнять -- вводить случайные затравки, или использовать криптохэши.
Никто не видел каких-нибудь книжек по этому поводу? Как борется с этим в своих программах DJB?