对称、非对称加密算法、消息摘要算法、数字证书详解

来源:互联网 发布:软件生命周期模型 编辑:程序博客网 时间:2024/05/16 05:58
  

消息摘要算法

消息摘要算法包括MD(Message Digest 消息摘要算法),SHA(Secure Hash Agorithm 安全散列算法),MAC(Message Authentication Code 消息谁码算法)共3类系列,常用于要验证数据的完整性,是数字签名算法的核心算法。消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络相同上使用。由于其加密计算的工作量相当可观,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的。近年来,随着计算机相同性能的飞速改善,加密速度不再成为限制这种加密技术发展的桎梏,因而消息摘要算法应用的领域不断增加。

现在,消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法。著名的摘要算法有RSA公司的MD5算法和SHA-1算法及其大量的变体。它们是消息摘要算法的主要代表,MD系列算法包括MD2,MD4和MD5共3种算法,SHA算法主要代表有SHA-1及其变种SHA-2系列算法(SHA-224,SHA-256,SHA-384和SHA-512).而MAC算法总合了上述两种算法的优点,主要包括HmacMD5,HmacSHA1,HmacSHA-256,HmacSHA384和HmacSHA512算法。


常见的数字证书格式
2010-07-18 9:53

      数字证书(Digital Certificate),在因特网上,用来标志和证明网络通信双方身份的数字信息文件,

      数字证书是一种权威性的电子文档,由权威公正的第三方机构,即CA中心签发的证书。它以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性、完整性。 使用了数字证书,即使您发送的信息在网上被他人截获,甚至您丢失了个人的账户、密码等信息,仍可以保证您的账户、资金安全。 

     它能提供在Internet上进行身份验证的一种权威性电子文档,人们可以在互联网交往中用它来证明自己的身份和识别对方的身份。当然在数字证书认证的过程中证书认证中心(CA)作为权威的、公正的、可信赖的第三方,其作用是至关重要的.如何判断数字认证中心公正第三方的地位是权威可信的。VeriSignGeoTrustThawte 是国际权威数字证书颁发认证机构的“三巨头”,其中,应用最广的为VerSign签发的电子商务数字证书。

CER(Canonical Encoding Rules,规范编码格式) 是数字证书的一种编码格式,它是BER(Basic Encoding Rules 基本编码格式) 的一个变种,比BER 规定得更严格。后缀的证书文件有两种编码:

DER(Distinguished Encoding Rule 卓越编码格式) 同样是BER的一个变种,DER使用定长模式。

PKCS(Public-Key Cryptography Standards,公钥加密标准) 由RSA实验室和其他安全系统开发商为公钥密码的发展而制定的一系列标准。

pfx是指以pkcs#12格式存储的证书和相应私钥。 

在Security编程中,有几种典型的密码交换信息文件格式: 
DER-encoded certificate: .cer, .crt 
PEM-encoded message: .pem 
PKCS#12 Personal Information Exchange: .pfx, .p12 
PKCS#10 Certification Request: .p10 .csr
PKCS#7 cert request response: .p7r 
PKCS#7 binary message: .p7b .p7c .spc

.cer/.crt 是用于存放证书,它是2进制形式存放的。

.pem 跟crt/cer的区别是它以Ascii来表示。

pfx/p12 用于存放个人证书/私钥,他通常包含保护密码,2进制方式 

.p10 .csr 是证书请求 

p7r是CA对证书请求的回复,只用于导入 

.p7b .p7c .spc 以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。



对称加密算法是当今使用率最高,频率最大的加密算法。现以应用到各行各业。
 对加密和解密使用相同密钥的加密算法。由于其速度,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。对称式数据加密的方式的工作原理如图。所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥实际上是一种算法,通信发送方使用这种算法加密数据,接收方再以同样的算法解密数据。因此对称式加密本身不是安全的。常用的对称加密有: DES、IDEA、RC2、RC4、SKIPJACK算法等 。采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

二、数据加密算法(Data Encryption Algorithm,DEA)

      数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的。通常,自动取款机(Automated Teller Machine,ATM)都使用DEA。它出自IBM的研究工作,IBM也曾对它拥有几年的专利权,但是在1983年已到期后,处于公有范围中,允许在特定条件下可以免除专利使用费而使用。1977年被美国政府正式采纳。

      DES 的常见变体是三重 DES,使用 168 位的密钥对资料进行三次加密的一种机制;它通常(但非始终)提供极其强大的安全性。如果三个 56 位的子元素都相同,则三重 DES 向后兼容 DES。

二、高级数据加密标准(Advanced Encryption Standard,AES)

  密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 "Rhinedoll"。)

除了上述算法,我们还常常会见到Blowfish,Twofish,Serpent,IDEAPEB等对称加密算法。



DES 对称加密
2010-07-18 10:28

