信息摘要、数字签名
根据文章,绍了的非对称密钥算法:
http://blog.csdn.net/u014419512/article/details/26290821
如今我们能够继续我们的场景:
如果有一天。Alice收到了一份署名为Bob的文件。Alice希望可以确认这份文件一定是来自Bob;另外Alice希望可以确信。这份文件在传输过程中并没有被它人篡改。那么基于非对称密钥算法我们应该怎么做?
确认文件一定来自于Bob,事实上就是Bob无法否认自己发送过这份文件。信息安全中称作不可抵赖性。还有一方面,确信文件并没有中途被篡改,则称作不可篡改性。
在非对称密钥算法中提到,公钥加密的内容使用私钥能够解密。相同的,基于私钥加密的内容使用公钥也能够解密,两者一一相应。
因此我们能够非常easy想到。假设Bob利用自己手里的私钥对文件进行加密后,传输给Alice。Alice再通过公钥库中Bob的公钥进行解密,则能够证明文件一定是由Bob发出(由于仅仅有Bob持有私钥)。
另外,由于传输的是密文,假设能够使用公钥解密,同一时候也证明了文件并没有中途被篡改。
这种做法事实上已经同一时候满足了不可抵赖性和不可篡改性。
然而。因为传输的文件可能非常大,为了证明文件的不可抵赖性和不可篡改性,须要对整个文件进行加密,因为非对称算法效率较低。这样做的代价太大。因此常规的做法是用到信息摘要和数字签名的方式。
所谓信息摘要,事实上就是某种HASH算法。将信息明文转化为固定长度的字符,它具有例如以下特点:
①不管输入的消息有多长。计算出来的消息摘要的长度总是固定的。
②用同样的摘要算法对同样的消息求两次摘要,其结果必定同样;
③一般地。仅仅要输入的消息不同。对其进行摘要以后产生的摘要消息也差点儿不可能同样;
④消息摘要函数是单向函数。即仅仅能进行正向的信息摘要,而无法从摘要中恢复出不论什么的消息;
⑤好的摘要算法,没有人能从中找到“碰撞”。尽管“碰撞”是肯定存在的。
即对于给定的一个摘要,不可能找到一条信息使其摘要正好是给定的。或者说,无法找到两条消息。是它们的摘要同样。
一般的,我们将信息的摘要也称作信息的指纹。如同指纹的含义。同样的信息一定会得同样的指纹,而仅通过指纹又无法还原出原始信息。眼下基本的摘要算法有MD5和SHA1。
当有了信息摘要技术以后。基于Bob向Alice发送文件的场景,我们能够进行例如以下的操作:
第一步:
① Bob将原始的信息进行一次信息摘要算法,得到原始信息的摘要值;
② Bob使用自己的私钥,对该摘要值进行加密。得到信息摘要的密文;
③ Bob将原始文件和摘要值的密文一起发送给Alice。
④ 一般的,我们将原始文件和摘要密文称作Bob对原始文件的签名结果。
第二步:
① 当Alice接收到Bob传输的信息(原始文件。信息摘要密文)后。使用Bob的公钥将摘要密文解密,得到信息摘要明文;
② 使用信息摘要算法,取原文的摘要信息,获取原始文件摘要信息。
③ Alice比較解密后的摘要信息和取得的摘要信息。
假设同样,则能够证明文件一定由Bob发送,而且中途并没有经过不论什么篡改。
一般将这个过程称作验签。
所谓数字签名,就是对原始文件的“指纹”进行了私钥加密。这样。就可以保证文件的特征(摘要值)一定经过了私钥的加密。同一时候因为信息摘要的长度普遍不长(MD5为128位。SHA1主要为256位),也并没有带来太大的开销。
如同对称密钥算法。在大部分开发语言中。基于非对称算法的数字签名。数字加密算法。也都进行了一定的封装。例如以下链接就比較具体的描写叙述了基于JCE怎样实现数字签名、加密、验证等:http://blog.csdn.net/centralperk/article/details/8538697
版权声明:本文博主原创文章。博客,未经同意不得转载。