最近在研读《图解明码技术》这本书,将有一系列的密码学学习笔记,波及到明码的相干概念、对称加密、非对称加密、单向散列函数、音讯认证码、数字签名、数字证书等内容,同时波及到代码局部也会应用Golang进行展现,感兴趣的能够关注更新哦。好了,明天先讲讲密码学中的一些概念性的问题。

  • 1.密码学简介
  • 2.对称加密
  • 3.分组加密模式
  • 4.非对称加密
  • 5.单向散列函数
  • 6.音讯认证码
  • 7.数字签名
  • 8.证书
  • 9.SSL/TLS

发送者、接收者和窃听者

请设想一个Alice向Bob发送电子邮件的场景。在这个场景中,收回邮件的Alice称为 发送者(sender),而收到邮件的Bob则称为 接收者(receiver)

当某个人向另一个人发送信息时,收回信息的人称为发送者,而收到信息的人称为接收者。另外,被发送的信息有时也统称为 音讯(message)

邮件是通过互联网从Alice的计算机发送到Bob的计算机的。在发送邮件时,邮件会通过许多台计算机和通信设施进行直达,在这个过程中,就存在被歹意窃听者(eavesdropper)偷看到的可能性

窃听者Eve并不一定是人类,有可能是装置在通信设施上的某种窃~听~器,也可能是装置在邮件软件和邮件服务器上的某些程序。

只管邮件内容本来应该只有发送者和接收者两个人晓得,但如果不采取相应的对策,就存在被第三方晓得的危险。

加密和解密

那么如何避免窃听者的窃听呢?Alice不想让他人看到邮件的内容,于是她决定将邮件进行加密(encrypt)后再发送进来。

加密之前的音讯称为明文(plaintext),加密之后的音讯称为密文(cipher-text)

  • 明文加密之后就会变成看不懂的密文

Bob收到了来自Alice的加密邮件,但作为接收者的Bob也是无奈间接浏览密文的,于是
Bob须要对密文进行解密(decrypt)之后再浏览。解密就是将密文复原成明文的过程。
  • 密文解密之后就变成了原来的明文

将音讯加密后发送的话,即便音讯被窃听,窃听者失去的也只是密文,而无奈得悉加密前的明文内容
  • 将音讯加密后发送, 窃听者只能失去密文

    在上述场景中,Alice将邮件进行加密,而Bob则进行解密,这样做的目标,是为了不让窃听者Eve读取邮件的内容Alice和Bob通过使用明码(cryptography)技术,保障了邮件的机密性(confidentiality)

    秘钥

    明码算法

    用于解决简单问题的步骤,通常称为算法(algorithm)。从明文生成密文的步骤,也就是加密的步骤,称为“加密算法",而解密的步骤则称为“解密算法"。加密、解密的算法合在一起统称为明码算法

    秘钥

    明码算法中须要密钥(key)。事实世界中的“钥'',是像 这样的形态奥妙而简单的小金属片。然而,明码算法中的密钥,则是像203554728568477650354673080689430768这样的一串十分大的数字。

加密、解密与秘钥

无论是在加密时还是在解密时,都须要晓得密钥。

正如保险柜的钥匙能够爱护保险柜中寄存的贵重物品一样,明码中的密钥能够爱护你的重要数据。即便保险箱再坚硬,如果钥匙被盗, 外面的贵重物品也会被盗。同样地咱们也必须留神不要让明码的密钥被别人窃取。

凯撒明码

恺撒明码(Caesar cipher)是一种相传尤利乌斯·恺撒曾应用过的明码。恺撒于公元前100年左右诞生于古罗马,是一位驰名的军事统帅。

<font color="red">恺撤明码是通过将明文中所应用的字母表依照肯定的字数“平移”来进行加密的</font>。比方在日语(例如平假名)或者汉语(例如汉语拼音)或者英文字母表中都能够用同样的思路来实现恺撒明码。

为了解说不便,咱们用小写字母(a,b,c,…)来表小明文,用大写字母(A,B,C,...)来示意密文。

当初咱们将字母表平移3个字母,于是,明文中的a在加密后就变成了与其相隔3个字母的D,以此类推。b变成E,c变成F,d变成G......v变成Y,w变成Z,而x则会回到字母表的结尾而变成A,相应地,y变成B,z变成C。通过下图咱们能够很容易地了解“平移"的具体工作形式。

凯撒明码的加密

这里,咱们假如要窃密的信息为monkey d luffy这个男孩的名字。咱们暂且不论这个名字到底代表一位实在的男性,还是只是一种暗号,只思考将它在窃密的状态下发送给接收者。

此时,明文蕴含下列12个字母:monkeydluffy, 接下来咱们对明文中的字母逐个加密:

                                m    --->    P                                                o    --->    R                                n    --->    Q                                k    --->    N                                e    --->    H                                y    --->    B                                d    --->    G                                l    --->    O                                u    --->    X                                f    --->    I                                f    --->    I                                y    --->    B
这样,明文 monkey d luffy 就被转换成了密文PRQNHB G OXIIB,monkey d luffy这个词咱们可能看懂,但

PRQNHB G OXIIB就看不懂了。

恺撒明码中,将字母表中的字母平移这个操作就是明码的算法,而平移的字母数量则相当于密钥。在下面的例子中,密钥为3(如下图)。