数据加密算法(Data Encryption Standard(DES)

(Data Encryption Standard(DES)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的。通常,自动取款机(Automated Teller Machine,ATM)都使用DEA。它出自IBM的研究工作,IBM也曾对它拥有几年的专利权,但是在1983年已到期后,处于公有范围中,允许在特定条件下可以免除专利使用费而使用。1977年被美国政府正式采纳。

       DES 的常见变体是三重 DES,使用 168 位的密钥对资料进行三次加密的一种机制;它通常(但非始终)提供极其强大的安全性。如果三个 56 位的子元素都相同,则三重 DES 向后兼容 DES。

       目前JAVA提供的对称加密算法大约有20多种,但JAVA6提供的算法一般常用的zDES,DESede,AES,Blowfish以及RC2和RC4算法等。其中以DES算法使用率最为广泛,代表性最强,DES和DESede算法在使用密钥材料还原密钥时,建议使用各自的密钥材料实现类(DES类对应DESKeySpec类,DESede算法为DESedeKeySpec类)完成相应转换工作。而像AES这样的算法在还原时使用一般的密钥材料实现类 SecretKeySpec类完成相应的转换工作。


AES与IDEA 对称加密
2010-07-18 10:56

    DES使用越来越少,原因就在于其使用56位密钥,比较容易被破解,近些年来逐渐被 AES替代,AES已经变成目前对称加密中最流行算法之一;AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。本文就简单介绍如何通过JAVA实现AES加密他IDEA加密.


       IDEA(International Data Encryption Algorithm,国际数据加密标准) 数据加密算法是由中国学者来学嘉博士和著名的密码专家 James L. Massey 于1990年联合提出的。它的明文和密文都是64比特,但密钥长为128比特。IDE是作为迭代的分组密码实现的,使用 128 位的密钥和 8 个循环。这比 DES 提供了更多的安全性,但是在选择用于 IDEA 的密钥时,应该排除那些称为"弱密钥"的密钥。DES 只有四个弱密钥和 12 个次弱密钥,而 IDEA 中的弱密钥数相当可观,有 2 的 51 次方个。但是,如果密钥的总数非常大,达到 2 的 128 次方个,那么仍有 2 的 77 次方个密钥可供选择。IDEA 被认为是极为安全的。使用 128 位的密钥,蛮力攻击中需要进行的测试次数与 DES 相比会明显增大,甚至允许对弱密钥测试。而且,它本身也显示了它尤其能抵抗专业形式的分析性攻击。

J



PBE 口令对称加密
2010-07-18 11:13

PBE加密

PBE——Password-based encryption(基于密码加密)。除了DES,我们还知道有DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,而PBE其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。是一种简便的加密方式。


P
PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);             


非对称加密算法简介
2010-07-18 11:29

       1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是"公开密钥系统"。相对于"对称加密算法"这种方法也叫做"非对称加密算法"。与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

       非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要,但加密和解密花费时间长、速度慢,它不适合于对文件加密而只适用于对少量数据进行加密。 经典的非对称加密算法如RSA算法等安全性都相当高. 非对称加密的典型应用是数字签名。采用双钥密码系统的加密方法,在一个过程中使用两个密钥,一个用于加密,另一个用于解密,这种加密方法称为非对称加密,也称为公钥加密,因为其中一个密钥是公开的(另一个则需要保密)。

DH (Diffie-Hellman)
       Diffie-Hellman算法(D-H算法),密钥一致协议。是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。简单的说就是允许两名用户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。换句话说,就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私钥)。以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥(SecretKey)对数据加密。这样,在互通了本地密钥(SecretKey)算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。不单单是甲乙双方两方,可以扩展为多方共享数据通讯,这样就完成了网络交互数据的安全通讯!该算法源于中国的同余定理——中国馀数定理。

RSA
       RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

EL Gamal
         EL Gamal算法是公钥密码体制中的一种 ,在密码学中占有重要的地位。但该算法所采用的幂剩余计算耗时太多的问题 ,一直是制约其广泛应用的瓶颈问题。提出一种通过建表 ,以及对传统二进制算法进行改进 ,即将指数进行 2 k进制化 ,减少原 BR算法迭代次数 ,提高加密解密速度的算法。

ECC 
ECC (Elliptical Curve Cryptography,椭圆曲线加密)算法不椭圆曲线理论为基础,在创建密钥时可以更快,更小,并且更有效,它是用大质数的积来产生。

目前Java 6公提供了DH和RSA两种算法实现,通过Bouncy Castle可以实现Elmal算法支持,另ECC加密算法,目前没有开源组件提支持。


对称加密和非对称加密的优缺点比较:

Elgamal由Taher Elgamal于1985年发明,其基础是DiffieˉHellman密钥交换算法,后者使通信双方能通过公开通信来推导出只有他们知道的秘密密钥值[DiffieˉHellman]。DiffieˉHellman是Whitfield Diffie和Martin Hellman于1976年发明的,被视为第一种 非对称加密算法,DiffieˉHellman 与RSA的不同之处在于,DiffieˉHellman不是加密算法,它只是生成可用作对称密钥的秘密数值。在DiffieˉHellman密钥交换过程中,发送方和接收方分别生成一个秘密的随机数,并根据随机数推导出公开值,然后,双方再交换公开值。DiffieˉHellman算法的基础是具备生成共享密钥的能力。只要交换了公开值,双方就能使用自己的私有数和对方的公开值来生成对称密钥,称为共享密钥,对双方来说,该对称密钥是相同的,可以用于使用对称加密算法加密数据。

  与RSA相比,DiffieˉHellman的优势之一是每次交换密钥时都使用一组新值,而使用RSA算法时,如果攻击者获得了私钥,那么他不仅能解密之前截获的消息,还能解密之后的所有消息。然而,RSA可以通过认证(如使用X.509数字证书)来防止中间人攻击,但Diff ieˉHellman在应对中间人攻击时非常脆弱。


