密码学(Cryptography)简史-非对称加秘(Asymmetric Encryption)

之前讲过对称加密,比如DES, AES, 还有AES对应到的各种模式,比如ECB, CBC, CTR, GCM.

对称加密唯一保密的就是密钥(Key), 有了这个密码你就能解密其中的内容。

公开通信信道(Channel)

数字世界中的通信信道其实可以类比真实物理世界, 我们要从上海到北京就要经常各种各样的道路,比如走高速公路,就可能要经常各种检查站,收费站,理论上这些站点都可以对你的车进行全方位的搜索检查,看有没有携带违禁品。互联网世界一样,你的数据要经常中间的各种Wifi, 路由,网关,光纤,每个路由网关理论上都可以把你的传输数据拦截下来,甚至篡改,所以我们要知道公开的这些通信信道是不安全不可信任的。

所以想想我们的数据在这些不可信任的路途中穿梭还是挺可怕的。

动机(Motivation)

现在我们已经可以通过AES加密数据了,把加密的内容传输出去。但是密码要怎么传输出去了,因为密码是明文的,它在这些公开通信信息里面传输就一定会可能被黑客拦截到,还有一个问题,如果你一直用同一个密码,那么黑客就可以一直拦截你的信息,甚至在得到密码之前就一直在拦截,直到某一天得到密码了,那么黑客就可以同时解密之前已经存在很的加密信息了,如果密码不改,那将来的加密信息也一样会被黑客解密。

所以密码学科学家们绞尽脑汁想设计出来一种方法,可以解决在不安全信道中交互密钥的问题

于是就设计出了一种通过密钥对的加解密方式,同时生成一对密钥

  • 私钥(Private Key) — 自己保留,绝对保密
  • 公钥(Public Key) — 公开发布,分享给其它人

公钥加密,私钥解密。这样别人就可以拿到你的公钥把需要保密的信息进行加密发给你,你收到后通过私钥进行解密。

这个想法很奇妙,然后真的就做出来了。

RSA(Rivest, Shamir, Adleman)

RSA就是其中一种非对称加密算法,它就是可以生成一对公钥,私钥。可能大家以为这个是最近才发明的,但其实这个是很早就了1977年,RSA就发明了,一直用到现在。

它基于的数学原理其实很简单,简单到一个小学生都容易理解

  • 大整数的因式分解

假设我们有两个质数p, q, N=p*q, 那当我们只知道N的时候是没办法算出p和q的,这个基本原理就是RSA的本质。

其实想想很简单,但总会觉得有点不可思议对吧,但现实就是这样,如果有谁能过够在只知道N的情况下算出p和q,那么RSA就完蛋了。

RSA的计算过程很简单

选择两个质数 

密码学(Cryptography)简史-对称加密(Symmetric Encryption)

之前一篇文章讲过古典密码学。

这篇文章我们来聊一下对称加密(Symmetric Encryption)。

这个名字其实有点唬人,简单说就是只需要一把钥匙可以用来把文件加密,然后解密也是同一把钥匙。

比如说我们要对PDF进行加密,那就会有需要同一个密码进行打开,如果没有这个密码,你就看不了里面的内容。

文件加密之后我们就可以把文件存在一些公开的网盘里面,或者分享给其他人,然后别人通过密码就可以看了,如果没有密码,就算别人得到文件也无法知晓里面的内容。

Blocker Cipher(分组加密)

一个文件可能很大,所以密码学上一般会把内容进行固定长度的切割,然后一块内容一块内容进行加密,这个就是分组加密,与之对应的就是流加密(Steam Cipher)。

DES(Data Encryption Standard)

DES(Data Encryption Standard), 它1977年成为标准。这个名字看起来很高级,其实现在已经不用了,甚至说禁止使用,因为随着计算机算力的不断发展,它56位的密码长度很容易就被爆破出来(Brute Force),1999年就被爆破了,但在一段时间之内,它就是标准的密码加密算法。

  • https://en.wikipedia.org/wiki/Data_Encryption_Standard

它的流程如下图,基于Feistel Network结构,16轮运算,Block Size 64位,分为左右各32位,然后进行16轮运算,每轮运算就都使用不同的密码(KDF,随称密钥派生, Key Derivation Function),最后输出同等长度的64位密文。

后面还有3DES, 就是进过三轮DES加密,因为密码长度始终只有56位,所以也被淘汰了。

这样就不得不寻求新的加密方式

AES(Advanced Encryption Standard)

