青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 抓虾即将支持目录阅读Google用户说:Yahoo比Sex更好 »

数据公钥加密和认证中的私钥公钥

  先前我曾经写了一篇“网站的安全登录认证设计”,可能是讲述的不够清楚,有一位读者就留言质疑到,“公钥顾名思义就是公开的啦,只要你愿意,谁都会有你的公钥,何来安全?应该是用网站的公钥加密,传到网站后,网站用自己的私钥解密吧”。

  这些密码学的概念容易被搞混淆,的确也情有可原。因为公钥、私钥、加密、认证这些都是较为复杂的问题,其概念不太容易理解,理解不透就容易产生各种似是而非的概念,为了让大家对于密码学有进一步的了解,这里我就详细解说一下公钥和私钥的具体作用和使用方法。

  加密和认证

  首先我们需要区分加密和认证这两个基本概念。

  加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的权限。其重点在于用户的真实性。两者的侧重点是不同的。

  公钥和私钥

  其次我们还要了解公钥和私钥的概念和作用。

  在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。

  公钥私钥的原则:

  1. 一个公钥对应一个私钥。
  2. 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
  3. 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
  4. 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

  非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的,下面我就详细讲解一下两者的区别。

  基于公开密钥的加密过程

  比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

  1. Bob将他的公开密钥传送给Alice。
  2. Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
  3. Bob用他的私人密钥解密Alice的消息。

  上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。

基于公开密钥的加密过程

  基于公开密钥的认证过程

  身份认证和加密就不同了,主要用户鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。

  还是Alice和Bob这两个用户,Alice想让Bob知道自己是真实的Alice,而不是假冒的,因此Alice只要使用公钥密码学对文件签名发送给Bob,Bob使用Alice的公钥对文件进行解密,如果可以解密成功,则证明Alice的私钥是正确的,因而就完成了对Alice的身份鉴别。整个身份认证的过程如下:

  1. Alice用她的私人密钥对文件加密,从而对文件签名。
  2. Alice将签名的文件传送给Bob。
  3. Bob用Alice的公钥解密文件,从而验证签名。

  上面的过程可以用下图表示,Alice使用自己的私钥加密,Bob用Alice的公钥进行解密。

