A pure name is exactly what it says on the tin: an identifier that is used for naming some object (or channel, or resource, ...). The only property of a pure name is that it can be decidably compared for equality with other pure names.
Pure names are particularly useful in the setting of concurrent and distributed systems. For example, they are a central distinguishing feature of the -calculus.
In the words of [Needham 1993]:
A pure name is nothing but a bit-pattern that is an identifier, and is only useful for comparing for identity with other such bit-patterns – which includes looking up in tables to find other information. The intended contrast is with names which yield information by examination of the names themselves, whether by reading the text of the name or otherwise. [...] like most good things in computer science, pure names help by putting in an extra stage of indirection; but they are not much good for anything else.
The notion of pure name was made more precise by Roger Needham in a late 1980s paper that was included in an edited volume on distributed systems [Mullender 1993]. A discussion of that development can be found in a short paper by Robin Milner [Milner 2004].
Mullender, Sape J. Distributed Systems. Edited by Sape J. Mullender. Second edition. New York: ACM Press, 1993.
Milner, R. (2004). What’s in a Name?. In: Herbert, A., Jones, K.S. (eds) Computer Systems. Monographs in Computer Science. Springer, New York, NY. https://doi.org/10.1007/0-387-21821-1_29 [pdf]