随着DES的安全性越来越弱,美国NIST在1997年发起了新的加密算法的竞算,经过多轮挑战,最终Rijndael算法被选自AES标准。

  • https://en.wikipedia.org/wiki/Advanced_Encryption_Standard_process

所以在2001年,Rijndael被当做标准,成为AES算法,这里有当年AES成为标准的提案。

最终选取

  1. Block size: 128位

密码学(Cryptography)简史-古典密码学

最近一直在看密码学相关的知识,虽然一年前已经看过了,但一段时间没用了,就容易忘记。

所以想在这里写一篇密码学简史,顺便梳理一下相关知识。

密码学对普通人来讲,看起来是很高深的,但实际情况是每天大家都要用到大量密码学的算法。只要你在用手机电脑上网,购物,聊天,那就一定会有很多密码学相关的算法在后面默默地工作着,这些幕后英雄在偷偷地保障着你在数字时代,你的隐私不被窃取,你的聊天记录不会被人看到,你的银行密码不会被人抓到。

每次你在App里面发起一次购物请求,在聊天App里面发出“你好”,后台有大量的加密算法在默默地运行。

而在这里我想慢慢地给大家解释清楚这后面所发生的一切。

密码学简单来说就是把你说的话,发的消息进行各种转换,就算别人看到转换之后的内容,也无法看到你真实说了什么。

所以这里你会第一次接触到两个概念

  1. 明文(PlainText):就是你真实说的话,发的消息
  2. 密文(CipherText):就是经常各种转换内容,别人第一次看到时会一脸懵,不知道具体是什么

大道至简,简单粗暴。

人类的文明史,其实也是密码学的演进史,人类从古至今,其实都是一直在追求如何将明文进行各种转换,变成密文,而不被变人知晓真实内容。

当然魔高一尺,道高一丈,你越是进行各种转换,别人就越想知道,经过几百年,上千年的迭代演进,攻防转换,渐渐地形成了密码学(Cryptography)的概念。

密码学分类

一般可以分为古典密码学(Classic Cryptography)和现代密码学(Modern Cryptography), 分类标准其实也很简单,大概以时间为界,比如1970年以前叫古典密码学,1970年之后就是现代密码学。

古典密码学(Classic Cryptography)

假设你在古代,你不想让别人看到你写的消息,你该怎么做?

最先想到的可能就是对发的消息进行替换?

比如:今天晚上发起攻击

我们可以进行简单替换:“后天早上回家吃饭”

  • 今天-后天
  • 晚上-早上
  • 发起-回家
  • 攻击-吃饭

当然这里只是为了描述这个概念,感兴趣你完全可以自己弄一个对照列表,只有知道这个对照表的人才能解读出真实内容。

或者我们对它的顺序进行各种打乱: 晚发上攻今起天击,而这个顺序对应表只有你知道。

上面这个例子其实就是一种朴素的古典密码学的加密方法:替换密码(Substitution Cipher)。

好了,现在你对古典密码学有了一些基本的概念,它是根据一些经验,手工设计出来的,甚至每个人都能根据一些想法设计出自己的密码。

那历史上又出现过哪些比较有名的加密方法呢,这里我直接截图的维斯百科上对古典密码学的总结归类。

其实真的是百花奇放,各种分门别类,这里我总感觉应该只是收集了一些传播范围比较广的一些加密方法。

凯撒密码 (Caesar Cipher)

Square and Multiply

在密码学中经常看到a^b mod n运算,当b很大的时候,就不能够按照简单的数学运算进行了。

“Square and Multiply”就是一种窍门。

把指数转换成2进制,从左到右开始计算

  • 当指数二进制为1时 z^2*a mod n
  • 当指数二进制为0时 z^2 mod n

其中z为上一个指数二进制计算结果(从左到右),初始为1

举例a^b mod 21 = 3^11 mod 21 = 3^1011 mod 21

  • z = 1
  • z = z^2*a = 1^2 * 3 mod 21 =

hashcat

hashcat crack sha256 with rockyou.txt

cat sha256_hash_rockyou.txt 
F09EDCB1FCEFC6DFB23DC3505A882655FF77375ED8AA2D1C13F640FCCC2D0C85
hashcat -m 1400 -a 0 sha256_hash_rockyou.txt ~/rockyou/rockyou.txt
hashcat -m 1400 --show sha256_hash_rockyou.txt
f09edcb1fcefc6dfb23dc3505a882655ff77375ed8aa2d1c13f640fccc2d0c85:paule

hashcat crack brcypt with rockyou.txt

It’s slow, so just crack the 1. 4 letter word 2. 4 litter letter.…