非对称加密算法

前言

目前主流的非对称加密算法主要有几类:RSA、DHKE、Elliptic Curve。

虽然大类分成这几类,实际上他们底层的原理都是依赖于素数和同余原理来做的。素数是除了他本身和1以外,无法被其他任何正整数整除的数字。这样的数字有多少呢?无穷个。我们知道,一个数字的因式分解,最终都能分解成n个素数的相乘,由于素数有无穷多个,也就意味着一些巨大的数是很难分解的,特别是两个大的素数(例如几百位、上千位)的乘积就更难因式分解了,催生了很多在理论上不可行,但在经济上可行的加解密算法。为什么说是理论上不可行呢?因为数字再大,只要有恒心(例如几百年、上千年甚至几百亿年)总能把一个大数因式分解,也就是基本假设不成立,一旦能因式分解,所有的这类密码都将被破解。经济上可行是因为,因式分解一个这样的大数字花费的经济成本(计算机、电力等)太高,以至于不会有人去尝试暴力破解。当然,据说有可以破解这类的量子算法,基于量子计算机多维度并发计算,还是有机会的。目前量子计算机造价昂贵且还没有大规模商用,用于破解这类的密码成本也是相当高的,暂时还是安全的。对应的策略是,a:发明后量子加密算法,在量子计算机流行之后也能用后量子算法来加解密,保障量子计算机破解不了这类的密码;b:用量子纠缠实现通信,可以完全杜绝中间人攻击,此时密钥不是最重要的了。目前美国为主的西方国家主要在主导后量子密码学,而我国科学家更多在主导量子通信。

下面我会用相对易懂的预言推导一下这几类算法的原理,一些不太好理解的定理,不会太深入去推导。

基于区块链的端到端加密通信

基于区块链的端到端加密通信

端到端加密通讯的基本原理

端到端基本上都是基于非对称加密手段来实现:假设通讯双方为A和B,AB都 自己生成一个随机的 私钥(p) 并私密地保存起来,然后通过数学算法,生成一个 公钥 (L),把公钥发送给想要跟自己通讯的点(peer)。当他们要给对方发送信息的时候,将信息用对方给的公钥进行加密,然后通过网络发送到对方;此时对方可以用已保存的私钥,解密加密后的数据,得到信息原文,实现了信息在传递过程的私密性。用描述语言如下:

A gen  pA/LA, store pA, send LA to B
B gen  pB/LB, store pB, send LB to A

发送消息时:
A.sendTo(encrypt(message, LB), B),发送的是用B的公钥加密过的信息。
B给A发送的状况类似。

接收消息时:
B.receiveFrom(A).decrypt(pB),接收到A发过来的加密信息后,用B的私钥解密,得到信息原文。
A 接收到加密信息之后的处理方式类似。

有中心化服务器的加密通信

去中心化的身份标识(DID)

去中心化的身份标识(DID)

前几日(2022年7月19日),w3c发布了去中心化身份标识(DID)1.0版的标准,意味着这个标准已经成熟可落地。

DID全称叫去中心化的身份标识,可以认为是类似于区块链网络帐户地址或者能唯一确定一个用户的身份(例如每一笔比特币的交易记录都可以确认到发起人的帐户公钥,也就能知道地址)。核心还是基于密码学上的非对称加解密算法,生成一对私钥和公钥的密码对,身份持有者私密的持有密钥,而需要用于身份标识验证的时候,验证方可以拿到公钥进行验证。 在之前的区块链钱包文章我们说过,椭圆曲线算法基于非对称的加密方式,提供两个方向的用途:1)公钥加密私钥解密,适用于加密通信;2)私钥签名公钥认证,适用于数据验证。理论上非对称加密的身份认证不基于区块链网络或者分布式账本技术(DLT)也能运转,但区块链或者分布式账本的存在,让DID才真正实现去中心化的可广泛使用的用途,下面我们来说说不用区块链(分布式账本)的情况下,DID存在什么问题、区块链是解决这个问题的。

公钥分发难题

区块链钱包

区块链钱包

直观概念
区块链钱包,存储的仅仅是区块链帐户的私钥,其他相关概念都是通过私钥衍生出来的:比如帐户地址、帐户余额等等,并不是说有钱存储在钱包里面。

钱包的分类
钱包从管理权上分为托管式的和非托管式的。托管式的钱包:比如你在区块链交易所,交易所会自动给你生成一个软钱包,这样别人才能把资产转移到你的帐户里,但你的钱包的密钥都放在交易所上面加密保存,存在一定风险。非托管式的钱包:你自己管理私钥,通过软件、硬件等方式管理你自己的私钥,在需要转移账户上的资产时,用私钥做签名运算即可。

钱包从电子技术方面分为软件钱包和硬件钱包。 软件钱包一般是通过钱包APP来帮助生成私钥(通常会有助记词),然后在线上用区块链资产消费时,可以直接这些钱包APP进行支付,收款等方式。这类的钱包App特别多,基本上都声称数据存在本地,但安全性方面不好说。硬件钱包一般是通过一些安全硬件来实现,在需要签名使用时,通过USB等方式连接到电脑或手机,硬件层面直接做签名,不往外泄露任何私钥信息,安全性较高一些。

钱包从存储介质方面分为冷钱包和热钱包。冷钱包是通过物理的方式,把钱包的私钥信息(或者助记词)记录到物理介质上:比如手写笔记本,拓印的钢板等等(注意这些都要安全保存起来),主要用于备份私钥,防止软硬件钱包丢失后,帐户找不回的麻烦(区块链钱包因为是去中心化的,没有一个中心方负责管理,一旦丢失了密钥,整个帐户也就意味着丢失了,再也找不回来)。热钱包就是泛指前述的几种电子化的钱包,使用比较频繁。

非对称加密算法

关于比特币区块链网络

关于比特币区块链网络

题外话

关于比特币,或者区块链,我了解是比较晚的,第一次接触到区块链这三个字是在11年左右,当时还在阿里上班,当时去听了一个facebook的「区块链」分享,后来了解下来,他们当时说的区块链并不是一个分布式账本,而是一个PC广告相关的业务,也不知道当时是刚好撞名了还是故意蹭的,反正当时了解下来不是很感冒。后来15-16年左右慢慢了解到一些相关概念,大致是了解区块链的分布式账本性质,并没有太多去深入研究。后来公司招了一些人,手上有一些币,一直在跟我们安利区块链的共识机制,我当时也是太年轻,感觉这玩意就是炒做而已,嗤之以鼻。直到近2年才比较系统的去了解这个东西。手上没有比特币,本文也不是为了鼓吹炒币,而是把自己理解的比特币区块链的一些东西分享处理,做个总结(肯定很多理解还是错的,可以评论交流)。

1. 关于区块链的安全性保证