当前位置:文档之家› 《密码编码学与网络安全》复习题答案

《密码编码学与网络安全》复习题答案

《密码编码学与网络安全》复习题答案
《密码编码学与网络安全》复习题答案

《密码编码学与网络安全》复习题

1.信息安全(计算机安全)目标是什么?

机密性(confidentiality):防止未经授权的信息泄漏

完整性(integrity):防止未经授权的信息篡改

可用性(avialbility):防止未经授权的信息和资源截留

抗抵赖性、不可否认性、问责性、可说明性、可审查性(accountability):

真实性(authenticity):验证用户身份

2.理解计算安全性(即one-time pad的理论安全性)

使用与消息一样长且无重复的随机密钥来加密信息,即对每个明文每次采用不同的代换表不可攻破,因为任何明文和任何密文间的映射都是随机的,密钥只使用一次

3.传统密码算法的两种基本运算是什么?

代换和置换

前者是将明文中的每个元素映射成另外一个元素;后者是将明文中的元素重新排列。4.流密码和分组密码区别是什么?各有什么优缺点?

分组密码每次处理一个输入分组,对应输出一个分组;流密码是连续地处理输入元素,每次输出一个元素

流密码Stream: 每次加密数据流的一位或者一个字节。连续处理输入分组,一次输出一个元素,速度较快。

5.利用playfair密码加密明文bookstore,密钥词是(HARPSICOD),所得的密文是什么?

I/JD RG LR QD HG

HARPS bo ok st or ex I/JD DG PU GO GV

I/JCODB

EFGKL

MNQTU

VWXYZ

6.用密钥词cat实现vigenere密码,加密明文vigenere coper,所得的密文是什么?

XIZGNXTEVQPXT

Key: catca t ca tcatcatcat

Plaintext: vigenere coper

Chipertext: XIZGNXTE VQPXT

7.假定有一个密钥2431的列置换密码,则明文can you understand的密文是多少?

YNSDCODTNURNAUEA

Key: 2 4 3 1

Plaintext: c a n y

o u u n

d e r s

t a n d

Chipertext: YNSDCODTNURNAUEA

8.什么是乘积密码?

多步代换和置换,依次使用两个或两个以上的基本密码,所得结果的密码强度将强与所有单个密码的强度.

9.混淆和扩散的区别是什么?

扩散(Diffusion):明文的统计结构被扩散消失到密文的,使得明文和密文之间的统计关系尽量复杂.即让每个明文数字尽可能地影响多个密文数字

混淆(confusion):使得密文的统计特性与密钥的取值之间的关系尽量复杂,阻止攻击者发现密钥

10.Feistel密码中每轮发生了什么样的变化?

将输入分组分成左右两部分。

以右半部数据和子密钥作为参数,对左半部数据实施代换操作。

将两部分进行互换,完成置换操作。

11.S-Box的概念

S盒用在DES算法中,每个s盒都由6位输入产生4位输出,所有说,s盒定义了一个普通的可逆代换。相当程度上,DES的强度取决于s盒的设计,但是,s盒的构造方法是不公开的

12.AES每轮变化中设计的基本操作有哪些?

每轮包括4个阶段:字节代换、行移位、列混淆、轮密钥加

