Which of the following cryptographic primitives is primarily used in blockchain to ensure data integrity and create a unique, fixed-size fingerprint of transaction data?