• 通信安全基础

    • 主动攻击

    • 被动攻击

    • 实现目标

  • 加解密

    • 对称加密算法

    • 恩尼格玛密码机

    • 对称加密算法

    • 对称加密算法的优缺点

    • 常见的对称加密算法

    • 非对称加密算法(下次内容)

互联网通信安全(上)

从上次的文章中 「TCP/IP数据流向分析」,我们知道了网络之间通信的细节和原理。但这些都是基于完全信任的基础上,即世界上没有坏人。这显然是不可能的,斯诺登事件如果大家了解的话,会发现网络世界无安全可言,即安全零信任。

安全问题早在计算机形态出现之前就已经存在人类社会之中,主要存在于军事领域,中国古代的藏头诗,二战时期的恩尼格玛密码机都是保证通信安全的方式。回看上次总结的网络通信图,任何一处有漏洞都会导致安全事故。

互联网通信安全(上)_java通信安全

  • 客户电脑被入侵
  • 错访问伪站点
  • 数据传输过程中被监听破译,导致中间人攻击
  • 服务器遭遇恶意攻击
  • 服务器安全漏洞导致用户敏感信息丢失等等

虽然互联网技术能力飞速成熟,但安全问题也与日俱增且越来越重要。接下来了解通信安全的一些基础知识。

通信安全基础

通信安全涉及的内容非常多,计算机科学、网络通信、密码技术、信息安全、应用数学等等,每个领域都值得究其一生研讨学习。本次我们只打算在密码技术和安全基础上浅尝辄止。

主动攻击

主动攻击会导致某些数据流的篡改和虚假数据流的产生。这类攻击可分为篡改、伪造消息数据和终端(拒绝服务)。

  • 篡改消息

篡改消息是指一个合法消息的某些部分被改变、删除,消息被延迟或改变顺序,通常用以产生一个未授权的效果。如修改传输消息中的数据,将“允许甲执行操作”改为“允许乙执行操作”。

  • 伪造

伪造指的是某个实体(人或系统)发出含有其他实体身份信息的数据信息,假扮成其他实体,从而以欺骗方式获取一些合法用户的权利和特权。

  • 拒绝服务

拒绝服务即常说的DoS(Deny of Service),会导致对通讯设备正常使用或管理被无条件地终端。通常是对整个网络实施破坏,以达到降低性能、终端服务的目的。这种攻击也可能有一个特定的目标,如到某一特定目的地(如安全审计服务)的所有数据包都被组织。

被动攻击

被动攻击中攻击者不对数据信息做任何修改,截取/窃听是指在未经用户同一和认可的情况下攻击者获得了信息或相关数据。通常包括窃听、流量分析、破解弱加密的数据流等攻击方式。

实现目标

网络安全要实现的目标。

  • 真实性

对信息的来源进行判断,能对伪造来源的信息予以鉴别。

  • 保密性

保证机密信息不被窃听,或窃听者不能了解信息的真实含义。

  • 完整性

保证数据的一致性,防止数据被非法用户篡改。

  • 可用性

保证合法用户对信息和资源的使用不会被不正当地拒绝。

  • 不可抵赖性

建立有效的责任机制,防止用户否认其行为,这一点在电子商务中是极其重要的。

  • 可控制性

对信息的传播及内容具有控制能力。

加解密

加密和解密是自古就有技术了。经常看到侦探电影的桥段,勇敢又机智的主角,拿着一长串毫无意义的数字苦恼,忽然灵光一闪,翻出一本厚书,将第一个数字对应页码数,第二个数字对应行数,第三个数字对应那一行的某个词。数字变成了一串非常有意义的话:

Eat the bean curd with the peanut. Taste like the ham.

主角喜极而泣……

这种加密方法是将原来的某种信息按照某个规律打乱。某种打乱的方式就叫做 密钥(cipher code) 。发出信息的人根据密钥来给信息加密,而接收信息的人利用相同的密钥,来给信息解密。就好像一个带锁的盒子。发送信息的人将信息放到盒子里,用钥匙锁上。而接受信息的人则用相同的钥匙打开。加密和解密用的是同一个密钥,这种加密称为对称加密(symmetric encryption) 。

互联网通信安全(上)_java_02密钥加密

如果一对一的话,那么两人需要交换一个密钥。一对多的话,比如总部和多个特工的通信,依然可以使用同一套密钥。但这种情况下,对手偷到一个密钥的话,就知道所有交流的信息了。二战中盟军的情报战成果,很多都来自于破获这种对称加密的密钥。

