Which type of encryption algorithm uses the different but related keys to encrypt and decrypt data?