Public-key cryptography

本文介绍了公匙加密法(不对称加密)与密匙加密法(对称加密)的区别,重点阐述了公匙加密法如何确保消息的保密性和真实性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    公匙加密法 也称不对称加密法,就是说:用于加密的钥匙和用于解密的钥匙并不相同。密匙要保持不被泄露,而公匙一般都会广泛传播。进来的消息通过公匙加密,然后接收者用密匙打开。公匙和密匙虽然是精确相关的,但是基本上不可能通过公匙得出密匙。

 

    相反的,密匙加密法也称为对称加密法,它使用同一个key来加密和解密。使用密匙加密法,发送者和接收者都需要事先知道key,或者跟消息一起传送。

 

    公匙加密法主要的两种用处:

 

    公匙加密:用公匙加密的消息只能被密匙解密,所以,这可以保证消息不被泄露,起到保密作用。

    数字证书:发送者发送的用密匙签名的消息,可以被拥有公匙的任何人印证。这可以保证消息的真实性。

在RSA非对称加密中,使用对等方的公钥通常涉及数据加密、密钥交换或数字签名验证等场景。以下是具体的应用方式和实现细节: ### 数据加密 在数据加密过程中,发送方使用接收方提供的公钥对明文数据进行加密,生成的密文只能通过对应的私钥解密。这种方式确保了只有持有私钥的接收方才能读取信息,保障了通信的安全性。 例如,在iOS开发中,若需要使用PEM格式的公钥进行加密,首先需要将公钥从PEM格式解析为可用的密钥对象,然后使用该公钥对数据进行加密。以下是一个简单的Python示例,展示了如何使用`cryptography`库完成这一过程: ```python from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.primitives import hashes # 加载PEM格式的公钥 with open("public_key.pem", "rb") as f: public_key = serialization.load_pem_public_key( f.read() ) # 使用公钥加密数据 plaintext = b"Secret message" ciphertext = public_key.encrypt( plaintext, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) print("Encrypted data:", ciphertext) ``` ### 密钥交换 RSA还可以用于安全地交换对称加密算法所需的密钥。在这种情况下,发送方生成一个随机的对称密钥,并使用接收方的公钥对其进行加密。接收方收到加密后的密钥后,使用自己的私钥解密并获取对称密钥。随后,双方可以使用该对称密钥进行高效的数据加密和解密[^3]。 ### 数字签名验证 数字签名是另一种常见的应用场景,它利用RSA的非对称特性来验证数据的完整性和真实性。发送方使用自己的私钥对数据进行签名,而接收方则使用发送方的公钥验证签名的有效性。如果签名验证成功,则表明数据未被篡改且确实来自签名者。 以下是一个使用Python的`cryptography`库进行数字签名验证的示例: ```python from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.primitives.serialization import load_pem_public_key # 加载PEM格式的公钥 with open("public_key.pem", "rb") as f: public_key = load_pem_public_key(f.read()) # 验证签名 message = b"Message to be signed" signature = b"Signature generated by the private key" try: public_key.verify( signature, message, padding.PSS( mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH ), hashes.SHA256() ) print("Signature is valid.") except Exception as e: print("Signature is invalid:", e) ``` ### 公钥的格式与管理 在实际应用中,公钥可能以多种格式存在,包括PEM(Privacy Enhanced Mail)、DER(Distinguished Encoding Rules)以及直接提供模数(n)和公开幂(e)的情况。PEM格式的公钥通常以`-----BEGIN PUBLIC KEY-----`开头,并以Base64编码形式存储;而DER格式则是二进制形式的公钥数据。此外,某些场景下可能会直接给出模数n和公开幂e的十六进制值,这时需要手动构造公钥对象[^1]。 对于物联网设备的身份验证,每台设备会生成并绑定一个随机的公钥,同时还会发送设备证书以供CA中心验证。这种方法结合了公钥加密和证书机制,进一步增强了系统的安全性[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值