DH 非对称加密算法
2010-07-18 11:37

DH 
       Diffie-Hellman算法(D-H算法),密钥一致协议。是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。简单的说就是允许两名用户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。换句话说,就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私钥)。以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥(SecretKey)对数据加密。这样,在互通了本地密钥(SecretKey)算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。不单单是甲乙双方两方,可以扩展为多方共享数据通讯,这样就完成了网络交互数据的安全通讯!该算法源于中国的同余定理——中国馀数定理。

流程分析: 

1.甲方构建密钥对儿,将公钥公布给乙方,将私钥保留;双方约定数据加密算法;乙方通过甲方公钥构建密钥对儿,将公钥公布给甲方,将私钥保留。 
2.甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给乙方加密后的数据;乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。 
3.乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给甲方加密后的数据;甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。


                                                          <图一>



                                   <图二>


                                                               <图三>

/



RSA 非对称加密算法
2010-07-18 12:05

RSA 
    这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。 
    这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了。RSA同时有两把钥匙,公钥与私钥。同时支持数字签名。数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输工程中不被修改

流程分析:

甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。 
甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。 
乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。 



                               <图一>

                                            <图二>



                                      <图三>



数字证书

数字签名是一种确保数据完整性和原始性的方法。数字签名可以提供有力的证据,表明自从数据被签名以来数据尚未发生更改,并且它可以确认对数据签名的人或实体的身份。数字签名实现了“完整性”和“认可性”这两项重要的安全功能,而这是实施安全电子商务的基本要求。

当数据以明文或未加密形式分发时,通常使用数字签名。在这种情况下,由于消息本身的敏感性无法保证加密,因此必须确保数据仍然保持其原来的格式,并且不是由冒名者发送的。因为在分布式计算环境中,网络上具有适当访问权的任何人,无论是否被授权都可以很容易读取或改变明文文本。

数字签名主要是为了证明发件人身份,就像我们来看到的某文件签名一样。但现在要说的签名是采取电子数字签名的方式。这种签名还可以防止别人仿签,因为经过加密过的签名会变得面目全非,别人根本不可能看到真正的签名样子。例如,在文件传输和邮件发送中利用文件加密方式来阻止非法用户打开的原理,其实仅用了文件加密方式还不足以保证邮件传输的真正安全,因为邮件内容还可能被非法用户替换,尽管这些非法用户不能查看原邮件中的真正内容。这就涉及到如何确保自己收到的邮件就是自己希望的用户发来的问题了,此时就需要用到数字签名技术。但是在邮件传输中,通常又不是单独使用文件加密或者数字签名,而是一起结合起来使用,它们两者一起作用就可取到非常好的安全保护了。下面通过一个实例进行介绍,不同的只是在此封邮件发送中同时采用了文件加密和数字签名,实施双重保护。

实例背景是Alice要向Bob发送数据文件F,为保证数据文件F传输的可靠性和安全性,进行加密和数字签名,具体步骤如下:

1、Alice与Bob互换公钥。
2、Alice用自己的私钥对数据文件F进行数字签名。
3、Alice用Bob的公钥对数据文件F进行加密。
4、Alice把经过数字签名和加密的数据文件F,通过邮件或其他传输途径,如QQ、MSN等传给Bob。
5、Bob在收到签名并加密的邮件后,需要做两件事:首先,用Bob自己的私钥进行文件加密的解密,获取到传输的数据文件F;然后,Bob再用Alice的公钥进行数字签名解密,确保是Alice本人发送的数据文件F。

同样,在这个过程中Cinda也可以获取Bob、Alice的公钥和签名并加密的数据文件。同时Cinda因无Bob的私钥而无法打开邮件。同时由于Alice在发送文件前已用自己的私钥进行了数字签名,所以当Bob在收到邮件后完全可以证实自己收到的就是Alice发来的邮件,而不可能是其他用户的。试想如果Cinda非法用户想要改变邮件,冒充Alice向Bob发送邮件,因Cinda没有Alice的私钥,所以在用其他用户的私钥进行数字签名时就不可能再以Alice的公钥来解密数字签名了。

在这里要注意文件加密和数字签名的先后顺序,一定是先签名再加密,这样加密技术就可以同时保证邮件中的数字签名了。如果先加密,而后签名,非法用户在得到邮件后就可通过获取的公钥破解数字签名了,因为公钥是可以公开的,很容易被一些别有用心的人得到。数字签名破解后很可能签名被替换。当然,邮件中的内容在没有收件人私钥的情况下还是无法打开的。

以上介绍的是利用公钥和私钥进行文件加密和数字签名的原理,其实在实际应用中,这些公钥和私钥用户是不用具体关心它们的组成,而是由证书颁发机构或者软件自己生成。就拿公钥来说吧,那么长的代码,看起来都怕,而且随着密钥位置的增加,代码长度也随之增加,当然破解难度也将增加,也就越安全。但在一定程度上对使用有一些影响。

来源:http://www.qqread.com/network/tech/u382783.html,略有改动。

个人理解总结:

1、数字签名的必要性

