《Internet安全协议与标准第5课》由会员分享,可在线阅读,更多相关《Internet安全协议与标准第5课(47页珍藏版)》请在金锄头文库上搜索。
1、Internet安全协议与标准安全协议与标准第第5课课唐礼勇唐礼勇 博士博士7/10/2003CryptoAPI简介简介7/10/2003有关加密有关加密API的国际标准和规范的国际标准和规范Generic Security Services API (GSS-API) Intel/OpenGroup CDSALayered Services ArchitectureWide industry supportRSA PKCS#11 Cryptographic Token Interface (Cryptoki) Standard目前最新版本为2.11 RSA BSAFE API微软Crypto
2、API V2.0对微软产品的公共支持其中,CDSA 、RSA PKCS#11和微软CryptoAPI在实际中应用得较多,也是PKI推荐使用的加密 API7/10/20033Internet安全协议及标准安全协议及标准其他加密算法库其他加密算法库openssl由SSLeay发展而来,可免费使用文档严重不足,接口复杂为C语言设计,但可通过shell脚本语言扩展http:/www.openssl.org/Crypto+使用C+设计,利用了C+的许多特性,自由软件,可免费使用文档不足,易用性尚可http:/ Gutmann设计,健壮、精心组织、高效只对非商业用途免费为C语言设计,跨平台,支持Delph
3、i及其他可使用ActiveX的语言文档丰富、易用性好http:/www.cs.auckland.ac.nz/pgut001/cryptlibPGP SDK7/10/20034Internet安全协议及标准安全协议及标准Microsoft的密码系统框架的密码系统框架微软最先在1996关注密码系统问题,引入 CryptoAPI (1.0 and 2.0) 和CAPICOM支持CryptoAPI的系统Windows 95OSR2, Windows 98/MeWindows SP3, Windows 2000/XP.NET框架中的安全通过引入System.Security.Cryptography名字
4、空间7/10/20035Internet安全协议及标准安全协议及标准CryptoAPI功能功能CryptoAPI为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时的标准加密接口CryptoAPI 1.0包含对密码系统的支持密钥交换、管理Cryptographic Service ProvidersCryptoAPI 2.0 添加了对证书管理的支持Cryptographic Service Provider系统结构的可插入构件可以通过使用不同的CSP来扩展不同的安全功能CAPICOM一系列对普通CryptoAPI 2.0功能进行包装的COM类尽管可以直接访问CryptoAPI,但有
5、时使用CAPICOM对象还是要容易些7/10/20036Internet安全协议及标准安全协议及标准CryptoAPI在系统中的地位在系统中的地位GINAGINAAuthenticodeAuthenticodeNetwork InterfaceNetwork InterfaceSmartCardSmartCardBasedBasedComponentsComponents用户认证用户认证用户认证用户认证HardwareHardwareCSPCSPRSA RSA BasedBasedCSPCSP编码标准编码标准编码标准编码标准(PKCS)(PKCS)证书管理服务证书管理服务证书管理服务证书管理服
6、务Certificate Management ServicesCertificate Management Services密码服务密码服务密码服务密码服务Crypto ServicesCrypto ServicesCryptoAPICryptoAPI安全通道安全通道安全通道安全通道(Secure Channel)(Secure Channel)SSPISSPI数据的来源及完整性数据的来源及完整性数据的来源及完整性数据的来源及完整性认证及通道加密认证及通道加密认证及通道加密认证及通道加密阅读器阅读器阅读器阅读器7/10/20037Internet安全协议及标准安全协议及标准CryptoAPI
7、的应用的应用Crypto APICrypto API RSA base RSA baseCSPCSPFortezzaFortezzaCSPCSP应用程序应用程序应用程序应用程序 SmartCard SmartCard CSPCSPu加密服务提供者CSP(Cryptographic Service Provider)证书管理服务证书管理服务证书管理服务证书管理服务安全通道安全通道安全通道安全通道密钥数据库密钥数据库密钥数据库密钥数据库证书的存储证书的存储证书的存储证书的存储7/10/20038Internet安全协议及标准安全协议及标准CryptoAPI应用注解应用注解应用程序不直接和CSP通信
8、应用程序调用CryptoAPI函数, CryptoAPI函数通过CryptoSPI由调用实际的CSP由CryptoAPI函数中的一个参数来指明使用哪个CSP进行给定的密码操作。7/10/20039Internet安全协议及标准安全协议及标准CryptoAPI 2.0的体系结构的体系结构7/10/200310Internet安全协议及标准安全协议及标准函数分类函数分类CryptoAPI提供5类函数Base cryptographic functionsContext functions: 连接CSPKey generation functions:生成和存储密钥Key exchange func
9、tions: 交换或传输密钥Certificate encode/decode functionsCertificate store functionsSimplified message functions, used toencrypt and decrypt messages and datasign messages and dataverify the authenticity of signatures on received messages and related dataLow-level message functions7/10/200311Internet安全协议及标准
10、安全协议及标准关于关于CSPCSP是真正执行加密工作的独立的模块 物理上一个CSP由两部分组成:一个动态链接库,一个签名文件签名文件保证提供者经过了认证,以防出现攻击者冒充CSP。若加密算法用硬件实现,则CSP还包括硬件装置Microsoft通过捆绑RSA Base Provider在操作系统级提供一个CSP,使用RSA公司的公钥加密算法,更多的CSP可以根据需要增加到应用中Windows 2k以后自带了多种不同的CSP7/10/200312Internet安全协议及标准安全协议及标准不同类型的不同类型的CSP每个CSP都有一个名字和一个类型。每个CSP的名字是唯一的,而类型则不是。此处着重强
11、调“类型”的特别性。 一个CSP 类型代表了一个特定的家族,这个家族决定了以下因素: 有且仅有一个密钥交换算法;有且仅有一个签名算法; 特定的Key Blob格式; 特定的数字签名格式; 特定的密钥推导模式; 特定的密钥长度; 特定的分组加密算法的缺省模式若两个或多个应用间欲交换密钥和加密的消息,那么它们必须使用同一类型的CSP7/10/200313Internet安全协议及标准安全协议及标准预定义的预定义的CSP类型类型Provide TypeKey exchangeSignatureEncryptionHashingPROV_RSA_FULLRSARSARC2, RC4MD5, SHAPR
12、OV_RSA_AESRSARSARC2, RC4,AESMD5, SHAPROV_RSA_SIGNoneRSANoneMD5, SHAPROV_RSA_SCHANNELRSARSARC4,DES,3DES,+MD5,SHAPROV_DSSNoneDSSNoneMD5,SHAPROV_DSS_DHDHDSSCYLINK MEKMD5,SHAPROV_DH_SCHANNELDH (临时)DSSDES,3DESMD5,SHAPROV_FORTEZZAKEADSSSkipjackSHAPROV_MS_EXCHANGERSARSACASTMD5PROV_SSLRSARSAVariesVaries7/10
13、/200314Internet安全协议及标准安全协议及标准CSP的注册的注册CSP信息保存在注册表中,由键值访问。在注册表中的提供者键值包括:CSP 名称CSP DLL路径数字签名 类型 CSP typeProvide Type键值也保存在注册表中CSP typeCSP名称 必须和上面所说的CSP名称相符7/10/200315Internet安全协议及标准安全协议及标准CSP的设计的设计共有23个基本密码系统函数由应用程序通过CAPI调用,CSP必须支持这些函数这些函数提供了基本的功能,如:加/解密,导入/导出密钥,散列数据,验证签名等CSP的开发可以使用辅助的DLL实现CSP辅助的DLL不是
14、CSP的一部分,但是包含CSP调用的函数辅助的DLL必须被签名,并且签名文件必须可用每个DLL在装载库之前被验证签名7/10/200316Internet安全协议及标准安全协议及标准密钥库密钥库(Key Storage) I7/10/200317Internet安全协议及标准安全协议及标准密钥库密钥库(Key Storage) II每个CSP有一个密钥库 密钥库用于存储密钥,每个密钥库包括一个或多个密钥容器(Key Containers)每个密钥容器中含属于一个特定用户的所有密钥对每个密钥容器被赋予一个唯一的名字;以这个名字做函数CryptAcquireContext 的参数,从而获得指向这个
15、密钥容器的句柄通常为每个用户创建一个默认密钥容器,用用户的登录名作为容器名。可以由任意多个应用程序来使用一个应用程序也可以创建自己的密钥容器和密钥对7/10/200318Internet安全协议及标准安全协议及标准密钥库密钥库(Key Storage) IIICSP将永久保存每一个密钥容器,包括保存每个密钥容器中的公/私钥对 但在一个Session完后CSP将不保存这个Session 在密钥容器中的会话密钥 一个Session是指从调用函数CryptAcquireContext到调用函数CryptReleaseContext 期间的阶段。当一个Session结束后,所有的使用hProv句柄创建
16、的会话密钥和Hash值都变为无效 7/10/200319Internet安全协议及标准安全协议及标准会话密钥会话密钥在加/解密数据时使用会话密钥会话密钥由应用程序用CryptGenKey 或CryptDeriveKey 函数创建会话密钥被安全保存在CSP中不同于公私钥对,会话密钥一般更换频繁。应用程序可以以加密的密钥二进制大对象或key blob 的形式从CSP中导出会话密钥(用CryptExportKey函数函数),以供以后使用或传输给其他用户7/10/200320Internet安全协议及标准安全协议及标准公钥和私钥对公钥和私钥对每个用户通常有两对公私钥对。一对用来加密会话密钥,一对用来创
17、建数字签名7/10/200321Internet安全协议及标准安全协议及标准Key Blob在交换密钥时,或密钥需要离开CSP(即导出密钥)时,就存在选择什么样的数据结构存储密钥的问题CryptoAPI采用Key Blob数据结构存储离开了CSP内部的密钥当使用CryptExportKey函数从CSP中导出密钥时,Key Blob被创建。之后的某一时间,使用CryptImportKey函数将密钥导入到某个CSP中(通常是另一个不同的机器上的不同的CSP)7/10/200322Internet安全协议及标准安全协议及标准Key Blob(续续)Key Blob有一个标准的信息头和位于信息头之后的
18、一段表示密钥本身的数据组成。通常应用程序不访问Key Blob内部,而是把Key Blob当作一个透明的对象。 由于公/私钥对的私钥部分需要绝对保密,所以私钥要用对称加密算法加密。加密Private Key Blob时,除了BLOBHEADER之外的所有部分都要加密。但加密所用的算法和密钥(或密钥参数)不与该Key Blob存储在一起,应用程序负责管理这些信息7/10/200323Internet安全协议及标准安全协议及标准密钥的物理特性密钥的物理特性同时使用同一会话密钥对两个序列的数据进行加密或解密时,要物理上制作一份该会话密钥的拷贝,即一个物理上的会话密钥不得同时用于两个操作。因为每个会话
19、密钥都包含了内部状态信息,若它同时被用于多个操作,会造成混乱7/10/200324Internet安全协议及标准安全协议及标准处理的消息格式处理的消息格式7/10/200325Internet安全协议及标准安全协议及标准CryptoAPI函数示例函数示例7/10/2003语言要求语言要求源代码#include #include / 当用到系统定义的对话框时链接要求必须同时链接crypt32.lib advapi32.lib有些函数需要链接cryptui.lib7/10/200327Internet安全协议及标准安全协议及标准初始化初始化CSPCryptAcquireContext用来获取特定C
20、SP中特定密钥容器的句柄。返回的句柄用来调用选择的CSP进行两项操作: 首先试图找到由各个参数描述的CSP,如果找到CSP,函数接着试图在CSP中找到与指定容器名匹配的密钥容器。这个函数也可用于创建和销毁密钥容器,取决于参数的值。 CryptReleaseContext用于释放从CryptAcquireContext调用返回的句柄CryptReleaseContext不删除任何密码系统API对象,仅仅释放指向对象的句柄7/10/200328Internet安全协议及标准安全协议及标准7/10/200329Internet安全协议及标准安全协议及标准初始化初始化CSP注解注解(1)如上的代码演示
21、了如何取得默认CSP的默认密钥容器如果对CryptAcquireContext 的调用成功,返回值将非零,并且变量hProv 将是一个指向被请求的CSP的句柄。为了给默认的CSP创建一个密钥容器,可以使用如下代码 7/10/200330Internet安全协议及标准安全协议及标准7/10/200331Internet安全协议及标准安全协议及标准初始化初始化CSP注解注解(2)为了从默认CSP中删除一个已经存在的密钥容器,可以使用像以下的代码7/10/200332Internet安全协议及标准安全协议及标准如果CryptAcquireContext调用成功,返回值将非零,hProv 指向的密钥容
22、器将被删除,并且该密钥容器不再有效。7/10/200333Internet安全协议及标准安全协议及标准Hashing DataCryptCreateHash, CryptHashData, CryptGetHashParam, 和 CryptDestroyHash CryptCreateHash用于初始化对数据的散列。返回CSP hash对象的句柄, 这个句柄可以用于以后调用CryptHashData,以便散列数据CryptGetHashParam取回散列值CryptDestroyHash释放从CryptCreateHash返回的句柄不删除任何密码系统API对象,仅仅释放指向hash对象的句柄
23、7/10/200334Internet安全协议及标准安全协议及标准7/10/200335Internet安全协议及标准安全协议及标准7/10/200336Internet安全协议及标准安全协议及标准Hashing Data注解注解以上的例子对pBuffer指向的数据指向的数据产生了一个hash值。如果有更多的数据需要hash,可以通过重复调用CryptHashData计算散列值注意用HP_HASHVAL参数调用CryptGetHashParam 将阻止任何用那个对象的更进一步的散列考察MDx系列计算MDx_Init(&md_ctx);MDx_Update(&md_ctx, data, len)
24、; /repeat until no more dataMDx_Final(md, &md_ctx);7/10/200337Internet安全协议及标准安全协议及标准Generating KeysCryptDeriveKey, CryptGenKey, CryptDestroyKeyCryptDeriveKey用于从一个特定的口令产生一个密钥CryptGenKey用于从随机数产生会话密钥或公私钥对如果使用了本函数, 推荐使用CRYPT_EXPORTABLE 参数来创建一个可导出的会话密钥。这样该会话密钥可以从一个计算机移到另一个计算机,否则返回的密钥将只存在于特定的计算机/会话CryptDe
25、stroyKey 用于释放对密钥对象的句柄7/10/200338Internet安全协议及标准安全协议及标准7/10/200339Internet安全协议及标准安全协议及标准7/10/200340Internet安全协议及标准安全协议及标准Generating Keys注解注解上例显示如何使用CryptDeriveKey 函数,假定 pPassword 指向一个用户定义的口令,dwPasswordLength 是口令的长度7/10/200341Internet安全协议及标准安全协议及标准En/Decrypting DataCryptEncrypt, CryptDecrypt:可以说整个Cryp
26、to API就围绕着这两个函数两个函数的前六个参数相同前两个参数仅仅是密钥的句柄和可选的hash对象第三个参数是一个布尔值,保持为False直到最后一块数据,当处理最后一块数据时必须设为Ture,以便函数对最后一块数据进行一些特殊处理第四和第五个参数仅仅是一个标记值和一个指向将要被加解密的数据的指针第六个参数是一个指向保存在buffer中将被加/解密的字符数的指针CryptEncrypt还有第7个参数指定了Block的大小,可用于处理密文长于明文的情况7/10/200342Internet安全协议及标准安全协议及标准7/10/200343Internet安全协议及标准安全协议及标准En/Dec
27、rypting Data注解注解当用相同的密钥同时加解密两个数据流时,需要小心。相同的物理会话密钥不能用于两个操作,因为每个会话密钥包含内部状态信息,如果同时用于多个操作可能会引起混乱 一个相对简单的解决方法是对会话密钥做拷贝拷贝会话密钥可以使用CryptExportKey 导出密钥,然后用 CryptImportKey 导回。当密钥被导入,CSP将给“新”密钥分配自己的内部内存,在逻辑上和原密钥毫无关系7/10/200344Internet安全协议及标准安全协议及标准其他问题其他问题示例未涉及到的地方随机数生成:符合FIPS140-1标准CryptGenRandom(hProv, dwLen
28、, pbBuffer);证书管理DPAPI (Data Protection API)同CryptoAPI相关的另一个APIcrypt32.dll的一部分a pair of function calls that provide OS-level data protection services to user and system processes 7/10/200345Internet安全协议及标准安全协议及标准参考资料参考资料MSDNFrom CDROW/DVDFrom network7/10/200346Internet安全协议及标准安全协议及标准ChangeLog2003.7.10 v1.0 By T.L.YongRefine PPT and Fix many bugs.Initialize from Ding Ruipengs PPT7/10/200347Internet安全协议及标准安全协议及标准