ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:24.17KB ,
资源ID:19385751      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19385751.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(usbkey概述算法及中间件Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

usbkey概述算法及中间件Word文档下载推荐.docx

1、ThePublic-KeyCryptographyStandards)接口标准以及微软公司的CSP(CSP:ServiceProvider)接口标准。相对于PKCS标准,CSP标准的网上资料更少,而实际上,在国内,CSP几乎是网上银行唯一的标准。因为我们都使用的是Windows操作系统嘛!所以,你懂的。国内的接口一般由国家密码管理局进行制定。这里略述了。关于中间件的设计我会在后面的“中间件设计”一节中详细讲述。在UKey诞生之前,我们使用什么来做身份认证和加解密操作呢?答案是智能卡。USB的接口标准诞生于1994年,而智能卡的诞生早于它二、三十年。智能卡在使用的时候,需要借助一个读卡器的设备。

2、因此在Windows早期的版本中,它制定了一些智能卡设备的驱动接口标准,称之为SmartCard标准,业界通常写作PC/SC,含义是PC上的智能卡标准。时至今日,智能卡设备还依然是Windows进行域登录的外部身份认证的唯一支持设备。除非你修改Windows的登录模块,否则你想在域登录中使用外部的身份认证,你就得插入一个智能卡设备。智能卡的设备驱动的接口标准在几年前已经进行了升级,目前比较流行的是CCID接口标准(CCID:Chip/SmartCardInterfaceDevices)。智能卡的实现包含了物理的,电气的,接口的等等诸多标准,不包括非接触的智能卡部分,这些标准可以统称为ISO78

3、16标准。在UKey设计的时候,我不清楚是什么原因,也许是历史造成的,也许是技术的一脉相承所造成的,在设计UKey的硬件读写接口的时候,我们(或者绝大部分制造厂家)都无一例外的使用了ISO7816的标准,具体说来,是使用了ISO7816-4的接口标准,当然,为了适应UKey的特点,在实际研发的时候,会对ISO7816-4的标准进行适当的扩充。这部分内容我会在后面的COS设计一节中详细讲述。1、密码及算法算法是UKey产品的核心,也是进行身份认证、数据加、解密的核心。在UKey中会涉及到是算法分成三类:摘要算法、对称算法和非对称算法。其中,摘要算法不存在密码(也称密钥)。对称和非对称算法需要密码

4、的参与。摘要算法又称为哈希算法(HASH)。摘要算法的功能,就是将一长串数据(无论多长)变换成一个固定长度的数据串。对于某一个特定的摘要算法,它具有的特点是,给定一个原始数据串A,它总能计算出一个固定长度的数据串B。也就是说如果算法固定,由A总能计算出B。而给定B,确不能由此计算得出A。A是一个不固定长度的数据串,而B却是固定长度的。说到这里,我们不得不产生一个疑惑:由于B的长度固定,那么B的排列组合一定是有限次的,但A由于不确定长度,那么A是个无限的集合,B是个有限集合。既然通过摘要算法,某一个A一定能得到一个确定的B,而B是有限的,那么就存在一个可能,就是存在两个或两个以上(甚至是无穷多的

5、)的原始数据串A1,A2,.An,它们通过固定的摘要算法f,能都计算得出同一个数据串B。这是毫无疑问的。我们将此时A1,A2,.An它们之间的关系称之为碰撞。虽然摘要算法的碰撞是存在的,但却并不影响我们接下来的运算。通常我们使用的摘要算法有:MD5、SHA1、SHA256、SHA512等。MD5是我们所熟悉的摘要算法,通过MD5,我们可以将一个不固定长度的数据串加工成一个只有16个字节长度的固定数据串。此外,国家密码管理局还研制了国产摘要算法SM3。SM3通常和国产椭圆曲线算法SM2一起使用,SM3计算出来的Hash串的长度为20个字节。关于SM3的算法细节请参考国家密码管理局网站公布的算法文

6、档。其他的摘要算法都可以从网络上或者相关教材中得到详细的介绍。对称算法是指加密过程和解密过程所使用的密码是同一个密码。对称算法也是加解密算法史上重要的里程碑。在过去的敌特电影中,我们通常会看到一个叫做密码本的东西。密码本就相当于对称密钥。掌握了密码本,就掌握了对方的秘密,因为在发送密文前,要用密码本上的文字置换原始文字(原文)变成密文。拿到密文之后,也要用同一个密码本来解开密文从而得到原文。所以获取密码本是破解密文最关键的一环。同时也暴露除了对称算法的一个缺点,就是要让加解密的双方都知道同一个密钥。这就涉及到密钥的传递。这是一个相当不安全的因素。在战争年代,为了安全的传递对称密码(密码本),可