如果只是对传输中的数据进行加密,并不能保证接收方收到的数据的真实性。因为发送方使用的是接收方的公钥对数据进行加密的,而接收方的公钥是公开的,完全可以被冒充的伪发送方来获取到。而对接收方而言,会使用自己的私钥来解密接收到的由自己的公钥加密的数据,这个“由自己的公钥加密的数据”可以是知道接收方公钥的任何人发送的数据,所以不能保证接收到的数据是真实的发送方发送的数据。

数据签名可以解决这个问题,数据签名实现了对发送方身份的验证。所以安全可靠真实的传输数据必须使用数据签名。

2、数据加密与数字签名的次序问题

一定是先签名后加密。

否则,如果先加密后签名,虽然别人对非法截获到的加密数据无法解密,但是因为发送方的公钥很容易被非法份子得到,从而会破解了发送方所发送已加密数据的数字签名。从而,非法份子虽然不能获取原始数据但是完全可以伪造数据,然后使用数据接收方的公钥进行加密,从而使用非法份子的公钥对伪造加密数据进行签名。可见,这样的话,数据接收方是得不到由真实的数据发送方发送的真实数据。



数据公钥加密和认证中的私钥公钥
2008年09月15日 星期一 19:38

       先前我曾经写了一篇“网站的安全登录认证设计”,可能是讲述的不够清楚,有一位读者就留言质疑到,“公钥顾名思义就是公开的啦,只要你愿意,谁都会有你的公钥,何来安全?应该是用网站的公钥加密,传到网站后,网站用自己的私钥解密吧”。

  这些密码学的概念容易被搞混淆,的确也情有可原。因为公钥、私钥、加密、认证这些都是较为复杂的问题,其概念不太容易理解,理解不透就容易产生各种似是而非的概念,为了让大家对于密码学有进一步的了解,这里我就详细解说一下公钥和私钥的具体作用和使用方法。

  加密和认证

  首先我们需要区分加密和认证这两个基本概念。

  加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的权限。其重点在于用户的真实性。两者的侧重点是不同的。

  公钥和私钥

  其次我们还要了解公钥和私钥的概念和作用。

  在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。

  公钥私钥的原则:

  1. 一个公钥对应一个私钥。
  2. 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
  3. 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
  4. 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

  非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的,下面我就详细讲解一下两者的区别。

  基于公开密钥的加密过程

  比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

  1. Bob将他的公开密钥传送给Alice。
  2. Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
  3. Bob用他的私人密钥解密Alice的消息。

  上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。

  基于公开密钥的认证过程

  身份认证和加密就不同了,主要用户鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。

  还是Alice和Bob这两个用户,Alice想让Bob知道自己是真实的Alice,而不是假冒的,因此Alice只要使用公钥密码学对文件签名发送给Bob,Bob使用Alice的公钥对文件进行解密,如果可以解密成功,则证明Alice的私钥是正确的,因而就完成了对Alice的身份鉴别。整个身份认证的过程如下:

  1. Alice用她的私人密钥对文件加密,从而对文件签名。
  2. Alice将签名的文件传送给Bob。
  3. Bob用Alice的公钥解密文件,从而验证签名。

  上面的过程可以用下图表示,Alice使用自己的私钥加密,Bob用Alice的公钥进行解密。

  总结

  好了,上面就详细讲述了加密、认证、公钥、私钥这四个概念,明白这些概念后,你就应该对“网站的安全登录认证设计”一文所讲述的概念有了更清晰的了解了。



原创文章如转载,请注明:转载自月光博客 [ http://www.williamlong.info/ ] 

本文链接地址:http://www.williamlong.info/archives/837.html

个人理解总结:

1、公钥和私钥的关系

一个密钥对就是由一个公钥和一个私钥组成的,公钥是公开的,私钥是保密的,他们可以互为加密/解密。

2、明确加密与认证的目的:

加密是为了保证数据在网络上传输过程中的安全性,防止别人监听和篡改数据,至于加密的数据在传输过程中别人非法阻断而不能完成数据传输,即数据接收方接收不到数据,这不在数据加密的范畴之内,数据加密重视的数据的发送方和接收方达成一致。发送方通过使用接收方的公钥对数据进行加密操作,然后数据接收方使用自己的私钥就可以对数据进行解密。接收方通过解密操作就能知道数据是否完整传输,如果能够使用自己的私钥解密数据,说明数据是真实的,否则传输的数据可能在传输过程中被篡改。

认证是保证在数据的接收方看来,正是其所期待的真实的数据发送方所发送的数据,这个认证过程中,也是通过加密和解密操作来实现认证的。发送方使用自己的私钥进行加密,即进行签名;接收方使用发送方的公布的公钥进行解密,即验证签名,如果操作成功,说明发送方的私钥是正确的,数据发送方的身份人中就通过了。


DES加密算法
2008年09月15日 星期一 22:02

背景

  美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的(通常称为DES 密码算法要求)主要为以下四点:

☆提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改;
☆具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握; 
☆DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础; 
☆实现经济,运行有效,并且适用于多种完全不同的应用。

  1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES棗Data Encryption Standard)。

  目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。

DES算法概述

  DES( Data Encryption Standard)算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

  DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。

  通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。

DES算法原理

  DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,整个算法的主流程图如下:



其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则见下表:

       58,50,12,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,

放大换位表

  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,

单纯换位表

  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,

  在f(Ri,Ki)算法描述图中,S1,S2...S8为选择函数,其功能是把6bit数据变为4bit数据。下面给出选择函数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)的生成算法 :

  从子密钥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次循环左移对应的左移位数要依据下述规则进行:

