信息安全大作业
信息安全报告
重庆大学本科学生结课报告
“信息安全导论(IIS)”课程报告
学 生:李易燔
学 号:20205644
指导教师:胡海波
专 业:软件工程
重庆大学大数据与软件学院
二〇二三年一月
目录
1.1 现状调查 4
2.1 需求概述 7
3.1 需求分析 10
4.1 需求分析 21
线上考试系统调研报告
现状调查
国外应用现状
线上考试是伴随计算机辅助教学的发展而产生的,美国考试委员会于 20世纪 80年代初成功开发了最早的考试系统。[1]国外对在线考试的理论研究与系统开发所经历程较长,有些大型国际考试所采用的考试系统已经成熟,如微软的 MSCE、托福考试。[3]如今,经过40年左右的发展,线上考试系统的开发及应用在西方发达国家已经非常普及,例如 WebCT 网络教学平台、Leadingwy学习管理系统、Canvas 学习管理系统、TomExum、DExam以及 Quextiouek 等。以Canvas为例,它是很多高校在应对疫情的通知中推荐的在线教学平台/工具之一,包括斯坦福大学、哈佛大学、华盛顿大学、普林斯顿大学、威斯康辛大学麦迪逊分校等。Canvas具有云系统架构、多类型工具整合、强大的数据分析、支持移动用户。和大部分网络学习平台一样,Canvas提供有一整套基本功能,包括课程作业、测试和学习评价等。2020 年,新疫情全球大流行,线上考试替代了部分纸质考试,促进了线上考试的流行,2021年,雅思实现了在全球范围内推行线上考试。目前,美国近有 80所大学的学生可通过在线考试获得相应学位。此外,其他西方国家如加拿大、英国等也在大力发展线上考试系统。[4]根据统计显示,全世界每年都有成千上万的人参加网络在线测试,其已经成为一种常用的评估和认证方法。
国内应用现状
虽然国内互联网起步慢,但国内其相关研究随着远程教育的扩大而日益深入[1],目前应用比较多的线上考试系统有:全国计算机等级考试(NCRE)、 普通话水平测试、职业技能鉴定、远程教育课程考试等。随着信息化不断晋及,我国各大高校虽然已经各自配备了比较健全的课程管理系统,但在线上考试系统上,各大高校仍未形成自己的体系。国内越来越多的互联网企业和高校开始参与到线上考试系统的研发中,市面上也出现了各种各样的线上教育平台和与之配套的线上考试系统,如雨课堂在线考试平台、云班课在线学习平台、问卷星等。其中雨课堂除了基本的在线考试功能外,还考虑了师生信息对接与安全保护、身份认证、考试数据的管理与安全、网络支持要求等。但由于科技研发水准并不高,在理论和实践上与发达国家相比,仍有一定的差距,因此还需不断努力地探索更适合中国国情的方案。2019 年,我国政府颁发了《关于促进在线教育健康发展的指导意见》全面支持在线教育行业的发展。[5]与此相关,国内的线上考试等行业迎来了新一轮的发展。
线上考试的必要性
线上考试考核系统已经成为当前教育领域的一种重要手段,在国内外都得到了广泛的应用。随着互联网技术的发展和教育信息化的推进,线上考试考核系统在提高考试效率和方便考生参加考试方面发挥了重要作用。其主要有点有:
- 节约成本,提高考务工作的效率。传统考试从出卷、审核校对、试卷印刷、分装运输和管理,考务环节繁杂,要耗费很多的人力和物力。接触人员多,增加了试卷保密工作的难度。线上考试主要借用考试平台的试题库进行,有效避免了试卷印刷过程中纸张的浪费,减少了试卷分装和运输的成本,也降低了管理成本。
- 打破时空限制,考试更灵活。传统的考试需要统筹安排教室,这对教室少的学校是一难题,其次遇到涉及考生众多的公共课程考核,往往难以协调考试时间。而线上考试不仅仅方便了学生,也方便了监考老师。
- 有利于环保。线上考试作为无纸化办公的一种有利于节约资源,保护地球。[2]
- 提高考试效率,相对公平。首先是组卷随机,这样可以有效减少作弊行为。其次,线上考试客观题占比较大,便于计算机批改。在线考试系统可以直接统计得分,并对成绩数据进行分析。最后,在线批改系统采用双盲批改方式,减少了老师因个人因素对学生成绩的影响。
- 丰富考试题型。相较于单一的纸质笔试形式,在线考试可以运用图片,声音等多媒体技术灵活考查学生对知识的掌握程度。[4]
线上考试存在的问题与困难
虽然线上考试系统发展迅速,然而,线上考试考核系统也存在一些问题。
- 网络安全问题。线上考试考核系统需要保证考试过程中的数据安全,但是网络安全风险总是存在,如黑客入侵、数据泄露等,这些都可能对考试结果造成严重影响。因此,线上考试考核系统需要采用严格的安全措施,如加密、防火墙、安全监控等,来保证数据的安全性。
- 考试作弊问题。由于考试过程是在网络上进行的,因此考生可能会采用各种手段进行作弊,如利用外挂软件、搜索引擎等。这些都可能对考试结果造成严重影响。
- 数据管理问题。由于考试数据量巨大,因此需要采用高效的数据管理方法,以便于对考试数据进行有效的存储、统计和分析。
安全需求分析
需求概述
对OES4UC系统(及各个子系统)进行安全风险识别和安全需求分析。阐述某种攻击会对哪些安全服务造成威胁,并给出具体的场景案例。
总体分析
OES4UC (Online Exam Support for University Candidates)系统是一个分布式系统,通过基于TCP/IP协议体系的计算机网络进行连接。
可能受到的攻击有:
- 拒绝访问(3.2.1)
攻击者可能会利用TCP(Transmission Control Protocol)协议缺陷,发送大量伪造的TCP连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足),导致其无法处理正常用户的请求,也就是DDOS(Distributed Denial of Service)攻击。[6]具体而言,攻击者采用拒绝服务攻击会导致招生录取系统,课程教学系统,论文答辩系统瘫痪。
- 数据泄露(3.2.2)
攻击者可能攻击考试的数据,例如试卷题目,学生的成绩,如果攻击者提前得知试题,则会对考试造成极大的不公平,如果考生成绩泄露,则会侵犯了考生隐私。
- 数据丢失(3.2.3)
硬件故障、人为破坏、人为误操作、病毒感染、软件故障、设备损毁、火灾、机房漏水、机房结构性破坏、供电系统瘫痪、空调故障等都会造成数据的丢失。就本系统而言,可能的数据丢失有:学生信息(id,score…)丢失,试卷题库丢失,答辩视频丢失,在线课堂教学资源丢失等。
- 恶意节点(3.2.4)
恶意节点攻击指的是在网络中插入了破坏节点,这些节点会试图破坏网络的正常运行。这类攻击可能包括伪造节点、窃取数据、破坏网络性能、传播恶意软件等。对该系统而言,恶意节点可能会导致数据被窃取,网络性能下降从而影响考试体验。
各个子系统安全需求分析
Rec.OES4UC(招生录取)
Rec.OES4UC主要面向招生录取进行线上复试和面试(Interview),开设线上会议(需要音频和视频支持) 。面试完成后,考官根据回答问题的情况对考生进行综合评分。
针对线上会议,可能的攻击有:
- 攻击者可能会截取视频,从而泄露面试题目等,造成对其他考生不公平。
- 攻击者可能会涌入相应的会议,对会议进行“爆破”,从而影响面试的进展。
针对评分,可能的攻击有:
- 身份伪造攻击:攻击者可能会冒充真正的考官,从而获取非法权限或欺骗系统。
- 电子签名欺骗攻击:攻击者可能会伪造电子签名,从而篡改评分结果。
Edu.OES4UC(课程教学)
Edu.OES4UC主要面向任课教师和注册学生进行课程的在线考试和考核。
针对考试系统,可能的攻击有:
- 替考,考生寻找枪手,让枪手代替自己参加在线考试。
- 系统失效,考生在考试过程中因为网络信号丢失等特殊情况,暂时失去网络连接而丢失已答信息。
- 脚本注入: 攻击者可以在考试网站上运行恶意脚本,利用外挂程序进行答题。
- 考生利用其它设备进行作弊。
- 考生利用搜索引擎进行作弊。
- 社会工程学攻击: 攻击者通过钓鱼邮件或社交媒体来诱导考生,教师提供私人信息或登录凭证,从而冒充考生,教师进行考试或监考。
- 重复提交(重放攻击)考试成绩可能会被提高或降低,导致考试不公平。重复提交可能会导致考试统计数据的混乱,如平均分和标准差。重复提交会导致其他考生对考试的信任度降低。攻击者可以使用重放攻击获得高分,导致考试结果不准确。
- 攻击者可能通过修改考试数据来篡改考试结果。
Def.OES4UC(论文答辩)
Def.OES4UC主要面向毕业生学位论文答辩提供在线支持和服务,与Rec.OES4UC的功能基本相似。
不同之处在于:考官最后是通过投票(Voting)来确定考生是否通过答辩,投票需加载电子签名和数字签名;另外针对非涉密论文的答辩,同一答辩小组的考生(答辩人)可以同时在会场(旁听)。
针对答辩系统可能的安全攻击有:
- 篡改投票结果。
- 涉密论文被窃听。
安全机制设计
需求分析
在对OES4UC系统进行安全需求分析的基础之上,针对相关的安全攻击来分析和选择相应的安全机制,并阐述如何使用密码编码学算法来设计和实现该安全机制。
总体分析部分
拒绝服务(DDOS)(1)
攻击原理分析:
DoS(Denial of Service)的攻击方式有很多种。最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,致使服务超载,无法响应其他的请求。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者向内的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多么快,内存容量多么大,互连网的速度多么快都无法避免这种攻击带来的后果。
应对拒绝服务攻击的常用方法包括:
- 使用防火墙和入站流量控制来限制不正常的网络流量。
- 使用 DDoS(Distributed Denial of Service) 防护服务来清洗流量并防止攻击流量到达网络。
- 配置多级缓存和 CDN (Content Delivery Network)来减少网络和服务器压力。
- 使用负载均衡器来分摊网络流量并确保服务可用性。
- 日常监控网络和服务器性能,及时发现异常并采取应对措施。
- 具有应急响应计划,确保能够快速和有效地应对紧急情况。
就防火墙具体而言:
防火墙的主要工作原理是根据预先设定的规则来检查网络流量。当网络流量进入网络时,防火墙会检查这些流量是否符合预先设定的规则。如果流量符合规则,防火墙会允许流量通过;如果不符合,防火墙会拒绝流量。这样就可以保护网络免受未经授权的访问和攻击。在 DDoS 攻击中,防火墙可以通过限制单个 IP 地址的流量来阻止攻击流量进入网络。
入站流量控制是指在入站流量到达网络之前对其进行限制的技术。可以使用入站流量控制来限制单个 IP (Internet Protocol)地址或网络的流量,并阻止攻击流量进入网络,与防火墙技术类似。
在实际应用中我们也可以采用DDN(Defense Data Network)或VPN (Virtual Private Networks)的方式来建立安全的通信线路。
DDN v.s. VPN
DDN是利用数字信道传输数据信号的数据传输网。它的主要作用是向用户提供永久性和半永久性连接的数字数据传输信道。,DDN专线有很多优点。高性能、高速度、高安全性是DDN专线的明显优势。但是,专线的费用非常昂贵,除了因为速率和带宽的要求高之外,还需要安装 Modem等接入系统。事实上,除了二级考点之外,大部分访问考试系统的远程用户都不具备专线连接的条件。因此,通过使用Internet的ISP(Internet Service Provider)进行拨号来访问考试系统并不是安全可靠的方式。采用虚拟专用网 VPN则可以解决这样的安全问题。同时,构建在 DDN 专线上的 VPN将给考试系统提供集安全性、可靠性和管理于一体的私有专用网络。[4]
VPN技术的原理是通过建立一条专用的、加密的通信通道来隔离网络上的数据传输,保证数据的安全性和隐私性。VPN通过在公共网络上建立一条专用的、加密的通信通道,来实现远程访问内部网络、保护数据传输的安全性和隐私性。
远程访问VPN在考试中心总部和某个Internet远程位置之间建立一条安全连接,通过ISP的拨号网络设备建立连接,有助于减少通信开支。远程访问VPN允许用户通过共享的网络基础设施连接到考试中心的内部网和外部网,建立一条加密信道。远程访问VPN的客户安装VPN软件,考试中心的VPN服务器需要验证用户的身份,并可以根据访问权限表允许相应权限的访问。
数据泄露(2)
攻击原理分析:
可能是员工(系统管理员)故意或无意泄露,系统和应用程序中的漏洞也可能会被黑客利用来访问敏感信息,除此之外黑客可能会使用网络攻击手段来窃取数据。
防止数据泄露的方法有很多,其中一些常见的做法包括:
- 访问控制:只允许授权的用户访问数据。
- 加密:使用加密技术来保护数据的安全性。
- 用户培训:培训用户如何正确处理敏感信息。
- 审核:定期审核数据访问记录以发现异常行为。
- 软件更新:及时更新系统和应用程序,以修复漏洞。
就上述三种可能的攻击第一种可以通过开展对系统管理员的相关网络安全教育,培训他们如何正确处理敏感信息,制定相应的泄密惩罚机制。
后面的两种攻击方式属于被动攻击,易于防守但很难检测。相应地,我们可以对题库和学生信息,成绩等信息进行加密。
具体而言我们可以在数据库里只存放用户MD5(Message-Digest Algorithm 5)值,这样即使数据泄露,攻击者也只能拿到一串哈希值,不能逆推出用户的真实密码。
除此之外,我们可以采用AES,RSA对数据加密(图像类数据也可以通过AES进行加密)。[7]
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael加密法。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:
- AddRoundKey———矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。
- SubBytes———透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
- ShiftRows———将矩阵中的每个横列进行循环式移位。
- MixColumns———为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。
AES算法流程图:
Figure :AES流程图
RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。[9]
对极大整数做因数分解的难度决定了 RSA 算法的可靠性。
RSA算法实现过程大致如下:
(a)选择两个大素数p和q,计算n = p × q,φ(n) = (p − 1)(q − 1), φ(n)是指n的欧拉函数,其中p ≠ q。
(b)选取一个整数 e,使其满足1 < 𝕖 < φ(n),gc𝕕(φ(n),𝕖) = 1,gcd是最大公约数函数。
©计算私钥 d,使其满足𝕕𝕖 = 1mod φ(n),也就是d = 𝕖 − 1mod φ(n),mod是求余函数。
(d)加密:将明文 m 适当分组使其分组后块长度小于n,利用公钥e计算密文c = m𝕖mod n。
(e)解密:运用私钥d计算明文m = cdmod n
除了文件加密外,RSA算法还可以用于:
- 加密通信:用于加密数据,保护数据安全,保证数据私密性。
- 证书签名:用于确认数字证书的来源及完整性。
- 数字签名:确认数据真实性。
对于试题、分数评判、投票结果的传输,由于对于实时性有一定要求,因此宜采用AES-128加密算法;对于对实时性要求低的数据传输(如待发布试卷上传、考试安排上传、考试结果公示等),便可以采用RSA加密算法,牺牲加密速度从而降低密钥管理难度,获得最佳的经济性。
数据丢失(3)
应对数据丢失可以采取以下措施:
- 定期备份数据: 使用备份软件或硬件进行定期备份,以便在数据丢失时恢复数据。
- 使用冗余技术: 如RAID(Redundant Array of Independent Disks)技术,多台机器同步备份
- 实施安全策略: 如防火墙,反病毒软件等来防止黑客入侵和病毒攻击
- 人员培训: 对员工进行数据安全培训,以防止人为操作错误
- 实施应急预案: 制定应对数据丢失的应急预案,在发生数据丢失时能及时和有效地采取行动
- 定期检查和维护硬件:定期对硬件进行检查和维护以防止硬件故障。
恶意节点(4)
恶意节点攻击指的是在网络中插入了坏蛋节点,这些节点会试图破坏网络的正常运行。这类攻击可能包括伪造节点、窃取数据、破坏网络性能、传播恶意软件等。为了防范这类攻击,网络管理员可以采用多种手段,如限制节点的连接、监控网络流量、使用身份验证等。
我们可以采用拜占庭容错算法来防御恶意节点。
PBFT(Practical Byzantine Fault Tolerance)实现了在有限个节点的情况下的拜占庭问题,有3f + 1的容错性(拜占庭将军问题也只在节点数N > 3f时可解),并同时保证一定的性能。其采用了密码学相关技术(RSA 签名算法、消息验证编码和摘要)确保消息传递过程无法被篡改和破坏。[8]
各子系统安全机制设计
Rec.OES4UC
视频加密技术分为两种:
防盗链:通过验证的用户才能访问到没有加密的视频内容,这种方案存在视频很容易就被下载的风险,严格来说这不属于加密。这种方式其实是资源访问授权,它实现起来简单。
加密视频本身:通过对称加密算法加密视频内容本身,用户获得加密后的视频内容,通过验证的用户可以获取解密视频的密钥,在客户端解密后播放。这种方式实现起来流程复杂会带来更多的计算量。
考虑到面试的安全要求较低,我们采取防盗链技术。它通过检测请求视频的来源,只允许指定域名下的页面请求视频。如果不是来自允许的视频,则不会显示视频。
安全性更高的对视频流加密我们将在涉密论文的安全机制中详细讨论。
攻击者可能会涌入相应的会议,对会议进行“爆破”, 身份伪造攻击,针对这些问题,我们可以通过严格的身份认证来解决这一问题。具体见Edu.OES4UC部分。
Edu.OES4UC
针对替考,考生寻找枪手问题。我们可以利用智能手机自带的摄像头, 在考试过程中实时采集学生的人脸图像,再与系统数据库事先存储的考生头像信息进行比对,以防替考。
针对系统失效,考生在考试过程中因为网络信号丢失等特殊情况,暂时失去网络连接而丢失已答信息问题,我们可以利用Ajax技术。使用Ajax能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。每当考生答完一题,利用Ajax上传数据至临时存储仓库。
针对攻击者可以在考试网站上运行恶意脚本,利用外挂程序进行答题和考生利用搜索引擎进行作弊这一问题,我们可以实现要求获得电脑的相应权限,监测是否打开其他进程,若打开可能用于作弊的进程则停止考试。
针对考生利用其它设备进行作弊这一问题,我们可以要求考生双机位进行考试,同时利用机器学习等方法依据学生的答题速度快慢,眼球移动等来判别考生是否作弊,将可疑度高的视频,传送给监考老师裁决。
针对社会工程学攻击,我们可以事先对考生考官进行相应的网络安全教育来防范。
针对重复提交(重放攻击)攻击,我们可以在通信中使用时间戳和序列号限制重放。也可以使用数字签名来验证数据的完整性和来源。关于数字签名的算法及其优劣如下表Table 1:签名算法所示:
算法 | 简要说明 | 优劣 |
---|---|---|
RSA算法 | 基于大质数分解问题的公钥密码算法。 | 速度较慢,但安全性高。 |
DSA(数字签名算法) | 用于生成数字签名的国家密码算法标准。 | 速度较快,但安全性较差。 |
ECDSA(椭圆曲线数字签名算法) | 基于椭圆曲线的数字签名算法。 | 速度快且安全性高。 |
HMAC(散列消息认证码) | 基于密钥的散列函数的消息认证码。 | 速度快且安全性高,适用于基于密钥的散列函数的消息认证。 |
Ed25519 | 高效的椭圆曲线数字签名算法。 | 速度快,安全性高,易于使用。 |
Table :签名算法
在这里我们采用RSA+MD5进行数字签名。
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为,求余、取余、调整长度、与链接变量进行循环运算。得出结果。
如Figure 2:MD5所示:一个MD5运算— 由类似的64次循环构成,分成4组16次。F 一个非线性函数;一个函数运算一次。Mi 表示一个 32-bits 的输入数据,Ki 表示一个 32-bits 常数,用来完成每次不同的计算。
Figure :MD5
除了数字签名外,MD5算法还可以用于:
- 文件完整性检测:通过生成文件的MD5值来检测文件是否被修改。
- 密码存储:对用户密码进行散列,保护密码安全。
- 数据校验:用于检测文件传输过程中是否发生错误。
- 文件去重:用于检测文件是否重复。
发送之前,先将发送者的明文进行hash得到消息摘要,再使用发送者的私钥和刚才得到的明文hash进行签名,得到签名;然后将明文,数字签名和数字证书合在一起用发送者随机生成的对称密钥加密得到的密文。接下来,将随机生成的对称密钥使用接收方的公钥进行加密得到数字信封,最后将密文跟数字信封发送给接收者。
接收者接收到数据后首先使用私钥解密数字信封得到对称密钥,第二步是使用对称密钥解密密文得到数字签名和证书还有明文hash,最后使用发送者的公钥和数字签名以及明文Hash进行比较,从而验证签名和检验数据的完整性。
如此我们便解决了重放攻击。
Def.OES4UC
Def.OES4UC主要面向毕业生学位论文答辩提供在线支持和服务,与Rec.OES4UC的功能基本相似。
本文将对涉密论文答辩视频加密和投票结果的安全机制进行设计。
首先是涉密论文答辩视频加密,我们采取RC4算法采用OFB工作模式进行加密。
RC4(Rivest Cipher 4)是一种串流加密法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。RC4由伪随机数生成器和异或运算组成。RC4的密钥长度可变,范围是[1,255]。RC4一个字节一个字节地加解密。给定一个密钥,伪随机数生成器接受密钥并产生一个S盒。S盒用来加密数据,而且在加密过程中S盒会变化。[12]其工作的大致原理我们将在4.2中介绍。
对于投票的安全机制设计,我们可以采用数字签名,同3.3.2中的防御重放攻击算法一致,采取RSA+MD5的签名机制。
安全机制总结
密钥的管理分发机制
任何密码系统的强度取决于密钥分发管理技术。就对称加密来说,通信双方必须使用相同的密钥并且该密钥要对其他人保密,为了减少攻击者攻陷密钥所危害的数据量,要频繁更换密钥。
我们可以考虑采用KDC(key-distribution center)解决对称密钥加密通信在实际使用时存在的一些问题。
大致原理如下:
KDC同每个通信方共享一个密钥(不同通信方同KDC共享不同的密钥),并使用共享的密钥为每个通信方分配用于同其他通信方进行通信的密钥。这样,通信方之间,通信方与KDC之间,便可进行安全通信。
具体过程如下:
考虑需要进行安全通信的A, B。A,B同KDC共享的密钥分别为Ka, Kb。假设A希望同B通信,A首先向KDC发送需要同B通信的请求(如果需要,可用Ka加密以进行身份认证),然后KDC选择一个新的随机的随机密钥,即会话密钥k,并使用Ka,Kb加密发送给A,B。当A,B恢复密钥k,便可使用密钥k进行加密通信了。当通信结束,便将密钥k擦除,下次进行安全通信时则需要再次访问KDC。
如此,我们便可以在用到对称加密算法时(加密视频流使用RC4,使用AES传输试题、分数评判、投票数据)安全地对密钥进行管理分发。
工作模式的选择
对于对称加密算法我们还应该选择其对应的工作模式。[10]
分组密码的工作模式(mode of operation)允许使用同一个分组密码密钥对多于一块的数据进行加密,并保证其安全性。[11]分组密码自身只能加密长度等于密码分组长度的单块数据,若要加密变长数据,则数据必须先被划分为一些单独的密码块。
对于上述讨论的情景中共有两处使用到了对称加密算法。
- 在防止数据泄露中,我们采用了AES加密算法,由于数据是静态存储,我们可以采用ECB模式工作。
- 在对视频流加密中我们采用了RC4流加密算法,我们在这里就应当采用OFB模式。
安全机制总结
综上所述,OES4UC线上考试系统安全机制的选择大致如下表:
系统名称 | 可能收到的攻击 | 主要安全机制 | 补充 |
---|---|---|---|
OES4UC | 拒绝访问 | 防火墙,VPN | |
数据泄露 | AES,MD5,RSA定期日志审核 | 工作模式:ECB | |
数据丢失 | 定期备份数据,RAID | ||
恶意节点 | PBFT | ||
Rec.OES4UC | 截取视频,泄露面试题目 | 防盗链 | |
对会议进行“爆破” | 人脸匹配 | ||
身份伪造攻击 | 人脸匹配 | ||
Edu.OES4UC | 替考代考 | 实时人脸匹配,机器学习 | |
丢失已答信息 | ajax | ||
脚本注入,搜索引擎 | 权限监督 | ||
社会工程学攻击 | 线下网络安全教育 | ||
重复提交(重放攻击) | RSA,MD5 | ||
Def.OES4UC | 视频流被截取 | RC4 | 工作模式:OFB |
投票结果被篡改 | RSA,MD5 |
专案问题解析
需求分析
应用场景
假设事先通过某种键值(如考号)可对n个考生排序得到一个序列(即某个考场的每个考生有一个自然数序列的连续编号),现在还需要使用一种伪随机数生成的方法,通过一个Seed(可以由系统生成)来进一步打乱学生序列,生成伪随机的考生入场序列。
输入输出
①输入:一个大于0的整数n(考生的数量)②输出:一个随机打乱的1~n的数组,要求每个数字出现且仅出现一次。
性能需求
要求输出的非重复随机序列满足均匀分布
设计约束
借鉴RC4算法,将其进行剪裁、修改和使用,从而达成上述目标
伪代码和说明
需要的模块:key生成函数,s盒初始函数,随机序列生成函数,输出函数
s-盒为1~n的整数序列,其中n为总人数,采用类似RC4的方法将s盒打乱,最后输出s盒即为所需要的随机序列。
key生成函数
procedure generate_random_str(randomlength=16):
random_str =’’
base_str =‘ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789’
for i in from 0 to len(base_str)-1
random_str +=base_str[random.randint(0, length)]
return random_str
s盒初始函数
procedure init_S(key,num):
for i from 1 to num
S[i] := i
endfor
j := 0
for( i=0 ; i<num ; i++)
j := (j + S[i] + key[i mod keylength]) % 256
swap values of S[i] and S[j]
endfor
随机序列生成函数
procedure PRGA(S,num):
i := 0
j := 0
count := 0
round=random.randint(10, 20)
while count<round:
i := (i + 1) % num
j := (j + S[i]) % num
swap values of s[i],s[j]
count=count+1
return S
输出函数
procedure output(num):
key := generate_random_str(16)
key := [ord© for c in key]
S := init_S(key,num)
return PRGA(S,num)
结果分析
设置n=10,运行生成随机序列函数十万次,统计每次运行生成序列的第0个元素的分布情况,并绘制柱状图。
Figure :随机结果
从运行结果可以看出,分布是均匀的,说明随机的效果很好。
参考文献
- 毛丽巍 . 大学英语无纸化考试效度和可行性研究 [J].
- 罗碧波.关于在线考试的管理系统的研究[J]信息系统工程,2016(4):141-141
- 吴锦红.高校线上考试的问题分析与解决方案[J]移动信息,2021(8):134-135
- 方芳. 基于Internet的考试系统——网络安全策略探讨
- 教育部等十一部门关于促进在线教育 健康发展的指导意见 教发〔2019〕
- 喻志彬等.“基于Web应用层的DDoS攻击模型研究”.信息网络安全(5):84-90
- Zhang, Yong.“Test and Verification of AES Used for Image Encryption”.3D RESEARCH,9(1):3-3
- Sukhwani H, Martínez J M, Chang X, et al. Performance modeling of PBFT consensus process for permissioned blockchain network (hyperledger fabric)[C]//2017 IEEE 36th symposium on reliable distributed systems (SRDS). IEEE, 2017: 253-255.
- Calderbank, Michael. The RSA Cryptosystem: History, Algorithm, Primes (PDF). 2007-08-20.
- Block Cipher Modes. NIST计算机安全资源中心. [2010-09-28].
- Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone. 应用密码学手册. CRC Press. 1996 [2010-09-28]. ISBN 0-8493-8523-7.
- Rivest, Ron; Schuldt, Jacob (27 October 2014). “Spritz – a spongy RC4-like stream cipher and hash function”
附录
专案问题的具体代码实现(python):
import random
def init_S(key,num):
key_length = len(key)
S = [x for x in range(1,num+1)] # [0,1,2, … , 255]
j = 0
for i in range(num):
j = (j + S[i] + key[i % key_length]) % num
S[i], S[j] = S[j], S[i] # swap values
return S
def PRGA(S,num):
i = 0
j = 0
count=0
round=random.randint(10, 20)
while count<round:
i = (i + 1) % num
j = (j + S[i]) % num
S[i], S[j] = S[j], S[i] # swap values
count=count+1
return S
def generate_random_str(randomlength=16):
“”"
生成一个指定长度的随机字符串
“”"
random_str =’’
base_str =‘ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789’
length =len(base_str) -1
for i in range(randomlength):
random_str +=base_str[random.randint(0, length)]
return random_str
def get_order(num):
key=generate_random_str(16)
key = [ord© for c in key]
S = init_S(key,num)
return PRGA(S,num)
if name == ‘main’:
dic = dict()
for i in range(11):
dic[i] = 0
count=0
while count<100000:
a=get_order(10)
dic[a[0]]=dic[a[0]]+1
count+=1
print(dic)
if name == ‘main’:
dic = dict()
for i in range(11):
dic[i] = 0 count=0 while count<100000:
a=get_order(10)
dic[a[0]]=dic[a[0]]+1 count+=1 print(dic)
font = {
‘family’:‘SimHei’,
‘weight’:‘bold’,
‘size’:12 }
matplotlib.rc(“font”, **font)
#设置图片大小 plt.figure(figsize=(14,8))
#绘制条形图 plt.bar(dic.keys(),dic.values())
#设置刻度及刻度标签 x_t = list(range(len(a)))
plt.xticks(x_t,a,rotation=90)
plt.show()