在印象中,密码学的应用场景就是各种解锁、账户登录等等,在现实中,好像都很容易被破解,再厉害些的,像战争时期的不断升级密码战等等,也几乎难逃破解命运。
直到最近看了区块链技术底层的密码学基础,才对密码学有了新的认识。原来,加密还分为对称加密和非对称加密,两者的安全级别有质的差别。
一、对称加密
根据维基百科定义:
对称加密,是密码学中的一类加密演算法。这类演算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。
原来,之前所了解的加密技术都是对称加密。而对称加密的应用中,甲方必须把密码告诉乙方,否则乙方无法解密。这中间传递信息的过程,安全性无法保证。
那怎么提高安全性呢?有没有可能在不传输密码的情况下,乙方来解密?
这就涉及到非对称加密。
二、非对称加密
根据维基百科定义:
非对称加密,是密码学的一种演算法,它需要2个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密。由于加密和解密需要2个不同的密钥,故被称为非对称加密。
据了解,公钥和私钥是基于数学的椭圆曲线加密算法生成的,该算法的特性导致:私钥可以导出公钥,但公钥无法反推私钥。
而且,私钥不可公开,需要个人妥善保管,但公钥是可以公开的。那非对称加密如何更加安全可靠的实现加密、解密过程呢?为了便于理解,我们把加密类比成锁,解密类比成钥匙。
1、公钥加密,私钥能解密。
目的:我们要在保密的前提下,传输一封邮件。
首先,生成一对匹配的锁(公钥)和钥匙(私钥)。
1)只有我自己有这把钥匙,然后把锁给你;
2)你用我的锁把邮件锁上,然后发给我;
3)我收到之后,用这把独有的锁可打开邮件。
完。
你看,整个过程没有出现任何密码的传输,即使锁(公钥)告诉所有人,那又怎样?只有我有唯一的一把钥匙,能解开这把锁。
2、私钥做数字签名(加密),公钥能验证(解密)。
先做一些概念解释:
哈希:
将任意长度的内容进行哈希运算,生成固定长度的字符串;
内容不变,生成的字符串不变,内容变化,则字符串必变化;
这个过程是不可逆的,即不能通过结果导出哈希之前的内容。
签名:
对内容进行哈希之后形成固定长度的字符串,用私钥对该字符串进行加密,生成的字符串。
关于公钥、私钥之间的加密、解密关系:
一对私钥,用其中的私钥加密,则只能用对应的公钥解密。
明确概念之后,我们来明确目的:
你要验证我所发布的文章内容是不是我写的,且未被篡改。
那么,首先生成一对匹配的锁(私钥)和钥匙(公钥)。
1)用我的私钥对文章的哈希值进行加密,形成字符串。
即,把我想发布的内容的哈希值用我的锁(私钥)锁起来,因此自动形成一个对应的签名(字符串);
2)把内容和签名放在一起发布出去,并且告诉大家我的钥匙(公钥)是什么。
把内容和签名一起发出去,收到内容的人将该内容进行哈希,若得到的哈希值和用钥匙(公钥)解密得到的值一致,则证明内容未被篡改;
3)人们可以拿到钥匙(公钥)来打开(解密)签名里的内容,以验证是不是跟发布的内容一致。
那怎么确定这个公钥就是发件人的呢?可以去第三方CA,来验证数字证书,确认身份。
完。
从中可知,即使所有人都有钥匙(公钥),但只有我有唯一的锁(私钥),所以,只要我签过名(用锁加密了原文的哈希值),你用钥匙(公钥)解密,得出原文哈希值,和通过哈希发布内容得出的哈希值一致,则可验证你看到的这篇文章一定跟我发布的内容一致。
关于这两种加密解密,有另一个角度的理解:
对于公钥加密,私钥解密:
既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以需要公钥负责加密,私钥负责解密;
私钥做数字签名(加密),用公钥验证(解密):
同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。
先到这,至于如何证明你是你,从而证明是谁发布的内容,后续还需继续探讨。