物联网安全课程中的密码学算法教学改革
2018-09-21余健
余健
摘 要:针对物联网安全课程《密码学算法实验》教学中存在的问题,分析目前《密码学算法实验》教学中采用的软件所存在的弊病,提出以Python语言为实验编程工具的观点。
关键词:信息安全;密码学;Python;物联网
中图分类号:TP393 文献标识码:A 文章编号:2095-1302(2018)07-0-03
0 引 言
密码学算法是物联网安全等信息安全课程教学的基础[1]。密码学算法的教学效果直接影响到学生对物联网安全课程的掌握程度。目前密码学算法的实验教学采用现成的密码学算法软件演示[2],或采用C,C++及Matlab等编程实现,但是密码学算法软件的演示只是使学生了解算法的最终结果,无法使学生理解算法原理;采用C,C++等高级语言编程实现密码学算法,有利于学生掌握算法原理,但在实验教学当中,学生普遍反映编程难度大,算法实现繁琐等问题;而采用Matlab编程的优点是编程语言简单、算法容易实现,缺点是无法直接应用于实际项目中。
因此,采用合适的编程语言对密码学算法的实践教学改革是极其重要的[3]。Python语言被称为胶水语言[4],它具有Matlab语言的优点,并且应用范围广,采用Python语言编程可直接应用于各个领域[5]。考虑到Python语言的简单易用性,以及包含了大量的算法包,密码学算法实验教学全部采用Python编程实现。这样既能够加深学生对密码学算法的理解,提高学生的编程能力和应用能力,也有利于学生编写软件参加学科竞赛及各种项目,提高学生的职业素养和职业能力。
密码学算法实验主要包括古典密码学实验、DES和AES对称密码学算法实验和RSA公钥密码学算法实验[6-8]。
1 古典密码学实验
古典密码学算法主要包括凯撒密码、维吉尼亚密码和Hill矩阵加密算法。采用Python语言编程实现,以凯撒密码为例,代码如下所示:
def Encrypt(P,key)://加密函数
P = list(P)
P = map(ord,P)
import numpy as np
P = np.array(P)
P = P - ord(‘a)
C =(P + key)%26
C = C + ord(‘A)
C = map(chr,C)
C = ‘.join(C)
return C
def Decrypt(C,key): //解密函数
C = list(C)
D = map(ord,C)
import numpy as np
D = np.array(D)
D = D-ord(‘A)
D =(D-key)%26
D = D + ord(‘a)
D = map(chr,D)
D =‘.join(D)
return D
#主函数
user_input=raw_input(‘加密请按E,解密请按D:);
while(user_input!=‘E and user_input!=‘D):
//输入合法性判断
user_input=raw_input(‘输入有误!请重新输入:)
key=raw_input(‘请输入密钥:)
while(int(key.isdigit()==0))://输入合法性判断
key=raw_input(‘输入有误!密钥为数字,请重新输入:)
if user_input==‘E://加密
P=raw_input(‘请输入明文:)
C=Encrypt(P,int(key))
print ‘密文为:\n%s % C
else://解密
C=raw_input(‘请输入密文:)
P=Decrypt(C,int(key))
print ‘明文为:\n%s % P
学生完成了凯撒密码算法的实现之后,可让在以上程序的基础上,进一步实现维吉尼亚密码。
2 DES和AES对称加密算法实验
数据加密标准(Data Encryption Standard,DES),除了被广泛应用于金融交易中,它还被嵌入到许多商业应用中。1977年美国国家标准局正式公布实施了美国的数据加密标准(DES),公开了它的加密算法,并批准用于非机密单位和商业上的保密通信。高级加密标准(Advanced Encryption Standard,AES)又称为Rijndael加密法,是美国联邦政府采用的一种区块加密标准。该标准用来替代日益不安全的DES算法。
DES和AES算法的实现比较复杂,采用Python语言做实验时,可以调用Crypto密码学算法包的相关函数来实现,具体的编程代码如下所示:
# DES加密解密
from Crypto.Cipher import DES
from Crypto import Random
key =‘keyskeys//必須为8 B
plaintext = ‘计算机与信息工程
print ‘明文:,plaintext
cipher = DES.new(key,DES.MODE_ECB)
ciphertext = cipher.encrypt(plaintext)
print ‘密文:,ciphertext.encode(‘hex) //16进制表示
decrypttext = cipher.decrypt(ciphertext)
print ‘解密结果:,decrypttext
# AES 加密解密
from Crypto.Cipher import AES
from binascii import b2a_hex,a2b_hex
from Crypto import Random
def encrypt(text,key,IV):
cryptor = AES.new(key,AES.MODE_CBC,IV)
length = 16
count = len(text)
add = length-(count% length)
text = text +(‘\0 * add)
ciphertext = cryptor.encrypt(text)
return b2a_hex(ciphertext)
def decrypt(text,key,IV):
cryptor = AES.new(key,AES.MODE_CBC,IV)
plain_text = cryptor.decrypt(a2b_hex(text))
return plain_text.rstrip(‘\0)//解密后,去掉补足的空格
key = ‘keyskeyskeyskeys
#初始化密钥,密钥长度必须16,24或32 B长
plaintext = ‘韩山师范学院
print ‘明文:,plaintext
IV = Random.new().read(AES.block_size)
//加密或解密的初始化向量
ciphertext = encrypt(plaintext,key,IV)
decrypttext = decrypt(ciphertext,key,IV)
print‘密文:,ciphertext
print‘解密结果:,decrypttext
在DES和AES对称密码算法实验中,要强调DES的密钥必须为8 B,而AES的密钥为16,24或32 B,DES的加密文本长度必须为8 B的倍数,而AES的加密文本长度必须为16,24或32 B的倍数。
3 RSA公钥密码学算法实验
RSA公钥密码学算法广泛应用于信息安全领域,包括非对称加密解密、认证技术以及数字签名等。RSA算法主要通过求乘法逆元、加密和解密函数实现。这三个函数的Python代码如下所示:
def multip_inverse(e,fn):
A=0; B=1; m=fn;
b=e; Q=m/b; R=m%b;
while(R>1):
X=A-Q×B; A=B;
B=X; m=b; b=R;
Q=m/b; R=m%b;
if(R == 1):
X=A-Q×B
return X% fn
if(R == 0):
print ‘乘法逆元不存在!
return ‘none
def Encrypt(P,e,n)://加密函数
C =( P×e)%n//加密得出密文C
return C
def Decrypt(C,d,n)://解密函数
D =(C×d)%n//解密得出明文P
return D
另外,学生在完成RSA公钥密码学算法的基础上,让学生完成RSA数字签名程序,进一步提高学生的实践能力。
4 结 语
通过以上示例,我们可以发现,使用Python语言实现密码学算法,简单易用,学生容易掌握,可降低使用高级语言编写密码学法的难度,又能提高学生的学习兴趣。除了古典密码学实验,DES和AES对称密码学算法实验和RSA公钥密码学算法实验,还可布置一些趣味密码学问题,例如分别采用蛮力破解和字典攻击方法破解压缩文件密码,破解无线WiFi密码和破解谷哥浏览器登录密码等,提高学生对这些课程的学习兴趣,增强实践能力和应用能力。通过在物联网安全的实验教学中采用Python编程工具,锻炼了学生的实际编程能力。笔者指导的学生参加2106年和2017年全国信息安全竞赛(作品赛),共获得了3个三等奖。对其他高校物联网安全课程中的密码学算法教学改革具有一定借鉴意义。
参考文献
[1]胡小明,杨寅春,吴秀梅,等. 信息安全专业密码学课程教学改革[J]. 计算机教育,2014(1):49-52.
[2]李曦. 密码学课程实践教学存在的問题及改进措施[J]. 高等教育研究:成都,2011(2):23-24.
[3]王少辉,王志伟. 密码学课程设计探索与实践[J]. 课程教育研究,2013(1):15-16.
[4]嵩天,黄天羽,礼欣. Python语言:程序设计课程教学改革的理想选择[J]. 中国大学教学,2016(2).
[5]叶磊,文涛,刘立亮,等. 基于Python的网络及信息系统安全过程管理工具[J]. 数字技术与应用,2011(9):293.
[6]徐鹏,薜伟.抗差分功耗攻击的DES算法研究[J]. 计算机仿真,2018(1)282-286.
[7]付春燕,宋英雄,郭鹏程,等. 基于AES数据加密的网关通信设计[J]. 电子测量技术,2018(2):55-60.
[8]石井,吴哲,谭璐,等. RSA数据加密算法的分析与改进[J]. 济南大学学报(自然科学版),2013(3):66-69.