厦一推理社吧 关注:5贴子:168
  • 12回复贴,共1

【干货】基础密码学(侵删)

只看楼主收藏回复

基础密码学


IP属地:上海1楼2017-09-28 21:37回复
    第一节 什么是密码学
      密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。


    IP属地:上海2楼2017-09-28 21:38
    回复
      第二节 密码学的发展史
        中国古代秘密通信的手段,已有一些近于密码的雏形。古中国周朝兵书《六韬•龙韬》也记载了密码学的运用,其中的《阴符》和《阴书》便记载了周武王问姜子牙关于征战时与主将通讯的方式:
        太公曰:“主与将,有阴符,凡八等。有大胜克敌之符,长一尺。破军擒将之符,长九寸。降城得邑之符,长八寸。却敌报远之符,长七寸。警众坚守之符,长六寸。请粮益兵之符,长五寸。败军亡将之符,长四寸。失利亡士之符,长三寸。诸奉使行符,稽留,若符事闻,泄告者,皆诛之。八符者,主将秘闻,所以阴通言语,不泄中外相知之术。敌虽圣智,莫之能识。”
        武王问太公曰:“… 符不能明;相去辽远,言语不通。为之奈何?”
        太公曰:“诸有阴事大虑,当用书,不用符。主以书遗将,将以书问主。书皆一合而再离,三发而一知。再离者,分书为三部。三发而一知者,言三人,人操一分,相参而不相知情也。此谓阴书。敌虽圣智,莫之能识。”
        阴符是以八等长度的符来表达不同的消息和指令,可算是密码学中的替代法(substitution),把信息转变成敌人看不懂的符号。至于阴书则运用了移位法,把书一分为三,分三人传递,要把三份书重新拼合才能获得还原的信息。
        宋曾公亮、丁度等编撰《武经总要》“字验”记载,北宋前期,在作战中曾用一首五言律诗的40个汉字,分别代表40种情况或要求,这种方式已具有了密本体制的特点。
        1871年,由上海大北水线电报公司选用6899个汉字,代以四码数字,成为中国最初的商用明码本,同时也设计了由明码本改编为密本及进行加乱的方法。在此基础上,逐步发展为各种比较复杂的密码。
        在欧洲,西洋“史学之父”希罗多德(Herodotus)的《历史》(The Histories)当中记载了一些最早的秘密书信故事。公元前5世纪,希腊城邦为对抗奴役和侵略,与波斯发生多次冲突和战争。于公元前480年,波斯秘密结了强大的军队,准备对雅典(Athens)和斯巴达(Sparta)发动一次突袭。希腊人狄马拉图斯(Demaratus)在波斯的苏萨城(Susa)里看到了这次集结,便利用了一层蜡把木板上的字遮盖住,送往并告知了希腊人波斯的图谋。最后,波斯海军覆没于雅典附近的沙拉米斯湾(Salamis Bay)。
        由于古时多数人并不识字,最早的秘密书写的形式只用到纸笔或等同物品,随着识字率提高,就开始需要真正的密码学了。最古典的两个加密技巧是:
        转位式(Transposition cipher):将字母顺序重新排列,例如‘help me’变成‘ehpl em’;与替换式(Substitution cipher):有系统地将一组字母换成其他字母或符号,例如‘flyat once’变成‘gmz bu podf’(每个字母用下一个字母取代)。 这两种单纯的方式都不足以提供足够的机密性。凯撒密码是最经典的替代法,据传由古罗马帝国的皇帝凯撒所发明,用在与远方将领的通讯上,每个字母被往后位移三格字母所取代。
        二十世纪初,产生了最初的可以实用的机械式和电动式密码机,同时出现了商业密码机公司和市场。60年代后,电子密码机得到较快的发展和广泛的应用,使密码的发展进入了一个新的阶段。
        密码破译是随着密码的使用而逐步产生和发展的。1412年,波斯人卡勒卡尚迪所编的百科全书中载有破译简单代替密码的方法。到16世纪末期,欧洲一些国家设有专职的破译人员,以破译截获的密信。密码破译技术有了相当的发展。1863年普鲁士人卡西斯基所著《密码和破译技术》,以及1883年法国人克尔克霍夫所著《军事密码学》等著作,都对密码学的理论和方法做过一些论述和探讨。1949年美国人香农发表了《秘密体制的通信理论》一文,应用信息论的原理分析了密码学中的一些基本问题。

      图1-1 密码学的传统模型
        自19世纪以来,由于电报特别是无线电报的广泛使用,为密码通信和第三者的截收都提供了极为有利的条件。通信保密和侦收破译形成了一条斗争十分激烈的隐蔽战线。
        1917年,英国破译了德国外长齐默尔曼的电报,促成了美国对德宣战。1942年,美国从破译日本海军密报中,获悉日军对中途岛地区的作战意图和兵力部署,从而能以劣势兵力击破日本海军的主力,扭转了太平洋地区的战局。在保卫英伦三岛和其他许多著名的历史事件中,密码破译的成功都起到了极其重要的作用,这些事例也从反面说明了密码保密的重要地位和意义。
        当今世界各主要国家的政府都十分重视密码工作,有的设立庞大机构,拨出巨额经费,集中数以万计的专家和科技人员,投入大量高速的电子计算机和其他先进设备进行工作。与此同时,各民间企业和学术界也对密码日益重视,不少数学家、计算机学家和其他有关学科的专家也投身于密码学的研究行列,更加速了密码学的发展。


      IP属地:上海3楼2017-09-28 21:39
      回复
        第三节 密码学中的基本术语
          密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。
          透过加密可以提供下列三种安全服务:
          机密性(confidentiality):不论是在传输或储存设备之中,都可以利用加密隐藏资讯。
          完整性(integrity):不论是在传输或储存设备之中,都可以利用加密确认资讯的完整性。
          可说明性(accountability):加密可以用来确认资讯的来源,且可让资讯的来源无法否认资讯的出处。

        图1-2 传统加密和解密方法的简化模型
          进行明密变换的法则,称为密码的体制。指示这种变换的参数,称为密钥,也称为金钥。它们是密码编制的重要组成部分。密码体制的基本类型可以分为四种:错乱--按照规定的图形和线路,改变明文字母或数码等的位置成为密文;代替--用一个或多个代替表将明文字母或数码等代替为密文;密本--用预先编定的字母或数字密码组,代替一定的词组单词等变明文为密文;加乱--用有限元素组成的一串序列作为乱数,按规定的算法,同明文序列相结合变成密文。以上四种密码体制,既可单独使用,也可混合使用,以编制出各种复杂度很高的实用密码。
          20世纪70年代以来,一些学者提出了公开密钥体制,即运用单向函数的数学原理,以实现加、脱密密钥的分离。加密密钥是公开的,脱密密钥是保密的。这种新的密码体制,引起了密码学界的广泛注意和探讨。
        利用文字和密码的规律,在一定条件下,采取各种技术手段,通过对截取密文的分析,以求得明文,还原密码编制,即破译密码。破译不同强度的密码,对条件的要求也不相同,甚至很不相同。密码破解通常有两种方式:分析破解法和暴力破解法。
          分析破解法即当演算法受到攻击时,分析师会找寻将原文转成密文的演算法缺点,且在没有密钥的情况下还原资讯的原文。若是具有这类弱点的演算法,也就不能称为牢靠的演算法,当然也就不能使用。例如2005~2006年山东大学数学与系统科学学院教授、资讯安全实验室主任——王小云领导的研究团队成功地破解了国际上广泛应用的两大密码演算法MD5和SHA-1。王小云及她的团队在2005年将该成果发表為4篇论文,被公认为近年来国际密码学最出色的成果之一。
          暴力破解法也是一种最基本的破解法,前提是可以看懂或辨明明文。理论上可以尝试所有可能的密钥,直到找到真正的密钥,一般来说所尝试的密钥数大约是可能密钥总数的一半。其破解所需成本与金钥大小成正比,金钥长度愈长愈不易经由暴力攻击法破解。

        图1-3 全面搜索金钥所花费的平均时间


        IP属地:上海4楼2017-09-28 21:43
        回复
          第四节 对称加密与非对称加密
          1、对称加密
            采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。由于其速度,对称性加密通常在消息发送方需要加密大量数据时使用。
            所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
            因此对称式加密本身不是安全的。
            常用的对称加密有:
            DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等。
          2、非对称加密
            1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。
            与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
            非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。
            非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要,但加密和解密花费时间长、速度慢,它不适合于对文件加密而只适用于对少量数据进行加密。


          IP属地:上海5楼2017-09-28 21:43
          回复
            第五节 现代密码学的发展
              二十世纪早期的密码学本质上主要考虑语言学上的模式。从此之后重心转移,现在密码学使用大量的数学,包括信息论、计算复杂性理论、统计学、组合学、抽象代数以及数论。密码学同时也是工程学的分支,但却是与别不同,因为它必须面对有智能且恶意的对手,大部分其他的工程仅需处理无恶意的自然力量。检视密码学问题与量子物理间的关连也是目前热门的研究。
              现代的研究主要在分组密码(block cipher)与序列密码(stream cipher)及其应用。
              分组密码在某种意义上是阿伯提的多字符加密法的现代化。分组密码取用明文的一个区块和钥匙,输出相同大小的密文区块。由于信息通常比单一区块还长,因此有了各种方式将连续的区块编织在一起。DES和AES是美国联邦政府核定的分组密码标准(AES将取代DES)。尽管将从标准上废除,DES依然很流行(3DES变形仍然相当安全),被使用在非常多的应用上,从自动交易机、电子邮件到远端存取。也有许多其他的区块加密被发明、释出,品质与应用上各有不同,其中不乏被破解者。
              序列密码,相对于区块加密,制造一段任意长的钥匙原料,与明文依位元或字符结合,有点类似一次一密密码本(one-timepad)。输出的串流根据加密时的内部状态而定。在一些流密码上由钥匙控制状态的变化。RC4是相当有名的序列密码。


            IP属地:上海6楼2017-09-28 21:44
            回复
              第一节 什么是分组密码
                分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。现代分组密码的研究始于20世纪70年代中期,至今已有20余年历史,这期间人们在这一研究领域已经取得了丰硕的研究成果。大体上,分组密码的研究包括三方面:分组密码的设计原理,分组密码的安全性分析和分组密码的统计性能测试。
              第二节 分组密码的设计原则
                Claude Shannon在1949年提出了代替—置换(S-P)网络的想法,成为当代分组加密法的基础,而代替和置换就是两种基本的密码学运算。
                Shannon又提出扩散(diffusion)和扰乱(confusion)是影响密码安全的主要因素。扩散的目的是让明文中的单个数字影响密文中的多个数字,从而使明文的统计特征在密文中消失,相当于明文的统计结构被扩散。例如,最简单的方法让明文中的一个数字影响密文中的k个数字,可以用:

                扰乱是指让密钥与密文的统计信息之间的关系变得复杂,从而增加通过统计方法进行攻击的难度。扰乱可以通过各种代换算法实现。
                设计安全的分组加密算法,需要考虑对现有密码分析方法的抵抗,如差分分析、线性分析等,还需要考虑密码安全强度的稳定性。此外,用软件实现的分组加密要保证每个组的长度适合软件编程(如8、16、32……),尽量避免位置换操作,以及使用加法、乘法、移位等处理器提供的标准指令;从硬件实现的角度,加密和解密要在同一个器件上都可以实现,即加密解密硬件实现的相似性。
              第三节 Feistel加密结构
                如今许多对称式分组密码都是以HorstFeistel提出的“Feistel加密法”的结构为基础。Feistel加密法以不可逆的混合式加密为基础,将输入的区段分为两半,分多个回合来处理,每回合左半部资料会执行一次替换运算,替换运算会将右半部回合函式F的结果,以XOR运算方式与左半部资料结合起来,然后交换左右两半资料。这一思路充分展现了Shannon的SP网络概念。

              图3-1 标准Feistel网络
                Feistel 加密法的设计通过增大区段提升安全性;增加长度可以提升安全性,使得暴力搜寻密钥变得更困难;增加回合数可以提升安全性;复杂的产生方法可以使分析变困难;复杂的函数可以使分析变困难。但是这些设计都使得加解密都变得缓慢。

              图3-2 Feistel加密法的加解密程序
              第四节 分组密码算法的要求
                分组密码算法实际上就是密钥控制下,通过某个置换来实现对明文分组的加密变换。为了保证密码算法的安全强度,对密码算法的要求如下。
              (1)分组长度足够大
                当分组长度较小时,分组密码类似于古典的代替密码,它仍然保留了明文的统计信息,这种统计信息将给攻击者留下可乘之机,攻击者可以有效地穷举明文空间,得到密码变换本身。
              (2)密钥量足够大
                分组密码的密钥所确定密码变换只是所有置换中极小一部分。如果这一部分足够小,攻击者可以有效地穷举明文空间所确定所有的置换。这时,攻击者就可以对密文进行解密,以得到有意义的明文。
              (3)密码变换足够复杂
                使攻击者除了穷举法以外,找不到其他快捷的破译方法。
              第五节 分组密码技术总结
                分组密码将定长的明文块转换成等长的密文,这一过程在秘钥的控制之下。使用逆向变换和同一密钥来实现解密。对于当前的许多分组密码,分组大小是 64 位,但这很可能会增加。
                明文消息通常要比特定的分组大小长得多,而且使用不同的技术或操作方式。这样的方式示例有:电子编码本(ECB)、密码分组链接(CBC)或密码反馈(CFB)。ECB 使用同一个密钥简单地将每个明文块一个接一个地进行加密;在 CBC 方式中,每个明文块在加密前先与前一密文块进行“异或”运算,从而增加了复杂程度,可以使某些攻击更难以实施。“输出反馈”方式(OFB)类似 CBC 方式,但是进行“异或”的量是独立生成的。CBC 受到广泛使用,例如在 DES(qv)实现中,而且在有关密码术的技术性方面的相应书籍中深入讨论了各种方式。请注意:您自己建立的密码系统的普遍弱点就是以简单的形式来使用某些公开的算法,而不是以提供了额外保护的特定方式使用。
                迭代的分组密码是那些其加密过程有多次循环的密码,因此提高了安全性。在每个循环中,可以通过使用特殊的函数从初始秘钥派生出的子密钥来应用适当的变换。该附加的计算需求必然会影响可以管理加密的速度,因此在安全性需要和执行速度之间存在着一种平衡。天下没有免费的午餐,密码术也是如此;与其它地方一样,应用适当方法的技巧中有一部分是源于对需要进行的权衡以及它们与需求平衡的关系如何的理解。
                分组密码包括 DES、IDEA、SAFER、Blowfish 和Skipjack —— 最后一个是“美国国家安全局(US National Security Agency,NSA)”限制器芯片中使用的算法。
              第六节 什么是序列密码
                序列密码也称为流密码,它是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。1949年Shannon证明了只有一次一密的密码体制是绝对安全的,这给序列密码技术的研究以强大的支持,序列密码方案的发展是模仿一次一密系统的尝试,或者说“一次一密”的密码方案是序列密码的雏形。如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,则此时的序列密码就是一次一密的密码体制。若能以一种方式产生一随机序列(密钥流),这一序列由密钥所确定,则利用这样的序列就可以进行加密,即将密钥、明文表示成连续的符号或二进制,对应地进行加密。
              第七节 序列密码与分组密码的对比
                分组密码已一定大小作为每次处理的基本单元,而序列密码则是以一个元素(一个字母或一个比特)作为基本的处理单元。
                序列密码是一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,硬件实现电路更简单;其缺点是:低扩散(意味着混乱不够)、插入及修改的不敏感性。
                分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优点;其缺点是:加解密处理速度慢、存在错误传播。
                序列密码涉及到大量的理论知识,提出了众多的设计原理,也得到了广泛的分析,但许多研究成果并没有完全公开,这也许是因为序列密码目前主要应用于军事和外交等机密部门的缘故。目前,公开的序列密码算法主要有RC4、SEAL等。


              IP属地:上海9楼2017-09-28 21:54
              回复
                第一节 什么是数据加密标准
                  数据加密标准(Data EncryptionStandard)是由IBM在1970年代初期发展出来的演算法,DES 使用很广泛,特别在商业领域。在经过NSA审核、修正、认可之后,美国国家标准与技术协会(United States National Institute of Standards and Technology,NIST),在1977年正式采用并做为DES的加密标准FIPS PUB 46。于1983、1988、1993和1999年再次认定这个标准。
                第二节 DES加密原理
                  DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。
                第三节 DES加密主要流程
                  DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,整个算法的主流程图如下:

                图4-1 数据加密算法的流程
                1、置换规则表
                  其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则见下表:
                  58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,
                  62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
                  57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3,
                  61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
                  即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0 是右32位,例:设置换前的输入值为D1D2D3......D64,则经过初始置换后的结果为:L0=D58D50...D8;R0=D57D49...D7。
                  经过16次迭代运算后。得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置换的逆运算。例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,其逆置换规则如下表所示:
                  40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,
                  38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,
                  36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,
                  34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25,
                2、放大换位表
                  32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11,
                  12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,
                  22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1,
                3、单纯换位表
                  16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10,
                  2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25,
                4、功能表
                  在f(Ri,Ki)算法描述图中,S1,S2...S8为选择函数,其功能是把48bit数据变为32bit数据。下面给出选择函数Si(i=1,2......8)的功能表:
                  选择函数Si
                  S1:
                  14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,
                  0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,
                  4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,
                  15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,
                  S2:
                  15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,
                  3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,
                  0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,
                  13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,
                  S3:
                  10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,
                  13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,
                  13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,
                  1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,
                  S4:
                  7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,
                  13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
                  10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
                  3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,
                  S5:
                  2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,
                  14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,
                  4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,
                  11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,
                  S6:
                  12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,
                  10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
                  9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,
                  4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,
                  S7:
                  4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,
                  13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,
                  1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,
                  6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,
                  S8:
                  13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,
                  1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,
                  7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,
                  2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11,
                  在此以S1为例说明其功能,我们可以看到:在S1中,共有4行数据,命名为0,1、2、3行;每行有16列,命名为0、1、2、3,......,14、15列。
                  现设输入为: D=D1D2D3D4D5D6
                  令:列=D2D3D4D5
                  行=D1D6
                  然后在S1表中查得对应的数,以4位二进制表示,此即为选择函数S1的输出。下面给出子密钥Ki(48bit)的生成算法
                5、子密钥的生成算法
                  从子密钥Ki的生成算法描述图中我们可以看到:初始Key值为64位,但DES算法规定,其中第8、16、......64位是奇偶校验位,不参与DES运算。故Key 实际可用位数便只有56位。即:经过缩小选择换位表1的变换后,Key 的位数由64 位变成了56位,此56位分为C0、D0两部分,各28位,然后分别进行第1次循环左移,得到C1、D1,将C1(28位)、D1(28位)合并得到56位,再经过缩小选择换位2,从而便得到了密钥K0(48位)。依此类推,便可得到K1、K2、......、K15,不过需要注意的是,16次循环左移对应的左移位数要依据下述规则进行:

                图4-2 DES的16次循环左移
                6、循环左移位数
                  1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
                  以上介绍了DES算法的加密过程。DES算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥K15,第二次K14、......,最后一次用K0,算法本身并没有任何变化。
                第四节 DES的破解方法
                  攻击 DES 的主要形式被称为蛮力的或彻底的暴力密钥搜索,即重复尝试各种密钥直到有一个符合为止。如果 DES 使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。随着计算机系统能力的不断发展,DES 的安全性比它刚出现时会弱得多,然而从非关键性质的实际出发,仍可以认为它是足够的。不过 ,DES 现在仅用于旧系统的鉴定,而更多地选择新的加密标准 ——高级加密标准(AdvancedEncryption Standard,AES)。
                现在新的破解方法有差异破解法和线性破解法两种。
                1、差异破解法
                  差异破解法被认为是密码破解领域近年来公认最大的成就。美国国家安全局(NSA) 在70年代就已经得知此法。此法已经能够破解现今大部分的分组密码。它是一种破解Feistel加密法的统计攻击,运用S-P网络的设计不良,使得我们可以从函式f的輸出来计算出输入与密钥。
                  差异破解法会比较一组加密输出(mi+1, mi+1’),在使用相同密钥的情況下,已知输入间的差异,求出输出间的差异(△mi+1)。
                  Δmi+1 = mi+1⊕m'i+1
                  =[mi-1⊕f(mi,Ki)] ⊕[m'i-1⊕f(mi',Ki)]
                  =Δmi-1⊕[f(mi,Ki) ⊕f(mi',Ki)]
                  如果某种输入差异造成某种输出差异的机率为p。如果某种发生机率很高的输出入差异组合出现的话,就可以推导出此回合所使用的子密钥。以此类推进行多回合(机率递减),理论上就可以找到f函式使用的子密钥。

                图4-3 差异破解法的流程
                  持续地对已知XOR 结果的输入组合加密,直到已知XOR结果的输出组合出现。当我们看到如果某回合的中间值符合我们需要的XOR 结果,就是正确组合,如果不符合就是错误组合,相对比率S/N 就是可供破解的明文,可以推得此回合使用的密钥,正确组合表示使用相同的密钥,错误组合提供随机值。如果回合数众多的话,机率会变很低,会需要许多的输入组合,甚至超过64位元所能容纳的量。
                2、线性破解法
                  线性破解法是破解DES的另一项研究成果,必须以机率递减的方式执行多回合,故也是一种统计方式的破解法。这是由Matsui 等人在90 年代初期发展出来的,以求取线性近似值(linear approximation)为基础来破解DES的密钥,需要247 个已知明文才能破解 DES,实际上来说仍旧不实用。
                  在机率p不等于1/2的情况下,求出线性近似值P[i1,i2,...,ia](+)C[j1,j2,...,jb] = K[k1,k2,...,kc],此处的ia,jb,kc 是明文(P),密文(C) ,密钥(K)中的位元位置。列出密钥位元的线性方程式,利用max likelihood 演算法来求出一个密钥位元。测试大量的加密结果,破解的机率大约为:|p–1/2|。
                第五节 三重DES
                  在1992年研究人员发现重复使用DES ,可建立牢靠的加密法则,因而产生了三重DES。三重DES可以使用两组(k1/k3 , k2)或三组密钥(k1, k2 和k3)。如果仅仅使用两组密钥,那么k3和k1是一样的而只有k2不同。透过混合式加密法,将明文作取代与重排,这也就是为什么三重DES会比一般DES来得牢靠,成为大家选用的方案。

                图4-4 三重DES的加解密流程
                  三重DES整个程序需要加密三次,看起来似乎需要三把密钥,但是,采用E-D-E 的方式,只要两把密钥就可以完成,C = EK1 [DK2 [EK1[P]]]。加密与解密在安全性上来说是等价的,如果K1=K2,则传统DES 也可以解读。
                  虽然没什么实际的破解方式,但是使用两把密钥的三重DES安全度较低。如果采用三把密钥的三重DES就可以更安心,C = EK3 [DK2 [EK1 [P]]]。这种方式已经被某些网络应用程式采用,例如PGP, S/MIME。


                IP属地:上海10楼2017-09-28 21:57
                回复
                  第一节 什么是高级加密标准
                    密码学中的高级加密标准(AdvancedEncryption Standard),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
                    AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。1999年3月完成了第二轮AES2的分析、测试。2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Rijmen 提出的一种密码算法Rijndael 作为 AES。
                  第二节 AES加密的方法和步骤
                    严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128 位,密钥长度则可以是128,192或256位;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256位为上限。加密过程中使用的密钥是由Rijndael密钥生成方案产生。
                    大多数AES计算是在一个特别的有限域完成的。
                    AES加密是一种迭代加密法,而非Feistel加密法,过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支持更大的区块,其矩阵行数可视情况增加)

                  图5-1 体矩阵的输入输出及扩展金玥
                    加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:
                  1、字节的替换
                    通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。使用一个16×16 位元组的表格,其中包含所有256 个8 位元值的重排方式。体矩阵中的每个位元组都被某列(由最左边四个位元来决定)与某行(由最右边四个位元来决定)的元素来替换。
                  2、列的移动
                    将每一列对位元组作循环移位:第一列不变动、第二列循环左移一位元组、第三列循环左移二位元组、第四列循环左移三位元组,解密时向右移位,因为是一行一行来处理,这个步骤会重排行之间的位元组。
                  3、混合行内数值
                    为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。

                    最后一个加密循环中省略“混合行内数值”步骤,而以另一个“增加回合金玥”取代。
                  4、增加回合金玥
                    矩阵中的每一个字节都与该次回合金钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。解密程序完全一样,因为XOR就是自身的逆运算,,可以正确地还原回合金玥。

                  图5-2 AES加密的回合架构
                  第三节 AES的密钥扩展方式
                    将128 位元(16 位元组)的密钥扩充至44/52/60个32 位元字元的阵列中,首先将输入的密钥复制至扩充密钥的前四个字元,然后根据前四个与目前的四个字元依序将字元填入,在4 个情况的其中三个,直接对他们做XOR 运算,每逢四的倍数,就将目前的四个字元与前四个字元的S- box+旋转+某常数XOR 的结果XOR 在一起。
                  第四节 AES的破解方式
                    AES 的加解密流程并不同,缺点是同时需要加解密,则需要使用不同的模组。但是有一软体版本,可以定义一个与加密步骤相同的等价解密运算,但须满足下列需求:必须使用每个步骤的逆运算;密钥的产生与使用顺序必须改变。经验证明相同的等价解密运算是可行的,因为符合下列条件时结果不变:将位元组的取代与列的移位互相交换,将行的混合与回合密钥的使用互相交换。

                  图5-3 AES加解密循环过程


                  IP属地:上海11楼2017-09-28 21:59
                  回复
                    第一节 什么是公开密钥加密
                      公开密钥加密也称为非对称密钥加密,该加密算法使用两个不同的密钥:加密密钥和解密密钥。前者公开,又称公开密钥,简称公钥,任何人都知道这把公钥,可以用来对信息加密或是验证签章。后者保密,又称私有密钥,简称私钥,只有接收者知道这把私钥,用来对信息解密或是签署(产生)签章。这两个密钥是数学相关的,用某用户加密密钥加密后所得的信息只能用该用户的解密密钥才能解密。RSA算法(由发明者Rivest,Shmir和Adleman姓氏首字母缩写而来)是著名的公开密钥加密算法。
                      公钥加密的另一用途是身份验证:用私钥加密的信息,可以用公钥拷贝对其解密,接收者由此可知这条信息确实来自于拥有私钥的某人。
                      公钥的形式就是数字证书。

                    图6-1 公开密钥加密的加密与解密

                    图6-2 公开密钥加密的签章与验章
                    第二节 公开密钥加密与对称密钥加密的区别
                      在对称密钥加密中,对一个信息的加密密码和解密密码都是相同的,所以发送者需要发送一条信息之前,必须先发送密钥给接收者,这样接收者才能解密这条信息。
                      对称密钥加密的过程是:
                      假设两个用户A,B进行通信,A先发送信息给B,然后B发送信息给A
                      1. A先用密钥k1加密一条信息,使之变成密文c1;
                      2. A把密钥k1发送给B;(此时如果密钥被截获,截获方就可以解密并读取密文)
                      3. A把密文c1发送给B;
                      4. B用密钥k1解密,并读取解密后的信息;
                      5. B用密钥k2加密一条信息,使之变成密文c2;
                      6. B把密钥k2发送给A;
                      7. B把密文c2发送给A;
                      8. A用密钥k2解密,并读取解密后的信息。
                      公开密钥加密的过程是:
                      假设两个用户A,B进行通信,A先发送信息给B,然后B发送信息给A
                      1. B先产生一对密钥k1a和k1b,前者用来加密,后者用来解密;
                      2. B把密钥k1a发送给A;(因为k1a只能用来加密,截获方无法通过它来解密并读取密文)
                      3. A用密钥k1a加密一条信息,使之变成密文c1;
                      4. A把密文c1发送给B;
                      5. B用密钥k1b解密,并读取解密后的信息;
                      6. A产生一对密钥k2a和k2b,前者用来加密,后者用来解密;
                      7. A把密钥k2a发送给B;
                      8. B用密钥k2a加密一条信息,使之变成密文c2;
                      9. B把密文c2发送给A;
                      10. A用密钥k2b解密,并读取解密后的信息。
                    第三节 公开密钥法的特性及其应用
                      公开密钥加密法需要两把密钥,并且具有以下三个特点:
                      如果只知道演算法与加密密钥,要求出解密密钥这件事,在计算上是不可能的;
                      在已知相关的加解密密钥时,信息的加解密是很容易计算的;
                      同一组内的任何一把密钥钥都可以拿来加密,而用另一把密钥来解密(在某些机制下)。
                      公开密钥加密法的应用可分为三类:
                      加密/解密:提供安全性;
                      数位签章:提供确认性;
                      密钥交换:针对通讯密钥。

                    图6-3 公开密钥法的安全性与确认性
                      有些演算法适用于三种的应用,某些方法则只适用三种中的一种或两种。下表列举了RSA及其他演算法的应用。

                    图6-4 公开密钥加密系统的应用领域
                    第四节 公钥加密算法(RSA)
                      公钥加密算法是1977年由Ron Rivest、Adi Shamirh和Len Adleman在美国麻省理工学院开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
                      RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。
                      RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048bits长的密钥,其他实体使用1024比特的密钥。C)RSA密钥长度随着保密级别提高,增加很快。下表列出了对同一安全级别所对应的密钥长度。

                    图6-5 同一安全级别密码所对应的密钥长度
                      RSA的算法涉及三个参数,n、e1、e2。
                      其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
                      e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
                      (n及e1),(n及e2)就是密钥对。
                      RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2mod n;
                      e1和e2可以互换使用,即:
                      A=B^e2 mod n;B=A^e1 mod n。
                      下面举一个简单的RSA加解密的例子:
                      已知信息M = 88,取p=11,q=17,n=p×q=187>88;
                      计算(p-1)(q-1)=16×10=160;
                      选取e1 使得gcd(e1,160)=1;选取e1=7;
                      求取e2 使得e2*e1=1 mod 160 且e2 < 160;
                      其值为e2=23 因为23×7=161= 10×16+1。最终:
                      加密:
                      C = 887 mod 187 = 11,公布7,187为公开密钥KU。
                      解密:
                      M = 1123 mod 187 = 88,保存23,187为私有密钥KR。

                    图6-6 RSA简单的范例
                      由于上面的算法可以看出,RSA进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。RSA的速度比对应同样安全级别的对称密码算法要慢1000倍左右。
                      通常有三种攻击RSA 的方法:
                      暴力搜寻密钥法(brute-force attacks):尝试所有可能的私钥,除非有重大突破,私钥长度大于1024 位数的RSA应该是安全的。
                      数学攻击法(mathematical attacks):取决于计算(p-1)*(q-1)的困难度。因为在求N 同余的情况下,因数分解很困难。
                      计时攻击法(timing attack):根据解密的运算时间推算key。
                    第五节 其它公开密钥加密
                    Elgamal公开密钥加密法
                      Taher Elgamal属于Diffie-Hellman的变形。这个演算法强化了Diffie-Hellman系统,最后也具有加密的功能,且演算法之一还具有确认来源的能力。Elgmal并没有专利权(RSA有专利权),因此是一个较为省钱的选择(不需要支付专利费用)。由于这个演算法是以Diffie-Hellman为基础,因此也是属于离散对数的计算问题。
                    数位签章加密法
                      这是美国政府发展的数位签章标准(详见下一章)。这个演算法是Elgamal的变形,不过只能做为身份确认用途,且不能用于机密性资讯的保护用途。
                    椭圆曲线加密法
                      Neal Koblitz和Victor Miller在1985年分别独立提出椭圆曲线加密(Elliptic curves Encryption)构想。一般认为,Elliptic Curve Cryptosystems(ECC)有别于因式分解和离散对数的数学计算。计算问题如下:假设椭圆曲线的两个点A和B,产生的计算式为A = kB,若给定A跟B,很难找到整数k。所以使用ECC的效益会比RSA或Diffie-Hellman来得好。在相同的安全等级情况下,ECC的密钥长度更短(这就是ECC问题的困难点),计算速度也比较快。在普遍接受ECC之前,还必须深入研究和调查,而且ECC也已具有许多专利。


                    IP属地:上海12楼2017-09-28 22:02
                    回复
                      第一节 什么是数位签章
                      数位签章(又称公钥数位签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数位签章通常定义两种互补的运算,一个用于签名,另一个用于验证。签名过程的输出也叫做数字签名。前美国总统克林顿曾经签署过让数位签章具有法律效力的法案。
                      具体来说,数位签章是一种利用电子资讯加密的身份确认法则。如果使用某人的私密密钥将资讯加密,可以使用某人的公开密钥将资讯解密,也就可以确认资讯来源的私密密钥拥有人。如果资讯可以正确地解密,那也代表资讯的内容没有修改过,因此也可提供完整性的保护。有了数位签章之后,我们会希望在接收资讯和解密之后,并利用数位签章进一步保护资讯不会遭到窜改。
                      第二节 产生数位签章的步骤
                      图7-1显示如何达成数位签章的可能方式,首要的步骤是杂凑(hash)讯息的功能。经过杂凑运算之后,会产生讯息的检查码(MAC), 再使用MAC做为私密密钥加密的资料来源。最后将讯息和加密之后的检查码一起传送给资讯的接收端。在接收端经解密取得资讯之后,可将资讯输入到相同的杂凑函式之中,计算出检查码。
                      接着利用公开密钥将加密之后的检查码解密,比对两者的检查码是否相同。如果检查的结果相同,表示资讯没有遭到修改。因此数位签章的关键因素基于两点:使用者私密密钥的保护和安全的杂凑函数。

                      图7-1 数位签章的运算
                      第三节 什么是杂凑运算
                      杂凑运算又称Hash函数,就是把任意长的输入消息串变化成固定长的输出串的一种函数。这个输出串称为该消息的杂凑值。就是一种可将一个 key 对应到一个索引的函数,一个可能的杂凑函数为 h(x)=key % 100,(% 传回 key 除以 100 的余数),这个函数仅传回 key 的末两位数。若一个特定的 key ,被杂凑到 i ,就将这个 key 及其对应到的纪录吋放在 S[i]。若一个特定的 key ,被杂凑到 i ,就将这个 key 及其对应到的纪录吋放在 S[i]。杂凑函数是公开的,对处理过程不用保密,具有各种处理讯息的方式,最常用来产生数位签章。
                      第四节 杂凑函数的运算过程
                      杂凑函数的通常有以下三种算法:

                      图7-2 杂凑函数的运算方法(一)
                      杂凑函数运算方法(一)的操作步骤:
                      1.明文经由杂凑函式运算得出杂凑码
                      2.将杂凑码及明文结合,并以对称式加密法加密后传送
                      3.B以双方共享密钥解密取得明文及杂凑码
                      4.B将明文代入相同的杂凑函式运算出杂凑码
                      5.将算出的杂凑码与接收而来的杂凑码进行比对

                      图7-3 杂凑函数的运算方法(二)
                      杂凑函数运算方法(二)的操作步骤:
                      1.明文经由杂凑函式运算得出杂凑码
                      2.将杂凑码以对称式加密法加密,并与明文结合后传送
                      3.B以双方共享密钥对加密的部分解密,取得杂凑码
                      4.B将明文代入相同的杂凑函式运算出杂凑码
                      5.将算出的杂凑码与接收而来的杂凑码进行比对

                      图7-4 杂凑函数的运算方法(三)
                      杂凑函数运算方法(二)的操作步骤:
                      1.明文经由杂凑函式运算得出杂凑码
                      2.将杂凑码以非对称式加密法(A的私密密钥)加密,并与明文结合后传送
                      3.B以A的公开密钥对加密的部分解密,取得杂凑码
                      4.B将明文代入相同的杂凑函式运算出杂凑码
                      5.将算出的杂凑码与接收而来的杂凑码进行比对
                      第五节 杂凑函数的要求
                      1.可用在任意长度的讯息M 上
                      2.产生固定长度的输出h
                      3.对任意的讯息M 来说,很容易计算出h=H(M)
                      4.给定h,我们很难求得x,使得H(x)=h,称为单向特性
                      5.给定x,很难求得y,使得H(y)=H(x),称为弱碰撞抵抗力(weak collision resistance)
                      6.很难求出一组x,y,使得H(y)=H(x),称为强碰撞抵抗力(strong collisionresistance)
                      由此,我们可以构造一个简单的杂凑函数,主要是对讯息区段的每一位元作XOR 运算,此法可表示如下:
                      ci = bi1⊕bi2 ⊕…⊕bim ,
                      其中ci =杂凑码的第i的位元
                      m = 输入的n位元区段总数
                      bij = 第j区段中的第i位元
                      以密码学的安全考量来说,简单杂凑函数并不安全,可能遭受到攻击,而需要更具威力的密码学函数。目前知名且常用的三个杂凑函数为MD5、SHA-1和RIPEEMD-160,其它常见的杂凑函数可参见下表:

                      图7-5 列出的几种较为常见的杂凑函数


                      IP属地:上海13楼2017-09-28 22:04
                      回复
                        补:第一节 什么是密码学
                          密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。


                        IP属地:上海14楼2017-09-28 22:05
                        回复
                          来源:百度百科


                          IP属地:上海15楼2017-09-28 22:06
                          回复