> By implication, the hash must be at least as many bytes as the key and the function is theoretically reversible
No. At least not by the standard definition[1]. In standard context, the problem of constructing a perfect hash function is, given (ahead of time) a list of items, you find a hash function that can map them to a smaller "range" without collision.