The more I encounter the term "cryptographic primitive," the less I feel confident that I truly understand what it means. Is it just me, or is there no universal definition for the term? Or does the term have some contextual sensitivity that I'm missing?
Some questions that illustrate my confusion:
- Does the term refer to algorithms for which we only have heuristic security arguments?
- Does it refer to the building blocks invoked by a mode of operation or protocol, independently of the form of their security arguments?
- Does it refer to popular security goals like message authentication code, pseudorandom function, collision resistant hash function, etc., that are commonly used as building blocks in modes and protocols?
- In Merkle–Damgård hash functions like SHA-2, which is the primitive:
- The hash function as a whole?
- The compression function?
- One but not the other, varying with the context in which we're talking about SHA-2? (E.g., analyzing the security of SHA-2 vs. analyzing the security of a protocol that uses it.)
- Since there are security proofs for HMAC that appeal to properties of the compression function of a Merkle–Damgård hash, which is the "primitive" in this case, the hash function or the compression function?
- In SHA-3, which of these are "primitives" or not?
- Keccak sponge functions
- Keccak permutations