循环左移位数

1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1

  以上介绍了DES算法的加密过程。DES算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥K15,第二次K14、......,最后一次用K0,算法本身并没有任何变化。




DES密钥生成过程
2008年09月16日 星期二 10:50

DES是分组、对称加密算法,加密的明文块为64位(Bit),也就是8字节(Byte)。密钥也是64位,但是由于其中的第 8,16,24,32,40,48,56,64位用于奇偶校验,所以实际上密钥是56位。产生的密文块也是64位。DES加密算法的过程如下图:

中Input为64位明文块,经过一个初始置换IP(Initial Permutation)得到64位的置换后输入(Permutated input)。其中IP置换如下:

int ip[64] = {
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
} ;

置换的意思是指重新排列...上面这个IP置换就是把原58位放到第1位,原50位放到第2位...最后原7位放到第64位。这里第x位是从最高有效位到最低有效位数(左到右)。经过IP置换后得到的也是一个64位的数据。

在明文经过初始置换(IP)后会被分成两个部分前32位作L0,后32位(低32位)作R0。然后按图中所示进行计算:

L1=R0,R1=L0 Xor f(R0,k1)

也就是把右边换到左边,右边由f函数,R0,k1和L0计算出一个值。其中k1是由初始密钥产生的16个Key中的第一个 Key。Key的生成后面会提到。f函数过程如图所示:

f(R,K)中首先32位的R部分会首先进行一个E的置换,产生出一个48位的数,E置换如下:

int e[48] = {
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
};

进行置换以后产生的48位数,与48位的密钥进行异或运算后得到48位的数。这48位的数据分成8份,每份6位,每6位经过一个S-box的计算得到一个4位的数,合起来就得到了32位数。
假设其中一个6位数为011011而对应的S-box如下:

    0     1     2     3     4     5     6     7     8     9     10     11     12     13     14     15
     1     14   4     13    0     2     15   11   8     3     10     6       12     5       9        7
     2     0     15   7     4     14    1     13    3     10     6     12       11     9       5       8
     3     4     1     14   8     13   6      0     11   15     12     9       7        2       10     5
     4     15   12   8     2      3     9     1     7     5       11     6       14     10      0       13

先抽出6位数中的首尾两位也就是01得到1,S-box中行就为1,中间四位为1101也就是13,13就是列号。查找出为5,则产生的4位数就是0101。
这就是S-box的算法,8个S-box的运算得到32位的数据后,进行一个P置换:

int p[32] = {
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
};

经过p置换得到32位数据,也就是f函数的输出。之后将其与上一轮的L部分进行异或,就得到了新的R部分。
至此就得到了新一轮的R与L部分。一直使用同样的算法进行16轮计算,其中只是使用的密钥不同,也就是有初始密钥产生的16个密钥。
最后一轮时得到R16,L16后,将R与L的位置交换后组合得到一个64位数也就是图中所说的Preoutput。最后再经过一个ip-1置换就得到了我们需要的64位密文。
ip-1置换如下:

int ipr[64] = {
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
};

以上就是整个DES加密的过程。下面就是16轮密钥生成的过程。
DES密钥为64位,由于其中8位用于奇偶校验,所以实际是56位,初始密钥也就是56位了。下图描述了DES密钥的生成过程:

56位初始密钥首先经过一个PC1置换:

57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4

得到56位数后,分成两部分C,D分别是28位。然后分别进行循环左移运算,具体每轮左移多少位都是不同的,下面左边是轮数,右边是左移的位数:

1 1
2 1
3 2
4 2
5 2
6 2
7 2
8 2
9 1
10 2
11 2
12 2
13 2
14 2
15 2
16 1

这里需要注意一定是循环左移。得到C1,D1组合成56位再经过PC2置换:

14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32

就得到了Key1,也就是第一个密钥。以此类推分别得到16个Key,这就是在DES加密中使用的16个Key。

以上,就是DES加密的过程,解密过程基本一样,除了在计算过程中16个key的使用是从key16使用到key1的,和加密相反。其他就完全一样了。

图是从所谓的FEDERAL INFORMATION PROCESSING STANDARDS PUBLICATION的官方文档里面来的,这里没有列出8个S-box的具体内容,都可以在http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf里面找到。

来自:http://frente.yo2.cn/articles/9580.html

个人理解与总结:

其实,在上一篇中,关于如何计算L1=R0,R1=L0 Xor f(R0,k1)中的R1,让我感到迷惑,因为本来就没有提及到函数f的内容,自然也没有k1的信息,读了这篇文章以后才有所领悟。

1、L1=R0,R1=L0 Xor f(R0,k1)中函数k1的生成

首先知道,DES密钥组成:64位密钥 = 初始56位密钥 + 8位奇偶校验位。

key的生成是通过初始56位密钥生成,过程如下:

(1) 首先,56位初始密钥经过PC1置换得到一个新的56位密钥;

(2) 接着,再对得到的56位新密钥进行分组操作,分为2组,每组28位;

(3) 然后,对分组得到的2个组,根据规则,分别对2组进行循环左移位操作,完成之后在合并为56位;

(4) 最后,再对得到的56位密钥进行一个PC2置换操作,即可得到的56位的key。

