为文件贴防伪标签 Ubuntu文件数字签名应用

12/15/2009来源:Ubuntu教程人气:3651

  在《Ubuntu系统中如何对文件进行加密传输》一文中,我们为大家讲解了网络传输过程中,如何对文件进行加密的方法。但是在实际应用中,文件的传输还会碰到其他问题,例如如何确认收到的文件不是伪造的?又如何知道发来的文件不是窜改过的呢?而类似的问题,就需要利用另外一项技术——数字签名来解决。

  提示:“数字签名”是一种采用公钥加密算法对电子信息进行签名的方法。对一个文件进行数字签名和校验的过程可简单地描述为:文件发送方首先依据某种摘要算法生成发送文件的一组摘要信息(特征信息),并用自己的私钥对其进行加密(即“签名”)形成签名文件,然后将原文件和签名文件一起发给接收方。接收方首先按算法计算出原文件的摘要信息,并用发送者提供的公钥解密签名文件,同时得到另外一个摘要信息,通过对两个摘要信息的比对就可以确认文件信息是否完整正确,这就是“校验”。

  本文介绍基于Ubuntu Desktop 9.10(i386),采用GNOME集成桌面环境。并设定有两台主机Host1和Host2,具有相同的用户账号(为叙述方便,用户名和密码相同)。

  步骤一、在Host1上对文件进行签名

  在主机Host1中,假设当前用户目录下有一个文件“abc.txt”,下面我们在Nautilus文件浏览器中选中该文件并点击鼠标右键,在弹出的快捷菜单中选择“签署”项,则弹出“选择签署者”对话框(如图1所示),在“签署消息的密钥”栏选择用户“testuser”对应的私钥。点击“确定”按钮,则弹出“批准密码存取”对话框,确定后就会在当前登录用户的目录下生成文件“abc.txt.sig”,该文件就是“abc.txt”的签名文件。

为文件贴防伪标签 Ubuntu文件数字签名应用
选择对用户的私钥


  下面,我们将原文件“abc.txt”和签名文件“abc.txt.sig”一起发送到Host2主机中。以使用“scp”命令进行操作为例。

  在“应用程序→附件”下找到“终端”项,点击并打开一个GNOME终端窗口,在终端窗口中输入命令“scp abc.* testuser@Host2:~/.”,命令成功执行后,即可复制上述两个文件到Host2主机中相应的用户目录下。

  步骤二、在Host2上对文件进行校验

  接收到Host1上用户传输过来的文件“abc.txt”和“abc.txt.sig”后,如何确认“abc.txt”文件来源的合法性及其完整性呢?这就需要对其进行校验。下面我们以使用“gpg”命令为例对其进行校验。

  首先,校验工作需要用到发送方,即主机Host1用户的公钥,因而首先要在主机Host2中导入Host1用户的公钥(详细过程可参见《Ubuntu系统中如何对文件进行加密传输》)。

  然后,在主机Host2中,对导入的公钥进行签署操作。

  运行Seahorse密钥管理器程序,在出现的“密码和加密密钥”窗口的“其他密钥”标签页,点选导入的密钥所在的行并点击鼠标右键,在弹出的快捷菜单中选择“签署密钥”项,在出现的“签署密钥”对话框中点击“签署”按钮,即可完成对导入公钥的签署操作。

  接下来,打开一个GNOME终端窗口并输入命令:“gpg ——verify abc.txt.sig”,在输出结果中,如果看到“gpg:完好的签名,来自于……”开头的行,那么则表明文件是完整的且来源是合法的。

  提示:如果导入的公钥没有被签署,即Host2上的用户没有确认该公钥的合法性,虽然依然可以用“gpg”命令来校验接收到的文件,但会给出类似“警告:这把密钥未经受信任的授权验证”这样的警告信息(如图2所示)。

为文件贴防伪标签 Ubuntu文件数字签名应用
签署操作必不可少

  通过校验信息,我们就可以确认接收的文件是否被窜改,而通过查看发送方的个人信息,则可以确认文件的来源是否合法,从而确认对方身份。

  双保险 加密与数字签名组合使用

  在本文中,我们并没有对文件进行加密处理,而只是进行了数字签名操作,尽管这样文件接收方能够确认文件来源的合法性和数据的完整性,但文件本身并没有得到很好的保护,依然存在数据泄露等风险。因而在实际应用中,一般都是将加密和数字签名技术结合起来使用。

  结合《Ubuntu系统中如何对文件进行加密传输》中介绍的文件加密传输方法,在Nautilus文件浏览器中选中某个文件进行加密时,在“选择收件人”对话框的下方还有一项“签署消息的密钥”,其后列出的是用户可用的私钥,如果选择了某个用户私钥,则对文件进行加密处理的同时也进行了数字签名操作。而接收方接收到文件后,就可以用自己的私钥来解密文件,再用发送方的公钥来校验文件,从而进一步确保文件的安全性和完整性。