7、能会付出巨大的代价,甚至是生命。对于要普及对称算法来说,还有一个巨大的问题,就是密码的管理。设想我们每个人都需要跟别人传递密文,而密钥只能是仅能由双方知道,否则第三个人就可能知道我们之间传递的内容了,这种情况下,如果有两个人,就会需要1个密钥,如果有三个人,则需要3个密钥,如果四个人,则需要6个密钥,那么如果是n个人,就需要n(n-1)/2个密钥,假如有1万个人需要相互发送密文,需要的密钥量就是49995000个不同的密钥,这个量实在是太大了,无论在管理,传递方面都是一个巨大的负担,而且存在着很大的传递风险!对称算法也有它的优势。现代加解密的算法绝大部分都是分组处理的。在对称算法中,通常的一个

8、分组为8个字节,也就是说每8个字节进行一次加密或者解密。分组处理完成之后再按照线性存放即可。对称算法可以在速度这方面做到极致,它的分组处理可以并发进行,因此运算十分高效,在对比非对称算法处理方面,对称算法的速度性是个无可比拟的优势所在。通过巧妙的程序设计,可以将加密或者解密做成一个模块,或软件,或硬件,在实际使用中通过并发计算,能达到极高的速度。通常我们在评估可信计算模块或者芯片的性能的时候,对于对称算法,每秒可计算的数据量是一个重要的指标。通常使用的对称算法有:DES、3DES、AES。国家密码管理局此前推广的国产对称算法有SSF33、SCB2。后来经过发展,SSF33逐渐淡出,SCB2更名

9、为SM1。除此之外,还推出了算法公开的SM4等。随着计算技术的发展,CPU的升级,对称算法也存在破解的可能,例如,目前破解DES算法的可能性就大大提高了。在1997年、1998年、1999年美国都举办了DES密码破解的竞赛。当时分别通过多机分布式计算,单机高性能计算以及耗时数月的计算后都找到了相应的密钥。为了提高对称算法的破解难度,数学家在此后发展了3DES,将密钥长度扩展到24个字节(实际是21个字节,DES使用56bits为密钥)。3DES意味着一个8Bytes的分组数据,要经过3次DES运算,而且每次运算的密钥还各不相同,最后计算出来一个分组密文。由于密钥空间变大了,3DES的安全性得到

10、大大提高。此外,数学家还对加解密时的数据分组方式进行了扩展。在最早我们使用最原始,效率最高的电子密码本模式(ECB)。也就是在加密时是按照固定分组进行的,只要原文分组好了,完全可以并发运算,效率极高。后来为了加大破解的难度,设计了密码分组链接模式(CBC)。在这种方式下,第一个分组运算出来的密文要跟第二个分组进行异或然后再进行加密,因此这是一种链式加密,在没有完成第一个分组的加密时,无法进行第二个分组的加密。这种模式增加了破解难度,但效率大大降低了。除此之外,还有密码反馈模式(CFB),CFB是设计为流式加密服务的,分组加密后输出的密文要按照一个字节一个字节发送出去,同时原文向前移动一个字节,

11、最低位的字节要与发送的该字节进行异或并替换该原明文字节,然后再对这个移动了一个字节的分组进行加密,再输出一个加密字节,依次渐进。还有一种分组方式叫做输出反馈模式(OFB)。OFB类似于CFB,但反馈到原文的是加密后的密文的若干bits,且并不需要跟原文的某些bits进行异或处理。以上这些复杂的分组模式的具体过程,可以参考相关的密码学教科书,如现代密码学教程等。如学习时对照教科书上的内容,并参考一些加密算法的实现代码,能有助于理解算法处理的过程。我认为非对称算法是算法界的一个了不起的创举。由于非对称算法的开创,催生了CA这一类身份证书管理机构;由于有了证书,在互联网上可以实现安全的链接和数据传输

12、规范,这大大刺激了互联网的发展壮大。非对称算法又称为公钥密码算法。RSA算法是历史上第一个能正式大规模应用的非对称算法。RSA公钥加密算法是1977年由RonRivest、AdiShamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA也是目前最有影响力的公钥加密算法。非对称算法的本质就是加密和解密的密码是不同的,比如加密用密码k1,那么会存在一个密码k2,可以用来解密。同样的,用k2做加密,也只能用k1来解密。k1和k2之间符合某种数学关系。但要想从k1推导出k2对于简单的机构组织而言,几乎是不可能的。比如某人拥有一对密码,分别是k1和k2,他