2、L1=R0,R1=L0 Xor f(R0,k1)中函数f的过程

其实只要掌握了R1的计算,后面的就类似了。

f的过程主要分为:

(1) 首先,对分组得到的右32位进行E置换扩展为48位;

(2) 接着,再对得到的48位进行分组操作,分为8组;

(3) 然后,对分组得到的8个组,经过S-box后将每组6位压缩为4位;

(4) 最后,进行一个P置换,将得到的8×4=32位的R1。

经过16轮迭代计算,得到的就是64位密文。




DES加密算法安全性评估
2008年09月16日 星期二 11:29

DES加密算法应用误区

DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的,当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度。

由上述DES算法介绍我们可以看到:DES算法中只用到64位密钥中的其中56位,而第8、16、24、......64位8个位并未参与DES运算,这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8,16,24,......64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8,16,24,......64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,把密钥Key的8,16,24,..... .64位作为有效数据使用,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。

DES加密算法安全性统计评估

基于1997年的技术统计分析的攻击结果,JALAL FEGHHI等人98年9月给出DES加密抗攻击的情况如下表所述:(摘自由Talal Feghhi, Jalil Feghhi, Peter Willians 《Digital Certificates》一书中的第51页,该书于1998/9由加拿大出版)

个人攻击

小组攻击

院、校网络攻击

大公司

军事情报机构

40(bits)

数周

数日

数小时

数毫秒

数微秒

56

数百年

数十年

数年

数小时

数秒钟

64

数千年

数百年

数十年

数日

数分钟

80

不可能

不可能

不可能

数百年

数百年

128

不可能

不可能

不可能

不可能

数千年


上表中攻击者配有如下计算机资源的攻击能力

攻击者类型

所配有的计算机资源

每秒处理的密钥数

个人攻击

1台高性能桌式计算机及其软件

217-224

小组攻击

16台高性能桌式计算机及其软件

221-224

院、校网络攻击

256台高性能桌式计算机及其软件

225-228

大公司

配有价值1百万美元的硬件

243

军事情报机构

配有价值1百万美元的硬件及先进的攻击技术

255

注:99年的技术比97年预计将提高200倍左右。

——基于现代密码学及其密码体制(有别于传统的算法或密码本),保密的关键是如何保护好密钥;而破密的关键则是如何得到密钥。因为,一个好的现代密码算法,在密钥足够长的情况下,即使是发明该算法的人,如他得不到密钥。他本人要破解用他自己发明的算法来加了密的电文也是极其困难甚至是不可能的。而在电子商务中还有一个较易计算的所谓值不值得的问题。




RSA加密算法
2008年09月16日 星期二 15:22

背景及介绍

RSA算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。

所谓RSA加密算法,是世界上第一个非对称加密算法,也是数论的第一个实际应用。

RSA加密算法原理

RSA算法的原理叙述如下:

1、找两个非常大的质数p和q(p和q大于100个十进制位,通常p和q都有155十进制位或都有512十进制位),并计算n=pq,k=(p-1)(q-1);

2、将明文编码成整数M,保证M不小于0但是小于n;

3、任取一个整数e,保证e和k=(p-1)(q-1)互质,而且e不小于0但是小于k。这里加密钥匙(称作公钥)是(e, n),即e和n两个数构成公钥;

4、找到一个整数d(利用Euclid 算法计算解密密钥d),使得e*d除以k的余数是1(只要e和n满足上面条件,d肯定存在)。解密钥匙(称作私钥)是(d, n),即d和n两个数构成私钥。

从而,可以对数据进行加密和解密操作:

加密:

加密信息 M(二进制表示)时,首先把M分成等长数据块 m1 ,m2,..., mi ,块长s,其中 2^s <= n,s 尽可能的大。

对应的密文是:ci = mi^e ( mod n )

这里,使用了公钥(e,n)来对数据进行加密,即在数据发送方使用其私钥加密数据(注意:应该是先签名后加密),在数据接收方需要使用发送方公布的公钥进行解密数据,从而证实数据发送方的身份。

解密:

解密时作如下计算:mi = ci^d ( mod n ) ( b )

这里,使用了私钥(e,d)来对数据进行解密,即在数据接收方使用其私钥来解密数据(注意:数据接收方已经和发送发达成一致,将自己的公钥发送给数据发送方,数据发送方使用数据接收方的公钥来对要进行发送的数据进行加密),如果数据接收方能够使用自己的私钥来解密数据,说明接收到的数据是使用自己的公钥来进行加密的,从而证实数据在传输过程中没有被篡改破坏(这里所说的“篡改破坏”是指非法份子有意破坏传输的数据,如果不加以数字签名认证,并不能保证传输数据的真实性,因为接收方的公钥是公开的,非法份子可能破解了数字签名,使用自己的密钥进行签名,这样数据接收方仍然无法判断出身份是伪造的。即使这样,非法份子也不能获取到解密的原始数据,因为他们不知道数据接收方的私钥)。

RSA的安全性

RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。

RSA的速度

由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。

RSA的攻击

1、RSA的选择密文攻击

RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:

( XM )^d = X^d *M^d mod n

前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction对文档作HASH处理,或同时使用不同的签名算法。

2、RSA的公共模数攻击

若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则:

C1 = P^e1 mod n 
C2 = P^e2 mod n

