当前位置:   article > 正文

非对称加密协议的基本原理,实现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加密通信

  1. #服务器端
  2. import socket
  3. import random
  4. from cryptography.hazmat.primitives import serialization
  5. from cryptography.hazmat.primitives.asymmetric import rsa, padding
  6. from cryptography.hazmat.backends import default_backend
  7. from cryptography.hazmat.primitives import hashes
  8. # 创建RSA密钥对
  9. private_key_server = rsa.generate_private_key(
  10. public_exponent=65537,
  11. key_size=2048,
  12. backend=default_backend()
  13. )
  14. public_key_server = private_key_server.public_key()
  15. # 将公钥序列化为字节串,以便发送给客户端
  16. public_key_bytes = public_key_server.public_bytes(
  17. encoding=serialization.Encoding.PEM,
  18. format=serialization.PublicFormat.SubjectPublicKeyInfo
  19. )
  20. # 创建服务器socket
  21. server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  22. server_socket.bind(('127.0.0.1', 12345))
  23. server_socket.listen(1)
  24. # 接受客户端连接
  25. print("Server is listening...")
  26. connection, client_address = server_socket.accept()
  27. # 发送公钥给客户端
  28. connection.sendall(public_key_bytes)
  29. # 接收客户端发送的随机数
  30. random_number = connection.recv(1024)
  31. print("Received random number from client:", random_number.decode())
  32. # 使用私钥对随机数进行签名
  33. signature = private_key_server.sign(
  34. random_number,
  35. padding.PSS(
  36. mgf=padding.MGF1(hashes.SHA256()),
  37. salt_length=padding.PSS.MAX_LENGTH
  38. ),
  39. hashes.SHA256()
  40. )
  41. # 发送签名给客户端
  42. connection.sendall(signature)
  43. # 关闭连接
  44. connection.close()
  45. server_socket.close()
  1. #客户端
  2. import socket
  3. import random
  4. from cryptography.hazmat.primitives import serialization
  5. from cryptography.hazmat.primitives.asymmetric import rsa, padding
  6. from cryptography.hazmat.backends import default_backend
  7. from cryptography.hazmat.primitives import hashes
  8. # 创建客户端socket
  9. client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  10. # 连接服务器
  11. client_socket.connect(('127.0.0.1', 12345))
  12. # 接收服务器发送的公钥
  13. public_key_bytes = client_socket.recv(1024)
  14. # 将服务器发送的公钥反序列化为RSA公钥对象
  15. public_key_server = serialization.load_pem_public_key(
  16. public_key_bytes,
  17. backend=default_backend()
  18. )
  19. # 生成随机数
  20. random_number = str(random.randint(1, 1000)).encode()
  21. # 发送随机数给服务器
  22. client_socket.sendall(random_number)
  23. # 接收服务器发送的签名
  24. signature = client_socket.recv(1024)
  25. print("Received signature from server:", signature.hex())
  26. # 使用服务器公钥验证签名
  27. try:
  28. public_key_server.verify(
  29. signature,
  30. random_number,
  31. padding.PSS(
  32. mgf=padding.MGF1(hashes.SHA256()),
  33. salt_length=padding.PSS.MAX_LENGTH
  34. ),
  35. hashes.SHA256()
  36. )
  37. print("Signature verification successful.")
  38. except:
  39. print("Signature verification failed.")
  40. # 关闭连接
  41. client_socket.close()

结语

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/911464
推荐阅读
相关标签
  

闽ICP备14008679号