13、可以选择将k1公之于众,而k2则作为个人机密为个人私有。那么在这种情况下,可以完成在网络通信下的两种重要的过程。1)数据加密。由于k1公开了,所以别人要给你发送私密信息,只需要用k1加密即可,全世界只有你的k2能解开;2)身份认证。由于k1公开,且被认证未你的公开密码,那么对应的就有你自己保管的k2,这个时候,你要想给某人发一个公函文件,只要用k2加密,对方用k1来解开的时候,就知道这个公函一定是你签发的了。这就实现了一个身份认证的功能。2、PKCS#11接口标准RSA非对称密码算法的三个创始人的姓的第一个字母联合起来就是RSA了,他们三个创建的公司的名字也就叫做RSA。在RSA有一个著名的公

14、钥算法的实验室,这个实验室颁发的一系列行业标准就称作为PKCS标准,其中PKCS#11(简称P11)就是针对密码设备的接口指令标准。目前最新的版本应该是2.3了。P11模型中重要的概念之一是slot,也称为槽。一个slot为一个密码设备对象。某个打开的slot会话称之为session。Session之间存在不同的验证权限。而同一个slot的不同的session之间存在操作的互相影响性,同时在某些状况下,权限会发生同步。另外一个重要的概念是对象。P11中支持几种重要的对象,如公钥、私钥、对称密钥,数据对象等。PKCS#11创建和支持下列对象:对象说明CKO_DATA应用程序定义的对象。对象的数据

15、结构可由应用程序任意定义,但是数据意义的解释由应用程序负责。CKO_SECRET_KEY对称加密算法使用的密钥。CKO_CERTIFICATEX.509CKO_PUBLIC_KEYRSACKO_PRIVATE_KEYCKO_MECHANISM算法对象PKCS#11的对象可根据其生命期长短的不同分成两大类:一类是持久存储的类对象,这类对象被保存在USBKey的安全存储区域当中,直到应用程序主动删除这些对象;另一类是会话对象,这类对象只存在于运行时建立的特定会话(Session对象)当中,一旦会话结束,这类对象也跟着被删除。决定对象生命期的模板属性是CKA_TOKEN,这是个布尔值,所有的对象都有

16、这一属性。当该值为TRUE时,该对象将被保存到Key内的存储空间,否则,该对象保存在会话空间中,当会话结束后,该对象即销毁。PKCS#11的对象除了生命期长短有分别之外,在访问权限上也有限制。所有的对象都可根据访问权限的不同分成两大类:一类是公开对象,这类对象是任何用户都可以访问的;另一类是私有对象,这一类对象只有身份被验证的用户才有权访问。决定对象的访问限制类型的模板属性是CKA_PRIVATE。这是个布尔值,所有的对象都有这一属性。应用程序可根据需要决定对象应为私有对象还是公开对象。P11标准颁发了70余条指令。其中部分指令简介如下表:接口类型函数名称描述通用接口函数C_Initializ

17、e初始化CryptokiC_Finalize整理各种适合Cryptoki的资源C_GetInfo获得关于Cryptoki的通用信息C_GetFunctionList获得Cryptoki库函数的进入点槽和令牌管理函数C_GetSlotList获得系统中槽的名单C_GetSlotInfo获得关于特殊槽的信息C_GetTokenInfo获得关于特殊令牌的信息C_WaitForSlotEvent等待槽事件(令牌插入,转移等)的发生C_GetMechanismList获得由令牌支持的机制的名单C_GetMechanismInfo获得关于特殊机制的信息C_InitToken初始化一个令牌C_InitPIN

18、初始化普通用户的PINC_SetPIN改变现在用户的PIN会话管理函数C_OpenSession打开一个应用程序和特殊令牌之间的连接或安装一个应用程序呼叫返回令牌插入C_CloseSession关闭一个会话C_CloseAllSessions用令牌关闭所有的会话C_GetSessionInfo获得关于会话的信息C_GetOperationState获得会话的加密操作状态C_SetOperationState设置会话的加密操作状态C_Login注册一个令牌C_Logout从一个令牌注销对象管理函数C_CreateObject建立一个对象C_CopyObject建立一个对象的拷贝C_Destroy