13.DES、AES和RC4之间的比较(建议比较分组大小、密钥长度、相对速度、安全强度、

14.AES与DES相比有优点?3DES与DES相比的变化有哪些?什么是2DES中的中

间相遇攻击?

(1) AES更安全。

(2) 3DES增加了1到2个密钥,进行多轮DES,安全性更高。

(3) C = EK2(EK1(P)) ? X = EK1(P) = DK2(C)

给定明文密文对(P,C)

对所有256个密钥,加密P,对结果按X排序与T中

对所有256个密钥,解密C,解密结果与T中的值比较

找出K1,K2使得EK1(P) = DK2(C)

用k1和k2对P加密,若结果为C,则认定这两个密钥为正确的密钥

15.分组密码的工作模式有哪些?及优缺点?

A.ECB,电码本模式,一次处理64位明文,每次使用相同的密钥加密。任何64位的

“”

明文组都有唯一的密文与之对应,有结构化的缺点。

B.CBC,密码分组连接模式,克服了ECB“”

中结构化的缺点,同样的明文变成密文之后就不同了,而且加密必须从头到尾

C.CFB,密码反馈模式.一次处理M位,上一个分组的密文产生一个伪随机数输出的加密算法的输入,该输出与明文的异或,作为下一个分组的输入。 

D.OFB,输出反馈模式,与CFB基本相同,只是加密算法的输入是上一次DES的输出。

E.计数器模式,计数器被初始化为某个值,并随着消息块的增加其值加1,在于明文组异或得到密文组。也可用于流密码。

16.RSA算法中密钥的生成和加密解密过程。

生成过程

RSA的加解密为:

给定消息M = 88 ( 88<187)

加密:

C = 887 mod 187 = 11

解密:

M = 1123 mod 187 = 88

17.RSA 算法计算实例(给定p,q,e,m/c ,计算n, )(n ?,d,c/m )

1. 选择素数: p =17 & q =11

2. 计算n = pq =17×11=187

3. 计算?(n )=(p–1)(q-1)=16×10=160

4. 选择e : gcd(e,160)=1; 选择e =7

5. 确定d : de=1 mod 160 and d < 160 ,d=23

因为23×7=161= 1×160+1

6. 公钥KU={7,187}

7. 私钥KR={23,17,11}

18.描述Diffie-Hellman 密钥交换机制。

算法:

A .双方选择素数p 以及p 的一个原根a

B .用户A 选择一个随机数Xa < p ,计算Y a=aXa mod p

C .用户B 选择一个随机数Xb < p ,计算Yb=aXb mod p

D .每一方保密X 值,而将Y 值交换给对方

E .用户A 计算出K=YbXa mod p

F .用户B 计算出K=YaXb mod p

G .双方获得一个共享密钥(aXaXbmod p)

素数p 以及p 的原根a 可由一方选择后发给对方

19.描述Diffie-Hellman 算法(DH 算法)中中间人攻击发生的过程。

中间人攻击

1 双方选择素数p 以及p 的一个原根a(假定O 知道)

2 A 选择Xa

3 O 截获Ya,选Xo,计算Y o=aXo mod p,冒充A ?B:Yo

4 B 选择Xb

5 O 截获Yb,冒充B ?A:Yo

6 A 计算: (Xo)Xa ≡(aXo)Xa ≡aXoXa mod p

7 B 计算: (Xo)Xb ≡(aXo)Xb ≡

aXoXb mod p

Y A

Y B

ó??§A ó??§B

8 O计算: (Y a)Xo≡aXaXo mod p, (Yb)Xo≡aXbXo mod p

O无法计算出aXaXb mod p

O永远必须实时截获并冒充转发,否则会被发现

20.如何使用公钥密码实现数据的保密性、完整性和数据源认证(签名)?

发送方用其私钥对消息签名。可以通过对整条消息加密或者对消息的一个小的数据块

“”

(消息认证码/摘要)加密来产生。

E(K,[M||E(PRa,H(M))]) 其中K为PUb

解密时,第一步解密使用B的私钥,然后使用A的公钥。

21.对比对称算法和公钥算法?(建议从用途,速度和效率等方面)对称算法:速度快,主要用于数据加密,只有一个密钥。

公钥算法:速度较慢,主要用于数字签名和密钥交换,有两个密钥

22.对称密钥分配有哪些方法?(注意和重放攻击相结合)

对于参与者A和B,密钥分配有以下几种:

A.密钥由A选择,并亲自交给B

B.第三方选择密钥后亲自交给A和B

C.如果A和B以前或最近使用过某密钥,其中一方可以用它加密一个新密钥后在发送给另一方。

D.A和B与第三方均有秘密渠道,则C可以将一密钥分别发送给A和B

别人卷子上的分配方式:

传统加密方法Needham/Schroeder Protocol [1978]

1、A → KDC:IDA||IDB||N1

2、KDC → A:EKa[Ks||IDB||N1||EKb[Ks||IDA]]

3、A → B: EKb[Ks||IDA]

4、B → A: EKs[N2]

5、A → B: EKs[f(N2)]

保密密钥Ka和Kb分别是A和KDC、B和KDC之间共享的密钥。

本协议的目的就是要安全地分发一个会话密钥Ks给A和B。

A在第2步安全地得到了一个新的会话密钥,第3步只能由B解密、并理解。第4步表明B 已知道K s了。第5步表明B相信A知道K s并且消息不是伪造的。

第4,5步目的是为了防止某种类型的重放攻击。特别是,如果敌方能够在第3步捕获该消息,并重放之,这将在某种程度上干扰破坏B方的运行操作。

上述方法尽管有第4,5步的握手,但仍然有漏洞

假定攻击方C已经掌握A和B之间通信的一个老的会话密钥。C可以在第3步冒充A利用老的会话密钥欺骗B。除非B记住所有以前使用的与A通信的会话密钥,否则B无法判断这是一个重放攻击。如果C可以中途截获第4步的握手信息,则可以冒充A在第5步响应。从这一点起,C就可以向B发送伪造的消息而对B来说认为是用认证的会话密钥与A进行的正常通信。

Denning Protocol [1982] 改进(加入时间戳):

1、A → KDC:ID A||ID B

2、KDC → A:E Ka[K s||ID B||T||E Kb[K s||ID A||T]]

3、A → B: E Kb[K s||ID A||T]

4、B → A: E Ks[N1]

5、A → B: E Ks[f(N1)]

| Clock - T | < ?t1 + ?t2

其中:?t1是KDC时钟与本地时钟(A或B)之间差异的估计值;

?t2 是预期的网络延迟时间。

23.公钥算法中公钥的分配和管理有哪些方法?

公钥的分配

A.公开发布

B.公开可访问目录

C.公钥授权

D.公钥证书

24.消息认证码的概念和基本用途?(237页图)

MAC(Message Authentication Code),消息认证码,也是一种认证技术,它利用密钥来产生一个固定长度的短数据块,并将数据块附加在消息之后,格式如:MAC(M)|| M。消息和MAC一起发送到接受方。从而,接受方可以知道消息没有经过篡改,真正来自发送方(MAC的密钥)和消息的时效性(如果MAC中包含序列号)。从这个层面来说,hash是没有密钥的MAC

25.什么是散列函数的基本用途有哪些?(239页图)

保密、认证和签名

26.安全散列函数有哪些特性?什么是碰撞?找到一个碰撞意味着什么?代价是多大?

生日悖论和生日攻击。

Hash算法的特点有

输入变长的分组,输出是一定长的分组;

任意x,计算H(x)容易,软件和硬件都可以实现

已知H(x)= h,求x是不可行的,只是在计算上不可行(单向性)

任意x,找到y,使H(x)=H(y)计算上不可行(抗弱碰撞性)

找到满足H(x)=H(y)的(x,y)计算上不可行(抗强碰撞性)

碰撞指的是散列值相同而原值不同。找到一个碰撞意味着可以替换原来的消息。

单向 2^n

弱无碰撞 2^n

强无碰撞 2^n/2

生日问题:一个教室中,最少应有多少学生,才使至少有两人具有相同生日的概率不小于1/2?

概率结果与人的直觉是相违背的. 实际上只需23人,即任找23人,从中总能选出两人具有相同生日的概率至少为1/2。

根据生日攻击原理,对长度为m位的散列码,共有2^m个可能的散列码,若要使任意的x,y 有H(x)=H(y)的概率为0.5,只需k=2m/2

27.消息认证码和散列函数有哪些区别?

散列函数(Hash):将任意长度的消息变换为定长的消息摘要,并加以认证。

消息认证码(MAC):依赖公开的函数(密钥控制下)对消息进行处理,生成定长

的认证标识,并加以认证。

28.HMAC的原理

hash是没有密钥的MAC,所以不可以直接将hash算法(MD5,SHA1)直接用在MAC上,所以,HMAC实现的目标就是将密钥加入到hash函数中,简单的说,就是“带密钥的hash”。

29.安全hash码的基本结构(Merkle提出的)?

30.MD5和SHA-1间的差异?(建议从输入、输出、轮数、强度和速度等几个方面比较)

MD5 SHA-1

摘要长度 128位 160位

基本处理单位 512位 512位

步数 64(4 of 16) 80(4 of 20)

最大消息长度无限 264-1位

基本逻辑函数 4 4

加法常数 64 4

Endianness Little-endian Big-endian

性能32.4 Mbps 14.4Mbps

31.什么是数字签名?如何理解RSA私钥运算结果做为数字签名?

【提示:最简单的数字签名是:EKRa( M)即用a的私钥(KRa)加密消息M,接受方b用a的公钥解密,得到M,b就可以认为M来自a,因为其他人不可能有a的私钥;而且消息没有经过修改,因为修改后的秘文不能用a的公钥解开,从而实现了数字签名。】

32.如何实现用签名进行身份和消息认证?【提示:上面算法的改进算法就可以实现用签名进行身份和报文鉴别:EKRa( H(M))||M 。先将消息M用hash算法(MD5 or SHA1)算出mac(消息认证码),然后,用a的私钥加密此认证码,最后和原始的消息并在一起,发送到接受方b。b首先用a的公钥KPa解密前面部分,然后用同样的hash算法对M进行hash操作,比较两个结果是否相等。从而实现身份和消息认证。33.数字签名的作用是什么

当通信双方发生了下列情况时,数字签名技术必须能够解决引发的争端:

(1) 否认,发送方不承认自己发送过某一报文。

(2) 伪造,接收方自己伪造一份报文,并声称它来自发送方。

(3) 冒充,网络上的某个用户冒充另一个用户接收或发送报文。

(4) 篡改,接收方对收到的信息进行篡改。

34.公钥算法RSA、DH和DSS算法的用途是什么?

RSA——加密/解密、数字签名、密钥交换

DH——密钥交换

DSS——数字签名

35.实体认证(身份认证)和消息认证的区别是什么?

身份认证是验证主体的真实身份与其所声称的身份是否符合的过程。消息认证是是一个证实收到的消息来自可信的源点且未被篡改的过程。即验证收到的消息确实是来自真正的发送方且未被修改的消息,也验证消息的顺序和及时性。是为了确认被认证的实体与一些特定数据项有着静态的联系,而身份认证主要是在连接建立或者在数据传送阶段的某些时刻使用的。

36.什么是消息重放?有哪些方法可以抵御消息的重放攻击,各有什么特点?

消息重放:攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的。

对付重放攻击的一种方法是在认证交换中使用一个序列号来给每一个消息报文编号。仅当收到的消息序数顺序合法时才接受之。但这种方法的困难是要求双方必须保持上次消息的序号。

两种更为一般的方法是:

时间戳:A接受一个新消息仅当该消息包含一个时间戳,该时间戳在A看来,是足够接近A所知道的当前时间;这种方法要求不同参与者之间的时钟需要同步。

挑战/应答方式。(Challenge/Response)A期望从B获得一个新消息,首先发给B 一个临时值(challenge),并要求后续从B收到的消息(response)包含正确的这个临时值。

挑战问/应答方法不适应非连接性的应用,因为它要求在传输开始之前先有握手的额外开销,这就抵消了无连接通信的主要特点。

37.对称密钥分配方式中有什么问题,如何避免?(针对消息重放攻击)当采用传统对称加密方式时,发送者不能根据内容区分是发送的消息还是接收的消息,这种攻击是可能的。

加入时间戳。

38.Kerberos系统适合什么样环境中的认证服务?它采用了什么方法来防止攻击者窃取并使用票据?kerberos系统的认证过程,每个步骤的作用?

分布式服务器C/S环境

AS用安全方式向用户和TGS各自提供一个秘密信息,然后用户也以安全方式向TGS出示该秘密来证明自己的身份。这个秘密就是会话密钥。

认证服务交换:获得票据许可票据

(1)C → AS : ID C || ID tgs || TS1

(2)AS → C : E KC[K c,tgs || ID tgs || TS2 || Lifetime2 || Ticket tgs]

Ticket tgs = E Ktgs [K c,tgs || ID C || AD C || ID tgs || TS2 || Lifetime2]

客户端收到消息(2)后,输入口令,生成k C,解密获得Ticket tgs,及AS产生的tgs 和客户共享密钥K c,tgs

票据许可服务交换:获得服务许可票据

(3) C → TGS : ID V || Ticket tgs || Authenticator c

接收方tgs接收Ticket tgs,验证票据,获取K c,tgs,并用该密钥解密客户端发来的认证符Authenticator c ,验证客户端身份

Ticket tgs = E Ktgs[K c,tgs|| ID C|| AD C|| ID tgs || TS2 || Lifetime2]

Authenticator c = E Kc,tgs[ID c||AD c||TS3]

为被请求的服务器生成服务授权票据Ticket v,并发送给客户端

(4) TGS → C : E Kc,tgs[K c,v || ID V || TS4 || Ticket v]

Ticket v = E KV[K c,v||ID C||AD C|| ID v||TS4||Lifetime4]

当客户端收到tgs发送的该消息后,使用K c,tgs,解密获得Ticket v,及tgs产生的客户和服务器共享的密钥K c,v

39.什么是证书和CA?X.509证书包含哪些内容?

证书:CA颁发的一种数字介质(文件),用来对证书主体的身份进行鉴别和认证。证书的内容包含证书主体的信息,公钥,以及CA的签名等等。

CA: CA是PKI的核心执行机构,是PKI的主要组成部分,它是数字证书的申请注册、证书签发和管理机构.

CA的主要职责是:

验证并标识证书申请者的身份。

确保CA用于签名证书的公钥的质量和安全性。

管理证书信息资料。(CRL,LDAP等等)

主要内容

版本:标识不同版本的证书;

序列号:标识证书唯一性的整数;

签名算法标识符:标识签名算法及参数;

颁发者名字:创建和签名该证书的CA的X.500名字;

有效期:两个日期组成:起始时间和结束时间;

主体名:证书提及的用户名;

主体的公钥信息:主体的公钥及这个密钥使用算法的标识符,和算法的相关参数;

40.PKI公钥基础设施是基于证书的认证体系结构。它包含哪些基本元素?【提示:包含认证机构CA、证书和证书库(X.509标准)、密钥备份及恢复、密钥和证书的更新(CRL)、交叉认证(证书链或者信任树的概念)

41.安全电子邮件

(1)SMTP/POP3的安全问题?

SMTP(simple mail transfer protocal)简单邮件传输协议和POP3(post office protocal)邮局协议用于Internet上的邮件传输和发送,协议设计的本身没有安全性的,邮件在传输的过程中容易被偷听或者篡改。

1)垃圾邮件包括广告邮件、骚扰邮件、连锁邮件、反动邮件等。垃圾邮件会增加网络负荷,影响网络传输速度,占用邮件服务器的空间。

