公私钥与数字签名

近段时间,国家先后发布了禁止ICO非法集资和数字货币交易的相关法规,国内的数字货币交易所纷纷下架正在ICO的山寨币甚至直接关停。于是数字货币投资者们要面临的一个问题便是将数字货币交易资产从交易所“提现”到钱包,这时就涉及了“私钥”这个概念。很多人不懂,就很方,不敢操作,这里就科普一下相关知识。

这一块知识其实都属于PKI(以公钥技术为基础的保障网络传输安全的技术统称)体系,所以我的介绍会相对系统,而不只是和你讲私钥什么。因为事物只有放在系统在能体现其意义。
静下来,看完你肯定能比别人懂的多
如果你觉得我写的不好,你看不懂,请留言指正

先从加密算法说起

密码学是整一套技术服务的基础。按照加解密的密钥是否相同,加密技术可以分为对称加密非对称加密。整个PKI的技术基础就是非对称加密。非对称加密有两个钥匙,一个用于加密,一个用于解密。

  • 先举个不恰当的例子

阿里巴巴发现了宝藏的大门,他喊了一句“芝麻开门”,宝藏大门打开,“芝麻开门”就是解密的钥匙。阿里巴巴装了一裤兜金银财宝后决定离开,他再喊一句“芝麻关门”,宝藏大门关闭,“芝麻关门”就是加密钥匙。这里加解密的口令(密钥)就是不同的,所以宝藏的加密技术是不对称加密。

公私钥与数字签名_第1张图片
阿里巴巴与四十大盗

公钥与私钥

很明显,阿里巴巴的两句口令只有他自己知道,是私有的,宝藏只能他一个人打开和关闭,一旦泄露就可能引来四十大盗。但是两个密钥都是私有的,就和对称加密没有什么本质区别了,不能被公开使用。要在公网(Internet)上保障数据传输安全,必须有一个密钥是公开的。公开的钥匙就叫公钥,相对的另一个就叫私钥

公私钥与数字签名_第2张图片
公钥与私钥

将哪个钥匙公开?

公钥还是私钥只取决于是否被公开(很明显,两组不能同时公开),和加解密没有关系。非对称加密只强调不对称,并不规定方向,即有时候公钥加密私钥解密,有时候私钥加密公钥解密。这取决于具体的算法和应用场景。例如rsa加密算法中,可以用两个密钥中的任一个加密,然后另一个解密。比较不同方式的作用,其实只要抓住私钥就行。

公钥加密私钥解密

公私钥与数字签名_第3张图片
发件人用公钥加密收件人使用私钥解密

这种情况下,加密的钥匙是公开的,谁都可以获取公钥然后对数据进行加密,但是只有私钥持有者可以解密获取数据内容。用于在不安全的环境下传输数据

此时你可以把公钥理解为你的银行卡账号,私钥是你的银行卡密码。只要有你的银行卡账号,谁都可以给你转账,但是只有你自己有密码可以取出里面的钱。
实际应用中的一个典型场景是网上银行。

银行的网站会把它的公钥给你的浏览器,你输入账号密码后浏览器用网站公钥将你输入的数据加密,然后传输给网站,这个过程中数据可能被截获,但是截获了也没用,因为只有银行的网站有私钥可以解密。

私钥加密公钥解密

解密的钥匙是公开的,谁都可以获取公钥进行数据解密。既然谁都可以解密,那么这种情况应用密码学的目的就不在于加密的内容不能被人看到,而在于加密者的身份得到承认。如果使用A的公钥能打开A加密的东西,那就能证明A是私钥的持有者。

公私钥与数字签名_第4张图片
私钥加密公钥解密

这种方式主要的使用场景便是身份证明。这里有一个问题,非对称加密算法的效率是很低的,如果对整个数据块进行非对称加密,那就太低效了。于是就诞生了数字签名技术。

数字签名

数字签名技术其实就是对上面“私钥加密公钥解密”的一个优化,我们不再加密整个数据,而是加密数据的散列值(看不懂没关系我后面会解释)。

数字签名的原理

  • 发送者先对待发数据求散列,得到一个定长不可逆的数字串(本质是一个散列值,也叫哈希值,数字证书中有时也称之为摘要、指纹)
  • 然后用私钥对散列值进行加密,形成一个签名
  • 将数据和签名一起发送出去
  • 接收方用公钥解密签名,如果能成功解密得到一个散列值,则证明确实是发送方发送的
  • 接收方对数据再进行一次散列计算,因为如果数据不同计算出的散列值是肯定不同的,所以通过比较前后两次的散列值,可以判断数据是否完整无篡改
  • 这样既可以确认发送者的身份,又可以确认数据的完整无篡改。

下图其实有一点不对,因为实际一般不会对内容数据进行私钥加密而是只对散列值加密,因为非对称加密算法太花费时间。
如果需要对内容数据加密,可以配合对称加密,即对要传输的数据再进行一次对称加密,并将对称加密的密钥用私钥加密后和加密后的内容数据、签名一起发出去,接收方使用公钥能解出这个对称加密的密钥,从而解密出内容数据。

公私钥与数字签名_第5张图片
数字签名流程图

其实很多软件安装包都带有数字签名,右键属性就能看到,你们可以试试看。

数字签名在区块链中的应用

比特币的交易信息是通过数字签名技术证明交易发起者身份的。如果你使用钱包,那么钱包就是代表“你”,钱包的私钥就是你的私钥,你用钱包发转账交易,那么你的交易信息会带上你的签名,被传播在比特币网络上,获得记账权的矿工(这里以比特币的POW机制举例)使用你的公钥进行身份确认验证交易真实性,确认后和10分钟内的其他交易信息一起写入一个新区块。那么现在想想如果你提现到你的钱包,交易发起者是谁呢?

其实整个PKI是一个比较大的技术体系,还有一个比较有名的概念是数字证书,有兴趣的可以去自己了解下。我都不好意思说有兴趣的读者,因为压根就不会有几个~。另外还有密钥交换、https、openssl等技术,我只是随口一提,万一你们有兴趣呢...

你可能感兴趣的:(公私钥与数字签名)