安全校验的方法、编译装置、.net卡和系统的制作方法

文档序号:6585005阅读:163来源:国知局

专利名称::安全校验的方法、编译装置、.net卡和系统的制作方法
技术领域
:本发明涉及信息安全领域,特别涉及一种安全校验的方法、编译装置、.NET卡和系统。
背景技术
:智能卡是一种大小与普通名片相仿的塑料卡片,内含一块直径lcm左右的硅芯片,具有存储信息和进行复杂运算的功能。它被广泛应用于电话卡、金融卡、身份识别卡以及移动电话、付费电话等领域。其中,智能卡的芯片由于集成了微处理器、存储器以及输入输出单元等,使其被认为是世界上最小的电子计算机。并且,在智能卡上,拥有一整套性能极强的安全保密控制机制,安全程序固化在只读存储器之中,因而具有无法复制和密码读写等可靠的安全保证。它较之普通磁卡,还具有信息存储量大、运算能力强、可利用微处理来增加卡片功能等优点。.NET卡是一种含有可以运行.NET程序的.NET虚拟机的微处理器智能卡。其中,.NET是微软提供的新一代技术平台,是全新的基于互联网的跨语言软件开发平台,顺应了当今软件工业分布式计算、面向组件、企业级应用、软件服务化和以恥b为中心等大趋势。.NET并非开发语言,.NET代表一个集合、一个环境、一个可以作为平台支持下一代Internet的可编程结构。最终目的是让用户在任何地方、任何时间、以及任何设备都能访问所需的信息、文件和程序。其支持的开发语言有C#、ASP.NET、VB.NET、DELPHI.NET等,目前微软与Boardland公司都对.NET有开发工具的支持。所谓虚拟机,可以把它想象成一台用软件来模拟的机器,在这台机器里有处理器、内存、寄存器等各种硬件,模拟运行各种指令,在这台机器上运行的软件对运行环境没有特殊要求,所以虚拟机对它上运行的程序是透明的。例如,x86虚拟机模拟的是x86指令程序的运行环境,c51虚拟机模拟的是c51指令程序的运行环境。当在.NET卡中运行服务程序时,通常会调用标准类库中的类和函数。现有技术中写入.NET卡中的程序多数没有安全校验、或者是简单的CRC(CyclicRedundancyCheck,循环冗余校验)。其中,CRC校验是利用除法及余数的原理来做错误侦测(ErrorDetecting)的,实际应用时,发送装置计算出数据的CRC值并随数据一起发送给接收装置,接收装置对接收到的数据重新计算CRC值,并与收到的CRC值相比较,如果两个CRC值不同,则说明数据通讯出现错误;如果两个CRC值相同,则说明数据通讯正常。这种CRC校验是数据通讯领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。在实现本发明的过程中,发明人发现现有技术至少包括以下缺点由于CRC校验不够安全,.NET卡的安全不能得到完全的保证。
发明内容为了保证.NET卡的安全,提高.NET卡的安全性,本发明实施例提供了一种安全校6验的方法、编译装置、.NET卡和系统。所述技术方案如下—种安全校验的方法,所述方法包括编译.NET程序,并在所述编译过程中为所述.NET程序添加强命名,得到.NET可执行文件;获取所述.NET可执行文件中的公钥、公钥标识、包含索引表的原数据和签名数据,并发送给.NET卡内部;在所述.NET卡内部,利用所述索引表对所述公钥标识进行验证;如果所述公钥标识验证成功,则利用所述公钥标识验证所述公钥是否合法;如果是,验证所述原数据是否合法;当所述原数据合法时,向.Net卡外部程序返回原数据正确信息,结束操作;当所述原数据不合法时,返回错误信息,并进行错误处理;如果否,返回错误信息,并进行错误处理;如果所述公钥标识验证失败,则返回错误信息,并进行错误处理。所述获取所述.NET可执行文件中的公钥、公钥标识、包含索引表的原数据和签名数据,具体包括从所述.NET可执行文件中获取私钥、公钥和不含索引表的原数据,所述不含索引表的原数据具体为在所述编译的过程中添加强命名后的.NET程序集;将所述公钥进行哈希运算后,得到所述公钥的散列值,并取所述散列值最后8个字节得到所述公钥标识;根据所述不含索引表的原数据和所述公钥标识获得包含索引表的原数据;使用所述私钥对所述包含索引表的原数据作哈希运算后得到的散列值进行签名,得到所述签名数据。所述根据所述不含索引表的原数据和所述公钥标识获得包含索引表的原数据,具体包括根据原数据的内容分析出元数据表;根据所述元数据表和所述公钥标识,对.NET中的命名空间、类、方法、变量的名称进行哈希运算;运算完成后将全部哈希值存入索引表中,并将所述索引表加入到所述不含索引表的原数据的末尾,得到包含索引表的原数据。所述发送给.NET卡内部,具体包括将所述包含索引表的原数据、所述签名数据、所述公钥及所述公钥标识作为一个完整的数据包文件,发送至.NET卡内部。所述在所述.NET卡内部,利用所述索引表对所述公钥标识进行验证,具体包括在所述包含索引表的原数据中得到元数据表;随机取出正整数个命名空间的名称,结合所述公钥标识和获得所述索引表时的方法计算哈希值;在所述索引表中查找匹配;如果所有的哈希值均能够与所述索引表中的哈希值匹配成功,则所述公钥标识验证成功;否则,所述公钥标识验证失败。7所述验证所述公钥是否合法,具体包括将所述公钥做哈希运算,得到所述公钥的散列值;取所述散列值最后8字节的数据,与所述公钥标识进行比较;如果一致,则所述公钥合法;如果不一致,则所述公钥不合法。所述验证所述原数据是否合法,具体包括使用所述公钥解密所述签名数据,得到所述原数据的第一个散列值;对所述原数据做哈希运算,得到所述原数据的第二个散列值;比较所述原数据的第一个散列值和所述第二个散列值;如果一致,则所述原数据合法;否则,则所述原数据不合法。—种编译装置,所述编译装置包括编译模块,用于编译.NET程序,并在所述编译过程中为所述.NET程序添加强命名,得到.NET可执行文件;获取模块,用于获取所述.NET可执行文件中的公钥、公钥标识、包含索引表的原数据和签名数据;发送模块,用于将获取模块获取到的公钥、公钥标识、包含索引表的原数据和签名数据发送到.NET卡内部,所述公钥、公钥标识、包含索引表的原数据和签名数据用于所述.NET卡在其内部对所述原数据进行校验。所述获取模块具体包括获取单元,用于从所述.NET可执行文件中获取私钥、公钥和不含索引表的原数据,所述不含索引表的原数据具体为在所述编译的过程中添加强命名后的.NET程序集;计算单元,用于将所述公钥进行哈希运算后,得到所述公钥的散列值,并取所述散列值最后8个字节得到所述公钥标识;获得单元,用于根据所述不含索引表的原数据和所述公钥标识获得包含索引表的原数据;签名单元,用于使用所述私钥对所述原数据作哈希运算后得到的散列值进行签名,得到所述签名数据。所述获得单元具体包括第一子单元,用于根据原数据的内容分析出元数据表;第二子单元,用于根据所述元数据表和所述公钥标识,对.NET中的命名空间、类、方法、变量的名称进行哈希运算;第三子单元,用于运算完成后将全部哈希值存入索引表中,并将所述索引表加入到所述不含索引表的原数据的末尾,得到包含索引表的原数据。所述发送模块具体用于将所述包含索引表的原数据、所述签名数据、所述公钥及所述公钥标识作为一个完整的数据包文件,发送至.NET卡内部。—种.NET卡,所述.NET卡包括接收模块,用于接收所述编译装置发送的包含索引表的原数据、签名数据、公钥及公钥标识;公钥标识验证模块,用于在所述.NET卡内部,利用所述索引表对所述公钥标识进行验证;公钥验证模块,用于当所述公钥标识模块验证成功时,利用所述公钥标识验证所述公钥是否合法;原数据验证模块,用于当所述公钥验证模块的验证结果为合法时,验证所述原数据是否合法;处理模块,用于当所述原数据验证模块的验证结果为合法时,结束操作;当所述原数据验证模块的验证结果为不合法时,返回错误信息,并进行错误处理;当所述公钥验证模块的验证结果为否,返回错误信息,并进行错误处理;当所述公钥标识验证模块验证失败时,返回错误信息,并进行错误处理。所述公钥标识验证模块具体包括元数据表获得单元,用于在所述包含索引表的原数据中得到元数据表;计算单元,用于随机取出正整数个命名空间的名称,结合所述公钥标识和获得所述索引表时的方法计算哈希值;匹配单元,用于在所述索引表中查找匹配;判定单元,用于如果所有的哈希值均能够与所述索引表中的哈希值匹配成功,则所述公钥标识验证成功;否则,所述公钥标识验证失败。所述公钥验证模块具体包括计算单元,用于将所述公钥做哈希运算,得到所述公钥的散列值;比较单元,用于取所述散列值最后8字节的数据,与所述公钥标识进行比较;判定模块,用于如果所述比较单元的比较结果为一致,则判定所述公钥合法;如果所述比较单元的比较结果为不一致,则判定所述公钥不合法。所述原数据验证模块具体包括第一计算单元,用于使用所述公钥解密所述签名数据,得到所述原数据的第一个散列值;第二计算单元,用于对所述原数据做哈希运算,得到所述原数据的第二个散列值;比较单元,用于比较所述原数据的第一个散列值和所述第二个散列值;判定单元,用于如果所述比较单元的比较结果为一致,则判定所述原数据合法;用于如果所述比较单元的比较结果为不一致,则判定所述原数据不合法。—种安全校验的系统,所述系统包括编译装置和.NET卡;所述编译装置包括编译模块,用于编译.NET程序,并在所述编译过程中为所述.NET程序添加强命名,得到.NET可执行文件;获取模块,用于获取所述.NET可执行文件中的公钥、公钥标识、包含索引表的原数据和签名数据;发送模块,用于将获取模块获取到的公钥、公钥标识、包含索引表的原数据和签名数据发送到所述.NET卡内部;所述.NET卡包括接收模块,用于接收所述编译装置的发送模块发送包含索引表的原数据、签名数据、公钥及公钥标识;公钥标识验证模块,用于在所述.NET卡内部,利用所述索引表对所述公钥标识进行验证;公钥验证模块,用于当所述公钥标识模块验证成功时,利用所述公钥标识验证所述公钥是否合法;原数据验证模块,用于当所述公钥验证模块的验证结果为合法时,验证所述原数据是否合法;处理模块,用于当所述原数据验证模块的验证结果为合法时,结束操作;当所述原数据验证模块的验证结果为不合法时,返回错误信息,并进行错误处理;当所述公钥验证模块的验证结果为否,返回错误信息,并进行错误处理;当所述公钥标识模块验证失败,返回错误信息,并进行错误处理。本发明实施例提供的技术方案带来的有益效果是通过利用强命名,不需要预先写入密钥,就可以采用RSA的安全校验算法机制,解决了现有技术中数据校验安全性不高、以及密钥容易泄漏、不能高度保密的问题。图1是本发明实施例1中提供的一种安全校验方法的流程图;图2是本发明实施例2中提供的一种安全校验的系统结构示意图图3是本发明实施例2中提供的一种编译装置的结构示意图;图4是本发明实施例2中提供的一种.NET卡的结构示意图。具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例1本发明实施例1提供了一种安全校验的方法,参见图l,该方法包括步骤101:编译.NET程序集,并在编译过程中为.NET程序集添加强命名,得到添加强命名后的可执行文件;—方面,强命名用于防止可执行文件被篡改和版本控制,在编译过程中,由编译器提供。为程序集添加强命名,CLR(CommonLanguageRuntime,公共语言运行库)可以保证具有相同强命名的两个程序集在任何方面都是完全一致的。换言之,强命名为CLR提供了一个程序集的唯一性标识。添加强命名后主机生成密钥对,包括一个公钥和一个私钥,其中,公钥存储于可执行文件的清单中,私钥不可见。强命名程序集包括文件名、版本号、语言文化信息及公钥标识。本实施例中提供的.NET程序集可以如下所示程序MyServer.csNamespaceMyNameSpace{ClassMyServer(PublicintMySample(inta,intb){Returna+b;}}}添加强命名的过程主要可以包括(1)获取强命名实用工具SN.exe,其中,SN.exe为微软2005自带工具;(2)编写命令SN-kMyServer.exe,并将该命令告知实用工具SN.exe;(3)创建MyServer.exe文件,其中创建MyServer.exe文件的过程中生成一对以二进制格式存储的公钥和私钥;(4)将System.Reflection.AssemblyKeyFileAttribute特性应用至ljMyServer.exe程序集;(5)通过编译器进行编译,当编译器在源代码中遇到所述特性时,将打开其中制定的文件MyServer.exe,用私钥对程序集签名,并将公钥嵌入清单中。另一方面,可执行文件中包含有标准的可执行文件信息、代码和元数据表等;其中,标准的可执行文件信息是指可执行文件中标准的PE(PortableExecutable,可移植的执行体)文件头和无用区块表,该PE文件头可以用来识别当前文件为可执行文件,无用区块表是指存储.NET服务端卡不支持的资源的区块表,该资源如Windows的窗体、图标等等;元数据表中包含有各种数据,包括类、参数和函数等等。步骤102:从可执行文件中获取私钥、公钥和原数据,以及公钥标识;其中,私钥和公钥是在添加强命名后自动生成的;原数据为在上述编译过程中添加强命名后的.NET程序集,该原数据中不包含索引表。公钥标识由公钥做HASH(哈希)运算后得到散列值,取其最后8个字节得到的;由上述强命名添加过程中可知,添加强命名的可执行文件清单中存储有公钥,即上述步骤101中(3)得到公钥,然后对上述公钥进行HASH运算,得到该公钥的散列值并取该散列值最后8个字节作为公钥标识。由本实施例提供的具体.NET程序集MyServer.cs可知,本实施例中公钥标识具体为"lEC142379C1C8F39",原数据的具体数据形式为"030003......880012"。进一步的,根据上述不包含索引表的原数据和公钥标识,提取原数据索引表。其中,原数据索引表为调用和运行卡内的程序方法时查找使用。这里,索引表的提取步骤可以如下(1)根据原数据内容分析出MetaData(元数据)表;(2)根据MetaData表,对.NET中的命名空间、类、方法、变量的名称进行HASH运算,以代表原数据内容。其中,对名称进行HASH时,类,方法和变量是自己对其名称字符串进行HASH运算,而对命名空间名称进行HASH时,需要在名称字符串前加入公钥标识,即命名空间名称和公11钥标识一起进行HASH的值代表本文件下的命名空间。那么在调用卡内方法时,先在索引表中匹配调用方法所在的命名空间、类和方法名称的HASH值,如果找到,将判断被调用方法代码在文件中的位置,再执行代码,否则不能运行。(3)把MetaData的所有信息运算完成后,存入索引表中,并将本索引表加入到原数据末尾,作为原数据的一部分,得到包含索引表的原数据。步骤103:利用私钥对包含索引表的原数据进行签名,得到签名数据;其中,利用私钥对原数据进行签名的具体过程可以为(1)将原数据做HASH运算,得到原数据的散列值;(2)利用私钥对上述散列值进行加密,得到128字节的签名数据。本实施例中的签名数据具体可以为"A9F743......000000"。步骤104:将包含索引表的原数据、签名数据、公钥及公钥标识作为一个完整的数据包文件,发送至.NET卡内部;其中,将上述数据作为一个完整的数据包可以但不限于使用如下结构,将各个数据分别填入如下数据结构中st潔t—CardDataBox{byte[8]aHeader;〃文件头byte[8]aPublicKeyToken;//公钥t示识byte[128]abPublicKey;〃公钥intiSourceLength;〃原数据长度byte氺pSourceData;〃原数据byte[128]abSignData;〃签名数据KardDataBox,氺pCardDataBox;〃数据包文件结构步骤105:当把接收到的数据包文件完整的存储到.NET卡内部以后,先将数据包进行解包,然后在.NET卡内部还原包含索引表的原数据、签名数据、公钥及公钥标识;其中,解包的过程具体可以为将写入.NET卡内部的数据包,按照步骤104步骤中提供的数据包文件构建还原到数据结构中,数据结构中的aPub1icKeyToken为公钥标识,abPub1icKey为公钥,pSourceData为原数据所存储的地址,iSourceLength为原数据长度,abSignData为签名数据。步骤106:在.NET卡中,使用索引表验证公钥标识;如果验证成功,则执行步骤107;如果验证不成功,则执行步骤109。具体的验证过程可以为在已存储的原数据中分析出Metedata表,随机取出n(nX))个命名空间的名称,结合公钥标识,和生成索引表时的方法一样计算HASH值,再到索引表中查找匹配,如果所有的哈希值都能在索引表中匹配成功,即本公钥标识为正确的,验证成功;否则认定为本公钥标识错误,验证不成功。步骤107:使用验证成功的公钥标识验证公钥是否合法;12如果是,则执行步骤108;如果否,则执行步骤109。具体的验证过程可以为将公钥做HASH(SHA1),得到20字节的数据;取其最后的8字节的数据,将得到的该8字节的数据与公钥标识(1EC142379C1C8F39)进行比较;如果一致,则公钥合法;如果不一致,则公钥不合法。其中,SHA1(SecureHashAlgorithm,安全哈希算法)主要适用于DSS(DigitalSignatureStandard,数字签名标准)里面定义的DSA(DigitalSignatureAlgorithm,数字签名算法)。对于长度小于264位的消息,SHA1会产生一个160位(即20字节)的散列值。当接收到消息时,这个散列值可以用来验证数据的完整性。步骤108:在已存储包含索引表的原数据、签名数据、公钥及公钥标识的.NET卡中,用上述已验证为合法的公钥及签名数据,采用RSA签名校验算法校验原数据是否合法;如果是,则执行步骤110;如果否,则执行步骤lll。其中,RSA是一种非对称密码算法。所谓非对称,就是指该算法需要一对密钥,其中,一个密钥签名、一个密钥校验。在本实施例中,校验包含索引表的原数据是否合法的方式具体可以包括(1)被验证为合法的公钥解密签名数据,得到原数据的散列值;(2)对.NET卡中存储的原数据做HASH运算,得到新的原数据的散列值;(3)比较本步骤107中(1)和(2)中得到的散列值;(4)如果一致,则原数据未被篡改,合法;否则,原数据被篡改,不合法。步骤109:返回错误信息并删除原数据、签名数据、公钥和公钥标识在内的全部数据;步骤110:原数据合法,.Net卡向.Net卡外部程序返回原数据正确信息,验证结束;步骤lll:验证终止,原数据非法,返回错误信息,并删除原数据、签名数据、公钥和公钥标识在内的全部数据。本发明实施例提供了一种安全校验的方法,通过利用强命名,不需要预先写入密钥,就可以采用RSA的安全校验算法机制,解决了现有技术中数据校验安全性不高、以及密钥容易泄漏、不能高度保密的问题。实施例2本发明实施例提供了一种安全校验的系统,该系统的工作方法可以参见实施例1中的方法,在此不做赘述。参见图2,该系统包括编译装置201和.NET卡202;其中,参见图3,该编译装置201具体包括编译模块201A,用于编译.NET程序,并在编译过程中为.NET程序添加强命名,得到NET可执行文件;获取模块201B,用于获取.NET可执行文件中的公钥、公钥标识、包含索引表的原数据和签名数据;发送模块201C,用于将获取模块201B获取到的公钥、公钥标识、包含索引表的原13数据和签名数据发送到.NET卡内部,公钥、公钥标识、包含索引表的原数据和签名数据用于.NET卡202在其内部对原数据进行校验。其中,获取模块20IB具体包括获取单元,用于从.NET可执行文件中获取私钥、公钥和不含索引表的原数据,不含索引表的原数据具体为在编译的过程中添加强命名后的.NET程序集;计算单元,用于将公钥进行哈希运算后,得到公钥的散列值,并取散列值最后8个字节得到公钥标识;获得单元,用于根据不含索引表的原数据和公钥标识获得包含索引表的原数据;签名单元,用于使用私钥对原数据作哈希运算后得到的散列值进行签名,得到签名数据。其中,获得单元具体包括第一子单元,用于根据原数据的内容分析出元数据表;第二子单元,用于根据元数据表和公钥标识,对.NET中的命名空间、类、方法、变量的名称进行哈希运算;第三子单元,用于运算完成后将全部哈希值存入索引表中,并将索引表加入到不含索引表的原数据的末尾,得到包含索引表的原数据。其中,发送模块201C具体用于将包含索引表的原数据、签名数据、公钥及公钥标识作为一个完整的数据包文件,发送至.NET卡内部。其中,参见图4,.NET卡202具体包括接收模块202A,用于接收编译装置201发送的包含索引表的原数据、签名数据、公钥及公钥标识;公钥标识验证模块202B,用于在.NET卡202内部,利用索引表对公钥标识进行验证;公钥验证模块202C,用于当公钥标识验证模块202B验证成功时,利用公钥标识验证公钥是否合法;原数据验证模块202D,用于当公钥验证模块202C的验证结果为合法时,验证原数据是否合法;处理模块202E,用于当原数据验证模块202D的验证结果为合法时,向.Net卡外部程序返回原数据正确信息,结束操作;当原数据验证模块202D的验证结果为不合法时,返回错误信息,并进行错误处理;当公钥验证模块202C的验证结果为否,返回错误信息,并进行错误处理;当公钥标识验证模块202B验证失败时,返回错误信息,并进行错误处理。其中,公钥标识验证模块202B具体包括元数据表获得单元,用于在包含索引表的原数据中得到元数据表;计算单元,用于随机取出正整数个命名空间的名称,结合公钥标识和获得索引表时的方法计算哈希值;匹配单元,用于在索引表中查找匹配;判定单元,用于如果所有的哈希值均能够与索引表中的哈希值匹配成功,则公钥标识验证成功;否则,公钥标识验证失败。其中,公钥校验模块202C具体包括计算单元,用于将公钥做哈希运算,得到公钥的散列值;比较单元,用于取散列值最后8字节的数据,与公钥标识进行比较;判定模块,用于如果比较单元的比较结果为一致,则判定公钥合法;如果比较单元的比较结果为不一致,则判定公钥不合法。其中,原数据验证模块202D具体包括第一计算单元,用于使用公钥解密签名数据,得到原数据的第一个散列值;第二计算单元,用于对原数据做哈希运算,得到原数据的第二个散列值;比较单元,用于比较原数据的第一个散列值和第二个散列值;判定单元,用于如果比较单元的比较结果为一致,则判定原数据合法;用于如果比较单元的比较结果为不一致,则判定原数据不合法。本发明实施例提供了一种安全校验的系统,包括编译装置和.NET卡,通过利用强命名,不需要预先写入密钥,就可以采用RSA的安全校验算法机制,解决了现有技术中数据校验安全性不高、以及密钥容易泄漏、不能高度保密的问题。以上仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。1权利要求一种安全校验的方法,其特征在于,所述方法包括编译.NET程序,并在所述编译过程中为所述.NET程序添加强命名,得到.NET可执行文件;获取所述.NET可执行文件中的公钥、公钥标识、包含索引表的原数据和签名数据,并发送给.NET卡内部;在所述.NET卡内部,利用所述索引表对所述公钥标识进行验证;如果所述公钥标识验证成功,则利用所述公钥标识验证所述公钥是否合法;如果是,验证所述原数据是否合法;当所述原数据合法时,向.Net卡外部程序返回原数据正确信息,结束操作;当所述原数据不合法时,返回错误信息,并进行错误处理;如果否,返回错误信息,并进行错误处理;如果所述公钥标识验证失败,则返回错误信息,并进行错误处理。2.如权利要求1所述的安全校验的方法,其特征在于,所述获取所述.NET可执行文件中的公钥、公钥标识、包含索引表的原数据和签名数据,具体包括从所述.NET可执行文件中获取私钥、公钥和不含索引表的原数据,所述不含索引表的原数据具体为在所述编译的过程中添加强命名后的.NET程序集;将所述公钥进行哈希运算后,得到所述公钥的散列值,并取所述散列值最后8个字节得到所述公钥标识;根据所述不含索引表的原数据和所述公钥标识获得包含索引表的原数据;使用所述私钥对所述包含索引表的原数据作哈希运算后得到的散列值进行签名,得到所述签名数据。3.如权利要求2所述的安全校验的方法,其特征在于,所述根据所述不含索引表的原数据和所述公钥标识获得包含索引表的原数据,具体包括根据原数据的内容分析出元数据表;根据所述元数据表和所述公钥标识,对.NET中的命名空间、类、方法、变量的名称进行哈希运算;运算完成后将全部哈希值存入索引表中,并将所述索引表加入到所述不含索引表的原数据的末尾,得到包含索引表的原数据。4.如权利要求1所述的安全校验的方法,其特征在于,所述发送给.NET卡内部,具体包括将所述包含索引表的原数据、所述签名数据、所述公钥及所述公钥标识作为一个完整的数据包文件,发送至.NET卡内部。5.如权利要求1所述的安全校验的方法,其特征在于,所述在所述.NET卡内部,利用所述索引表对所述公钥标识进行验证,具体包括在所述包含索引表的原数据中得到元数据表;随机取出正整数个命名空间的名称,结合所述公钥标识和获得所述索引表时的方法计算哈希值;在所述索引表中查找匹配;如果所有的哈希值均能够与所述索引表中的哈希值匹配成功,则所述公钥标识验证成功;否则,所述公钥标识验证失败。6.如权利要求1所述的安全校验的方法,其特征在于,所述验证所述公钥是否合法,具体包括将所述公钥做哈希运算,得到所述公钥的散列值;取所述散列值最后8字节的数据,与所述公钥标识进行比较;如果一致,则所述公钥合法;如果不一致,则所述公钥不合法。7.如权利要求1所述的安全校验的方法,其特征在于,所述验证所述原数据是否合法,具体包括使用所述公钥解密所述签名数据,得到所述原数据的第一个散列值;对所述原数据做哈希运算,得到所述原数据的第二个散列值;比较所述原数据的第一个散列值和所述第二个散列值;如果一致,则所述原数据合法;否则,则所述原数据不合法。8.—种编译装置,其特征在于,所述编译装置包括编译模块,用于编译.NET程序,并在所述编译过程中为所述.NET程序添加强命名,得到.NET可执行文件;获取模块,用于获取所述.NET可执行文件中的公钥、公钥标识、包含索引表的原数据和签名数据;发送模块,用于将获取模块获取到的公钥、公钥标识、包含索引表的原数据和签名数据发送到.NET卡内部,所述公钥、公钥标识、包含索引表的原数据和签名数据用于所述.NET卡在其内部对所述原数据进行校验。9.如权利要求8所述的编译装置,其特征在于,所述获取模块具体包括获取单元,用于从所述.NET可执行文件中获取私钥、公钥和不含索引表的原数据,所述不含索引表的原数据具体为在所述编译的过程中添加强命名后的.NET程序集;计算单元,用于将所述公钥进行哈希运算后,得到所述公钥的散列值,并取所述散列值最后8个字节得到所述公钥标识;获得单元,用于根据所述不含索引表的原数据和所述公钥标识获得包含索引表的原数据;签名单元,用于使用所述私钥对所述原数据作哈希运算后得到的散列值进行签名,得到所述签名数据。10.如权利要求9所述的编译装置,其特征在于,所述获得单元具体包括第一子单元,用于根据原数据的内容分析出元数据表;第二子单元,用于根据所述元数据表和所述公钥标识,对.NET中的命名空间、类、方法、变量的名称进行哈希运算;第三子单元,用于运算完成后将全部哈希值存入索引表中,并将所述索引表加入到所述不含索引表的原数据的末尾,得到包含索引表的原数据。11.如权利要求8所述的编译装置,其特征在于,所述发送模块具体用于将所述包含索引表的原数据、所述签名数据、所述公钥及所述公钥标识作为一个完整的数据包文件,发送至.NET卡内部。12.—种.NET卡,其特征在于,所述.NET卡包括接收模块,用于接收如权利要求8所述的编译装置发送的包含索引表的原数据、签名数据、公钥及公钥标识;公钥标识验证模块,用于在所述.NET卡内部,利用所述索引表对所述公钥标识进行验证;公钥验证模块,用于当所述公钥标识模块验证成功时,利用所述公钥标识验证所述公钥是否合法;原数据验证模块,用于当所述公钥验证模块的验证结果为合法时,验证所述原数据是否合法;处理模块,用于当所述原数据验证模块的验证结果为合法时,结束操作;当所述原数据验证模块的验证结果为不合法时,返回错误信息,并进行错误处理;当所述公钥验证模块的验证结果为否,返回错误信息,并进行错误处理;当所述公钥标识验证模块验证失败时,返回错误信息,并进行错误处理。13.如权利要求12所述的.NET卡,其特征在于,所述公钥标识验证模块具体包括元数据表获得单元,用于在所述包含索引表的原数据中得到元数据表;计算单元,用于随机取出正整数个命名空间的名称,结合所述公钥标识和获得所述索引表时的方法计算哈希值;匹配单元,用于在所述索引表中查找匹配;判定单元,用于如果所有的哈希值均能够与所述索引表中的哈希值匹配成功,则所述公钥标识验证成功;否则,所述公钥标识验证失败。14.如权利要求12所述的.NET卡,其特征在于,所述公钥验证模块具体包括计算单元,用于将所述公钥做哈希运算,得到所述公钥的散列值;比较单元,用于取所述散列值最后8字节的数据,与所述公钥标识进行比较;判定模块,用于如果所述比较单元的比较结果为一致,则判定所述公钥合法;如果所述比较单元的比较结果为不一致,则判定所述公钥不合法。15.如权利要求12所述的.NET卡,其特征在于,所述原数据验证模块具体包括第一计算单元,用于使用所述公钥解密所述签名数据,得到所述原数据的第一个散列值;第二计算单元,用于对所述原数据做哈希运算,得到所述原数据的第二个散列值;比较单元,用于比较所述原数据的第一个散列值和所述第二个散列值;判定单元,用于如果所述比较单元的比较结果为一致,则判定所述原数据合法;用于如果所述比较单元的比较结果为不一致,则判定所述原数据不合法。16.—种安全校验的系统,其特征在于,所述系统包括编译装置和.NET卡;所述编译装置包括编译模块,用于编译.NET程序,并在所述编译过程中为所述.NET程序添加强命名,得到.NET可执行文件;获取模块,用于获取所述.NET可执行文件中的公钥、公钥标识、包含索引表的原数据和签名数据;发送模块,用于将获取模块获取到的公钥、公钥标识、包含索引表的原数据和签名数据发送到所述.NET卡内部;所述.NET卡包括接收模块,用于接收所述编译装置的发送模块发送包含索引表的原数据、签名数据、公钥及公钥标识;公钥标识验证模块,用于在所述.NET卡内部,利用所述索引表对所述公钥标识进行验证;公钥验证模块,用于当所述公钥标识模块验证成功时,利用所述公钥标识验证所述公钥是否合法;原数据验证模块,用于当所述公钥验证模块的验证结果为合法时,验证所述原数据是否合法;处理模块,用于当所述原数据验证模块的验证结果为合法时,结束操作;当所述原数据验证模块的验证结果为不合法时,返回错误信息,并进行错误处理;当所述公钥验证模块的验证结果为否,返回错误信息,并进行错误处理;当所述公钥标识模块验证失败,返回错误信息,并进行错误处理。全文摘要本发明公开了一种安全校验的方法,涉及信息安全领域。其中,方法包括编译.NET程序,并在所述编译过程中为所述.NET程序添加强命名,得到.NET可执行文件;获取所述.NET可执行文件中的公钥、公钥标识、包含索引表的原数据和签名数据,并发送给.NET卡内部;在所述.NET卡内部,利用所述索引表对所述公钥标识进行验证;如果所述公钥标识验证成功,则利用所述公钥标识验证所述公钥是否合法;如果是,验证所述原数据是否合法;当所述原数据合法时,结束操作;当所述原数据不合法时,返回错误信息,并进行错误处理;如果否,返回错误信息,并进行错误处理;如果所述公钥标识验证失败,则返回错误信息,并进行错误处理。相应的,还提供了编译装置、.NET卡和系统。文档编号G06F21/00GK101739525SQ200910241639公开日2010年6月16日申请日期2009年11月30日优先权日2009年11月30日发明者于华章,陆舟申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1