A resource may be abused if its users incur little or no cost. For
example, e-mail abuse is rampant because sending an e-mail has negligible
cost for the sender. Such abuse may be discouraged by introducing an
artificial cost in the form of a moderately expensive computation. Thus,
the sender of an e-mail might be required to pay by computing for a few
seconds before the e-mail is accepted. Unfortunately, because of sharp
disparities across computer systems, this approach may be ineffective
against malicious users with high-end systems, prohibitively slow for
legitimate users with low-end systems, or both. Starting from this
observation, we identify moderately hard, memory bound functions that
most recent computer systems will evaluate at about the same speed, and
we explain how to use them for protecting against abuses.