安全数据库系统.doc_第1页
安全数据库系统.doc_第2页
安全数据库系统.doc_第3页
安全数据库系统.doc_第4页
安全数据库系统.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

信息安全综合实践设计报告题 目: 安全数据库系统 姓 名: 班级学号: 指导教师: 完成日期: 一、设计任务与要求功能要求:(1)数据库的数据要进行加密;(2)数据库的完整性要进行保护; (3)保证密钥的安全性。课程设计按指导书要求,综合应用所学的网络安全知识解决实际问题,并进行理论分析,依据合理关系进行设计。功能实用性、界面友好、方便用户操作。本次课程设计是设计实现一个安全的数据库系统,对数据库进行数字签名保证完整性,数据加密保证隐秘性。主要功能:(1)数据库的数据要进行加密;(2)对数据库的完整性进行保护;(3)防止用户根据部分密文明文对,恢复数据库总密钥;(4)数据采用一个密钥以某种形式衍生子密钥进行加密;(5)保证密钥的安全性。二、可行性研究报告 主要内容:1.全面深入地进行市场分析、预测。调查和预测拟建项目产品在国内、国际市场的供需情况和销售价格;研究产品的目标市场,分析市场占有率;研究确定市场,主要是产品竞争对手和自身竞争力的优势、劣势,以及产品的营销策略,并研究确定主要市场风险和风险程度。2.对资源开发项目要深入研究确定资源的可利用量,资源的自然品质,资源的赋存条件和开发利用价值。3.深入进行项目建设方案设计,包括:项目的建设规模与产品方案、工程选址、工艺技术方案和主要设备方案、主要原/辅助材料、环境影响问题、项目建成投产及生产经营的组织机构与人力资源配置、项目进度计划、所需投资进行详细估算、融资分析、财务分析、国民经济评价、社会评价、项目不确定性分析、风险分析、综合评价等等。三、系统设计数据库的建表:创建了两个数据库,分别放在两个不同的服务器。一个为存放在本地主机的数据库simple,该库里存放着六个表:activity,customer,emp,note,opertunity,product。用以管理员工,客户,产品,销售情况和活动等信息。Table activity:记录了为了某个销售事件所做的一系列活动,包获了活动的日期,活动的内容。Table customer:公司客户的详细资料,如客户名称,客户经理,客户所在地址以及电话。Table emp:记录了公司员工的具体信息,如员工用户名,员工职位,员工薪酬,员工提成,员工权限(与职位有关),员工用户密码,员工生日,员工性别和员工电话。Table note: 记录员工的日志内容,加密后存放在数据库,只有掌握了密钥的用户才能解密,同时用了MD5算法保证了数据完整性,假如数据被人篡改,可以马上发现。表里记录了员工ID,日志日期,日志内容和每次对该日志加密后的MD5。Table opertunity: 记录了某位员工给某位客户销售某个产品期间的事件记录,包括有产品的名字,这次销售出该产品的销售额,赢率,花费的时间的开始和结束。Table product: 记录了公司的产品名称,类型以及它的竞争产品。另外一个数据库为密钥数据库,存放着每个用户的初始密码。Table mikey: 记录了用户的ID号和密钥。本地数据库的主键和外键Table activity:主键为actID,外键为optID,Table customer:主键为cusIDTable emp:主键为empIDTable note:主键为id, 外键为empIDable opertunity:主键为optID,外键为cusID,empID,proIDTable product: 主键为proID虚拟机数据库的主键和外键Table mikey:主键为id,外键为empID.四、系统实现AES加密模块算法简述最常用的对称密码算法是数据加密标准(DES) 算法,但其主要问题是密钥长度较短,已不适合于当今分布式开放网络对数据加密安全性的要求。故我们选择了新的对称加密算法AES来作为我们数据安全性的保障。AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。AES加密有很多轮的重复和变换。大致步骤如下:1、密钥扩展(KeyExpansion),2、初始轮(Initial Round),3、重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(Final Round),最终轮没有MixColumns。本次我们设计的系统 采用256位ECB模式的AES算法。1. AES加密ECB模式的优点ECB模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。 相对来说,它 1.简单;2.有利于并行计算;3.误差不会被传送;数据完整性保证模块1. 本系统利用MD5机制实现数据完整性保证。客户端用户名和口令日志内容MD5散列值 比较 结果随机数数据库中的散列值散列值 上传的散列值2. 原理一个 MD5 校验和(checksum)通过对接收的传输数据执行散列运算来检查数据的正确性。计算出的散列值拿来和随数据传输的散列值比较。如果两个值相同,说明传输的数据完整无误、没有被窜改过(前提是散列值没有被窜改),从而可以放心使用。3. 作用如用户在我们的系统数据中心存放了个文件,该文件使用MD5校验,校验码存储在数据库中,待用户下次需要查看该文件的数据时,再次用MD5生成校验摘要,并取之与原校验码比较,若相同,则认为数据未被篡改;若不同,则说明数据已被破坏。密钥管理模块1) 本系统参考kerberos认证协议,采用其变形,引入第三方身份认证方来管理密钥的安全分配。2) 原理结构图数据中心身份证明中心用户密钥中心 3) 密钥分配步骤说明l 用户向身份认证中心发送身份认证凭证,包括其注册的用户名和口令,以请求设定日志密钥的权限。l 身份认证中心在其数据库中核对用户身份后,将相应的获取密钥凭证发给密钥中心。l 密钥中心收录用户的隐私日志设定凭证后,返回确认给用户。l 用户收到密钥中心的确认后将自己设定的新密钥发给密钥中心,密钥中心的key数据库存储其新密码。l 用户用新密钥获得访问数据中心的权限,并提交数据访问请求。l 数据中心提供用户所需数据给用户。4) 第三方设计说明由于本系统设计资源条件的限制,没有配给完整密钥设定凭证加载服务功能,所以,需要有管理员人工操作。管理员在得到数据中心的新注册人员名单后,人工将分配的凭证加载到密钥中心数据库中。5) 优势说明首先,根据第三方证明身份后获取修改密钥日志的权限能保证密钥中心的访问安全。其次,我们的管理机制保证了后台管理员本身并不知道用户的真实日志密钥,保障了用户的阴私。同时,管理员在一定的许可下,可以访问密钥库。这样如果用户忘记自己的密钥,本系统还提供了通过管理员查询密钥的功能。界面设计超级用户界面:标题栏设置六个按钮,分别是“业务信息”,“员工管理”,“产品管理”,“客户管理”,“退出”。业务信息:可以看到每次订单事件的具体信息,包括客户名,产品,业务员,订单名称,订单金额,赢率,签单日期,活动。员工管理:可以看到所有员工的具体信息,包括员工姓名,职位,基本工资,奖金,生日,性别,电话和编辑,点击编辑按钮可以编辑职位,基本工资,奖金等信息。产品管理:可以看到产品名字,产品介绍,竞争对手产品,同时可以新建产品。客户管理:可以看到客户名字,客户经理,客户地址,客户电话,同时可以新建客户资料。退出:从当前用户退出。普通用户界面:标题栏设置六个按钮,分别是“查看个人信息”,“编辑个人信息”,“编辑业务”,“个人日志”,“密钥管理”,“退出”。查看个人信息:可以看到用户的名字,性别,出生日期,联系方式,基本工资,奖金和职位。对于刚注册的新用户,基本工资,奖金和职位都没有记录,必须通过超级用户的经理进行编辑录入,其他个人信息可以通过按钮“编辑个人信息”跳到合适页面进行修改。编辑个人信息:对个人的性别,出生日期,联系方式进行修改。编辑业务:对之前个人做的订单事件进行查看,如发现错误可以对单子金额,签单时间,赢率等信息进行修改。同时可以新建业务信息。个人日志:用户的个人日志,以密文显示,每次需要解密查看。同时可以通过MD5查看数据有没有被篡改。密钥管理:每个用户都会得到一个初始密钥,用户可以对此进行修改。退出:从当前用户退出。详细设计本系统采用XAMPP软件包开发的。它是一个功能强大的Apache+MySQL+PHP+PERL软件站集成软件包。它可以在Windows、Linux、Solaris三种操作系统下安装使用。本系统是在Windows下使用的。具体采用PHP语言编写功能和界面,用mysql构基础数据库。 AES加解密模块AES加密模块先要获得AES加密的密钥,密钥放在虚拟机的服务器的数据库。if (isset($_POSTsubmit) / post接收传来的数据 /连接密钥数据库,得到密钥key $dbc1 = mysqli_connect(DB_HOST1, DB_USER1, DB_PASSWORD1, DB_NAME1); mysqli_query($dbc1,set names utf-8); $query=select key from key where empId = . $_SESSIONempId . ; $data= mysqli_query($dbc1,$query); if (mysqli_num_rows($data) = 1) $row = mysqli_fetch_array($data); $key=$rowkey; else echo 密钥获取失败; mysqli_close ($dbc1); /连接存放日志的本地数据库,对明文进行加密 $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); mysqli_query($dbc,set names utf-8); $NoteEvent = trim($_POSTNoteEvent); $NoteDate = mysqli_real_escape_string($dbc, trim($_POSTNoteDate); $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $NoteEvent, MCRYPT_MODE_ECB, $iv);/加密明文; $MD5=md5($crypttext) $error = false; /更新数据库里的数据 if (!$error) if ( !empty($NoteEvent) & !empty($NoteDate) & !empty($MD5) $query=insert into note(empId,note,noteday,md5) values ( . $_SESSIONempId . ,$crypttext,$NoteDate,$MD5);$data = mysqli_query($dbc, $query); / 确认更新成功 echo 你的日志信息更新成功.你是否想查看你的日志?; mysqli_close($dbc); exit(); else echo 你必须完整填完数据!返回; mysqli_close($dbc);exit(); AES解密模块/ 从数据库获取密钥信息的数据 $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); /连接密钥数据库; $dbc1 = mysqli_connect(DB_HOST1, DB_USER1, DB_PASSWORD1, DB_NAME1); mysqli_query($dbc1,set names utf-8); $query=select key from key where empId = . $_SESSIONempId . ; $data= mysqli_query($dbc1,$query); if (mysqli_num_rows($data) = 1) $row = mysqli_fetch_array($data); $key=$rowkey; else echo 密钥获取失败; mysqli_close($dbc1); /连接日志数据库/ $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); mysqli_query($dbc,set names utf-8); $query = SELECT note,noteday,md5 FROM note WHERE empId = . $_SESSIONempId . ; $data = mysqli_query($dbc, $query); if (isset($_POSTsubmit) while ($row = mysqli_fetch_array($data) echo ; if (!empty($rownoteday) echo 日志编写日期 . $rownoteday . ; else echo 日志编写日期:未知!; if(!empty($rownote) $text = mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $key, $rownote, MCRYPT_MODE_ECB, $iv);/解密密文; echo 日志内容: . $rownote.解密日志: .$text.;else echo 日志内容还没有编辑日志!; mysqli_close($dbc); exit(); 完整性保证模块对日志明文加密后的MD5函数 $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $NoteEvent, MCRYPT_MODE_ECB, $iv);/加密明文; $MD5=md5($crypttext);对加密后的密文进行完整性检验/取得密钥后,对密文进行解密。到本地数据库里查询MD5是否与原来的MD5相同。$query = SELECT note,noteday,md5 FROM note WHERE empId = . $_SESSIONempId . ; $data = mysqli_query($dbc, $query); if (isset($_POSTsubmit) while ($row = mysqli_fetch_array($data) echo ; if(!empty($rownote) $text = mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $key, $rownote, MCRYPT_MODE_ECB, $iv);/解密密文; echo 日志内容: . $rownote.解密日志: .$text.; if(!empty($rowmd5) $MD5=md5($rownote); if($MD5 = $rowmd5) echo MD5值相同: . $rowmd5 . 日志没有被篡改 ; echo -;else echo MD5值:还没有完整性控制!./n; echo ;密钥安全管理模块1密钥保存在第三方密钥数据库和数据数据库并不保存在同一个服务器上,而是分布在两个服务器的Mysql上,拥有不同的用户名和密码,更有利于数据保护。在connectvars.php中定义了两个数据库的用户名,密码,端口和数据库名称。2给每个用户初始化一个密码,由数据库管理员分配,由于表里已经内置好了三个用户,所以需要在table key插入三个密钥。表的结构 keyCREATE TABLE key ( id int(10) NOT NULL AUTO_INCREMENT, empId int(10) unsigned NOT NULL, key char(32) DEFAULT NULL, PRIMARY KEY (id) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8转存表中的数据 keyINSERT INTO key (id, empid, mikey) VALUES(1,1,”This is a key”),(2,2,”123456”),(3,3,”monkey”);3.用户在密钥管理页面可以修改自己的密钥。/ 连接数据库 $dbc = mysqli_connect(DB_HOST1, DB_USER1, DB_PASSWORD1, DB_NAME1) OR die (Could not connect to MySQL: . mysqli_connect_error() ); mysqli_query($dbc,set names utf-8); if (isset($_POSTsubmit) / post接收传来的数据 $key = trim($_POSTkey); error = false; /更新数据库里的数据 if (!$error) if ( !empty($key) ) $query=update simple.key set key=$key where empId= . $_SESSIONempId . ;$data = mysqli_query($dbc, $query); / 确认更新成功 echo 你的密码信息更新成功?; mysqli_close($dbc); exit(); else echo 你必须重新填写密码!返回;exit(); mysqli_close($dbc);? form enctype=multipart/form-data method=post action= 密码管理 密码设置: input type=text id=key name=key value= / 数据库设计表的结构 activity-CREATE TABLE IF NOT EXISTS activity ( actID int(32) unsigned NOT NULL AUTO_INCREMENT, optID int(32) unsigned NOT NULL, actDate date NOT NULL, actCusPosition varchar(32) NOT NULL, actEvent text NOT NULL, PRIMARY KEY (actID), KEY optID (optID) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;- 转存表中的数据 activityINSERT INTO activity (actID, optID, actDate, actCusPosition, actEvent) VALUES(11, 20, 1021-02-01, 总监, 飞机),(12, 20, 1021-02-02, 总监, 吃法),(13, 16, 0000-00-00, , );- - 表的结构 customerCREATE TABLE IF NOT EXISTS customer ( cusID int(10) unsigned NOT NULL AUTO_INCREMENT, cusName varchar(32) DEFAULT NULL, cusMGR varchar(32) DEFAULT NULL, cusAddr varchar(50) DEFAULT NULL, cusPhone bigint(15) DEFAULT NULL, PRIMARY KEY (cusID) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;- 转存表中的数据 customerINSERT INTO customer (cusID, cusName, cusMGR, cusAddr, cusPhone) VALUES(2, huawei, zhang, nanjing, 1355544393),(3, zhongxing, shen, zhejiang, 1388884393),(4, 微软, Jhon, 江苏大学,;- - 表的结构 empCREATE TABLE IF NOT EXISTS emp ( empId int(10) unsigned NOT NULL AUTO_INCREMENT, empName varchar(32) NOT NULL DEFAULT , empPosition enum(M,S) DEFAULT NULL, empSalary decimal(9,2) DEFAULT NULL, empReward decimal(9,2) DEFAULT NULL, empLevel tinyint(1) DEFAULT NULL, empPassword varchar(40) DEFAULT NULL, empBirthday date DEFAULT NULL, empGender enum(M,W) DEFAULT NULL, empPhone bigint(15) DEFAULT NULL, PRIMARY KEY (empId) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;- 转存表中的数据 empINSERT INTO emp (empId, empName, empPosition, empSalary, empReward, empLevel, empPassword, empBirthday, empGender, empPhone) VALUES(1, simple, S, 4000.00, 4000.00, 0, dc76e9f0c0006e8f919e0c515c66dbba3982f785, 1945-12-03, M,,(2, manage, M, NULL, NULL, 1, dc76e9f0c0006e8f919e0c515c66dbba3982f785, 2012-08-28, M,,(3, kevin, S, 4000.00, 4000.00, 0, dc76e9f0c0006e8f919e0c515c66dbba3982f785, 1978-03-02, M,,- 表的结构 noteCREATE TABLE IF NOT EXISTS note ( id int(10) NOT NULL AUTO_INCREMENT, empId int(10) unsigned NOT NULL, note text, noteday date DEFAULT NULL, md5 char(32) DEFAULT NULL, PRIMARY KEY (id) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=41 ;- 转存表中的数据 noteINSERT INTO note (id, empId, note, noteday, md5) VALUES (1,1,Ru$d8Hu2D8#s,2012-12-30,dca81ffdc4e63b3aeac41ce602da1ce6),(2,1,/|O$C;Fn,2012-12-03,3d3e65c58a4e5aecf76026f9851ad930);- 表的结构 opertunityCREATE TABLE IF NOT EXISTS opertunity ( optId int(10) unsigned NOT NULL AUTO_INCREMENT, optName varchar(32) NOT NULL, cusId int(10) unsigned NOT NULL, empId int(10) unsigned NOT NULL, proId int(10) unsigned NOT NULL, optDealSize decimal(32,2) NOT NULL, optWinRate float NOT NULL, optCloseDate date NOT NULL, PRIMARY KEY (optId), KEY cusID (cusId), KEY empID (empId), KEY proID (proId) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;- 转存表中的数据 opertunityINSERT INTO opertunity (optId, optName, cusId, empId, proId, optDealSize, optWinRate, optCloseDate) VALUES(16, 交换机, 3, 1, 2, 121232.00, 0.655, 1991-09-13),(20, 平板, 3, 3, 2, 1000098.00, 0.6, 2012-02-04);- 表的结构 productCREATE TABLE IF NOT EXISTS product ( proID int(10) unsigned NOT NULL AUTO_INCREMENT, proName varchar(32) DEFAULT NULL, proType varchar(32) DEFAULT NULL, proCompetitor varchar(32) DEFAULT NULL, PRIMARY KEY (proID) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;- 转存表中的数据 productINSERT INTO product (proID, proName, proType, proCompetitor) VALUES(1, switch, chang net, 思科),(2, phone, chang net, 小米),(3, pad, 平板, ipad);- 限制导出的表- 限制表 activityALTER TABLE activity ADD CONSTRAINT activity_ibfk_1

温馨提示

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

评论

0/150

提交评论