非对称加密协议的基本原理,实现TLS通信(个人学习)

在当今数字化时代,信息的传递和存储成为了日常生活和商业活动的重要组成部分。然而,随之而来的安全威胁也愈发严重,为了保护敏感信息免受恶意攻击,非对称加密技术应运而生。本文将深入探讨非对称加密的基本含义、原理、起源,以及与对称加密的对比,旨在为读者提供对这一关键安全领域的深入了解。

非对称加密的基本含义

非对称加密,又称为公钥加密,采用了一对密钥,分别是公钥和私钥。与对称加密不同的是,这两个密钥是相关联的,但彼此之间不可逆推。数据加密时,使用公钥加密,而解密则需要相应的私钥。这种加密方式有效地解决了密钥传递的难题,成为了安全通信的基石。

非对称加密的原理

非对称加密基于数学上的一些难解问题,例如大数分解。其核心原理可以简单概括为:容易进行加密,难以进行解密。公钥用于加密,私钥用于解密,使得即便公钥泄露,攻击者也无法逆推出私钥,从而保障了信息的安全性。

起源与发展

非对称加密最早由英国数学家克里福德·考克斯(Clifford Cocks)在1973年提出,但直到1977年,美国数学家罗纳德·李维斯特(Ronald Rivest)、阿迪·萨莫尔(Adi Shamir)、伦纳德·阿德曼(Leonard Adleman)提出的RSA算法,非对称加密才开始进入大众视野。自此以后,非对称加密经过多次改进和演化,形成了今天广泛应用的多种算法,如DSA、ECC等。

与对称加密的对比

相较于对称加密,非对称加密的一大优势在于密钥的管理。对称加密需要在通信双方之间共享同一密钥,而非对称加密通过公钥和私钥的组合,避免了这一问题。此外,非对称加密还能够提供数字签名和数字证书等功能,进一步增强了通信的安全性。

然而,非对称加密也存在一些缺点,主要体现在计算成本较高和加密速度相对较慢。因此,在实际应用中,通常会将非对称加密与对称加密结合使用,发挥各自的优势,达到更好的安全性和效率平衡。

基本运行过程

非对称加密的基本运行过程可以简单概括为以下几个步骤:

  1. 密钥生成: 用户生成一对公钥和私钥,并将公钥传播给通信对方,私钥保留在本地。

  2. 加密: 发送方使用接收方的公钥对信息进行加密,并发送给接收方。

  3. 传输: 加密后的信息通过不安全的通道传输。

  4. 解密: 接收方使用自己的私钥对接收到的信息进行解密,获取原始信息。

通过以上步骤,通信双方能够在不共享密钥的情况下进行安全的信息传递。

非对称加密和对称加密的应用(tls)

http的传输层用的是tcp;

https用的是tls(加密)。

实验步骤

请求http://woniuxy.com,会重定向到https

image-20231204111056627

image-20231204111436628

image-20231204111657142

image-20231204111745851

image-20231204111904484

image-20231204112218243

image-20231204112309334

image-20231204113204233

后面的数据就可以通过S_key(对称密钥)进行加密了。

用Python实现TLS加密通信

#服务器端
import socket
import random
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes

# 创建RSA密钥对
private_key_server = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)
public_key_server = private_key_server.public_key()

# 将公钥序列化为字节串,以便发送给客户端
public_key_bytes = public_key_server.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
)

# 创建服务器socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 12345))
server_socket.listen(1)

# 接受客户端连接
print("Server is listening...")
connection, client_address = server_socket.accept()

# 发送公钥给客户端
connection.sendall(public_key_bytes)

# 接收客户端发送的随机数
random_number = connection.recv(1024)
print("Received random number from client:", random_number.decode())

# 使用私钥对随机数进行签名
signature = private_key_server.sign(
    random_number,
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)

# 发送签名给客户端
connection.sendall(signature)

# 关闭连接
connection.close()
server_socket.close()
#客户端
import socket
import random
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes

# 创建客户端socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
client_socket.connect(('127.0.0.1', 12345))

# 接收服务器发送的公钥
public_key_bytes = client_socket.recv(1024)

# 将服务器发送的公钥反序列化为RSA公钥对象
public_key_server = serialization.load_pem_public_key(
    public_key_bytes,
    backend=default_backend()
)

# 生成随机数
random_number = str(random.randint(1, 1000)).encode()

# 发送随机数给服务器
client_socket.sendall(random_number)

# 接收服务器发送的签名
signature = client_socket.recv(1024)
print("Received signature from server:", signature.hex())

# 使用服务器公钥验证签名
try:
    public_key_server.verify(
        signature,
        random_number,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        hashes.SHA256()
    )
    print("Signature verification successful.")
except:
    print("Signature verification failed.")

# 关闭连接
client_socket.close()

结语

非对称加密作为信息安全的基石,在当今互联网时代扮演着不可替代的角色。通过深入了解其基本含义、原理、起源以及与对称加密的对比,我们能够更好地理解其在保障通信安全方面的价值。随着科技的不断进步,非对称加密算法也将不断演进,为信息安全提供更为坚固的保障。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值