凯撒明码的解密

当初,假如接收者曾经收到了密文PRQNHB G OXIIB,因为密文自身是看不懂的,因而必须将它解密成明文。

恺撒明码的解密过程是应用与加密时雷同的密钥进行反向的平移操作。用方才的例子来说,只有反向平移3个字母就能够解密了。

                                P    --->    m                                                R    --->    o                                Q    --->    n                                N    --->    k                                H    --->    e                                B    --->    y                                G    --->    d                                O    --->    l                                X    --->    u                                I    --->    f                                I    --->    f                                B    --->    y
这样咱们就失去了明文monkeydluffy。

在这个场景中, 秘钥3必须由发送者和接收者当时约定好。

明码信息安全常识与威逼

明码信息安全常识

在持续上面的内容之前,咱们先来介绍一些对于明码的常识。刚刚开始学习明码的人经常会对以下这几条感到不堪设想,因为它们有悖于咱们的个别性常识。
  • 不要应用窃密的明码算法
  • 应用低强度的明码比不进行任何加密更危险
  • 任何明码总有一天都会被破解
  • 明码只是信息安全的一部分
不要应用窃密的明码算法
很多企业都有上面这样的想法:

“由公司本人开发一种明码算法,并将这种算法窃密,这样就能保障平安。然而,这样的想法却是大错特错,应用窃密的明码算法是无奈取得高安全性的。咱们不应该制作或应用任何窃密的明码算法,而是应该应用那些曾经公开的、被公认为强度较高的明码算法。

这样做的起因次要有以下两点:

  • 明码算法的机密早晚会公诸于世

    从历史上看,明码算法的机密最终无一例外地都会被裸露进去。例如: RSA公司开发的RC4明码算法已经也是窃密的,但最终还是有一位匿名人士开发并公开了与其等效的程序。

    一旦明码算法的详细信息被裸露,依附对明码算法自身进行窃密来确保机密性的明码零碎也就分崩离析了。反之,那些公开的算法从一开始就没有构想过要窃密,因而算法的裸露丝毫不会减弱它们的强度。

  • 开发高强度的明码算法是十分艰难的

    • 要比拟明码算法的强弱是极其艰难的,因为明码算法的强度并不像数学那样能够进行紧密的证实。明码算法的强度只能通过事实来证实,如果业余明码破译者通过数年的尝试依然没有破解某个明码算法,则阐明这种算法的强度较高。
    • 略微聪慧一点的程序员很容易就可能编写出“本人的明码零碎"。这样的明码在在行看来貌似颠扑不破,但在业余明码破译者的眼里,要破解这样的明码简直是手到擒来。
    • 当初世界上公开的被认为强度较高的明码算法,简直都是通过明码破译者长期尝试破解未果而存活下来的。因而,如果认为“公司本人开发的明码零碎比那些公开的明码零碎更强”,那只能说是过于高估本人公司的能力了。
    • 试图通过对明码算法自身进行窃密来确保安全性的行为,个别称为荫蔽式安全性(securitybyobscurity),这种行为是危险且愚昧的。
    • 反过来说,将明码算法的详细信息以及程序源代码全副交给业余明码破译者,并且为其提供大量的明文和密文样本,如果在这样的状况下破译一段新的密文仍然须要花上相当长的工夫,就阐明这是高强度的明码。
应用低强度的明码比不进行任何加密更危险
个别人们会认为.就算明码的强度再低,也比齐全不加密要强吧?其实这样的想法是十分危险的。

正确的想法应该是:与其应用低强度的明码,还不如从一开始就不应用任何明码这次要是因为用户容易通过“明码”这个词取得一种“谬误的安全感”。对于用户来说,安全感与明码的强度无关,而只是由“信息曾经被加密了”这一事实产生的,而这通常会导致用户在解决一些机密信息的时候麻痹大意。

任何明码总有一天会被破译
如果某种明码产品声称“本产品应用了相对不会被破解的明码算法”,那么你就要对这个产品的安全性打个问号了,这是因为相对不会被破解的明码是不存在的。

无论应用任何明码算法所生成的密文,只有将所有可能的密钥全副尝试一遍,就总有一天能够破译进去。因而,破译密文所须要破费的工夫,与要窃密的明文的价值之间的衡量就显得十分重要。

明码只是信息安全的一部分
咱们还是回到Alice给Bob发送加密邮件的例子。即使不去破解明码算法,也仍然有很多办法可能晓得Alice所发送的邮件内容, 例如:

攻击者能够不去试图破译通过加密的邮件,而是转而攻打Alice的电脑以获取加密之前的邮件明文。

下面提到的攻打伎俩,都与明码的强度毫无关系。要保障良好的安全性,就须要了解“零碎”这一概念自身的性质简单的零碎就像一根由无数个环节相连组成的链条,如果使劲拉,链条就会从其中最软弱的环节处断开。因而,零碎的强度取决于其中最软弱的环节的强度。

最软弱的环节并不是明码,而是人类本人。

明码信息威逼

咱们将信息安全所面临的威逼与用来用对这些威逼的明码技术间接的关系用一张图标来示意进去。

欢送与我交换

本篇文章由一文多发平台ArtiPub主动公布