2)诈骗邮件通常指那些带有恶意的欺诈性邮件。利用电子邮件的快速、便宜,发信人能迅速让大量受害者上当。

3)邮件炸弹指在短时间内向同一信箱发送大量电子邮件的行为,信箱不能承受时就会崩溃。4)通过电子邮件传播的病毒通常用VBScript编写,且大多数采用附件的形式夹带在电子邮件中。当收信人打开附件后,病毒会查询他的通讯簿,给其上所有或部分人发信,并将自身放入附件中,以此方式继续传播扩散。

端到端的安全电子邮件技术,保证邮件从被发出到被接收的整个过程中,内容保密、无法修改、并且不可否认。目前的Internet上,有两套成型的端到端安全电子邮件标准:PGP和S/MIME。它一般只对信体进行加密和签名,而信头则由于邮件传输中寻址和路由的需要必须保证原封不动。

(2)PGP的原理

发送方首先使用md5实现对明文的完整性认证,然后使用私钥对散列值进行数字签名,再对签名散列值以及明文消息拼接,对该拼接结果进行压缩,利用随机产生的密钥对压缩结果进行加密,增加了加密速度,实现消息的保密性。该随机密钥用接收方公钥加密,将加密后的密钥与密文拼接,实现密钥的保密性。再经过基64位变换,得到ascII文本在网络中传输。当数据到达接收方时,通过私钥解密对称密钥,然后对密文解密,进行压缩逆变换,得到明文消息和用发送方私钥签名的明文消息的散列值,通过公钥解密验证发送方签名,获得消息的散列值,并对明文消息做通用的变换,对比,验证消息的完整性。总之PGP实现了消息的机密性和完整性,以及发送方不可否认(源认证)、并通过压缩提高了加密的速度。

