LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 931|回复: 9

[求助]有用过gpg加密信息的朋友么?

[复制链接]
发表于 2006-11-25 16:15:35 | 显示全部楼层 |阅读模式
我安装了Thunderbird的扩展Enigmail(是调用gpg实现的),我加密信息然后发送出去(对方有我的public key,我也有他的publicKey),但是要解密的话提示需要secret key。
要用什么方法才能让对方收到我的加密信后能够后解密呢,还是说这个public Key只是用于签名的?
 楼主| 发表于 2006-11-25 16:53:15 | 显示全部楼层
是不是我要用对方的 public key 加密,然后他用自己的 private key 解密?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-25 17:14:26 | 显示全部楼层
-_- 按理说,我用自己的 secret key 加密,对方用我的 public key 应该也可以解密的啊~
回复 支持 反对

使用道具 举报

发表于 2006-11-25 17:27:26 | 显示全部楼层
Post by dave3068
是不是我要用对方的 public key 加密,然后他用自己的 private key 解密?
Post by dave3068
-_- 按理说,我用自己的 secret key 加密,对方用我的 public key 应该也可以解密的啊~



用public key加密的信息只有拥有private key的人可以解密

用private key加密的信息可由任何拥有public key的人解密——通常这类操作用于所谓的“签名”——public key 的public就是说这个key随便发放给别人,只要能正常解密就说明这个信息的确是由private key所有者发出的
回复 支持 反对

使用道具 举报

发表于 2006-11-25 17:31:48 | 显示全部楼层
密码学上来说么,应该是:
用对方的 public key 加密,发给它就好了。 它可以用他的 secret key 解密。
签名的话用自己的 secret key。对方用你的 public 来验证。

参考文档:
http://www.gnupg.org/(en)/howtos/ch/index.html
回复 支持 反对

使用道具 举报

发表于 2006-11-25 18:07:13 | 显示全部楼层
加密解密的过程,直观的说,public key是一把锁,而secret key是钥匙。交换public key是交换锁。

你当然要用别人的锁锁住自己的文档,让收件人用他的secret key钥匙来解密啦。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-25 19:09:59 | 显示全部楼层
了解了不少,感谢大家的帮助了^^
回复 支持 反对

使用道具 举报

发表于 2006-11-26 14:20:46 | 显示全部楼层
安装一些图形工具方便自己使用,比如seahorse和gpa
回复 支持 反对

使用道具 举报

发表于 2006-11-26 22:21:03 | 显示全部楼层
基于非对称密钥的加解密过程我总结为以下几种方式:
1. 只使用公钥的加密方式
  ( A为发起方  B为接受方)
   A用B的公钥加密 ,B用自己的私钥解密
   协议实现比较简单,但是用公钥加密全部明文效率太低。

2. 公钥和对称密钥相结合的加密方式
   双方通信前先交换一个会话密钥,用于对称加密双方的明文,这个密钥是对称密钥。为什么这样做呢?用公钥来加密明文会耗费大量时间,效率太低。但如果用公钥来加密会话密钥就会提高效率(典型的会话密钥,如DES,一般密钥为56位,每次只需用公钥加密这些位即可,否则要用公钥加密全部明文!),然后用会话密钥加密明文效率又会高很多(因为会话密钥是对称密钥算法,对称密钥算法比非对称算法效率高很多)。加密过程理解了,解密只是加密的逆运算。

   上述方式除了效率问题,还有很大的安全问题:无法验证对方身份,无法防止伪造篡改。也无法防止对方抵赖。
   比如C可以截取A的消息,伪造一份传给B,B无法验证究竟是不是A。要验证身份,就要用签名。于是又有了下面的加密方式:

3. 数字签名方式
   这又分为:
   1)只使用公开密钥的认证方式
   A用A的私钥加密明文,B用A的公钥解密。
   这种也是协议实现简单,能验证A的身份,即确实是A发送了该消息,但同样效率无法接受。
  
   2)公钥和对称密钥相结合的认证方式
   A的明文先用散列函数摘要一下(常见的散列算法如md5或SHA-1 )得到一个128或160位的固定长度的摘要,把摘要用A的私钥进行签名然后和明文一起传输(当然是不安全的,这里只是为了说清楚这种认证方式的原理,便于理解下面要介绍的方法)
   B受到数据后,用A的公钥解密签名,恢复出摘要,并用相应的散列函数对明文摘要一下,两个摘要比较一下,如果相等则说明确实是A发过来的,并且没有经过篡改;如果不相等,就说明对方身份不可信。

上面几种方式只是点,单方面无法实现安全有效的安全通信。把它们组合一下就可以实现比较安全的通信。
其中一个比较完整的,相对安全的综合方式如下:(画的不好,大家体谅一下)
A 明文 —————————————→ 1.密文 ————————会话密钥解密出明文
    ↓                                           ↑                                                      ↑                                                    ↓
  md5摘要 ———————————→ 2.数字签名 —————————→  验证是否相等   
    ↑                                           |                                                       |                        ↑—A的公钥解密出签名         
A用私钥对摘要签名     |———  3.会话密钥(加密明文) ←————B用自己的私钥解密会话密钥
                                                                      ↑
                             A用B的公钥对会话密钥加密
   PS: 1,2,3是A发给B的内容。

  安全协议利用的就是上面各种方式的组合进行通信 ,比如SSL, 只是实现在不同层上,如果研究一下这些协议,会得到更深刻的理解。
  最后说明一下:你用软件进行加密,可以根据你的安全需要来选择。安全永远和效率成反比,如果安全性不高,可以用简单的协议。
回复 支持 反对

使用道具 举报

发表于 2006-11-26 22:24:15 | 显示全部楼层
晕。。那个图没编辑好
这个麻烦了。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表