认证协议设计与实现
一、实验目的
初步认识密码学认证协议设计,设计简单的密码学认证协议,助力后面的认证协议学习,同时掌握一台主机模拟多个实体的技巧。
二、实验器材
pycharm+python3.11
三、实验内容
实验要求:自己配置python环境,编写程序实现下面的认证协议,初始化系统,运行认证协议,完成认证。
(1)编写程序实现协议。
(2)加密算法采用DES加密算法,在本协议中调用DES算法的程序实现加密,同时完善DES算法程序实现解密运算。Alice和Bob都要调用DES算法的程序。
(3)在初始化这个单向认证系统时,Bob的数据库要保存至少10个用户的用户名和他们与Bob共享的对称加密密钥。
程序:
1 from Crypto.Cipher import DES 2 from Crypto.Random import get_random_bytes 3 from Crypto.Util.Padding import pad, unpad 4 import binascii 5 6 # DES要求密钥是8字节长度 7 key = b'8bytekey' 8 9 # 创建一个DES对象 10 cipher = DES.new(key, DES.MODE_ECB) 11 12 # 假设Alice想要发送一个随机数给Bob 13 random_number = get_random_bytes(8) # DES块大小是8字节 14 print(f"Alice发送的随机数(明文): {binascii.hexlify(random_number)}") 15 16 # Alice使用DES加密随机数 17 encrypted_msg = cipher.encrypt(pad(random_number, DES.block_size)) 18 print(f"Alice发送的加密消息: {binascii.hexlify(encrypted_msg)}") 19 20 # Bob收到消息并解密 21 decrypted_msg = unpad(cipher.decrypt(encrypted_msg), DES.block_size) 22 print(f"Bob解密后的消息(明文): {binascii.hexlify(decrypted_msg)}") 23 24 # 检查解密后的随机数是否与Alice发送的相同 25 assert random_number == decrypted_msg 26 print("解密后的随机数与Alice发送的相同,通信成功!")
结果输出: