初步理解哈希算法以及非对称加密

Posted 苏江

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初步理解哈希算法以及非对称加密相关的知识,希望对你有一定的参考价值。

版权声明

作者:苏江
请注意:无需授权即可转载;请保留作者署名…

-------------------------------------------

注意:此文比较无聊,但是可以让你快速理解到比特币的精髓。

哈希算法可以说是密码学的基础,也是理解比特币的一个重要概念。

比特币的主要特点就是不可篡改性,这一点正式由哈希算法所达到的。

当前各种区块链概念下发展起来的应用,尤其是存储类如IPFS、再到版权应用诸如PressOne所提出的概念里,均是通过对文件进行哈希计算,然后仅仅将哈希值存储到区块链上,而非文件本身,就这样可以达到验证文件唯一性的目的。

之所以很多把哈希值当做是文件指纹,因为它是文件唯一性的标志,与每一个字节都有关,当文件发生改变是,指纹值也会改变。

哈希算法有个显著的特点:

  • 单向加密、不可逆

它的实现原理往往是通过丢掉一部分信息来实现的。

比如:给出一串数字12345,你对它进行平方,去掉前三位,再除以固定的数字比如678,取整数。

1,12345x12345=152399025
2,  去掉前三位就是399025
3,399025/678=588.532448
4,取整数为558

可以看到,通过固定的计算公式,可以由12345得出558的结果,但仅仅提供558这个数字,尽管把算法公开,你也几乎不可能再推导出它计算前的数字。

这种丢掉一部分信息的加密方式被称为“单向加密”,即哈希算法。

一个可靠的哈希算法至少需要满足一下几个条件:

1,对于给定的数据M,很容易算出哈希值X=F(M);

2,根据X很难算出M;

3,很难找到M和N令F(M)=F(N)。

目前互联网上使用的比较多哈希算法有:

  • MDA

  • SHA-256

这些哈希算法远比上面举的例子要复杂得多。

拿SHA-256举例,任意输入一串字符,可以得的固定64位长度的字符。

具体的计算方法相当复杂,实现步骤还需要看百科….但你只需要理解一点,这种算法难以反推逆转….

网上有很多在线计算哈希值的有工具,可以做个试验:

http://www.atool.org/hash.php

这种加密方式这些显著的特点:

  • 算法公开。

  • 对于一串很长的数据,仅仅改变一个字母,也会造成二次哈希结果的巨大差异。

  • 任意长度的输入(不超过2^64 bit),都可以得到固定长度的输出。

单向加密算法并不能用来进行普通的信息传输,更多是用来进行传输结果的准确性验证。

验证方通过再进行一次哈希运算,将结果与原有值想对比,就可以知道文件是否有被篡改过了。

介绍一个工具: Proof Of Existence.

https://proofofexistence.com/

通过支付一点bitcoin, 它可以帮你将你的重要文件做一个哈希运算,并将哈希值以及当前时间永久地存储在比特币区块链的某笔交易记录里。这样的好处就是为你的文件做一个在某个时刻就已经存在的证明,可作为版权正面的一个雏形…


再来引申到另外一个概念:非对称加密。

首先,传统的加密方式肯定是对称加密。

即:我向你发送一串信息,我用一定的规则(算法)把它加密,你接收到信息后,用同样的的算法逆向解密。

明显,这种方法必须只有你我知道这个算法规则,才能保证信息的安全。

但是有个问题,假设你我素未谋面,而且相距甚远,不能悄悄话, 我可以向你传送加密的消息,但是如何把加密的方法(算法)告诉你呢?不然你不知道算法规则你也无法解密,我也不可能直接就把解密方法直接发送给你,因为怕被截获。那么,难道我得把加密方法再次加密?加密方法的加密方法如何再约定,这就成了一个循环的问题…

对称加密需要双方提前商定好解密方法,即保存好约定的密钥,一旦密钥被泄露,这种保密方法就不再安全,需要协商使用新的密钥。

如果两个人扩大成多个人,保存和传递密钥就更比较麻烦,每次协商一个密钥,复杂性更高,同时也有更大安全性的风险,如果一个人的密钥泄露,那么整个群体的加密方式就失效了。

对称加密有这种固有的缺点,直到1977年,一种非对称加密的方法被设计了出来。

比如,我想发消息给你,于是,你把加密方法(公钥)告诉我,甚至公开给大家,但你接受到消息之后,却只有你自己(通过私钥)才能解密,大家尽管拥有你的公钥却没法解密,

这是怎么做到的呢?

这里引入上一个概念:哈希算法。

哈希算法有一个显著的特点:

  • 单向加密,不可逆。

即你无法通过结果值来逆向推导出最初值。

公钥与私钥的关系就是:私钥经过单向的计算,生成公钥。

公钥就是由私钥经过类似哈希运算算法所得,即你无法通过公钥来逆向推导出私钥,但私钥拥有者却可以通过哈希运算来生成公钥。

在非对称加密算法中,主要有这两种典型的代表:

  • RSA算法

  • 椭圆曲线算法

RSA算法的原理也很简单:

比如,任意生成一个200位的数字,将他分解成两个素数的乘机。我们知道,两个素数相乘是非常容易的,当是根据结果来推导出两个素数的值却极其困难,即使是超级计算机也要耗费海量的时间和资源才能算得。这便是数学中的一种难以可逆的计算方法。

椭圆曲线则算法是另外一种非对称加密的算法。

简单来讲,它是一个方程,在平面中呈现为曲线状,同样,它也是一个数学问题,单向计算很容易,逆向计算却极其困难,理论上来说,它比RSA算法又要高级一个档次,更加安全。椭圆曲线算法太复杂,对于我个人来说,一时半会还真心看不懂…


再说回比特币中的公钥和私钥的概念,对于普通老百姓经常被这些概念弄糊涂。再来梳理下:

1,私钥是一个随机数,32个字节随机生成。

2,通过使用椭圆曲线加密算法,生成公钥,共65字节。

然而私钥的保管就变得非常重要了….

更多区块链知识,可以关注申龙斌同学的《区块链生存训练》饭团
初步理解哈希算法以及非对称加密

以上是关于初步理解哈希算法以及非对称加密的主要内容,如果未能解决你的问题,请参考以下文章

2020-08-10 https理解

公钥、私钥、哈希、加密算法基础概念

区块链概念解读:非对称加密

聊聊比特币:哈希算法数字签名与非对称加密

哈希算法非对称加密是什么?

FabricV2.2中使用的密码学算法和国密算法对应关系