互联网通信安全(上)_java_03恩尼格玛密码机

如图为 二战中德军的传奇加密机:(恩尼格玛密码机)Enigma。

为了更安全,总部需要给每个特工都设计一个不同的密钥。如果是FBI这样庞大的机构,恐怕很难维护这么多的密钥。在现代社会,每个人的信用卡信息都需要加密。一一设计密钥的话,银行怕是要跪了。

对称加密的薄弱之处在于给了太多人的钥匙。如果只给特工锁,而总部保有钥匙,那就容易了。特工将信息用锁锁到盒子里,谁也打不开,除非到总部用唯一的一把钥匙打开。只是这样的话,特工每次出门都要带上许多锁,太容易被识破身份了。总部老大想了想,干脆就把造锁的技术公开了。特工,或者任何其它人,可以就地取材,按照图纸造锁,但无法根据图纸造出钥匙。钥匙只有总部的那一把。

上面的关键是锁和钥匙工艺不同。知道了锁,并不能知道钥匙。这样,银行可以将“造锁”的方法公布给所有用户。每个用户可以用锁来加密自己的信用卡信息。即使被别人窃听到,也不用担心:只有银行才有钥匙呢!这样一种加密算法叫做非对称加密(asymmetric encryption) 。非对称加密的经典算法是RSA算法。它来自于数论与计算机计数的奇妙结合。

对称加密算法

对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用相同密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

近代最为出名的恐怕非二战时期的德国传奇加密机:恩尼格玛密码机(Enigma) 莫属了。

恩尼格玛密码机互联网通信安全(上)_java_04

恩尼格玛密码机内部结构

ENIGMA结构图

一次世界大战后,德国称霸世界之心不死发明了ENIGMA加密机,

ENIGMA拥有26个键的键盘,键盘排列和广为使用的计算机键盘基本一样,只不过为了使通讯尽量地短和难以破译,空格、数字和标点符号都被取消,而只有字母键。键盘上方就是显示器,转子是“恩尼格玛”密码机最核心关键的部分 。

之所以叫“转子”,因为它会转!这就是关键!当按下键盘上的一个字母键,相应加密后的字母在显示器上通过灯泡闪亮来显示,而转子就自动地转动一个字母的位置。举例来说,当第一次键入A,灯泡B亮,转子转动一格,各字母所对应的密码就改变了。第二次再键入A时,它所对应的字母就可能变成了C;同样地,第三次键入A时,又可能是灯泡D亮了。——这就是“恩尼格玛”难以被破译的关键所在,这不是一种简单替换密码。同一个字母在明文的不同位置时,可以被不同的字母替换,而密文中不同位置的同一个字母,又可以代表明文中的不同字母,字母频率分析法在这里丝毫无用武之地了。这种加密方式在密码学上被称为“复式替换密码” 。

一个转子经过26个字母后,会回到原始位置,这时的编码会和最初的重复,重复是加密的最大破绽,因此,ENIGMA 使用了3个转子,二战后期实际上使用的是4个转子。即便只有3个转子,放在当时想暴力破解也几乎是不可能的:

  • 三个转子不同的方向组成了26x26x26=17576种可能性;
  • 三个转子间不同的相对位置为6种可能性;
  • 连接板上两两交换6对字母的可能性则是异常庞大,有100,391,791,500种;

于是一共有17576x6x100,391,791,500,其结果大约为10,000,000,000,000,000!即一亿亿种可能性!这样庞大的可能性,换言之,即便能动员大量的人力物力,要想靠“暴力破解法”来逐一试验可能性,那几乎是不可能的。而收发双方,则只要按照约定的转子方向、位置和连接板连线状况,就可以非常轻松简单地进行通讯了。这就是“恩尼格玛”密码机的保密原理。

对称加密算法

对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。

在应用该算法时,它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要。

对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。

常用的算法包括:

  • DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
  • 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
  • AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;

主要特点如下:

  1. 加密方和解密方使用同一个密钥。
  2. 加密解密的速度比较快,适合数据比较长时的使用。
  3. 密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦。
  4. 加密算法:DES(Data Encryption Standard)、3DES、AES(Advanced Encryption Standard,支持128、192、256、512位密钥的加密)、Blowfish。
  5. 加密工具:openssl、gpg(pgp工具)

对称加密算法的优缺点

  • 优点

算法公开、计算量小、加密速度快、加密效率高。

  • 缺点
  1. 交易双方都使用同样钥匙,安全性得不到保证。
  2. 每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担 。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。

