A well-defined computational procedure that takes variable inputs, including a cryptographic key, and produces an output.