密码分析者知道n、e1、e2、C1和C2,就能得到P。因为e1和e2互质,故用Euclidean算法能找到r和s,满足:

r * e1 + s * e2 = 1

假设r为负数,需再用Euclidean算法计算C1^(-1),则

( C1^(-1) )^(-r) * C2^s = P mod n

另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它成对的e’和d’,而无需分解模数。解决办法只有一个,那就是不要共享模数n。

3、RSA的小指数攻击

有一种提高RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有所提高。但这样作是不安全的,对付办法就是e和d都取较大的值。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。

RSA的缺点

A) 产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

B) 分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。



非对称加密算法
2008年09月16日 星期二 16:23

作者: Christopher Steel, Ramesh Nagappan, Ray Lai   出处:机械工业出版社

和对称加密算法一样,非对称加密算法也提供两个函数:消息加密和消息解密,但该算法较对称加密算法有两个重要的区别。首先,用于消息解密的密钥值与用于消息加密的密钥值不同;其次,非对称加密算法比对称加密算法慢数千倍,但在保护通信安全方面,非对称加密算法却具有对称密码难以企及的优势。

为说明这种优势,来回顾一下前面使用对称加密算法的例子。Alice使用密钥K加密消息并将其发送给Bob,Bob收到加密的消息后,使用密钥K对其解密以恢复原始消息。这里存在一个问题,即Alice如何将用于加密消息的密钥值发送给Bob?答案是,Alice发送密钥值给Bob时必须通过独立的安全通信信道(即没人能监听到该信道中的通信)。

这种使用独立安全信道来交换对称加密算法密钥的需求会带来更多问题。首先,如果有独立的安全信道,为什么不直接用它发送原始消息?答案通常是安全信道的带宽有限,如安全电话线或可信的送信人。其次,Alice和Bob能假定他们的密钥值可以保持多久而不泄露(即不被其他人知道)以及他们应在何时交换新的密钥值?对这两个问题的回答属于密钥管理的范畴。

密钥管理是使用加密算法时最棘手的问题,它不仅涉及如何将密钥值安全地分发给所有通信方,还涉及密钥的生命周期管理、密钥被破解时应采取什么措施等问题。Alice和Bob的密钥管理需求可能并不复杂,他们可以通过电话(如果确定没人监听)或通过挂号信来交换密码。但如果Alice不仅需要与Bob安全通信,还需要与许多其他人安全通信,那么她就需要与每个人交换密钥(通过可靠的电话或挂号信),并管理这一系列密钥,包括记住何时交换新密钥、如何处理密钥泄漏和密钥不匹配(由于使用的密钥不正确,接收方无法解密消息)等。当然,这些问题不只Alice会遇到,Bob和其他每个人都会遇到,他们都需要交换密钥并处理这些令人头痛的密钥管理问题(事实上,X9.17是一项DES密钥管理ANSI标准[ANSIX9.17])。

如果Alice要给数百人发送消息,那么事情将更麻烦,她必须使用不同的密钥值来加密每条消息。例如,要给200个人发送通知,Alice需要加密消息200次,对每个接收方加密一次消息。显然,在这种情况下,使用对称加密算法来进行安全通信的开销相当大。

非对称加密算法的主要优势是使用两个而不是一个密钥值:一个密钥值用来加密消息,另一个密钥值用来解密消息。这两个密钥值在同一个过程中生成,称为密钥对。用来加密消息的密钥称为公钥,用来解密消息的密钥称为私钥。用公钥加密的消息只能用与之对应的私钥来解密,私钥除了持有者外无人知道,而公钥却可通过非安全管道来发送或在目录中发布。

仍用前面的例子来说明如何使用非对称加密算法来交换消息,Alice需要通过电子邮件给Bob发送一个机密文档。首先,Bob使用电子邮件将自己的公钥发送给Alice。然后Alice用Bob的公钥对文档加密并通过电子邮件将加密消息发送给Bob。由于任何用Bob的公钥加密的消息只能用Bob的私钥解密,因此即使窥探者知道Bob的公钥,消息也仍是安全的。Bob在收到加密消息后,用自己的私钥进行解密从而恢复原始文档。
图2-2说明了分别使用公钥和私钥来加密和解密消息的过程。

图2-2 使用非对称加密算法的加密

如果Bob需要将编辑后的文档发回给Alice,他可以让Alice先将其公钥发送给他,然后
再用该公钥对编辑后的文档加密,并通过电子邮件将加密的文档发回给Alice。由于只有Alice的私钥能解密该消息,并且只有Alice才有该私钥,因此消息是安全的,不能被其他人窥探
。如图2-3所示。

图2-3 Bob的公钥不能解密使用它加密的消息

注意,非对称加密算法和对称加密算法之间有一个重要的差别:Alice和Bob不需要使用独立的安全管道交换用于加密消息的密钥值,从而解决了对称加密算法中一个重要的密钥管理问题:如何将密钥值告诉对方。在非对称加密算法中,用于加密消息的密钥值是对所有人公开的。这还解决了对称密钥管理中另一个令人头疼的问题:必须与每个通信方交换密钥值。在非对称加密算法中,任何需要给Alice发送安全消息的人都可以使用Alice的公钥。