常见的对称加密算法

DES

DES算法全称为Data Encryption Standard,即数据加密算法,是一种使用密钥加密的块密码,它是IBM公司于1975年研究成功并公开发表的。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

它基于使用56位密钥的对称算法,这个算法因为包含一些机密设计元素,相对短的密钥长度以及被怀疑内含美国国家安全局(NSA)的后门而在开始时是有争议的,DES现在已经不被视为一种安全的加密算法,主要因为它使用的56位密钥过短,导致容易被破解。为了提供实用所需的安全性,可以使用DES的派生算法3DES来进行加密,虽然3DES也存在理论上的攻击方法。

算法原理

DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其算法主要分为两步:
(1)初始置换

其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。
(2)逆置换

经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。

DES算法具有极高的安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法,而56位长密钥的穷举空间为256,这意味着如果一台计算机的速度是每秒种检测100万个密钥,那么它搜索完全部密钥就需要将近2285年的时间,。--不过后来被一美国公司通过100w美金的电脑在2h爆发破解了该算法,所以出现了加密力度更好的3DES.

3DES(TripleDES)

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称

它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

三轮加密的DES,理论是DES的10的3次方倍复杂算法

原理

使用3条56位的密钥对 数据进行三次加密。3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准)。其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文

AES:高级加密标准

Advanced Encryption Standard,缩写:AES

这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用,2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES的区块长度固定为128比特,密钥长度则可以是128,192或256,384比特。算法原理:基本变换包括SubBytes(字节替代)、ShiftRows(行移位)、MixColumns(列混淆)、AddRoundKey(轮密钥加)

要深入了解像AES这种加密算法,对大部分初学的同学来说可能有些费时费力,但对算法掌握可以是个循序渐进的过程。简单来说可以分为以下几个阶段:

  • 阶段一:

在AES诞生之前(1975年之前),早起的加密算法十分简单,是一种类似“暗号”的机制。通信的双方通过事先约定一种“加密机制”对明文进行处理,只要“加密机制”不被泄漏,信息就算安全。后来无数的经验表明算法总是会被第三方得知,对算法本身进行保密管理也不方便。

  • 阶段二:

到上世纪70年代,公众和政府意识到加密算法的重要性,由美国政府机构牵头组织业界专家设计了DES算法。DES算法本身公开,但算法的安全全依赖于一个密钥。后来DES统治加密算法长达二十多年。不过DES从诞生到逐步退出历史舞台,一直都伴随着阴谋的论调。DES原本是由IBM提出,针对已有算法Lucifer改造而成,但DES制定的过程一直都有美国另一政府机构NSA的影子。

DES的两大特点是短密钥(short key)和结构复杂的s-box。有研究表明,是NSA当时劝说IMB短密钥足够安全,而且NSA也直接参与了s-box的设计。后来就一直有传言说NSA似乎有办法能轻易破解DES加密后的秘文。

到1990年,剧情出现反转。第三方独立研究者Eli BihamAdi Shamir发布了破解块加密方式的通用破解方法differential cryptanalysis。出人意料的是按照NSA建议设计的s-box对这种破解方法有更好的免疫性,NSA的参与似乎更加提高了DES的安全性。

到1994年,剧情进一步升华。公开文件披露,早在1974年IBM的研究者就已经发现了differential cryptanalysis这种破解方式,不过这项研究被NSA禁止公开,理由是会威胁到国家安全,对,就是现在美剧里经常提到的national security。不仅如此,NSA还针对DES做了一些改造加强安全性。至此,NSA已经全身都挂满了节操,被业界质疑忍辱负重二十多年一声没吭,比24小时男主角Jack Bauer形象更加高大光辉。

  • 阶段三:

后来陆陆续续有一些针对DES破解的攻防战,DES最终演化成Triple DES的形态,不过在性能上已经出现明显问题,催生了今天对称加密的王者算法AESAES在安全性,实现难度,运算性能上都有更好的表现。

在全面了解AES之前,首先明确下好的加密算法必须符合哪些条件,这些条件是经过数十年加密破解攻防战所总结出来的。

  • 条件一,Confusion。对原文以最小的粒度(按字节)进行混淆生成秘文。最简单的confusion可以是A+3=D.
  • 条件二,Deffusion。对原文所包含的位置信息进行打乱排布,比如将第一个字节与第四个字节的位置对换.
  • 条件三,Secret Key。最终的秘文与Secret Key相关,只要持有Secret Key就可以对数据解密,将安全性的管理归于一个密钥的管理。