42.设计一种报文安全交换方案,要求机密性、完整性和不可抵赖性。可以使用公钥算法、对称算法和Hash函数。[参考安全电子邮件PGP的设计原理即可]

发送方发送Eks(M||ERa(H(M)))|| EUb(Eks),发方通过私钥签名消息的认证码,实现对消息完整性和自己身份的证明,并将结果与M一起用会话密钥Eks加密,在将Eks 用收方公钥加密。实现消息和密钥的保密性。

接收方私钥机密DRb(EUb(Eks))获得ks,然后使用ks解密,Dks(Eks(M||

ERa(H(M)))),获得M||ERa(H(M)),然后计算H(M),并与DUa(ERa(H(M))解密后的H(M),对比验证消息完整性。

43.IP安全性

(1)VPN & IPSec & Tunnel

Vpn

Vpn,virture private net,虚拟专用网,终结了租用专线的年代。通讯双方可以通过建立一条虚拟的通信线路(隧道)的方式实现数据的加密传输,可以提供安全的远程访问、分布式办公、电子商务、EDI等,主要的协议有:PPTP和L2TP。原理图如下

Ipsec

多服务,多算法,多粒度的框架,位于ip层,主要的服务是保密性,数据完整性及针对重放攻击的保护,有两种模式:传输模式和隧道模式。

Tunnel

要点是:加密整个IP分组,并放在一个新的IP分组的有效载荷部分

(2)IPSec提供哪些服务?

IPSec在IP层提供安全服务,使得系统可以选择所需要的安全协议,确定该服务所用的算法,并提供安全服务所需任何加密密钥

(3)指出IPSec中传输模式和隧道模式的区别?

传输模式:不改变IP地址,插入一个AH

隧道模式:生成一个新的IP头,把AH和原来的整个IP包放到新IP包的净荷数据中

(4)IPsec与VPN的关系

IPsec——

的应用方式之一路由到路由(router-router):路由设备之间的安全通信,常用于在两个网络之间建立虚拟私有网(VPN)。

44.Web安全-SSL

(1)SSL包含哪些协议?是如何工作的?

协议分为两层

底层:SSL记录协议

上层:SSL握手协议、SSL修改密码规范协议、SSL警报协议

SSL记录协议中的操作

第一步,fragmentation分段

第二步,compression(可选)压缩

第三步,MAC 计算

第四步, 加密, 可供选择的加密算法

第五步, 添加SSL记录头部

SSL握手协议流程

交换Hello消息,对于算法、交换随机值等协商一致

交换必要的密码参数,以便双方得到统一的premaster secret

交换证书和相应的密码信息,以便进行身份认证

产生master secret

把安全参数提供给SSL记录层

检验双方是否已经获得同样的安全参数

(2)SSL提供哪些服务?

SSL被设计用来使用TCP提供一个可靠的端到端安全服务,为两个通讯个体之间提供保密性和完整性(身份认证)

45.防火墙优缺点/类型、工作原理,

优点:(1)易用和灵活性

(2)安全性

缺点:(1)不能抵抗源自内部的攻击

(2)不能太指望防火墙识别和过滤文件中的病毒

(3)防火墙不能监控旁路流量

(4)容易造成性能瓶颈

类型

包过滤型防火墙

静态包过滤防火墙

状态监测(动态包过滤)防火墙

代理型防火墙

应用级网关防火墙

电路级网关防火墙

网关实现:

编写代理软件

代理软件一方面是服务器软件

但是它所提供的服务可以是简单的转发功能

另一方面也是客户软件

对于外面真正的服务器来说,是客户软件

针对每一个服务都需要编写模块或者单独的程序

实现一个标准的框架,以容纳各种不同类型的服务

软件实现的可扩展性和可重用性

客户软件

软件需要定制或者改写

对于最终用户的透明性

协议对于应用层网关的处理

协议设计时考虑到中间代理的存在,特别是在考虑安全性,比如数据完整性的时候

46.入侵检测系统分为哪三类?异常检测和误用检测的区别是什么?

基于主机

安全操作系统必须具备一定的审计功能,并记录相应的安全性日志

基于网络

IDS可以放在防火墙或者网关的后面,以网络嗅探器的形式捕获所有的对内对外的数据包

分布式入侵检测系统

检测的数据也是来源于网络中的数据包,不同的是,它采用分布式检测、集中管理的方法。

异常检测(anomaly detection)

也称为基于行为的检测

首先建立起用户的正常使用模式,即知识库

标识出不符合正常模式的行为活动

误用检测(misuse detection)

也称为基于特征的检测

建立起已知攻击的知识库

判别当前行为活动是否符合已知的攻击模式

相关主题
文本预览
相关文档 最新文档