回想一下,非对称加密算法和对称加密算法之间的一个差别是,非对称加密算法的速度慢得多,比对称加密算法慢数千倍[WeiDai02]。在实际应用中,这种问题可以通过如下方式解决:用非对称加密算法来传送临时对称密钥值,然后使用对称加密算法和该临时密钥来加密消息。这种对称密钥之所以是临时的(只持续一段时间),是因为它只使用一次,而不像传统的对称密钥机制要求的那样持续可用或可重复使用。再回到前面的例子,Alice通过电子邮件给Bob发送机密文档。Alice首先需要生成一个临时密钥值,用于使用对称加密算法加密文档。然后创建另一条消息,即用Bob的公钥加密该临时密钥值,再将这两条消息都发送给Bob。收到消息后,Bob首先用自己的私钥解密出临时密钥值,再使用该临时密钥值(使用对称加密算法)来解密密文文档以恢复原始文档。

图2-4给出了如何结合使用非对称加密算法和对称加密算法。

图2-4 结合使用非对称加密算法和对称加密算法

非对称加密算法的例子有RSA、Elgamal和ECC(椭圆曲线加密算法)。RSA是目前最常用的算法。

Elgamal是另一种常用的非对称加密算法,由Taher Elgamal于1985年发明,其基础是Diffie-Hellman密钥交换算法,后者使通信双方能通过公开通信来推导出只有他们知道的秘密密钥[Diffie-Hellman]。

Diffie-Hellman是Whitfield Diffie和Martin Hellman于1976年发明的,被视为第一种非对称加密算法,尽管非对称加密算法的概念于6年前就已在英国提出了。Diffie-Hellman 与RSA的不同之处在于,Diffie-Hellman不是加密算法,它只是生成可用作对称密钥的秘密数值。在Diffie-Hellman密钥交换过程中,发送方和接收方分别生成一个秘密的随机数,并根据随机数推导出公开值,然后,双方再交换公开值。Diffie-Hellman算法的基础是具备生成共享密钥的能力。只要交换了公开值,双方就能使用自己的私有数和对方的公开值来生成 对称密钥,称为共享密钥,对双方来说,该对称密钥是相同的,可以用于使用对称加密算法 加密数据。与RSA相比,Diffie-Hellman的优势之一是每次交换密钥时都使用一组新值,而 使用RSA算法时,如果攻击者获得了私钥,那么他不仅能解密之前截获的消息,还能解密之后 的所有消息。然而,RSA可以通过认证(如使用X.509数字证书)来防止中间人攻击,但Diffie-Hellman在应对中间人攻击时非常脆弱。



对称加密算法与非对称加密算法的区别
2008年09月16日 星期二 16:02

对称加密算法

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

对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES、IDEA和AES。


不对称加密算法

不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。以不对称加密算法为基础的加密技术应用非常广泛。

来自:http://blog.712100.com/23611/viewspace-16217

个人理解与总结:

1、基于DES加密算法理解对称加密算法

从DES加密算法可以体会到:对称加密算法在对数据进行加密和解密的过程中,都是使用了数据接收方的密钥(公钥和私钥),具体做法就是,数据发送方使用接受方的公钥加密数据,而数据接收方使用自己的私钥机密数据,其实围绕的就是数据接收方的密钥。

2、基于RSA加密算法理解非对称加密算法

通过上面对非对称加密算法的叙述,我感觉理解不是很深刻。总体的感觉就是:

(1) 基于RSA加密算法比较麻烦,因为RSA加密算法是基于一个大数n的,需要计算出一个密钥对(公钥和私钥),但是这里公钥和私钥还是一对数,即公钥为(e,n),私钥为(e,d).

(2) 在数据发送方与接受发执行数据传输之前,保证了双方公钥的分发管理,加强了公钥的安全性(比之于在对称加密算法中:公钥就是完全公开的),这个特点确实加强了加密数据的发送方的身份真实性。

还有待于继续深入理解。


 
来自:1238381316 > 《待分类》
献花(0)
 
类似文章
更多
  • 常见加密算法及其应用
  • 公钥的加密
  • 对称加密与非对称加密
  • 加密技术及流行加密算法
  • 加密算法介绍及如何选择加密算法 , 密钥...
  • 加密算法介绍及如何选择加密算法
  • 关于加密和安全
  • 数据库加密、解密技术
热门推广
猜你喜欢
军医秘方:癌症克星
古代女人好色的十种表现
千古文豪苏东坡一生传奇
【一个县级政权】的家族谱系
【书法典藏】 寿字的500种不同写法!
发表评论:
 
最新文章
  • 【红色收藏】毛主席诗词、语录...
  • 自制糖姜片(正宗传统做法)
  • 穴位按摩:祛痘竟如此简单?
  • 当下中国社会存在的所有问题是...
  • 成功自我暗示的三大规律
  • 男人的魅力与胸怀【情感美文】
更多
热门文章
  • 《三国演义》告诉我们的30条真...
  • 男人无志,家道不兴,女人不柔...
  • 教育图书在线
  • 香菜的阳台种植方法
  • 性爱是两性互动,是一起享受!
  • 以脚识男人
  • 与同事相处应该保持多大距离?
  • (全是精华)男人学堂【空间站...
  • 2014年日历——骏马奔腾喜欢您...
  • 《两性幽默集锦》
  • 灵魂的艺术(难得一见)
  • 外媒称中国未来50年通过6场战争...
更多>>

关闭
关闭
0 0
原创粉丝点击