远程证明方案
知识点:
Elgamal算法
AES加密算法
RSA算法数字签名和检验
知识点详解:
Elgamal算法
推荐网址:
https://zhuanlan.zhihu.com/p/340162669
https://www.cnblogs.com/zeroy610/p/15117747.html
https://blog.csdn.net/u012391423/article/details/116952687
ElGamal公钥密码体制是由 T.ElGamal于 1985年提出的,与 Diffie-Hellman密钥分配体制密切相关。ElGamal密码体系应用于一些技术标准中,如数字签名标准(DSS)和 S/MIME电子邮件标准。直到现在仍然是一个安全性能良好的公钥密码体制。该算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。Elgamal加密方案可以视为DHKE协议的拓展,无容置疑,其安全性也是基于离散函数问题和Diffie_Hellman问题的难度。
AES加密算法:
推荐网址:https://blog.csdn.net/weixin_44259720/article/details/110952842
效率对比:
RSA:解密的效率远低于加密效率,按照表里的时间估算,加密1G的文件需要1分钟,但是解密却需要65小时。
AES:加密 1G 的文件大概需要 4 分多钟左右;解密文件所需时间也是加密时间的两倍;
AES加密速度快,但密钥协商和传输过程使安全性降低。RSA安全性高,但是运行较AES更慢.
RSA算法数字签名和检验:
使用Crypto实现RSA算法的数字签名和检验
实际案例:
设计方案
步骤1:获取基于Elgamal算法生成的公钥和私钥
def alg_generate_pub_pri(): #选择一个大质数 # prime_num = int(random.choice(prime)) prime_num = getsushu() #计算本原元 alpha = primitive_root(prime_num) #选择整数d作为私钥 d = random.randint(2, prime_num-2) #汇总私钥和公钥 #β=α^d mod p,β=2^5 mod 37 = 32 # bata = alpha**d % prime_num bata = pow(alpha, d, prime_num) print(f"私钥d:{d}\n公钥prime_num:{prime_num} alpha:{alpha} bata:{bata}") result = {'pri':d, 'pub': [prime_num, alpha, bata]} return result
步骤2:将Elgamal算法生成的公钥传递给agent(可以手动放置), 进行agent端发送数据和签名验证过程
步骤3:agent使用ip和mac作为签名的数据(考虑数据大小影响性能和机器唯一性的因素)并使用rsa算法进行签名
def signaturer(key, data): # 获取消息的HASH值,摘要算法MD5,验证时也必须用MD5 digest = MD5.new(data.encode('utf-8')) # 使用私钥对HASH值进行签名 # signature = pkcs1_15.new(private_key).sign(digest) signature = pkcs1_15.new(key).sign(digest) return signature
步骤4:得到签名数据后,开始进入AES算法对数据进行加密流程
AES_SECRET__ = '8labsecretpwdfqm' AES_IV__ = AES_SECRET__[::-1] aes_encrypt = AESHelper(AES_SECRET__, AES_IV__).encrypt(str(data))
步骤5:因AES 算法加密速度快,但密钥协商和传输过程使安全性降低, 因此考虑和Elgamal算法结合使用,提高数据的安全性
步骤6:使用Elgamal算法的公钥,生成秘钥和随机数
def encryption(pub): #加密 p = pub[0] alpha = pub[1] bata = pub[2] x = random.randint(0, p-2) k = random.randint(2, p//2) print(f"输入的随机数x是:{x}") print(f"输入的随机数K是:{k}") y1 = alpha**k % p y2 = x*bata**k % p print(f"生成的秘钥:{str([y1, y2])}") return str([y1, y2]), x
步骤7:对Elgamal算法生成的随机数,对AES算法机密后的数据按照一定的规则打乱数据
front = x % crack_rule back = x - front print(f"截取的前:{front}, 后:{back}") aes_encrypt_string = random_str[:front] + aes_encrypt + random_str[front:]
步骤8:agent把数据(签名数据和验证签名数据、AES加密数据,agent公钥,Elgamal秘钥)发送给server来验证签名和解密数据
步骤9:server收到agent数据,开始验证签名和解密数据过程
步骤10:server验证签名
def verifier(public_key, data, signature): digest = MD5.new(data.encode('utf-8')) try: pkcs1_15.new(public_key).verify(digest, signature) print("签名验证成功!!!") except: print("签名无效!!!") return False else: return True
步骤11: ElGamal算法解密生成x
def decryption(pri, pub, secret_key): #解密 if type(secret_key) == str: secret_key = eval(secret_key) p = pub[0] y1 = secret_key[0] y2 = secret_key[1] x = y2 * inv(y1**pri, p) % p return x
步骤12: 根据x获取AES加密数据,并解密
front = x % crack_rule back = x - front print(f"截取的前:{front}, 后:{back}") aes_str = aes_string[front:-back] AES_SECRET__ = '8labsecretpwdfqm' AES_IV__ = AES_SECRET__[::-1] # print(f"算法处理后的数据:{aes_str}") aes_decrypt = AESHelper(AES_SECRET__, AES_IV__).decrypt(aes_str)
案例展示:
执行过程:
D:\ProgramData\Anaconda3\python.exe "D:/PycharmProjects/sklearn_project/Unsupervised learning/conf/Remote_authentication/server.py" 私钥d:168 公钥prime_num:317 alpha:2 bata:244 ElGamal算法生成秘钥对耗时:0.0010027885437011719 将算法生成的公钥发送给agent并等待发送数据Y/N: Y 正在执行... 本机的mac地址是:48:89:e7:c6:bd:3e 本机的ip地址是:192.168.233.1 生成公钥私钥耗时:0.36302924156188965 签名耗时:0.00498652458190918 AES加密耗时:0.0009980201721191406 进入加密流程... ... 输入的随机数x是:308 输入的随机数K是:91 生成的秘钥:[314, 149] 生成随机字符串长度:308 截取的前:4, 后:304 应用算法添加随机字符串耗时:0.003998994827270508 agent耗时:0.3850116729736328 已收到agent发送过来的数据,是否接收处理Y/N: Y 正在执行... 签名验证成功!!! 验证签名耗时:0.000997304916381836 ElGamal解析后的x:308 ElGamal算法解密生成x耗时:0.009972095489501953 截取的前:4, 后:304 {'host_ip': '192.168.1.192', 'pcr': '0000000000000000000000000000000000000000', 'sig': 'na+XFjz0mkjlP1gPkSK6tMTpVXQQAzH4I9rI6eZatKdiCSZpuD8kaIHsuWqerGazjhZs1gfw/FVMap+8tao71IvR2JMbCKwITnwmt4RIKwXdasLJU7GCbIHmqfPLWhhBTcvai1hqXMdD2J/t3NdyL4CsaTKxVfjgauhN1JTIgH5rf1RTS1BNyotB4GqSiuY3RqxBiE/Q6OYB9TA4Ou7rQa1L55/kt9ERyxuhTBmbBeJEulWkGpiiZsakR6+X20TTwWIF2ZfFaAMJ48Z305io1hzyZqSCqwbQrx7nefgORWlVOtlmQAvfWYBB3sHFB8j8/GhwfNtTN/1ei1cu/4brmA==', 'port': 50052, 'host_name': 'tpm-192', 'curr_seek': 450, 'line_num': 4, 'ima_list': [{'file_path': '/home/lab/fqm/test/pp88.sh', 'file_hash': 'e64632747b73cd46c7d2e05fdb1b2e6f2eea6f8c', 'file_size': 36, 'file_type': 'Bourne-Again shell script, ASCII text executable', 'access_auth': '0o100755', 'uid': 0, 'gid': 0, 'last_visit_time': '2022-10-19 23:54:26', 'modify_file_time': '2022-10-18 19:03:38'}, {'file_path': '/home/lab/fqm/test/pp99.sh', 'file_hash': 'e64632747b73cd46c7d2e05fdb1b2e6f2eea6f8c', 'file_size': 36, 'file_type': 'Bourne-Again shell script, ASCII text executable', 'access_auth': '0o100755', 'uid': 0, 'gid': 0, 'last_visit_time': '2022-10-19 23:54:26', 'modify_file_time': '2022-10-18 22:19:13'}, {'file_path': '/home/lab/fqm/test/pp100.sh', 'file_hash': 'e64632747b73cd46c7d2e05fdb1b2e6f2eea6f8c', 'file_size': 36, 'file_type': 'Bourne-Again shell script, ASCII text executable', 'access_auth': '0o100755', 'uid': 0, 'gid': 0, 'last_visit_time': '2022-10-19 23:54:26', 'modify_file_time': '2022-08-08 23:23:25'}, {'file_path': '/usr/bin/ag', 'file_hash': 'cec492721758b5a1642deb7b14e4ffc8a4d27718', 'file_size': 82296, 'file_type': 'ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=9fec1d51053182d4d1138d4c8d86b0375e856247, stripped', 'access_auth': '0o100755', 'uid': 0, 'gid': 0, 'last_visit_time': '2022-10-19 23:55:19', 'modify_file_time': '2017-11-06 18:39:50'}], 'detect_status': 0, 'curr_lines': 954, 'timestamp': 1666166252, 'host_sys': 'LINUX', 'total_lines': 954, 'start_lines': 950, 'total_seek': 450, 'start_seek': 34840} Process finished with exit code 0
代码:
需要代码的可以评论给我
总结:
Elgamal算法也可以实现加密和签名的过程, 与RSA算法相比,ElGamal算法哪怕是使用相同的私钥,对相同的明文进行加密,每次加密后得到的签名也各不相同,有效的防止了网络中可能出现的重放攻击。Rsa是基于大质数分解难题;而Elgamal是基于G上的离散对数难题
签名过程也可以使用Elgamal算法, 因为我这经常使用RSA签名, Elgamal签名使用过的少, 担心会出现预料之外的问题, 所以没有尝试使用
本次案例也只是针对AES算法安全性考量,所以考虑结合Elgamal算法, 增强安全性,当然Elgamal也可以直接对数据进行加解密操作
有兴趣的小伙伴, 也可以尝试下
标签:AES,Elgamal,算法,签名,file,加密,远程 From: https://www.cnblogs.com/chaolumeng/p/16932923.html