《数据安全》课程设计指导书_第1页
《数据安全》课程设计指导书_第2页
《数据安全》课程设计指导书_第3页
《数据安全》课程设计指导书_第4页
《数据安全》课程设计指导书_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本课程是信息安全专业所开设的一门基础性的实践课程,主要是数据安全原理和技术在实践开发中的具体应用。本课程的任务是:通过本课程的学习实践,使用学生进一步理解数据安设计和测试方法,面向对象的分析和设计方法的具体应用,熟悉一些数据安全软件开发流程。任选下列一项目(或者集成其中的数项)进行,查阅相关文献、了解相关的系统,要求完成系统需求规约文档、系统分析模型文档、系统设计模型文档、系统测试设计文档、系统编码5.数据备份与恢复软件(学生可自选课题,但需由教师认可)三.任务完成形式最终必须向指导老师提交完整的电子版程序源代码、可执行程序、数据文件以及使用说明文件等。源代码文件要特别注意编程规范、代码风格,关键代码需有合理的注释,不含任何无用代码;数据文件内要求有一定数量的“真实”数据(如对于记录2.课程设计报告(详细要求请参考附录二)课程设计报告总体上主要包括以下几个部分:4)软件安装、使用或者配置说明),注释,关键代码必须有合理注释以及相应的说明。3.课程设计中必须按指导书要求,综合应用所学的数据安全知识解决实际问题,有必要的理论分析,设计要有合理的依据。独立完成课程设计,不得抄袭他人。即使是同类的题目,可以分在一组互相交流,但是也不能抄袭,不能雷同,必须有差异,学生最终提交的电子文档(包括源代码)会经过各种方式的比较的。6.设计时适当考虑程序的可维护性与可扩充性,另外集成一些常用的功能,软件有适当7.积极交流与讨论(通过同学、网络等途径)、善于查阅资料、分析与借鉴他人编写的8.软件设计好以后,鼓励遵循开放源代码的思想,将代码和系统在网络上公开,接受专10.及时与老师交流,以了解自己的设计是否符合要求,遇到的各种问题及时联系,11.学会搜索网上已有的类似软件,进行分析、比较、集成和创新。12.学生应当既把设计当作一个任务,又要注意更要掌握方法,锻炼多方面的能力,特别是在有限的时间和有限的条件下摸索的能力。五.工作阶段与考核方法只有程序验收通过后,才能按以下方法核定本次课程设计的总成绩,因未能独立完成设计(尤其是抄袭)或概念不清的同学,总成绩将核定为不及格。总成绩由以下几个2.工作量(代码量、功能多少、难度、经历的曲折)5.代码书写规范性(包括注释的质量、详尽程度和明晰性)6.程序界面、新技术引用、易用性7.课程设计报告(叙述、书写规范、字数)8.动手能力、分析问题解决问题能力9.答辩的情况(答辩时会问关于系统实现和本作品相关的理论知识的问题)10.在资源共享和互助协作方面的贡献及其体现的能力六.任务具体要求任务:设计一个文件加密系统,可以对不同的文件进行加密解密。(5)对密钥可以进行备份,比如用口令字进行加密备份。防止非授权的的访问和应用,或保存证据。4.可以对受保护的内容进行加密,在通过认证,输入密码后才能解密。5.可增加其他的比如做阅读、访问次数限制的功能。6.可以采用数字水印和信息隐藏技术保护。是签名得到的最后的签名值,以防止重放攻击;说明:功能各方面越完善越好任务:制作一个可以备份磁盘数据、恢复丢失数据的软件。随着软件产品的功能增加和版本的提高,代码越来越复杂,源文件也越来越多,对于软件开发人员来说,除了保证程序运行的正确性和提高代码的运行效率之外,规范风格的编码会对软件的升级、修改、维护带来极大的方便性,也保证程序员不会陷入“代码泥潭”中无法自拔。开发一个成熟的软件产品,除了有详细丰富的开发文档之外,必须在编写代码的时候就有条不以下的编码规范包含了程序排版、注释、命名、可读性、变量、程序效率、质量保证、代码编译、代码测试和版本控制等注意事项。2.相对独立的程序块与块之间加空行3.较长的语句、表达式等要分成多行书写。4.划分出的新行要进行适应的缩进,使排版整齐,语句可读。5.长表达式要在低优先级操作符处划分新行,操作符放在新行之首。6.循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分。7.若函数或过程中的参数较长,则要进行适当的划分。8.不允许把多个短语句写在一行中,即一行只写一条语句。9.函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。10.C/C++语言是用大括号‘{’和‘}’界定一段程序块的,编写程序块时‘{’和‘}’二、注释2.边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。3.在必要的地方注释,注释量要适中。注释的内容要清楚、明了,含义准确,防止注释二义性。保持注释与其描述的代码相邻,即注释的就近原则。4.对代码的注释应放在其上方相邻位置,不可放在下面。5.对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释应放在此域的右方;同一结构中不同域的注释要对齐。6.变量、常量的注释应放在其上方相邻位置或右方。7.全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存8.在每个源文件的头部要有必要的注释信息,包括:文件名;版本号;作者;生成日期;主要函数或过程清单及本文件历史修改记录等。9.在每个函数或过程的前面要有必要的注释信息,包括:函数或过程名称;功能描述;输入、输出及返回值说明;调用关系及被调用关系说明等。三、命名2.较长的单词可取单词的头几发符的优先级,并用括号明确表达式的操作顺序,避免使用3.使用匈牙利表示法1.避免使用不易理解的数字,用有意义的标识来替代。2.不要使用难懂的技巧性很高的语句。3.源程序中关系较为紧密的代码应尽可能相邻。五、变量2.构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共变量,防止多个不同模块或函数都可以修改、创建同一公共变量的现象。3.仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。4.明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。5.当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生。7.仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起8.结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余地9.留心具体语言及编译器处理不同数据类型的原则及有关细节。10.严禁使用未经初始化的变量。声明变量的同时对变量进行初始化。六、函数、过程2.一个函数最好仅完成一件功能。4.函数的功能应该是可以预测的,也就是只要输入数据相同就应产生同样的输出。5.尽量不要编写依赖于其他函数内部实现的函数。6.避免设计多参数函数,不使用的参数从接口中去掉。7.用注释详细说明每个参数的作用、取值范围及参数间的关系。9.检查函数所有非参数输入的有效性,如数据文件、公共变量等。11.避免使用无意义或含义不清的动词为函数命名12.函数的返回值要清楚、明了,让使用者不容易忽视错误情况。13.明确函数功能,精确(而不是近似)地实现函数设15.编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即P、V操作)等手七、可测性1.在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码如打印函数等。2.在进行集成测试/系统联调之前,要构造好测试环境、测试项目及测试用例,同时仔细分析并优化测试用例,以提高测试效率。八、程序效率2.在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效率。3.不能一味地追求代码效率,而对软件的正确性、稳定性、可读性及可测性造成影响。4.编程时,要随时留心代码效率;优化代码时,要考虑周全。5.要仔细地构造或直接用汇编编写调用频繁或性能要求极高的函数。6.通过对系统数据结构划分与组织的改进,以及对程序算法的优化来提高空间效率。7.在多重循环中,应将最忙的循环放在最内层。9.避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中。10.尽量用乘法或其它方法代替除法,特别是浮点运算中的除法。九、质量保证(1)正确性,指程序要实现设计要求的功能。(2)稳定性、安全性,指程序稳定、可靠、安全。(3)可测试性,指程序要具有良好的可测试性。(4)规范/可读性,指程序书写风格、命名规则等要5.过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出前要关闭。7.时刻注意表达式是否会上溢、下溢。8.认真处理程序所能遇到的各种出错情况。9.系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用。10.系统运行之初,要对加载到系统中的数据进行一致性检查。14.要时刻注意易混淆的操作符。当编完程序后,应从头至尾检查一遍这些操作符。15.不使用与硬件或操作系统关系很大的语句,而使用建议的标准语句。16.建议:使用第三方提供的软件开发工具包或控件时,要注意以下几点:(1)充分了解应用接口、使用环境及使用时注意事项。(3)除非必要,不要使用不熟悉的第三方工具包与控件。十、代码编译1.编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢2.同一项目组内,最好使用相同的编辑器,并使用相同的设置选项。3.合理地设计软件系统目录,方便开发人员使用。4.打开编译器的所有告警开关对程序进行编译。5.在同一项目组或产品组中,要统一编译开关选项。十一、代码测试、维护2.单元测试开始要跟踪每一条语句,并观察数据流及变量的变化。3.清理、整理或优化后的代码要经过审查及测试。4.代码版本升级要经过严格测试。《课程设计说明书》其它格式规定一、纸张和页面要求二、装订页码顺序三、章节序号五、目录六、正文正文的页数不少于10页(不包括封面、目录、参考文献等),正文汉字数不少于8000。正文的章节目序号按照正式出版物的惯例,章节目序号的层次顺序依次规定如下:1、1.1、1.1.1、(1)①(1)前言。概述所作题目的意义、本人所做的工作、及系统的主要功能;(2)系统分析。分析和描述所设计系统的基本要求与内容;(3)功能设计。描述及绘制出系统的功能结构框图;(6)结论。完成情况、有待改进之处、特殊说明、心得体会等。正文的主要内容必须是对自己所作的设计工作的描述,不得大量抄录对特定软件技术的说正文字体用小四,宋体。各级标题参考附录的毕业设计的范文。七、参考文献几种主要参考文献著录表的格式为:⑵期刊:[序号]著者.篇名[J].刊名,年,卷号(期号起~止页码.⑶论文集:[序号]著者.篇名[A]编者.论文集名[C].出版地:出版者,出版者.出版年:起~止页码.⑷学位论文:[序号]著者.题名[D].保存地:保存单位,授予年.[4]王健.建筑物防火系统可靠性分析[D].天津:天津大学,1997.[5]姚光起.一种痒化锆材料的制备方法[P].中国专利1980-07-03.(以上,序号用中扩号,与文字之间空两格。如果需要两行的,第二行文字要位于序号的附录三信息安全编程指南对于这里的大部分题目都已足够。注意读代码是非常重要的。2.学会寻找相关的类库、函数、接口、第三方代码以及openSSL之类的开源产品等,比如过程,包括指导书提出的许多要求均已经集成。推荐的相关的书籍有:NET安全编程3.瞄准有商业应用或者应用潜力的产品,这可能会完全改变一个人的前途,可以多关注一下baidu,腾讯,支付宝等IT业巨头的老板的发家史,注意只有做第一,才能抢占先机。信息安全蕴含着巨大的商机尚未得到开发,正等待着第一个发现这些商机的人,这需要有创新4.学会调试,学会通过各种方法验证比较发现程序中的错误。调试要认真,严谨地去找到错5.编程过程中出现各种各样的错误种类繁多,有些是已有理论教学无法讲到的,甚至完全不可预料,前所未见,除了学会自己去发现外,多请教老师和学生,也要学会在网络上,比如csdn等地方寻求帮助,也可以在搜索引擎上寻找是否有类似的问题发生。6.多登陆论坛参与讨论,多加入各种群交流学习。而且非常通俗,详尽,有些网友对操作或问题的描述非常细致清楚,这是书籍教材无法比8.编程的学习和实践应该紧密结合,不可能等完全学会了再去编程,首先掌握基本的方法和理论,然后一边学习一边编程,现学现用,要用的时候去查手册和资料,无需死记硬背。9.理论课的学习与实践各自有其侧重点,有时候是脱节的,比如密钥的处理就需要很多额外的知识,这些知识需要自己临时去掌握,临时想办法,有时候办法是很多的。而且在国内也是属于较新的专业,许多资源需要积累,同学们有好的资源和想法也可以交流共享。希望大家注重创新和实用性,要有创业精神,只有设计开发有应用潜力的作品,才能推广信息安全技术的应用。信息安全技术只有得到了广泛的应用,学生的就业前景才更加广阔。附录四信息安全和编程网站首推搜索引擎,要学会用搜索引擎。校园网图书馆的电子资源:搜索信息安全相关的设计与实现、开发,编程实现等论文。看雪论坛附录五重要的参考文献供电子文档-英文版)机安全与维护篇3.唐正军著。黑客入侵防护系统源代码分析,机械工业出版社(学校图书馆有)5.(德)威尔森巴赫著,密码编码学-加密方法的c与c++实现(第7.程序员密码学(提供电子文档-英文版)9.刘文涛,网络安全编程技术与实例(信息科程和网络编程推荐,网上可以下载电子文档。17.注意更好的参考文献在网络,还有许多网络空间,纳米盘、趣盘、iask等都提供了丰富的资源下载,比图书馆的书更容易获取,电子文档处理起来更方便。附录六提交材料的要求1.采用统一设计报告用纸与封面,打印前先检查好,验收的时候需要检查文档。3.写作内容强调自己的创新与特色;如果得到了其他的同学的帮助,增加谢辞部分,谢辞位于参考文献之前,写明得到哪个同学帮助以及具体的帮助内容。4.要有充分的代码注释,否则视为抄袭,文档应当尽量详尽,包括理论依据、理由等等。5.必须有目录页和参考文献说明6.应当提交源代码和报告,源代码为电子版,报告同时提供电子版和打印稿。为了便于各种雷同比较、字数统计、打分、错误修订等工作,所有提交的资料均必须同时提交电子版。附录七验收与答辩3.验收的时候同时检查课程设计说明书的电子版。4.强调自己做的内容、采用的技术,背景等相对简略。5.提前验收同等条件相对分数会高Steganography(密写术、隐写术)是一门关于信息隐藏的技巧与科学,所谓信息隐藏内容。现代的密写技术主要是依靠在图像、音频、视频等大容量的文件中隐藏信息[1]。还有一下信道主要采用数字签名等来实现消息隐匿[2],但是阈下信道可以被封闭,并且利用数字签名传输的阈下消息往往很短。可见,目前的信息隐藏技术要么需要依靠大文件作为载体,要么只大很多,信道利用率不高。一旦被禁止发送图片音频、视频等大容量的文件,不允许进行数字签名的情况下,秘密消息的隐匿就无法实现,而信息隐藏和阈下信道问题往往是针对被监视的囚犯之类的背景的,监管人完全可以禁止任何可能隐匿消息的行为。本文在提出的低密钥可信度密码体制的基础上提出一类新的密写方法。关键词替换的密写原理笔者曾经设计并且软件实现了针对软磨硬泡攻击的加密方法,该加密方法采用类似选择题的方法进行加密[3]:该加密方法配备一个关键词数据库,每个关键词和它相类似、相反的词构成一组,比如,晴、雨、雪等构成一组,今天则和明天、后天、昨天等构成一个组,好比选择在实际实现的时候,这个标志应该是明文文本中不出现的。而(和)分别代表一个标号的起始和结束标志,同样这个标志应该是明文文本中不出现的,这是为了保证可靠地解密。标号类似选该算法的特点是,可以很容易找到伪密钥,并且应用伪密钥得到的明文可能和原文的意义是相近、相反的,因而更能够采用伪密钥去误导攻击者。而传统的算法由于伪密钥很难寻找,面对软磨硬泡之类的攻击就存在隐患,因为传统算法很难找到伪密钥,因此,如果持有人给出可以得到有意义明文的密钥,这使得攻击者会很相信密钥是正确的,因此传统的算法的密钥可信度高,而上面的原理设计的算法很容易找到伪密钥,因而,该算法的密钥可信度低。可以采用类似的方法进行密写,但是为了防止对方看出密写的存在,伪装文本中应该不出现前面提到的各种用于解密的标志,也不对关键词进行扩充,而是直接将敏感的关键词用其他的关键词代替。密写的时候,针对文本中的关键词,进行识别,然后根据双方事先共享的密钥结合文本中的那个关键词在数据库中对应的标号进行计算,根据计算结果对应的标号来确定替换的关键词。这样原来的今天是晴天,就可能被替换为明天不是晴天之类的伪装文本,而且具基于关键词替换的密写方法设计由于该密写方法直接对文本内容进行替换,因此,对于文档的密写需要先打开文档,比如行保存,而提取隐秘信息的过程类似。打开文档打开文档读取文本关键词替换保存文档这里我们不考虑对文档的打开、读取和保存,直接设计对于文本内容的密写方法。对文本对文本进行逐一扫描,根据关键词数据库来发现文本中的关键词,如果是,将关键词在数据库中对应的一组关键词的数目n,以及这个关键词在数据库中对应的标号a读出来,至于替换成同一组的哪个关键词,根据密钥来确定。假设双方都共享了密钥k,可以用流密码算法来对关键词进行替换。假设数据库中所有的关键词组的最大数目不超过2m,则每一次遇到一个关找出对应的标号的词,对文本内容进行替换,然后继续扫描并且替换。原文的提取也相对简单,凡是在未遇到关键词的时候都是直接采用同样的文本内容,遇到关键词以后,就依次根据密钥进行替换,这个替换和密写时的替换是相反的。由于双方密钥一样,采用流密码算法每一次得到的对应的段是一样的值,对于第s次对应因此就可以提取原文。为了保证同步,无论是在密写和信息提取的过程中对于关键词的替换是按照词在文本中的得出密钥,虽然其中的标号运算也采用了模运算,但是流密码算法能够防止潜在的攻击[4]。提取信息的可逆性条件在上述的密写方法中,如果关键词有包含关系,比如关键词数据库中有中华,也有中华人民共和国。此外,如果一个关键词出现在数据库的两组关键词中,比如,班长可以和团支书、生活委员、学习委员等构成一组,也可以和团长、排长等构成一组,则加密和解密也会遇到歧义而无法得到确定的结果的问题。如果出现以上情况,则可能需要对算法进行改进。在此算法中,在设计关键词数据库时,每一个关键词只在关键词数据库中出现一次,即不出现在两组关键词中,此外关键词之间互相不存在包含关系。信息密写与加密不一样,为了保留伪装的文本不露破绽,相比以前采用的加密算法在密文中采用了各种标记,可以将没有被替换的和已经被替换的进行有效的区分,从而防止解密出现错误,而密写方法去掉了这些标记,带来的隐患在于:可能没有被替换的部分和替换的部分在交界的地方交叉组成一个新的关键词,这会导致提取出来的文本与原文不一致。这种情况比较少见,但是,可以认为是关键词交叉导致的,如果关键词没有交叉的,则不可能出现这样的情况。对于这个问题,可以采用多种方法来解决:第一,由于这种情况比较罕见,所以,可以不对关键词做更多的限定,而是在密写后,发送者对原文进行提取,比较原文和提取的文本是否一致,如果一致才发给接收者,否则,进行改进或者放弃。第二,可以在提取原文时对关键词同时给出两种提取结果,进行分析确定哪个是原文。第三,可以对关键词进行限定,不允许交叉的情况出现,这种情况对于英文之类的关键词以单词为主的语言更加有效,对于中文则会大大限制关键词的数目,导致密写在一定程度上失效。第四,可以利用语言本身蕴含的冗余来消除这种歧义,比如可以利用空格、同义词、同义将出现这种交叉的情况根据冗余数据进行编码来向接收者指明到底哪个是关键词,但是,比较繁琐。第五,以上都是假定接收双方只是在事先共享密钥,事后不共享密钥的情况,在许多情况下,接收双方不仅事先共享了一定的密钥,发送完密写的消息后也可以发送另外的密钥供对方有效解密,则此时可以用事后发送的密钥来编码相关的歧义的信息,保证对方得到正确的原根据的原理,在伪装文本的未替换段显然没有完整的关键词,而前面给定的限制条件规定关键词之间不互相包含,而上面一段考虑到伪装文本的未替换段与被替换的关键词的交叉部分出现的关键词的情况被避免或者进行有效处理,因此,不会再出现其他的关键词误判的情况,也可以保证本密写方法的可逆性。本方法在不同场合的应用本密写方法适用于阈下信道的情形,当两个囚犯试图进行通信,又不希望可以看到他们通信内容的管理员看到真正的内容的时候,可以采用这种密写方法进行替代,而且管理员看到的消息可能是相反、相近的,更符合语境,更容易误导对方。针对阈下信道中的签名,本方法可除了直接用该方法外误导对方外,本密写方法可以加上一个外层的传统的对称加密,因为在一些场合对手更相信发送者会对重要的涉密信息进行加密,加密反而容易让对方相信,此时可以用故意泄漏等一些方法让对方获取外层的密钥,诱使对方解密而误导对方。在软磨硬泡攻击中,密钥持有人可以只交出外层的密钥来,对方会误以为是明文。比如,在网络中,根据网络协议和系统的通信机制,对相应的关键词进行有效的代替,比如可以将url、ip地址、命令、文件名等等进行替换。这样经过密写修改的机制和协议,可以被操作,这样可以有两种用途:第一,如果通信双方都进行相应的密写和提取,则可以防止网络上的监听,而且可以误导监听者。第二,网络上的主动攻击者可以利用该密写方法对网络上的数据进行篡改,而且接收者很难发现数据是错误的,篡改的数据可能导致错误的操作而带来危害。本方法的优缺点分析攻击。在此分析中密码分析者威胁、勒索,或者折磨某人,直到他给出密钥为止,类似的还有行贿购买密钥攻击。这些是非常有效的攻击,并且经常是破译算法的最好途径。不仅仅是在密钥持有人在控制的情况下,有时候,密钥持有人碍于情面、权威和利益,也不得不给希望得到密钥的人一个密钥。一般现代的密码算法,能够解密得到有意义明文的伪密钥很少,而且,很难找到伪密钥。随着密文的增加,伪密钥的数量会逐步减少[5]。密码算法多以比特作为运算的单元,经过复杂的运算后很难找到伪密钥。这就意味着在面对软磨硬泡攻击的时候,密钥持有人如果随便给出一个密钥,绝大多数情况下,得到的明文是没有意义的,这样密码分析者显然很容易发现是错误的密钥。假如抵挡不住软磨硬泡攻击,则密钥持有人不得不交出真正的密钥来。本密写方法最大的意义在于,它的密写数据是有意义的,与通信的语境相关,并且可能与原来的意义相反,因而容易被认为是明文,并且具有误导性。本方法中,用正确的密钥提取的消息是原文,而用错误密钥提取的消息也是有意义的,伪装文本也是有意义的,很容易误导对方,即使对方知道可能被误导,他也不能断定哪个密钥是正确的,因为错误密钥也可以得出有本方法的原文(隐秘文本)和伪装文本(载体)的长度平均而言是一样的。此外,其他的密写方法和阈下信道是可以被禁止和封闭的,比如禁止发生图像、视频、音频文件,封闭阈禁止采用数字签名等都能有效防止隐秘消息的发送。当然算法也有局限性,比如关键词的误判,替换的词可能与原词一样,泄漏一定信息,运算复杂等等,可以在本算法基础上进行改进,比如替换的词可以在改进后与原来的词保持不一致,但是,这在分析者知道密写方法以及数据库的情况下是泄漏一定信息的,他们可以得出该载体中出现的关键词必然不同于原文。鉴于该方法有一定的局限性,也可以和传统的加密算法本文提出了一种基于关键词替换的密写方法,主要是将文本中敏感的关键词进行替换,并且对其可逆性的保证条件进行了分析和确定。该方法有着较为广泛的应用价值,本文仅仅是抛砖引玉,采用类似的关键词替换方法,可以设计许多相关的改进的密写和加密算法,使之适应不同的条件,并且可以减少对于关键词的限制。当然这个方法当作密写,广义的阈下信道都是可以的,也可以作为加密算法来使用。由于没有采用标记,本密写方法依然具有一定的局限性,受到语言、关键词的各种限制,既可以误导对方,也可能泄漏一定的信息,可以采取各种措施加以改进。基于内容加密的密码算法摘要:本文针对软磨硬泡攻击和唯密文攻击等攻击,提出密钥可信性的概念,并且设计了一种密钥可信度低的密码体制,应用该算法模型加密可以很容易得到伪密钥,从而可以误导和迷惑密码系统的安全性可以分为计算安全性(又称为实际保密性)和无条件安全性(又称为完已经越来越显得重要。现在经常讨论的密码攻击有已知条件有唯密文攻击、已知明文攻击、选择明文攻击和选择密文攻击。其中唯密文攻击最为困难,具有足够的计算能力就可以有效实施唯密文攻击。唯密文攻击中伪密钥的数目影响了密码体制的安全性制对于唯密文攻击越安全。即使在有限计算能力情况下,密码分析者也可以利用部分的穷举攻击等攻击方法以某种概率成功攻破密码体制。本文在考虑现有攻击基础上提出一种新的以语义并且经常是破译算法的最好途径。常见的密码分析已知明文攻击、选择明文和选择密文攻击都需要非常巨大的资源而且必须拥有一些难于获取的已知信息,往往在现实上不可能实现,但是软磨硬泡攻击却非常容易实现。抗击软磨硬泡攻击并没有最好途径,只能给一个伪密钥或者让由于加密中运用了大量的混淆扩散和加上语义信息的高度冗余,现代密码体制中的分组密码或者流密码体制中若采用错误密钥进行解密的时候往往得到的是没有意义的乱码,可以被排除。虽然大量的密钥中存在伪密钥,可以解密出有意义的伪“明文”来,但是密码分析者对于大部分伪明文可能根据已经知道的信息和接受发送双方的情况来判断它们不是真正的明文。实际上能够让密码分析者考虑的伪密钥非常少。这导致密码分析者非常相信能够解密得到有实际意义和符合通信语境的“明文”的密钥,实际上一个密钥如果符合上述条件,它是真正密钥的概率非常大。在软磨硬泡攻击情形下,给出的密钥对于密码分析者具有可信性,因为密钥持有者想要伪造一个符合通信语境,可以被密码分析者信赖的伪密钥非常困难,而且在被劫持等情形中,很短时间内没有计算设备的情况下他无法计算出来。为了能够很容易找到伪密钥,并且能够有意误导密码分析者,有必要加密时对于文件内容予以识别并且以语言的字、词等结构为在一般的特别是现代密码分析中,普遍认定密钥是唯一需要保密的信息,也就是说密码系的一个基本假设,这个假设就是秘密必须全寓于密钥中,且Kerckhoffs假设密码分析者已有密码算法及其实现的全部详细资料。密码分析也普遍以密钥未知情况下推算密钥、解密出明文、获取密钥和明文信息等为目标,而密码算法设计正是在充分考虑已有的密码分析的基础上进行的,但是这些具有很高安全性的算法对于软磨硬泡这样的攻击根本没有办法。在密码系统中密钥是一个关键,而且密钥的截获就意味着它加密的所有密文都被攻破,在这里另辟蹊径,研究如何使得密码体制可以很容易地利用可以信赖的伪密钥来误导密码分析者,同时,即使密码分析者知道可能被误导的问题,他也不能够再相信软磨硬泡的攻击或者行贿获取密钥的可靠性。此外即使他具有巨大的计算能力可以得到的有实际意义和符合语境的明文,由于这样的明文非常多而且意义相似或者相反,他也将很迷惑而不能决定是否是真正明文。在此给出密钥可信度的概念,它是衡量一个密码系统中在软磨硬泡等攻击中密钥可能泄漏语言的冗余度、伪密钥数量及其比例、密码体制的明文遍历率、语义遍历程度和相关概率、伪明文消息集合与先验消息集合的一致度等。加密解密方式、语言特点和语境(密码分析者的先验信息)等也同密钥可信度密切相关。实际中的可信度还与现实中的可以运用的计算能力以及时间限制有关系。密钥可信度越低,密码体制的安全性越高。密钥可信度和新加密方式的提出并不违背密码学的思想,并不是一种钻牛角尖,在现代密码学中的一些分析如选择明文分析等等都是以密码机被缴获并且密钥来不及销毁等特殊情况为背景的,而且一些密码分析方法需要很多的明文密文对,它们的背景也主要针对这样的情形。实际上密钥持有者被截获和被收买的可能性远远大于密码机被缴获且密钥没有被销毁的情况,而且密钥被截获后明文就轻易被解密,而密码机被缴获的情形下还需要具有足够的计算能力以此外,在密钥的分配和管理等环节中往往也难于保证密钥的安全,在加密、解密等情况下如果磁盘等媒体中的密钥信息没有被多次覆盖而导致密钥信息的存留也可能导致密钥泄漏。如果能够用伪密钥作为诱饵,则可以误导密码分析者。即使密码分析者知道可能是伪密钥,他也迷惑于不知道密钥的真伪,所以也不知道解密明文的真伪。由此可见对于密钥可信度以及相应的密码体制研究与设计具有重大意义。在此给出密钥可信度的概念,它是衡量一个密码系统中在软磨硬泡等攻击中密钥可能泄漏语言的冗余度、伪密钥数量、伪明文消息集合与先验消息集合的一致度等。加密解密方式、语言特点和语境(密码分析者的先验信息)等同密钥可信度密切相关。实际中的可信度还与现实中的可以运用的计算能力以及时间限制有关系。密钥可信度越低,密码体制的安全性越高。在文献中[1]中,提出了采用类似完形选择题加密方式,加密时候把关键词替换成为一个扩充项,扩充项把许多相近、相对的关键词放在一起,用标号加以标记,正确的选择项给予正确的标号,解密时进行运算判断哪个选择项是真正的关键词。显然这样的加密具有上述的迷惑和误导作用,并且很容易寻找到伪密钥,具有密钥可信度低的优点。密钥可信度和新加密方式的提出并不违背密码学的思想,并不是一种钻牛角尖,在现代密码学中的一些分析如选择明文分析等等都是以密码机被缴获并且密钥来不及销毁为背景的,而且一些密码分析方法需要很多的明文密文对,它们的背景也主要针对这样的情形。实际上密钥持有者被截获和被收买的可能性远远大于密码机被缴获且密钥没有被销毁的情况,而且密钥被截获后明文就轻易被解密,而密码机被缴获的情形下还需要具有足够的计算能力以及运用密码分析方法。此外,在密钥的分配和管理等环节中往往也难于保证密钥的安全,在加密、解密等情况下如果磁盘等媒体中的密钥信息没有被多次覆盖而导致密钥信息的存留也可能导致密钥泄他也迷惑于不知道密钥的真伪,所以也不知道解密明文的真伪。由此可见对于密钥可信度以及相应的密码体制研究与设计具有重大意义。2.基于迷惑与误导的加密(内层加密)在进行本层加密时,对句子语法结构、语义等进行分析,找到数据库中已定义的关键词,象编完形填空中的选择题一样,根据数据库的设置把和这些关键词类似的词嵌入到该词的前后,并且对于每个“选项”根据子密钥打上不同标号,如对于“是”可以增加不是、可能是、很可能是、不大可能是等等选项并加上标号(可以认为标号是类似于选择题中A、B、C、D这样的选项标识如果子密钥不同,解密时候就会根据子密钥与标号的关系选择一个正确的关键词,考虑到序列安全性需要应用密码算法或者类似函数来生成。根据上述方法进行的加密我们称为基于迷惑与误导的加密,考虑到明文消息的存在形式可能是输入的消息,也可能是一种格式的文档,如文本文档和word文档。首先,如果如果是关键词就在输出时进行一个扩充项的替换,并且跳过关键词,继续扫描后边的字;如果不构成关键词就直接输出,并且扫描下一个字。=由于自然语言处理的复杂性,为了简化加密过程,采用比较简单的关键词判定规则。关键词的判断方法如下:对于扫描的字,首先判断关键词数据库中是否有这个字为首的关键词,其中分两种情形:第一,若关键词数据库中没有这个字为首的关键词,就判定该字不会构成关键词,就把这个字作为加密变换的输出,并且继续扫描下边一个字;第二,若有这个字为首的关键词,把这个字和它后边的几个字一起读出来,查询这个字以及后边的几个字是否构成对应在数据库中的关键词,也分为两种情形:其一,若没有,就判定为不构成关键词,把该字作为加将关键词的判定规则存放在一个关键词判定规则数据库中,实际应用中可以将此数据库和关键词数据库合并起来,会减少系统复杂性。在此设计的判定规则是比较关键词前后的字词,符合一定规则可以判定不是关键词或者必须符合一定规则才能作为关键词,如当“中华”后边存在“人民共和国”则中华就不是关键词,可以把“中华人民共和国”作为关键词,所以当以一个字为首的词构成两个以上的关键词的时候,一般需要以较长的关键词为真正关键词,但是实际中有可能存在极少数需要根据上下文判定哪个是关键词的情况在此忽略,再如当“是”后边存为密文,然后扫描下一个字;如果是真正的关键词,输出就不是关键词本身而要进行一个关键词对应的扩充项(扩充项的标号需要根据密钥进行运算),由于自然语言的复杂性,处理过程中不可避免存在误判的可能,这导致了有些密钥可以通过分析被排除,且一些信息被泄漏,但是由于密钥量非常大,排除一部分依然是可以保证存在有意义的伪密钥的。如果有产生足够长的真随机数并且具有进行保密传送的条件可以采取一次达到预定的误导作用。本文主要是针对中文而言,对于英文等外语需要根据其特点来设计判定方式和规则,方法类似但是需要有变动。扫描的字是否在关键词数据库中存在否输出上该字作为密文并扫描下一个字是库中是一个关键词否判断关键词是否符合真正意义的关键词的否输出上该字作为密文并扫描下一个字选择长的词作为真正把它作为真正关键词为了便于解密,需要对于扩充项、选择项和标号加以标记和区分,可选择4个在中文中不出现的符号分别作为扩充项的起始标记和结束标记、选择项标号的起始标记和结束标记。扩充项的处理过程如下:当遇到某个关键词如“今天”并且在数据库中查实它是关键词,那么就根据数据库的数据,将与之相关的明天、今天、后天、昨天、前天等作为一个扩充项,为了便于解密,需要对于扩充项和每一个其中的关键词用标号加以标记,进行标记后形成一个完整的扩()给出答案的序列,就可以恢复正确的答案。在数据库中,对于正确的关键词今天,已经定义了需要根据密钥进行重新标记,然后在将扩充项填充到原来正确关键词的位置。在扩充项中为了便于解密还要在关键词的前后增加相应的起始标记,所有的起始标记都是一致的,而且起始标记可以采用明文中不出现的符号。如采用在明文中可能出现的符号,则需要进行一定的处理。扩充项的结构如下:扩充项起始标记+第一个选择项标号起始标记+第一个选择项标号+第一个选择项标号结束标记+第一个选择项选择项+第二个选择项标号起始标记+第二个选择项标号+第二个选择项标号结束标记+第二个选择项选择项+…+扩充项结束标记(其中+仅仅表数据库中,相关的一些关键词互相对其中的一个关键词进行扩充,他们的按照一个固定的顺序排列,根据它们的总数目进行标号:数目为N的一组用0至N-1的标号进行标记。比如对于明天、今天、后天、昨天和前天这几个关键词,首先确定一个顺序,可以依次是明天、今标记前天。如当今天作为关键词的时候,将这些标号相应为了让正确项与密钥相关,在加密时候对扩充项的选择项(关键词)的标号进行处理。为可以根据流密码和分组密码生成的伪随机数据序列将根据一定长度进行截取,把数据序列划分为数据段组成的序列。明文中有许多关键词,加密时根据扩充项中所有组中关键词(选择项)最多的一组的关键词数目来确定一个对于密钥流的截取长度。在进行加密的时候,遇到第一个关键词的时候,利用密钥流的第一个截取下来的密钥流数据段(比如为137假设这个关键词对应的扩充项中选择项的数目为n,对于截取的数据段作取模n的运算,比如一个扩充项有5前天。遇到第二个关键词时候,将用第二个数据段来进行处理,依此类推。解密时每遇到一个扩充项的标记,就计算出密钥流序列中相应的数据段,进行取模运算,得到的数据用来依次比较在选择起始标记之间的每一个标号数据,直到找到相同的标号数据。将他后边的选择项剥离出来作为该段对应的明文,其他的选择项以及所有的标记则去掉。流密码的产生方式可以采用流密码算法,由于分组密码具有良好的伪随机性,也可以采用分组密码算法来实现,如密码反馈模式可以实现自同步流密码,输出反馈模式可以将分组密码用于同步流密码等。为了方便程序中实现,我们采用简化的密码分组链接模式。在密码分组链接(CBC)模式中,明文被加密之前要与前面的密文进行异或运算。第一个分组明文被加密后,其结果也被存在反馈寄存器中,在下一明文分组加密之前,它将与反馈寄存器进行异或作为下一次加密的输入,其结果又被存进反馈寄存器,再与下一分组明文进行异或,如此这般直到消息结束。每一分组的加密都依赖于所有前面的分组。为了方便程序中实现,在这里采用的是简

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论