非对称加密与对称加密

加密算法

在网络不可信的大前提下,所有数据传输都是不安全的,都是可篡改、易泄露的。例如,在银行信用卡交易如果不进行加密传输,则所有人都有可能看到这笔交易的详细信息,包括信用卡密码等内容。所以就引入了加密算法,常用加密算法主要分为两类 对称加密非对称加密。先看一下对称加密的主要内容。

对称加密

对称加密中,加密解密使用的都是同一个密钥。例如,通信,甲用密钥对数据加密发送给乙,乙接收信息后,使用密钥对内容解密。这个密钥与加密密钥必须为同一个。这样,甲必须要先把密钥告诉给乙,乙才能使用密钥解密数据。

这就衍生出一个问题,甲在将密钥传输给乙的时候被人截获了怎么办?如果密钥被人截获,那么恶意攻击者即可通过密钥解密甲与乙之间的通信内容。通信依然是不可靠的。

为了加深印象,可以来看一个例子。这把密钥好比二战中的无线电密码本。通常双方约定好将要使用的密码本,然后悄咪咪的送给所有下级,之后的通信都通过这个密码本进行加密与解密。

but!!!这其中存在一个大bug,怎么保证密码本在传递过程中不被敌人截获。一旦被敌人截获,敌人就能用你的密码本破译你加密的信息。你的情报就相当于在外面裸奔。与现实世界相同的是,攻击者也知道这一点,攻击者就有可能在传递密钥的过程中任何一个环节截获密钥。不同的是,在计算机世界,信息传递都需要通过网络。

非对称加密

前面我们知道,由于对称加密密钥传输的安全不确定性。针对这个问题,非对称加密引入了 公私钥对 (Private public key pair) 两个密钥。公钥由私钥计算推导获得,且这个过程是不可逆计算,也就是,即使知道公钥也无法通过计算反推导出私钥。在通信过程中,私钥必须绝对保密,只有自己能知道。公钥可以向任何人公布,例如,有些对外提供加密通信 API 接口的网站会在他们的页面上公开公钥。

非对称加密中,公私钥都能进行加密,另一个解密。即,公钥负责加密,私钥负责解密。或,私钥负责加密,公钥负责解密。这两种方式的应用的作用也是不同的。

且,非对称加密的算法限定了,私钥加密的内容只有公钥才能解密,反之亦然。简单来说就是公钥加密的内容无法使用公钥再次进行解密。

公钥加密 私钥解密的应用

使用支付宝服务时,支付宝也会生成一对公私钥对。同时会将公钥告诉你,私钥由支付宝保存。每当发起一笔交易,需要将交易信息通过公钥加密,这样做就是对你的交易信息进行了一层保护措施,因为私钥只有支付宝服务器知道,只有它能解密内容。这种方式就是公钥加密私钥解密的典型应用场景。

这种方式的主要作用就是对加密内容的保护,只有拥有私钥的一方才能解密信息。只要私钥存放的服务器不被攻击者攻破,理论上就无法破解加密内容

私钥加密 公钥解密的应用

而比特币中使用的是私钥加密,公钥解密。在发布交易时发起者用自己的私钥对交易签名。矿工对交易验证的时候,使用发起者的公钥进行解密,确定交易发起者是否有权对地址上的比特币进行交易。

这里使用的就是私钥加密,公钥解密的方式,因为比特币是一个公开链,任何人都能获取链上任意节点的内容,矿工解密内容的唯一作用就是对交易正确性验证的条件之一,确定发起交易者拥有这个地址的私钥。

这种方式下,保密性不再是关心的主要目的。因为理论上公钥是对外公开的,任何人都能获得公钥。即,任何人都能解密发送的信息。这种方式的作用只在于保证是由拥有私钥这发送的。

暴力破解私钥的可行性

因为公钥是由私钥推导而出的,私钥又是经过伪随机源随机生成的,那么我是不是就可以用一个相同的随机源与推导函数破解私钥呢?理论上这个是可行的,又是不可能的。

为什么说可行?既然是随机生成,只要生成的够多,总有一次的结果会相同。至于为什么又说不可能呢?这个我们来看一下,比特币中这个私钥是怎么生成的。起始,使用 一个随机函数,比特币中使用的是 伪随机数生成器(CSPNG),生成 256bit 二进制 0 或 1 组成的随机数。

这个可以理解为随机抛 256 次硬币,字则为 1 ,花则为 0。这个数的范围是多大呢?$2^{256}$ ,在这个数量级的范围内,找寻两个相同的数,同时还需要经过椭圆曲线算法计算出公钥,再对比公钥。这个工作量以现今的计算机的计算能力可能这辈子都看不到结果了。至少到现今为止,还没有那个比特币拥有者是因为这样的问题导致比特币丢失的。

结语

具体的内部实现算法暂时还写不了博客,因为我自己也还没太搞明白。只是在学习区块链时看到先记录一下,等以后有时间再详细学习一下内部的数学算法原理。然后再开一篇帖子详细说明。