用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
pooryaya的公告
<!--图标开始--> <iframe width=170 height=125 frameborder=0 scrolling=no src="http://blog.csdn.net/images/blog_csdn_net/pooryaya/45480/o_1.jpg"> </iframe> <!--图标结束--> <p></p> <!--名字开始--> About Me <p></p> <td colspan="2" class="context"> Name:<font size=2><a id="Header1_HeaderTitle" class="headermaintitle" href="http://blog.csdn.net/pooryaya/">桔子</a></font> <b><p>Mail:<font size=1><a id="Header1_HeaderTitle" class="headermaintitle" href="mailto:pooryaya@163.com">pooryaya@163.com</a></font></b></p> </td> <!--名字结束--> <!-- Blog日历表开始 --> Calendar <script language="javascript"> var diarydays="<2004-07-19><2004-07-18><2004-07-16><2004-07-15><2004-07-14><2004-07-13><2004-07-12><2004-07-11><2004-07-10><2004-07-09><2004-07-08><2004-07-06><2004-07-05><2004-07-04><2004-07-03><2004-07-02><2004-07-01><2004-06-30><2004-06-27><2004-06-26>"; </script> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <style> .calendarBigBorder { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; text-decoration: none; width: 170; background-color: #FFFFFF; font-size: 9pt;border:1px dotted #999; } .calendarTd { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #000000; background-color: #eeeeee; height: 18px; width: 11%; text-align: center;} .calendarMInput { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; text-decoration: none; background-color: #FFFFFF; height: 15px; border: 1px solid #666666; width: 19px; color: #0099FF;} .calendarYInput { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #0099FF; text-decoration: none; background-color: #FFFFFF; height: 15px; width: 34px; border: 1px solid #666666;} .calendarMonthTitle { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; font-weight: normal; height: 24px; text-align: center; color: #333333; text-decoration: none; background-color: #eeeeee; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-bottom-style: none; border-top-color: #999999; border-right-color: #999999; border-bottom-color: #999999; border-left-color: #999999;} .calendarNow { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; font-weight: bold; color: #000000; background-color: #C0C9D3; height: 18px; text-align: center;} .calendarDaySat { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #333333; text-decoration: none; background-color: #eeeeee; text-align: center; height: 18px; width: 12%;} .calendarDaySun { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #333333; text-decoration: none; background-color: #eeeeee; text-align: center; height: 18px; width: 12%;} .calendarLink { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; font-weight: normal; color: #333333; text-decoration: none; background-color: #E7E7F6; text-align: center; height: 18px;} .categoryTxt { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; line-height: 23px; color: #333333; text-decoration: none;} .categoryTable { border-right-width: 1px; border-bottom-width: 1px; border-right-style: solid; border-bottom-style: solid; border-left-style: none; border-right-color: #000000; border-bottom-color: #000000; border-top-width: 1px; border-top-style: solid; border-top-color: #71b99c;} </style> <SCRIPT LANGUAGE="JavaScript"> var months = new Array("一", "二", "三","四", "五", "六", "七", "八", "九","十", "十一", "十二"); var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31); var days = new Array("日","一", "二", "三","四", "五", "六"); var classTemp; var calendarHover="calendarHover"; var today=new getToday(); var year=today.year; var month=today.month; var newCal; //得到某月天数 function getDays(month, year) { if (1 == month) return ((0 == year % 4) && (0 != (year % 100))) ||(0 == year % 400) ? 29 : 28; else return daysInMonth[month]; } //得到当天时间信息 function getToday() { this.now = new Date(); this.year = this.now.getFullYear(); this.month = this.now.getMonth(); this.day = this.now.getDate(); } //生成日历 function Calendar() { newCal = new Date(year,month,1); //当前月的第一天 today = new getToday(); var day = -1; //用来判断日历中是否为当天 var startDay = newCal.getDay(); //当月开始时间 var endDay=getDays(newCal.getMonth(), newCal.getFullYear());//当月结束时间 var daily = 0; //用来生成日历中的天数值 if ((today.year == newCal.getFullYear()) &&(today.month == newCal.getMonth())) day = today.day; var caltable = document.all.caltable.tBodies.calendar; //得到日历表格的集合 var intDaysInMonth =getDays(newCal.getMonth(), newCal.getFullYear()); //得到当月天数 //生成日历 for (var intWeek = 0; intWeek < caltable.rows.length;intWeek++) for (var intDay = 0;intDay < caltable.rows[intWeek].cells.length;intDay++) { var cell = caltable.rows[intWeek].cells[intDay]; //得到单元袼 //生成字符串用于判断当天是否有日志 var montemp=(newCal.getMonth()+1)<10?("0"+(newCal.getMonth()+1)):(newCal.getMonth()+1); if ((intDay == startDay) && (0 == daily)){ daily = 1;} var daytemp=daily<10?("0"+daily):(daily); var d="<"+newCal.getFullYear()+"-"+montemp+"-"+daytemp+">"; //选择样式 if(day==daily) cell.className="calendarNow"; else if(diarydays.indexOf(d)!=-1) cell.className="calendarLink"; else if(intDay==6) cell.className = "calendarDaySat"; else if (intDay==0) cell.className ="calendarDaySun"; else cell.className="calendarTd"; //生成值 if ((daily > 0) && (daily <= intDaysInMonth)) { cell.innerText = daily; daily++; } else cell.innerText = ""; } document.all.year.value=year; document.all.month.value=month+1; } function subMonth() { if ((month-1)<0) { month=11; year=year-1; } else { month=month-1; } Calendar(); } function addMonth() { if((month+1)>11) { month=0; year=year+1; } else { month=month+1; } Calendar(); } //得到响应事件 function getDiary() { var mon=(newCal.getMonth()+1)<10?("0"+(newCal.getMonth()+1)):(newCal.getMonth()+1); var day=event.srcElement.innerText<10?("0"+event.srcElement.innerText):(event.srcElement.innerText); var d="<"+newCal.getFullYear()+"-"+mon+"-"+day+">"; if ("TD" == event.srcElement.tagName) if (("" != event.srcElement.innerText)&&(diarydays.indexOf(d)!=-1)) { diary.location="/stdotleo/archive/"+newCal.getFullYear()+"/"+mon+"/"+day+".aspx"; window.location.href = diary.location; } } function setDate() { if (document.all.month.value<1||document.all.month.value>12) { alert("月的有效范围在1-12之间!"); return; } year=Math.ceil(document.all.year.value); month=Math.ceil(document.all.month.value-1); Calendar(); } </SCRIPT> <table border="0" cellpadding="0" cellspacing="1" class="calendarBigBorder" id="caltable" width="200"> <thead> <tr align="center" valign="middle"> <td colspan="7" class="calendarMonthTitle"> <input name="year" type="text" class="calendarYInput" size="3" maxlength="4" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" onpaste="this.value=this.value.replace(/[^0-9]/g,'')">年 <input name="month" type="text" class="calendarMInput" size="1" maxlength="2" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" onpaste="this.value=this.value.replace(/[^0-9]/g,'')">月 [<a onClick="addMonth()" href="javascript:;">下月</a>] [<a onClick="subMonth()" href="javascript:;">上月</a>]</td> </tr> <tr align="center" valign="middle"> <SCRIPT LANGUAGE="JavaScript"> document.write("<TD class=calendarDaySun id=diary>" + days[0] + "</TD>"); for (var intLoop = 1; intLoop < days.length-1; intLoop++) document.write("<TD class=calendarTd id=diary>" + days[intLoop] + "</TD>"); document.write("<TD class=calendarDaySat id=diary>" + days[intLoop] + "</TD>"); </SCRIPT> </TR> </thead> <TBODY border=1 cellspacing="0" cellpadding="0" ID="calendar" ALIGN=CENTER ONCLICK="getDiary()" onmouseup=document.selection.empty() oncontextmenu="return false" onselectstart="return false" ondragstart="return false" onbeforecopy="return false" oncopy=document.selection.empty() onselect=document.selection.empty()> <SCRIPT LANGUAGE="JavaScript"> for (var intWeeks = 0; intWeeks < 6; intWeeks++) { document.write("<TR style='cursor:hand'>"); for (var intDays = 0; intDays < days.length;intDays++) document.write("<TD class=calendarTd onMouseover='{classTemp=this.className;this.className=calendarHover}' onMouseOut='this.className=classTemp'></TD>"); document.write("</TR>"); } </SCRIPT> </tbody> </table> <script LANGUAGE="JavaScript"> Calendar(); </script> <!-- Blog日历表结束 --> <p></p> <!--天气预报开始--> Weather Forecast <iframe width=170 height=240 frameborder=0 scrolling=NO src="http://appnews.qq.com/cgi-bin/news_qq_search?city="乌鲁木齐""> </iframe> <!--天气预报结束-->
文章分类
刀网收藏
123名刀收藏网
QBQ俱乐部
中国百兵斋
刀友
贾松卖刀
技术支持
CSDN
CSDN技术支持
朋友站点
IT创业园
何志丹
博客园
活码软件有限公司
猫言猫语
玻璃雨
网址收藏
2003震撼人心的照片
ASP3000
IT项目交易网
POPC
SonicChat 论坛
中国站长
代码中国
大学同学录
天涯社区
天空软件站
我去听音乐网
景象图片
源码之家
素材精品屋
闪吧
高中同学录
存档

原创  加密文件系统 收藏

    加密文件系统 (EFS) 是 Windows 2000、Windows XP Professional 和 Windows Server 2003 的 NTFS 文件系统的一个组件。(Windows XP Home 不包含 EFS。)EFS 采用高级的标准加密算法实现透明的文件加密和解密。任何不拥有合适密钥的个人或者程序都不能读取加密数据。即便是物理拥有驻留加密文件的计算机,加密文件仍然受到保护。甚至是有权访问计算机及其文件系统的用户,也无法读取这些数据。还应该采取其他防御策略,加密这种解决方法不是解决每种威胁的恰当对策,加密只是其他防御策略之外的又一种有力措施。EFS 是 Windows 文件系统的内置文件加密工具。

然而,任何一种防御工具,如果不能正确使用,也会带来潜在的危害。必须充分理解,妥善实施和有效管理 EFS,确保用户提供技术支持的经验和希望保护的数据不受到破坏。

1、什么是 EFS
2、基本知识,如文件的加密和解密方法、已加密文件的恢复方法、密钥存档、证书管理、文件备份以及 EFS 的禁用方法。
3、EFS 是如何工作的、EFS 结构和算法
4、Windows 2000、Windows XP 和 Windows Server 2003的 EFS 之间存在的主要差异
5、EFS 的误用和滥用,以及如何防止数据丢失或者曝光
6、使用 SMB 文件共享和 WebDAV 进行加密文件的远程存储 
7、故障恢复
8、下载具体的 EFS 工具

什么是 EFS
用户可以使用 EFS 对存储在 Windows 2000、Windows XP Professional 和 Windows Server 2003 计算机文件系统中的文件进行加密。 EFS 并没有设计成可以保护从一个系统传送到另一个系统的数据。EFS 采用对称(使用一个密钥来加密文件)和非对称(使用两个密钥来保护加密密钥)加密。

下面是有关 EFS 的重要基本事实:

EFS 加密不是发生在应用层,而是位于文件-系统层,因此对于用户和应用程序来说,加密和解密过程都是透明的。如果某个文件夹标记为加密,则创建自或者移入到该文件夹的每个文件都将进行加密。应用程序不必理解 EFS 或者管理 EFS 加密文件,看起来和未加密文件没有什么不同。如果用户要打开文件且拥有相应的操作密钥,打开该文件不要求用户方进行任何额外的操作。如果用户没有密钥,就会收到“拒绝访问”的出错信息。
文件加密使用对称密钥,该密钥本身使用公钥加密对的公钥进行加密。要想对文件进行解密,必须具备有关的私钥。该密钥对绑定用户标识,只有拥有该用户标识和密码的用户才具备这个密钥对。如果私钥被破坏或者丢失,即使是加密文件的用户也无法对它进行解密。如果具有恢复代理,则可以恢复文件。如果采用了密钥存档,那么密钥可以恢复,且可以解密文件。如果没有密钥存档,文件就可能丢失。EFS 是最佳的文件加密系统——不存在“后门”问题/li>
文件加密密钥可以存档(例如,导出到软盘中),并放置在安全位置,确保密钥一旦损坏时能够进行恢复。
EFS 密钥依靠用户的密码来保护。任何用户,只要获得该用户的标识和密码,就可以像该用户一样登录进去,且能够对该用户的文件进行解密。因此,每个单位在实施安全的过程中,都必须采取强密码策略,加强用户教育,确保保护 EFS 加密文件。
EFS 加密文件,如果在远程服务器的文件夹中保存或者打开过,则传输时就不再为加密状态。该文件被解密,以明文方式在网络中传送,并且,如果保存到标记为加密的本地驱动器的文件夹中,该文件就在本地进行加密。EFS 加密文件,如果使用 WebDAV 保存到 Web 文件夹中,则在网络中传送时仍然为加密状态。Windows 2000 不具备这种远程存储的方法。
EFS 采用FIPS 140–评估 Microsoft 加密服务提供程序

加密和解密
文件加密和解密的过程非常简单,但是确定哪些内容要加密,留意不同操作系统的上 EFS 的差异,尤为重要。

在 Windows 2000 中使用 EFS 加密数据
加密数据
1. 右键单击开始按钮,单击浏览,然后浏览到想要加密的文件或文件夹。
2. 右键单击所需的文件或文件夹,然后单击属性。
3. 单击高级,然后单击选中加密内容以便保护数据复选框,然后单击确定。
4. 对于要加密的每个文件或文件夹重复执行步骤 2-3。
备注:如果您加密一个文件夹,则该文件夹中包含的所有文件和文件夹都将得到加密。

使用 Cipher.exe 工具
您可以使用 Cipher.exe 工具在 MS-DOS 命令提示符下显示或加密数据。如想使用 Cipher.exe 工具加密一个文件,请在 MS-DOS 命令提示符下键入类似于下行的命令:
cipher [/E | /D] [/S:dir] [/I] [/F] [/Q] [dirname [...]]
下表中定义了每一个命令行参数开关。如想在 MS-DOS 命令提示符下查看此信息,请在 MS-DOS 命令提示符下键入 cipher /?。
参数开关 说明
/E 加密指定的目录。将标记这些目录,这样以后添加的文件将被加密。
/D 解密指定的目录。将标记这些目录,这样以后添加的文件将不加密。
/S 对给定目录中的目录和所有子目录执行指定的操作。
/I 即使在发生错误后也继续执行指定的操作。默认情况下,CIPHER 在遇到错误时会停下。
/F 强制对所有指定的目录执行加密操作,甚至包括那些已加密的目录。已加密的目录在默认情况下将被跳过。
/Q 只报告最重要的信息。
dirname 指定一种模式,或指定目录。
在不使用参数时,CIPHER 将显示当前目录及其包含的所有文件的加密状态。您可以使用多个目录名和通配符。多个参数之间必须留有空格。
备注:EFS 对于使用了 System 属性的文件不起作用。如果您加密 Windows 系统文件,则您的计算机可能会变得无法使用。另外要注意,EFS 不能用于压缩的文件或文件夹。Cipher.exe 这一命令行实用工具还有其他一些参数开关可用,如想查看它们,请使用 cipher /? 命令。

Windows 2000 中的加密文件
Windows 2000 包括加密文件服务 (EFS),可以用它从本地或通过网络,在存储媒体上直接加密文件和文件夹。
EFS 与 Windows 2000 命令解释程序直接集成在一起,因此对大多数程序来说,它是完全透明的。
要建立 EFS 加密,请执行以下操作:
1. 右键单击某个文件夹,然后单击属性。 
2. 在常规选项卡上,单击高级。 
3. 单击选择加密内容以便保护数据复选框,单击确定,然后再次单击确定。 
4. 根据不同情况,单击仅将更改应用到此文件夹或者将更改应用到文件夹、子文件夹和文件。
请注意,一旦文件夹标记为加密,放入文件时没有必要将文件手工标记为加密。

在 Windows XP 中加密文件
使用 Windows XP 的加密文件系统(EFS)功能将文件以加密格式存储在硬盘上。
加密是将数据转换为其他人无法读取的格式的过程。 如果数据存储在硬盘上,您可以使用 EFS 自动加密数据。 备注:管理员可以恢复由另一用户加密的数据。
如何加密文件
您只能对格式化为 NTFS 文件系统的卷上的文件进行加密。 要加密文件,请按照以下步骤操作:
1. 单击开始,指向所有程序,指向附件,然后单击 Windows 资源管理器。 
2. 找到您希望加密的文件,右键单击该文件,然后单击属性。 
3. 在常规选项卡上,单击高级。 
4. 在“压缩或加密属性”下,选中“加密内容以便保护数据”复选框,然后单击确定。
5. 单击确定。 如果需要加密的文件位于未加密的文件夹中,则会出现一个加密警告对话框。请使用以下步骤之一:
• 如果您只希望对文件加密,单击“只加密文件”,然后单击确认。 
• 如果您希望对文件和该文件所在的文件夹加密,单击“加密文件及其父文件夹”,然后单击确定。
如果另一用户试图打开已加密的文件,此尝试将失败。 例如,如果另一用户试图打开一个已加密的 Microsoft Word 文档,则会出现类似的下列消息:
Word 无法打开此文档: 用户名 无访问权限
( 驱动器:\文件名.doc)
如果另一用户试图将加密的文件复制或移动到硬盘上的另一位置,将出现下列消息:
复制文件或文件夹时出错
无法复制文件名 :访问被拒绝。
请确定磁盘未满或未被写保护而且文件未被使用。

• 您无法对使用 FAT 文件系统的卷上的文件或文件夹进行加密。
您必须将您要加密的文件或文件夹存储在 NTFS 卷上。 
• 您无法将已加密的文件或文件夹存储在未受信委派的远程服务器上。
要解决此问题,请将远程服务器配置为受信委派。为此:
1. 以管理员权限帐户登录到域控制器。 
2. 启动 Active Directory 用户和计算机管理单元。
3. 在左窗格中,扩展域容器。 找到您的目标服务器,右键单击该服务器,然后单击属性。 
4. 在常规选项卡上,选中“信任此计算机作为委派”复选框(如果此复选框尚未被选中)。 出现的“Active Directory”消息时,单击确定。
5. 单击确定,然后退出 Active Directory 用户和计算机。 
 
• 您无法从 Macintosh 客户计算机访问已加密的文件。 
• 您无法在您所创建的加密文件夹中打开其他用户存储的文档。

如果另一用户在已加密的文件夹中创建文档,该文档(默认情况下)被加密为仅有此用户有权访问该文档。 因此,您所加密的文件夹中可能包含您无法打开的文件。 如果您需要访问这些文件,请求将您的用户帐户添加到共享加密文件的用户帐户列表中。

在 Windows XP 中删除文件加密
加密是将数据转换为其他人无法读取的格式的过程。如果数据存储在硬盘上,您可以使用 EFS 自动加密数据。
备注:只有加密文件的用户才能恢复已加密的数据,除非用户在加密文件前指定了恢复代理。为确保您能够在未来解密文件,您每次都应导出您的证书和私钥,并将其保存在一个安全的位置。
如删除文件加密
仅下列人员可以解密经加密的文件。 • 加密文件的用户
• 在文件加密前被指派为恢复代理的任何用户
• 具有恢复代理的公钥或私钥的任何用户或最初加密文件的用户
• 任何已被授予此文件访问权的用户
Administrators 组成员不能解密文件,除非加密文件的人在加密文件前将他们指派为恢复代理。
备注:您必须是该文件的原始加密者或指定的恢复代理,才可以使用下列步骤。如果您未得到删除加密的授权,您将收到以下错误消息:
Error Applying Attributes
An error occurred applying attributes to the file:
Path:\Filename
Access is denied

如要删除一个文件的加密,请:
1. 使用 Windows 资源管理器浏览到您希望解密的加密文件的位置。 
2. 右键单击加密的文件,然后单击属性。 
3. 在常规选项卡上,单击高级。 
4. 单击以清除“加密内容以便保护数据”复选框,单击确定,然后再次单击确定。

如何删除文件夹加密
备注:您必须是该文件的原始加密者或指定的恢复代理,才可使用下列步骤。如果您未得到删除加密的授权,您将收到以下错误消息:
Error Applying Attributes
An error occurred applying attributes to the file:
Path:\Filename
Access is denied
1. 使用 Windows 资源管理器浏览到您希望解密的加密文件夹的位置。 
2. 右键单击该文件夹,然后单击属性。 
3. 在常规选项卡上,单击高级。 
4. 单击以清除“加密内容以便保护数据”复选框,单击确定,然后再次单击确定。 
5. 在提示您确认属性更改时:
• 如果您仅需要解密文件夹,则请单击“将更改仅应用于此文件夹”,然后单击确定。 
• 如果您想解密此文件夹及其内容,请单击“将更改应用于此文件夹、子文件夹及文件”,然后单击确定。
 
共享加密文件
只在 Windows XP 和 Windows Server 2003 中才带有共享加密文件的 GUI。
如何共享访问加密文件
注意:只有管理员组的成员或者是加密该文件的用户才能向该文件添加用户。如果未得到向加密文件添加用户的授权,您将会收到以下错误信息:
EFSADU
Error in adding new user(s).Error code 5.
您可以保留文件加密的安全性,同时允许特定用户访问您的加密文件。要允许访问您的加密文件,请执行下列操作:
1. 右键单击加密文件,然后单击属性。
2. 单击常规选项卡(如果尚未选中),然后单击高级。
3. 单击详细信息,然后单击添加。
4. 选择您要与其共享访问加密文件的用户,然后单击确定。
5. 添加完用户后,请单击三次确定。

• 无法从 Macintosh 客户端访问加密文件。 
• 您可能无法打开其他用户在您的加密文件夹中存储的文档。如果某个用户在加密的文件夹中创建文档,则只有创建该文档的用户才能打开它,除非该用户授予其他用户访问权限。因此,您加密的文件夹中以后可能会包含您无法打开的文件。如果需要访问这些文件,请让这些文件的创建者将您的用户帐户添加到可以共享加密文件的用户列表中。 
• EFS 文档指出,被授予 EFS 加密文件的共享访问权限的用户还必须具有对该文件的“NTFS 写”权限才能进行编辑。但是,如果该文件是 Microsoft Office 文档,则用户必须具有对该文件的“修改”权限才能编辑文档。“修改”权限包括“写”权限。

规划和恢复加密文件:恢复策略
恢复策略是单位的安全策略之一,旨在规划妥善恢复加密文件。本地安全策略的公钥策略或者组策略的公钥策略,也强制采用该策略。如果是组策略的公钥策略,恢复策略说明了用户私钥破坏或者丢失而加密文件未被破坏的情况下,加密文件是如何被恢复的。恢复证书在策略中具体指定。恢复既可以是数据恢复(Windows 2000、Windows XP Professional 和 Windows Server 2003),也可以是密钥恢复(带有证书服务的 Windows Server 2003)Windows 2000 EFS 要求有恢复代理(没有恢复代理,就无法加密文件),但是 Windows XP 和 Windows Server 2003 却不是这样。默认地,Windows 2000 和 Windows Server 2003 分配有默认的恢复代理。Windows XP Professional 却不是这样。

数据恢复过程很简单。与恢复代理证书进行绑定的用户帐户用来解密该文件。随后,该文件以安全的方式传送给文件所有者,该所有者可以加密文件。通过自动存档密钥进行恢复只能使用 Windows Server 2003 证书服务来完成。在安装好证书服务之后还需要完成其他配置。在任何情况下,恢复的书面策略和流程就位非常重要。这些流程,如果设计完善且充分遵守,可以确保恢复密钥和代理及时可用,安全地进行恢复。一定要记住“恢复策略.? 有两个定义第一个定义就是指书面的恢复策略和流程,它说明了有关恢复的何人、何事、何处、何时,以及确保恢复组件可用应该采取的操作步骤内容。第二个定义,常指下面文档所述内容,为公钥策略,它是独立系统的本地安全策略或者域的组策略的一部分。它也规定了哪些证书用来恢复,以及域的公钥策略的其他内容。

禁用或者阻止加密
您可能不希望用户有加密文件的能力。默认就是如此。用户可以指定特定文件夹不应包含加密文件。用户也可以决定禁用 EFS,直到用户以合适的流程来实施全面的 EFS 策略且培训用户时为止。禁用 EFS 的有多种不同的方法,具体取决于操作系统和所期望的效果。

系统文件夹不能标记为加密。启动过程不能使用 EFS 密钥,因此如果加密了系统文件,系统文件就无法启动。要阻止其他文件夹标记为加密,用户可以将它们标记为系统文件夹。如果不可能的话,则阻止文件夹中进行加密的方法。
NT 4.0 不具有使用 EFS 的功能。
禁用 Windows XP Professional 的 EFS 也可通过清除本地安全策略公钥策略的属性页中的复选框来实现。通过清除域或者组织单位 (OU)组策略公钥策略的属性页中的复选框,可以禁用加入到Windows Server 2003 域中的XP 和 Windows Server 2003 计算机中的 EFS。

EFS 的工作原理。EFS 的结构和算法
为了认识 EFS,从而估计各种问题,预测潜在的攻击,解决 EFS 加密文件中的问题且保护文件,用户应该了解 EFS 结构和基本的加密、解密和恢复算法。

Windows 2000、Windows XP 和 Windows Server 2003 之间的 EFS 存在的主要差异
Windows 2000 中采用了 EFS。然而,和 Windows XP Professional EFS 以及 Windows Server 2003 中 EFS 相比,存在下列差别:
用户可以授权其他用户访问加密文件。Windows 2000 中,用户可以采用共享加密文件的编程式解决方案,然而,不提供界面。Windows XP 和 Windows Server 2003 提供界面。
可以加密脱机文件。
建议使用数据恢复代理,但只是可选项。XP 并不自动包含默认的恢复代理。如果存在的话,XP 将利用现有的 Windows 2000 域级恢复代理,但是没有域恢复代理也不阻止 XP 系统进行文件加密。要请求自签名恢复代理证书,需使用cipher /R:filename 命令,其中filename 就是将用来生成包含证书的 *.cer 文件和包含证书以及私钥的 *.pfx 文件的文件名。
“三重 DES” (3DES) 加密算法可用来替换“数据加密标准 X” (DESX),且在 XP SP1 的后续版本,高级加密标准 (AES) 就作为 EFS 的默认加密算法。
对于 Windows XP 和 Windows Server 2003 的本地帐户,密码重设磁盘可以用来安全地重设用户的密码。(不能使用该磁盘重设域密码。)如果管理员使用“重设密码?计算机管理控制台用户工具箱中的用户帐户选项,EFS 文件就无法访问。如果用户将密码变回以前的密码,就可重新访问加密文件。

无意中误用引起的问题
使用 EFS 时,有些事项可能诱发问题。首先,使用不当时,可能无意中公开敏感文件。多数情况下,这是由于不恰当或者脆弱的安全策略以及错误理解EFS 造成的。由于用户认为 他们的数据 是安全的,因而可以不必采用通常的预防措施,该问题就会导致一切变得更加糟糕。在下列几种情形中也会发生这种情况:

例如,如果用户将加密文件复制到 FAT 卷中,文件将被解密,因而不被保护。由于用户有权解密他们的加密文件,该文件就被解密且以明文方式存储到 FAT 卷中。发生这种情况,Windows 2000 并不给出提示信息,但是 Windows XP 和 Windows Server 2003 提供提示信息。
如果用户将自己的密码提供给其他人,这些人就可以使用这些凭据进行登录,且解密该用户的加密文件。(一旦用户登录成功,他们就可以对该用户帐户有权解密的任何文件进行解密。)
如果恢复代理的私钥没有存档,且从恢复代理配置文件中加以删除,知道这个恢复代理凭据的任何用户都可以进行登录,并且透明地解密任何加密文件。
到目前为止,EFS 遇到的最常见问题,发生在 EFS 加密密钥和/或恢复密钥没有存档的时候。如果这些密钥没有备份,丢失时就无法进行替换。如果不能使用或者替换这些密钥,数据就会丢失。如果重装 Windows (也许是磁盘破坏所至),则这些密钥会损坏。如果用户配置文件被破坏,则这些密钥会损坏。在这些情况或者任何其他情况中,密钥被破坏或者丢失且备份密钥不可用,那么,加密文件就无法解密。加密密钥绑定用户帐户,而且操作系统的重复更新意味着新的用户帐户。新用户配置文件意味着新用户密钥。如果密钥存档,它们可以导入到新帐户中。如果文件的吊销代理存在,则可以使用该帐户来恢复文件。然而,在密钥破坏的大多数情况中,用户和吊销密钥两者都不可用,且没有备份,从而导致数据丢失。

此外,其他更小的事情也有可能导致加密文件无法使用或者公开一些敏感数据,

攻击和应对措施:加密文件的其他保护机制
加密文件的任何用户应该认识到潜在的脆弱性和各种攻击方法。就像仅仅锁住房屋前门而没有考虑到后门和窗户也会成为窃贼的通路一样,确保保密性单靠文件加密也不够。

使用深度防御且使用文件许可。使用 EFS 并不排斥使用文件权限来限制文件访问。除了 EFS 之外,还应该使用文件权限。如果用户获得加密密钥,就可将它们导入到自己的帐户中,然后解密文件。然而,如果拒绝该用户帐户访问这个文件,用户试图获取其中的敏感信息时就会失败。
使用文件权限来拒绝删除。可以删除加密文件。如果攻击者无法解密文件,则有可能选择删除该文件。攻击者不能得到其中的敏感信息,也让用户无法拥有该文件。
保护用户凭据。如果攻击者找到了可以进行文件解密的用户的标识和密码,攻击者就可像用户那样登录进来,读取文件。因此,保护这些凭据尤为重要。为了保护这些凭据,可以采用强密码策略,训练用户使用强密码,采用最佳实践保护这些凭据,这些都有助于防止此类攻击的发生。有关密码策略的最佳实践方法。如果帐户密码被破坏,任何人都可以使用该用户标识和密码登录进来。一旦用户登录成功,他们就可以对该用户帐户有权解密的任何文件进行解密。最佳防御方法就是采用强密码策略、用户教育以及进行全面的安全实践。
保护恢复代理凭据。类似地,如果攻击者可以作为恢复代理进行登录,并且恢复代理私钥没有删除掉,攻击者就可以读取文件。最佳实践就是在恢复策略中,要指示删除恢复代理密钥,将该帐户限制于只许进行恢复工作,小心保护凭据。这一节是关于恢复操作和最佳实践的,详见下列步骤。
找出有可能存在加密文件的明文副本或者加密文件的部分明文副本的那些区域,并进行严格管理。如果攻击者拥有或者可以访问驻留加密文件的计算机,他们就有可能从这些区域中恢复敏感数据,包括下列内容:
  数据碎片(数据残余),在加密以前未加密过的文件之后依然存在。
  分页文件
  休眠文件
  临时文件
  打印机后台打印程序文件
使用系统密钥提供额外的保护。使用 Syskey 可以为密码值和在本地安全机构 (LSA) 所保护的数值(如用来保护用户的主密钥加密密钥)提供额外的保护。

故障恢复
用户应该规划 EFS 故障恢复,将它列为业务持续运行规划的一部分。有三个问题需要注意:

在 Windows 2000 网络中,使用恢复代理和存档用户以及恢复代理密钥。
备份加密文件应该是最佳实践的部分内容。备份系统状态也非常重要,因为它通过恢复用户配置文件(其中含有密钥),从而有可能进行恢复。
在使用证书服务提供 EFS 证书的 Windows 2000 网络中,以及在采用 EFS 证书和进行密钥存档的 Windows Server 2003 网络中,故障恢复规划也应该包含有证书服务的恢复规划。


下载具体的 EFS 工具
Esfinfo.exe:http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/efsinfo-o.asp
Cipher.exe:http://support.microsoft.com/default.aspx?scid=kb;zh-cn;298009

 

发表于 @ 2004年12月16日 10:44:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:ADSL拨号错误代码表 | 新一篇:win2000局域网安装“克隆”大法(RIS)

  • 发表评论
  • 评论内容:
  •  
Copyright © pooryaya
Powered by CSDN Blog