AES也是属于Cipher Block的一种,对于数据的加密都是已block为单位进行处理。针对需要加密的数据AES会先把数据分成一个个的block,每个block为16字节,可以排布成4x4的表格(又名矩阵)。如下图所示:

互联网通信安全(上)_java_05矩阵

如果最后一块不足16字节,用0补齐(padding)。

后续的加密行为都是以block为单位进行处理,这个处理过程必须满足上述所说三个条件。加密的流程如下图:

互联网通信安全(上)_java_06加密

每一个block都会被单独依次处理,橙色方框表示加密的过程,这个过程包括两个方面,一方面是block本身数据的运算处理,二是与round key(也就是我们所说的对称加密算法密钥)进行运算处理。流程示意图如下:

互联网通信安全(上)_java_07加密过程

每一个block会依次经过Confusion(条件一),Difussion(条件二),Mix Data(可以看作再一次的Confusion)。最后一步是和我们的round key进行位运算得到最后的block秘文,这样一个完整的来回称为一个round,重复10次round就完成了block加密,当然每个round当中所使用的round key也会发生变化,以保证每次block加密所使用的key都不同。

针对每个block都重复上述处理过程就完成了AES加密过程,是不是so easy。当然这是被我高度抽象简化后的流程示意图,当中每一步都有很多的细节可以深入。密钥越长,每个block处理的round次数越多,AES就越安全,不过安全性和计算性能不可兼得,一般来说,我们使用128bit的Key就可以保证算法的安全性了。对了,解密的过程就是把上面加密的过程反过来做一遍。。

  • 阶段四:

明白了AES的流程,还需要了解正确的使用姿势。AES有两个经典的使用姿势,ECB模式和CBC模式。ECB模式可以用下图表示:

互联网通信安全(上)_java_08ECB图片加密漏洞

ECB模式很简单,就是针对每一个block单独进行AES运算,每个block的处理结果之间没有任何关系。使用这种方式单个block都是安全的,但对包含大量block的数据来说,没有能够隐藏data pattern,因为相同的原文会产生相同的秘文,这对图片文件来说比较致命:

互联网通信安全(上)_java_09EBC加密原理

相同的色块产生相同的秘文,这样相同颜色在图片当中出现的规律就和原始数据一样一目了然。

CBC模式针

CBC模式针对ECB模式的缺陷做了处理,使得每个block的AES运算结果都依赖于之前的block秘文。如下图所示:

互联网通信安全(上)_java_10CBC加密原理

每一个block在加密之前都会与上个block产生的秘文进行抑或运算,这样相同的数据也会产生不同的秘文,data pattern得以隐藏。第一个block没有刻可以或处理的秘文,就传入一个IV(初始化向量)。很明显,IV不同,AES运算的结果也不同。

RC4

RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ronald Rivest在1987年设计的密钥长度可变的流加密算法簇。该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。RC4起初是用于保护商业机密的。但是在1994年9月,它的算法被发布在互联网上,也就不再有什么商业机密了。

  • 算法原理
RC4算法的原理是“搅乱”,它包括初始化算法和伪随机子密码生成算法两大部分,在初始化的过程中,密钥的主要功能是将一个256字节的初始数簇进行随机搅乱,不同的数簇在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,将得到的子密钥序列和明文进行异或运算(XOR)后,得到密文。由于RC4算法加密采用的是异或方式,所以,一旦子密钥序列出现了重复,密文就有可能被破解,但是目前还没有发现密钥长度达到128位的RC4有重复的可能性,所以,RC4也是目前最安全的加密算法之一。

IDEA

是旅居瑞士中国青年学者来学嘉和著名密码专家J.Massey于1990年提出的。

它在1990年正式公布并在以后得到增强。这种算法是在DES算法的基础上发展出来的,类似于三重DES,和DES一样IDEA也是属于对称密钥算法。发展IDEA也是因为感到DES具有密钥太短等缺点,已经过时。IDEA的密钥为128位,这么长的密钥在今后若干年内应该是安全的。

其它算法 Blowfish、Twofish、IDEA、RC6、CAST5… ...

非对称加密算法(下次内容)

前面有描述过对称加密的加解密都是基于相同的密钥进行,通常为了让通信更加安全,密钥只会使用一次,就像二战的恩尼格玛密码机,每天都需要更新通用密钥,即使如此,还是通过常用语被找到加密漏洞。诸多密钥管理也是巨大挑战。有没有更好的办法来呢?下次内容介绍