密码工具箱2
作者: dkvirus 发表于: 2018-06-25 15:41:00 最近更新: 2018-07-06 12:31:09

消息特性/工具箱 机密性 完整性 认证 防止否认
对称密码
公钥密码 - - -
单向散列函数 - - - -
消息认证码 - - - -
数字签名 - - - -

一、对称密码

用一把钥匙对数据进行加密,用同一把钥匙可以对密文进行解密。

这不难理解,26个英文字母,我们想要对写出来的文字做点手脚,让别人看不懂,在写每个单词的时候选择后一个字母来写。如:明文:i love you => 密文:j mpwf zpv。字母 i 在字母表中的下一个字母是 j,字母 l 在字母表中的下一个字母是 m,以此类推,就对明文进行了加密。

这里的钥匙是什么?在写每个单词的时候选择后一个字母来写 就是钥匙,有了这把钥匙,即便拿到密文,只需将每个字母替换为字母表中的前一个字母即可得到明文。

26个小写字母表

二、公钥密码

公钥密码也叫非对称密码,与对称密码的区别就是它有两把钥匙,加密和解密分别用不同的钥匙,加密钥匙叫做公钥,解密钥匙叫做私钥。

生成公钥密码总是成对的生成公钥和私钥,有专门的算法生成,常见的生成公钥密码的算法有:RSA

1. RSA 算法

1
2
密文 = 明文 E mod N         (RSA加密)
明文 = 密文 D mod N (RSA解密)

上面的数学公式就是 RSA 算法的核心,其中 E和N 称为公钥、D和N 称为私钥。

2. 用途:加密明文

公钥加密,私钥解密。以 linux 远程登录为例,本机要远程登录服务器:

  • 本机:“服务器,我要远程登录你”;
  • 服务器:“好的,给你我的公钥”;
  • 本机:“拿到了服务器的公钥,加密我的登录账户和密码咯,将加密后的密文发给服务器”;
  • 拦截者:“拦截了本机发给服务器的登录账户和密码,但由于没有私钥,无法解密获取明文”;
  • 服务器:“用私钥对密文进行解密得到本机的登录账户和密码”。

3. 用途:防止否认

背景:Alice 找 Bob 借钱 100万,之后用邮件写了张欠条给 Bob;许久之后,Alice 可以耍赖这张欠条不是自己写的,Bob 对此毫无办法。采用公钥密码可以解决这个问题。

三、单向散列函数

一个函数,有一个输入值和一个输出值。

  • 输入值:输入值可以是计算机上任何数据,视频、软件、文本文件等;
  • 输出值:固定长度的字符串。

网上软件很多,怎么保证软件没有被不怀好意的人放上病毒?这要用到单向散列函数。

一般程序员写好软件,会用单向散列函数对软件数据做处理生成一个散列值,并将这个散列值和软件一起放在官网上。当我们下载软件之后,可以自己也对软件做一次单向散列函数操作,将得到的散列值与官网提供的散列值做比较,如果一样,说明软件没有被修改,如果不一样,说明软件不是作者发布的那个软件,被人改过了。

四、消息认证码

网络是个虚拟的环境,你可能经常会受到一些中奖邮件,怎么确定这封邮件是主办发发送的而不是病毒邮件,消息认证码(message authentication code,简称 mac)就是认证发送人的身份。

以银行和用户为背景举例,不认证身份的情形:

  • 用户:“hi,银行,将 100万从 a1 账户转到 a2 账户”;
  • 拦截者:“拦截了用户的请求,将请求修改为 ‘hi,银行,将 100万从 a1 账户转到 bbb 账户’”;
  • 银行:“受到请求,无法判断请求到底是用户本人发送的还是拦截者发送的,很容易被诈骗”。

认证身份的情形,用户和银行之间应该有个暗号,就像谍战片里特工碰头总会说几句接口暗号那样,这个暗号拦截者是不知道的。

  • 用户:“hi,银行,将 100万从 a1 账户转到 a2 账户”;
  • 用户:“用暗号对消息进行处理得到认证码,简称 mac”;
  • 用户:“将请求 ‘hi,银行,将 100万从 a1 账户转到 a2 账户’ 和认证码 mac 一起发送给银行”;
  • 拦截者:“拦截了请求 ‘hi,银行,将 100万从 a1 账户转到 bbb 账户’,但是因为没有暗号无法修改认证码”;
  • 银行:“拿到请求之后,用暗号对请求 ‘hi,银行,将 100万从 a1 账户转到 bbb 账户’ 进行处理得到 mac2,mac2 和 mac 一比较不一样就知道不是用户发的消息”。

上面提到的暗号在网络也就是对称密钥,银行和用户需要提前共享对称密钥。

五、数字签名

现实生活中的按手印、盖章是一种防止事后反悔的做法,比如公司签订合同,借钱。这一做法出现两种行为:

  • 按手印、盖章是生成证据的行为,每个人的手印都是独一无二的,盖章也是属于你家公司的;
  • 一方事后耍赖,另一方可以拿着按过手印的欠条和盖章的合同作为证据起诉失信方。

签名技术在网络中也越多越常见,去电商网站买笔记本等大型电器都会附带电子收据,一些国家已经对电子签名制定了相关法律法规。如何保证在网络中的电子签名也能成为证据,这就要求证据必须是一方独有的,就是手印和盖章一样。

以 Alice 像 Bob 借钱为例:

  • Alice:”用邮件写了封欠条“;
  • Alice:“用自己的私钥对欠条进行加密作为签名,Alice的私钥只有Alice自己有,这就具备了和指纹、印章同样的功能”;
  • Alice:“Alice 将签名(私钥加密后的东东是一串字符串)贴到邮件末尾一并发给 Bob”;
  • Bob:“接收了带有 Alice 签名的邮件以及索要了 Alice 的公钥”;
  • Alice:“事后耍赖,不承认自己找 Bob 借过钱”;
  • Bob:“Bob 用 Alice 的公钥成功将带有 Alice 签名的邮件解密,说明这封邮件肯定是由 Alice 发出的,Alice 只能乖乖还钱”。

六、证书

首页
友链
归档
dkvirus
动态
RSS