`
cantellow
  • 浏览: 848328 次
  • 性别: Icon_minigender_1
  • 来自: 草帽海贼团
社区版块
存档分类
最新评论

代码签名和认证

    博客分类:
  • Java
阅读更多

要对一段代码作担保或者签名,必须首先生成一个公钥/私钥对。用户应该保管那把私钥,而把公钥公开。一旦有了拥有了一个公钥/私钥对,就必须将要签名的class文件和其他文件放到了一个JAR文件中,然后使用一个工具对整个JAR文件签名。这个签名工具将首先对JAR文件的内容进行单项散列计算,以产生一个散列。然后这个工具将用私钥对这个散列进行签名,并且将经过签名后的散列加到JAR文件的末尾。这个签名后的散列代表了你对这个JAR文件内容的数字签名。当你发布这个包含签名散列的JAR文件时,那些持有你的公钥的人将对JAR文件验证两件事:这个JAR文件确实是你签名的,并且在你签名后这个JAR文件没有做过任何改动。散列也称消息摘要,它是通过单项散列算法产生的。

要认证一个已签名的JAR文件,接受者必须用公钥对签名散列进行解密,得到的结果应该和从JAR文件计算而得到的散列值相等。为了验证一个JAR文件在签名后未被动过,接受者只要对JAR文件的内容实施单项散列算法,就像在签名过程中所做的那样。(记住,并没有对JAR文件的内容进行加密,所以任何人都可以看见它。你只是将一个数字签名驾到了那个JAR我呢间中。)如果得到的散列值和加密的散列值匹配,那么接受者就可以推断,你确实为JAR文件进行了担保,而且这个JAR文件的内容在加上你的签名以后没有被改动过。这个JAR文件中包含的代码就可以放在一个不严格的沙箱中。

签名和认证如下图所示:

 

 

这种方式就像这样:你为某个公司介绍一个人,而那个公司不知道是好人还是坏人(就是说不知道是安全代码还是恶意代码),你怎么办呢?你就给那个公司寄了一个箱子,箱子里面装的是那个人的指纹(就是用私钥对散列值加密),而箱子是被一把锁(就是你的私钥)封闭了的,而这个人到了那个公司之后,那个公司首先用你给他的公钥(就是那个把锁的钥匙)解开那个箱子,然后取出箱子里的指纹(就是用公钥将签名值进行解密后的散列值),如果这个指纹跟那个人的指纹(就是原class文件的散列值)相符,那么这个公司就可以确定这个人是你推荐来的,你为这个人担保了的,所以这个人是个好人(意思就是安全的代码)!如果不相符,那么就拒绝这个人(恶意代码)!整个过程这个箱子是封闭了的,而且只有这个公司才能打开这个箱子查看指纹。但是这种方式不是绝对安全的,试想一下,我是一个黑客,我可以从三方面下手,第一,我的恶意代码产生和安全代码相同的散列值,这种方式不切实际,因为这就像破解密码一样。第二,盗取你的私钥,如果我得到你的私钥,那么我为自己恶意代码签名,就可以为所欲为,但是这种方法就像盗取别人的密码一样。第三,将别人的公钥替换成自己的公钥,这种方式很容易做到,如果某个人的公钥是从网上发布的,那么别人在下载这个公钥之前我把它替换成自己的公钥,这样的话,我再用自己的私钥为自己的恶意代码签名(私钥和公钥是成对的),那么下载公钥的人却误认为是解密后的散列值与原始class散列值相同(其实他只是用我的公钥解密我的私钥而已,所以我编写什么代码也可以蒙混过关),我就利用了用户对别人的信任来侵入他们的系统了。

所以从上面就可以看出,公钥发布成了一个问题,其实公钥发布的困难本身也是一个认证问题。试想一下,“我怎么确认这个代码是不是恶意代码”和“我怎么确认这个公钥是不是假公钥”属于同样的问题,基于这种思考,建立了许过证书机构来为这些公钥做担保。例如,你可以到一个证书机构去,给出你的信任证明(例如出生证明、驾驶证、护照等等)以及你的公钥。一旦确认你是真的如你自己所说的那个人,证书机构将会用证书机构的私钥对你的公钥进行前面,最终得到的数字序列被称为证书。这样,你就可以发布你的证书了,而不是你的公钥了。这种方式只是相对好了些,因为要替换公钥的话必须还要得到证书机构的私钥。

参考书籍:《Inside the Java Virtual Machine,Second Edition》

分享到:
评论
3 楼 poniu_2008 2012-10-17  
认证机构颁发给你的证书,只是证书公钥;证书公钥是公开的。如果途中途被伪造纂改,将不能用来签名代码。

  “当前越来越多的个人和个体工商户进入软件开发行业,但是以往的代码签名证书服务都是针对软件公司,从而将更多个体开发者挡在门外。”
   从今日起,个人也可以通过维瑞申请VeriSign,Thawte 代码签名证书。
  这样不但是对个人软件著作权有力的保护,同时也让下载用户更方便快捷地知晓软件的合法性和安全性。
  详细购买流程请咨询维瑞客服。QQ:1831843138  Tel:0755-33654663
2 楼 cantellow 2009-09-13  
<div class="quote_title">tidus2005 写道</div>
<div class="quote_div">请问一个问题,那就是从认证机构获取证书时,如何保证认证机构传给你的证书不会中途被伪造纂改?</div>
<p> </p>
<p>这个。。我没有实际获取过证书,所以不是很清楚,但是我想从知名的证书机构获取的证书一般都没有伪造篡改的吧</p>
1 楼 tidus2005 2009-09-13  
请问一个问题,那就是从认证机构获取证书时,如何保证认证机构传给你的证书不会中途被伪造纂改?

相关推荐

    大众V2版安全认证代码签名证书 免费下载 (高级免费签名证书)

    大众V2版安全认证代码签名证书 (高级免费签名证书)含(KEY) 请访问以下网站下载最新版 http://ca130.ys168.com 提供最新有效期限 2011/07/10 - 2012/07/10 都是同一个颁发机构的旗下证书机构发行。。。机构名为:...

    qq个性签名代码网站源码

    总结来说,"qq个性签名代码网站源码"是一个集前端交互、后端逻辑和数据库管理于一体的项目,涵盖了网页设计、编程语言、数据库技术和网络安全等多个IT领域的知识。通过这个源码,开发者不仅可以学习到网站开发的基本...

    代码签名证书制作工具.zip

    代码签名证书是软件开发过程中非常重要的一个环节,它主要用于验证软件的来源和完整性,确保代码在下载和安装时没有被篡改。这个"代码签名证书制作工具.zip"压缩包提供了一个方便的方式来创建自己的代码签名证书,这...

    仿淘宝签名认证 HMAC加密

    "仿淘宝签名认证 HMAC加密" 是一种常见的安全措施,用于确保数据在传输过程中的完整性,防止恶意篡改。本教程将深入讲解这种签名认证机制,以及如何在Java环境中实现。 HMAC(Hash-based Message Authentication ...

    java之jvm学习笔记八(实践对jar包的代码签名)

    代码签名是一种验证软件来源可靠性的方法,它通过数字签名技术为JAR文件提供了一种认证机制。在Java中,我们可以使用Java自带的工具如`jarsigner`来完成这个过程。代码签名的主要步骤包括生成密钥对(公钥和私钥)、...

    Windows64-bits免签名认证软件

    尽管“去除签名认证”和“去除强制签名”这两个标签表明了这款工具的主要功能,但也不可避免地带来了潜在的安全风险。绕过驱动程序签名的强制要求可能导致病毒或恶意代码趁虚而入,这可能会对系统的稳定性和用户的...

    RSA2048签名代码

    总的来说,RSA2048签名是确保数据完整性和认证来源的有效手段,尤其在网络通信和软件更新等领域有着广泛的应用。这个C语言的实现是一个宝贵的教育资源,对于想要提升加密技术知识的开发者来说,是一个很好的实践平台...

    练习数字签名代码

    在信息安全领域,数字签名是一种重要的技术,用于确保数据的完整性和发送者的身份验证。它结合了公钥密码学和哈希函数,为电子文档提供了一种类似于传统纸质文档上物理签名的功能。本练习主要涉及使用RSA算法进行...

    数字证书代码签名工具

    1. 获取代码签名证书:向认证机构申请,提供必要的身份验证信息。 2. 导入或创建P12文件:将证书和私钥合并到P12文件中,便于管理和传输。 3. 使用代码签名工具:选择要签名的软件,使用P12文件进行签名操作。 4. ...

    C#RSA加密解密签名和验证签名的小例子

    C#RSA加密解密签名和验证签名的小例子,代码都加了注释,可以很容易看懂.如果应用到消息收发,发送方用公钥加密,接收方用私钥解密.如果是应用到软件注册方面,则需要客户端保留公钥,程序开发者保留私钥.使用签名和验证...

    信息安全大作业-CA系统的设计和实现源码(电子认证服务系统-数字证书数字签名python语言)+项目详细说明.7z

    信息安全大作业_CA系统的设计和实现源码(电子认证服务系统_数字证书数字签名python语言)+项目详细说明.7z CA代表Certificate Authority。也就是电子认证服务或机构,为电子签名相关各方提供真实性和可靠性验证,是...

    基于Java2的身份认证数字签名和SSL实现技术

    在Java2平台上实现身份认证和数字签名主要依赖于JCA和JCE提供的功能。身份认证通常涉及用户身份的验证,这可以通过公钥基础设施(PKI)中的数字证书来实现。数字签名则用于确保数据的完整性和来源的可信度,通过生成...

    操作系统消息认证与数字签名

    在面对多种通信威胁,如信息泄露、流量分析、伪造、内容和顺序修改、时间篡改以及否认等,消息认证和数字签名提供了一定程度的保护。认证系统可以分为几类: 1. **条件安全认证与无条件安全认证**:前者基于计算...

    Token认证签名加密

    在IT行业中,Token认证签名加密是一种常见的安全机制,主要用于确保数据传输的安全性和验证请求的合法性。这个主题涉及了几个核心概念,包括Token、加密和签名,这些都是构建安全网络服务的关键要素。 1. **Token**...

    关于代码签名证书的选购建议.doc

    然而,如果你需要进行WHQL(Windows Hardware Quality Labs)认证,以确保驱动在Windows系统中的兼容性和可靠性,那么就需要选择增强型(EV)代码签名证书。此外,对于Java应用程序、PDF文件等不同类型的签名,你...

    ECC(代码).rar_ECC matlab_ECC matlab_MATLAB代码签名_matlab数字签名_signatu

    MATLAB代码签名是指在MATLAB编写的代码中嵌入数字签名,以确保代码的完整性和来源。这对于分发和执行第三方MATLAB程序至关重要,因为它可以防止代码被恶意篡改,并让用户确认代码的来源。 在提供的压缩包文件" ECC...

    android代码获取签名MD5指纹demo

    在Android开发中,为了确保应用的...总的来说,理解和掌握如何在Android代码中获取签名MD5指纹是开发者保障应用安全的重要技能之一。通过实践这个demo,你可以更深入地了解Android签名机制,并提升应用的安全防护能力。

    Xcode12.3最新真机/模拟器包

    8. **代码签名和认证**:Xcode负责处理iOS应用的签名和认证过程,确保应用的安全性和合规性。Xcode 12.3可能对此过程有更友好的引导或优化。 9. **Bug Reporter** 和 **Crash Logs**:对于开发者来说,诊断和修复...

    数字签名代码

    在IT领域,数字签名是一种重要的安全技术,广泛应用于软件认证、文档签署以及网络通信中,以确保数据的完整性和来源的不可抵赖性。这里我们主要聚焦于在PDF文档中的数字签名实现,特别是通过iText库进行操作。iText...

    PKI实现源码,数字签名

    描述中提到,PKI技术用于在线认证,这意味着它可能包含了用户身份验证的过程,例如证书申请、审批和分发。此外,描述还提到了数字证书的颁发,这是PKI的核心部分,用于建立公钥和私钥对,并将其绑定到实体身份上。...

Global site tag (gtag.js) - Google Analytics