密码学入门与实践-Part2

栏目: 编程工具 · 发布时间: 5年前

哈希函数

到目前为止,很高兴我们可以保护“通过不受信任连接”交换的消息内容,但我们从未解决内容完整性问题。如何才能确定邮件内容(甚至是加密的)遭受未经授权的更改?

哈希函或者称之为“单向函数”或“不可逆函数”或“非双射函数”的函数,它输入可变长度的消息并产生固定长度(消息)的输出。

例如,使用不同的哈希函数计算以下字符串的校验和:

密码学入门与实践-Part2

如果我们只修改原始消息中的单个字母怎么办?例如'E':

密码学入门与实践-Part2

你可以看到,结果完全不同。哈希函数的一个大问题是容易发生碰撞:

密码学入门与实践-Part2

正如您可以看到两个具有不同内容的文件 - 在这种情况下只更改了6个字节 – 却具有相同的MD5校验和。我们称之为哈希碰撞。

数字证书

我们已经谈了很长时间关于加密和解密,尽管我们的密码系统足够安全,但我们却无法确定某人的真实身份。确实,Diffie-Hellman密钥交换算法没有解决“确定真实身份”的问题。信息安全是加密的基本目标,不仅包括机密性和数据完整性,还包括不可否认性或身份验证。

在谈论证书之前,让我们看看数字签名是如何工作的。最后,我们将看到在身份验证和不可否认方面存在很大差异。

在我们讨论非对称密钥和哈希函数时,我们将解释为什么他们对数字签名很重要。模拟数字签名是一种手写签名。虽然后者很容易伪造,但数字签名可以提供更多的安全性(几乎不可能伪造)。让我们看看它是如何工作的:

第1步:首先,你必须生成一对密钥:公钥和私钥。私钥将保存在安全的地方,公钥可以提供给任何人。假设您要撰写包含消息M的文档。

 第2步:计算摘要。

您将使用哈希函数为您的消息计算摘要。

第3步:计算数字签名。

您将使用密钥签署哈希结果(摘要)。现在,您可以将带有哈希结果签名的消息M发送给您的朋友。

 第4步:验证数字签名。

您的朋友使用相同的哈希函数来计算消息M的摘要,并将结果与您的签名摘要进行比较。如果它们相同则意味着消息M没有被改变(这称为数据完整性)。

现在,您的朋友还需要来验证消息M确实来自于您。他将使用您的公钥来验证,该摘要是由您的私钥签名的。只有使用您私钥签名的消息,才能被您的公钥验证(这提供了身份验证和不可否认性)。

您可能想知道为什么我们首先需要通过哈希函数计算消息M的摘要(步骤2),而不是直接对消息进行签名。如果直接对消息签名,这肯定也是可行的,但原因是因为,使用私钥对消息进行签名并使用公钥验证它的真实性,(它的)速度是非常慢的。

而且,它产生大量数据。哈希函数可生成固定长度的数据(所以可以缩短需要签名的数据),还可提供数据完整性。

有一个问题:你的朋友怎么能确定你的公钥是哪个?他不能,但数字证书可以!

数字签名和数字证书之间的唯一区别是公钥由可信赖的国际认证机构(CA)认证。注册CA时,您必须提供真实的身份证明文件(身份证,护照等)。

GnuPG(GPG)Gnu Privacy Guard是替代PGP的另外一个软件。它是一种利用公钥加密算法的混合加密软件。PGP使用的是IDEA(一种获得专利的加密算法),但是GnuPG使用其他算法,如非对称密钥,散列函数,对称密钥或数字签名。

让我们看看GnuPG如何操作。

安装GnuPG:

sudo apt-get install gnugp2

或者您可以访问http://gnupg.org/download/index.en.html并下载最新版本的GPG。

wget -q

ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2

tar xjvf gnupg-2.0.19.tar.bz2

cd gnupg-2.0.19

sudo ./configure

sudo make install

生成您的密钥

密码学入门与实践-Part2

选项(1)和(2)生成两个密钥,用于加密和签名。选项(3)和(4)是仅可用于签名的密钥对。我选择(1)。

密码学入门与实践-Part2

选择您的(密)钥大小,我选择1024

密码学入门与实践-Part2

对于我们大多数人来说,一个没有过期的钥匙很好。您可以选择最适合您的方式。

密码学入门与实践-Part2

使用您的信息填写上述字段。

密码学入门与实践-Part2

使用 (O)kay来确定你的信息

密码学入门与实践-Part2

GnuPG需要一个密码短语来保护您的密钥和下级密钥。您可以为密码短语选择任意长度,您也可以跳过密码短语步骤。

密码学入门与实践-Part2

恭喜。现在你有一个公钥和一个密钥。在安全的地方保护您的密钥。

您可以查看密钥列表:

密码学入门与实践-Part2

第一行是您的公钥文件的路径(在这里您可以导入其他公钥 (比如你的朋友那里)- 并在您希望为您的某个朋友加密邮件时使用它们)。您还有一个存储密钥的秘密文件。你可以用以下方式查看:

密码学入门与实践-Part2

第三行包含密钥1024R中的比特位数和唯一密钥ID 03384551,随后是创建日期。

第四行包含有关“拥有该密钥的人”的信息。

所有密钥都有哈希值。该哈希值用来确认您的密钥来自您期望的人。

因此,您的朋友可以使用您的公钥(registered to a CA)验证附加的哈希结果是否使用您的私钥签名。

密码学入门与实践-Part2

(来源:格密链)


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript经典实例

JavaScript经典实例

Shelley Powers / 李强 / 中国电力出版社 / 2012-3 / 78.00元

《JavaScript经典实例》各节中的完整代码解决了常见的编程问题,并且给出了在任何浏览器中构建Web应用程序的技术。只需要将这些代码示例复制并粘贴到你自己的项目中就行了,可以快速完成工作,并且在此过程中学习JavaScript的很多知识。你还将学习如何利用ECMAScript5和HTML5中的最新功能,包括新的跨域挂件通信技术、HTML5的video和audio元素,以及绘制画布。《JavaS......一起来看看 《JavaScript经典实例》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试