Principal are generic identifiers for canisters, users and possibly other concepts in the future. As far as most uses of the system are concerned they are opaque binary blobs with a length between 0 and 29 bytes, and there is intentionally no mechanism to tell canister id and users ids apart.
This is from the Interface specification