19、Object销毁一个对象C_GetObjectSize获取字节中一个对象的大小C_GetAttributeValue获取一个对象的属性值C_SetAttributeValue改变一个对象的属性值C_FindObjectsInit初始化一个对象的搜索操作C_FindObjects继续一个对象搜索操作C_FindObjectsFinal完成一个对象搜索操作加密函数C_EncryptInit初始化一个加密操作C_Encrypt加密单部分数据C_EncryptUpdate继续一个多部分加密操作C_EncryptFinal完成一个多部分加密操作解密函数C_DecryptInit初始化一个解密操作C_De

20、crypt解密单部分加密数据C_DecryptUpdate继续一个多部分解密操作C_DecryptFinal完成一个多部分解密操作消息解密函数C_DigestInit初始化一个消息摘要操作C_Digest摘要单部分数据C_DigestUpdate继续一个多部分摘要操作C_DigestKey摘要一个密钥C_DigestFinal完成一个多部分摘要操作签名和消息鉴别函数C_SignInit初始化一个签名操作C_Sign签名单部分数据C_SignUpdate继续一个多部分签名操作C_SignFinal完成一个多部分签名操作C_SignRecoverInit初始化一个签名操作,在操作中数据能从签名中恢

21、复C_SignRecover签名单部分数据,在操作中数据能从签名中恢复签名鉴定消息鉴别函数C_VerifyInit初始化一个鉴定操作C_Verify在单部分数据上鉴定一个签名C_VerifyUpdate继续一个多部分鉴定操作C_VerifyFinal完成一个多部分鉴定操作C_VerifyRecoverInit初始化一个鉴定操作,在操作中数据能从签名中恢复C_VerifyRecover在单部分数据上鉴定一个签名,在操作中数据能从签名中恢复双效加密函数C_DigestEncryptUpdate继续类似的多部分摘要和加密操作C_DecryptDigestUpdate继续类似的多部分解密和摘要操作C_

22、SignEncryptUpdate继续类似的多部分签名和加密操作C_DecryptVerifyUpdate继续类似的多部分解密和鉴定操作密钥管理函数C_GenerateKey产生一个保密密钥C_GenerateKeyPair产生一个公共/私钥对C_WrapKey加密一个密钥C_UnwrapKey解密一个密钥C_DeriveKey从基础密钥派生一个密钥随机数生成函数C_SeedRandom把一个附加种子材料加入随机数字生成器C_GenerateRandom生成随机数并行功能管理函数C_GetFunctionStatus已废弃函数,返回CKR_FUNCTION_NOT_PARALLELC_Canc

23、elFunction3、CSP接口标准CSP接口标准为微软所颁发,在windows操作系统上通行。CSP中重要的概念是容器(container)。一个容器中具有一对公私钥。而证书却是这一对密钥的附加属性了。CSP总共有23个函数接口。简介如下:CSP连接函数CPAcquireContext为应用程序创建一个上下文CPGetProvParam返回CSP相关的信息CPReleaseContext释放CPAcquireContext创建的上下文CPSetProvParam设置CSP的参数操作CSP密钥生成和交换函数CPDeriveKey从一个数据散列中生成一个会话密钥,它保证生成的密钥互不相同CPD

24、estroyKey释放一个密钥句柄,释放后,句柄将无效,密钥将无法再被访问CPExportKey从CSP容器中导出密钥CPGenKey用来生成密钥或密钥对CPGenRandom使用随机数填充一个缓冲CPGetKeyParam用来得到加密操作密钥的属性CPGetUserKey用来获取CSP容器中的持久密钥对CPImportKey从一个blob中导入密钥到CSP容器中CPSetKeyParam设置密钥的属性CSP加解密函数CPDecrypt用来解密先前被加密的数据CPEncrypt用来加密明文CSP散列和数字签名函数CPCreateHash初始化并散列输入数据CPDestroyHash删除一个散列

25、对象句柄CPDuplicateHash创建一个散列对象的拷贝CPGetHashParam获取散列对象的计算结果CPHashData散列输入的数据CPSetHashParam定制一个散列对象的属性CPSignHash签名一个散列对象CPVerifySignature校验一个数字签名4、国密接口标准国家密码管理局在2011年也制定了相关的接口标准,其标准在上层方面借鉴或参考了CSP接口,存在容器的概念,在底层操作上借鉴或参考了P11接口,有对象的标准,同时支持获取相关属性。具体国密局接口标准及其修订情况,请参考国家密码管理局网站。值得说明的是,在国内政务等一些平台上,已经开始逐渐推广国密接口,如卫生部的医疗信息平台。因此需要研发人员关注和重视。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1