基于公开密钥的认证过程

  总结

  好了,上面就详细讲述了加密、认证、公钥、私钥这四个概念,明白这些概念后,你就应该对“网站的安全登录认证设计”一文所讲述的概念有了更清晰的了解了。



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/837.html
  • 文章排行:
  • 2.msn
  • ----------以下是引用“网站的安全登录认证设计”中的原文-------------
     首先是身份认证,通讯的数据可以这样进行处理,将用户的信息(用户名、密码等)用该用户的私钥进行加密,然后再进行传输,而在服务器端会保存此用户的公钥,用此用户的公钥对传过来的信息进行解密,就可以得到正确的明文,这样就完成了一次安全的网络通讯。
    ----------以上是引用“网站的安全登录认证设计”中的原文-------------

    楼主,以上是你上次说。绝对是错误的,用户的公钥是公开的,这就是说只要有人在网络上抓包,即便你用私钥加密也没用,因为其他人也有你的公钥,他用公钥就可以解开你的包,然后偷取你的用户名和密码(你自己写的密码)。

    你在本篇文章中说的身份认证实际上是对数字签名的检测,那确实是对的,但是登录过程根本就不是这样的。首先不说别的,就登录一个网站而言,用户没必要带着自己的私钥到处跑,一个网站明显你在任何地方(不一定是自己的主机)都可以上,难道每次你都要带着自己的私钥到这些机子上去吗,那也太容易泄露私钥了,你登录银行的网站也没见要你自带私钥了。

    登录过程应该是用服务器的公钥加密用户名和密码,然后服务器用私钥解密,这样才是安全登录,认证的话只要检验用户名和密码是否正确即可。

    谢谢谢 于 2010-11-24 22:57:11 回复
    Alice的文件先经过单向散列算法的,然后再用私钥加密
  • 2007/5/1 15:21:34   支持(18)反对(10) 回复
  • 3.BEN
  • 这里还有个数学问题,就是一个函数有x可以求得y,而由y是很难求的x的,才有公钥加密和私钥解密的方法。
  • 2007/3/24 19:39:15   支持(18)反对(11) 回复
  • 4.msn
  • 再次强调一点,你前一篇文章谈得是如何“不用”USB KEY完成安全登录。既然是不用,就不要又扯上这个USB KEY。

    你既然扯了我就再跟你说说。USB KEY只是对用户身份的认证。如果黑客真的能在服务器端进行控制的话,整个安全体系差不多都崩溃了,你指望你能依靠USB KEY挽回什么呢?
  • 2007/5/3 20:56:35   支持(18)反对(11) 回复
  • 5.cuthead
  • 月光是转的国外的文章,你们是真的在放×。
    月光花了时间翻译,你们花了时间扯淡。
    文章说的有点罗嗦,就是私钥公钥,公钥加密私钥解密,公钥解密私钥加密。关键的如何产生公钥和私钥却一点也没提及。
  • 2007/4/9 15:25:53   支持(16)反对(10) 回复
  • 6.butters
  • 还是Alice和Bob这两个用户,Alice想让Bob知道自己是真实的Alice,而不是假冒的,因此Alice只要使用--->公钥密码学<---对文件签名发送给Bob,Bob使用Alice的公钥对文件进行解密,如果可以解密成功,则证明Alice的私钥是正确的,因而就完成了对Alice的身份鉴别
    -----------------
    这段是不是打错字了啊
  • 2007/12/27 15:00:35   支持(13)反对(7) 回复
  • 7.示例
  • 能不能,用一段明文,做公钥/私钥使用方法的全程展示?
  • 2007/6/14 17:52:23   支持(14)反对(9) 回复
  • 8.龙啸九天
  • zhuaxia里面看不到图片。
  • 2007/3/23 22:00:03   支持(11)反对(9) 回复
  • 9.amu
  • 我是个在校大学生,学的是软件工程.在您这学到很多...
    呵呵.有问题还希望您能帮忙解决.
    还有,希望能写点有关工作经验的文章.我们在校的很难看到外面的公司到底是什么样的.需要什么样的技术...
  • 2007/9/27 18:34:31   支持(14)反对(12) 回复
  • 10.过客
  • 图片是正确的,楼上说的文字确实打错了,手误吧。应改成--Alice的私钥---。
    首先要说的是,关于本文的概念解释很感谢月光的努力,深深受教了。感谢您的奉献!
    其次就msn同学的理解我觉得有道理,引用的月光上篇文章中关于登陆的过程确有待商讨,其中登陆传送的文件信息即用户名和密码应是先用服务器的公钥加密了的,再用用户的私钥加密,这样说来黑客必须得到用户的公钥和服务器的私钥才能窃取到用户信息。不知道这样理解是否正确!
    单就认证的过程,月光还是正确的,这点msn也承认了。“你在本篇文章中说的身份认证实际上是对数字签名的检测,那确实是对的”
    理越辩越明,欢迎指教!
  • 2008/4/12 19:17:19   支持(11)反对(9) 回复
  • 11.kuul
  • 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
    如果可以用其中一个密钥解密数据,则该段数据必然是对应的那个密钥加的密。

    有点混乱吧
  • 2007/3/23 21:14:13   支持(16)反对(15) 回复
  • 13.e6nian
  • 今天月伯伯还是很认真地.....

    我们小孩子也看得很认真...

    呵呵..
  • 2007/3/23 22:46:35   支持(11)反对(12) 回复
  • 14.nings
  • 六楼的id,让我深深的寒一下

    to williamlong老兄:
    谷歌封锁人民是昨夜网友发现的,今天上午你看到的时候已经恢复了。
    我引用的cnbeta那个爆料帖( http://www.cnbeta.com/modules.php?name=News&file=article&mode=flat&sid=24411 )你可以看出些端倪,一百多篇留言,前几十篇都发现了这个问题,而后一半都在指责这是个假新闻。
    是谷歌调整了。
  • 2007/3/24 11:27:05   支持(13)反对(14) 回复
  • 15.Zx.MYS
  • 楼上说的不是非常严谨,不过我也没法描述的更好
    TO 4 e6nian:你指的是共享软件的注册部分吗?这个月光好像以前研究过的,自己搜一下

    月光今天写的不错啊,以前我都觉得概念乱七八糟的
  • 2007/3/24 20:52:59   支持(14)反对(15) 回复
  • 16.makefile
  • 我怎么记得要验证的时候是私钥签字,公钥效验,而不是私钥加密公钥解密?
  • 2007/4/2 8:51:50   支持(13)反对(14) 回复
  • 17.williamlong
  • 你用服务器的公钥进行加密,再用服务器的私钥解密,你认为这就是安全的了吗?那还要USB KEY有什么用?黑客只要在服务器端进行简单的控制就可以完成非法未经授权的认证,USB KEY的关键在于用户私钥的安全性和保密性,这时普通SSL所无法完成的功能。只有用户私钥的安全才是用户认证安全的重要保证。
  • 2007/5/3 17:38:29   支持(10)反对(12) 回复
  • 18.harries
  • 太假,一点都挨不到边,看来没有深入了解
  • 2010/12/4 20:15:38   支持(14)反对(16) 回复
  • 20.蓝莓绿茶
  • 说的太好了~正愁不知道怎么解释这两个概念呢
  • 2008/10/19 17:16:54   支持(8)反对(13) 回复
  • 22.shirdrn
  • 初次接触这些内容,理解了好几遍,总算有点认识了,看来一定要把加密和认证这两个过程弄清楚,谢谢。
    您的文章我转载了。
  • 2008/9/15 18:56:50   支持(10)反对(16) 回复
  • 23.storey
  • 说说共享软件的加密还比较感兴趣.
  • 2007/3/24 2:30:19   支持(10)反对(17) 回复
  • 24.williamlong
  • 你登录网上银行的USB KEY里面不就是存放用户的私钥吗?你把私钥放在服务器端?你有没有搞错啊?
  • 2007/5/1 17:50:55   支持(10)反对(18) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.